Ошибка логирования в журнал изменений при создании обращения из портала
Привет.
Интересная ошибка: при включенном журнале изменений, прис оздании обращение под портальным пользователем получаем ошибку несовместимых операторов int и uniqueidentifier.
В профайлере ловим заппрос:
exec sp_executesql N' INSERT INTO [dbo].[SysCaseLog]([Id], [ChangeTrackedOn], [ChangeTrackedById],[ChangeTrackedId], [ChangeTypeId], [ClosureDate], [Number], [ClientIP]) SELECT @P2 [P], @P3 [P1], @P4 [P2], @P5 [P3], ( SELECT NULL [Id] FROM [dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK) WHERE NULL = @P6) [SubSysEntityChangeType], [Case].[ClosureDate] [ClosureDate], [Case].[Number] [Number], @P7 FROM [dbo].[Case] [Case] WITH(NOLOCK) WHERE [Case].[Id] = @P1 AND EXISTS ( SELECT NULL FROM [dbo].[SysCaseRight] WITH(NOLOCK) WHERE [SysCaseRight].[RecordId] = [Case].[Id] AND EXISTS ( SELECT 1 FROM [dbo].[SysAdminUnitInRole] WITH(NOLOCK) WHERE [SysAdminUnitInRole].[SysAdminUnitId] = @CurrentUserIdParam AND [SysAdminUnitInRole].[SysAdminUnitRoleId] = [SysCaseRight].[SysAdminUnitId]) AND [SysCaseRight].[RightLevel] >= 1 AND [SysCaseRight].[Operation] = 0)',N'@P1 uniqueidentifier,@CurrentUserIdParam uniqueidentifier,@P2 uniqueidentifier,@P3 datetime2(7),@P4 uniqueidentifier,@P5 uniqueidentifier,@P6 nvarchar(8),@P7 nvarchar(3)',@P1='1F30B03B-9445-4FFF-BC89-CA86C86353E5',@CurrentUserIdParam='FBEE0412-977E-46F6-A043-63F2912C0301',@P2='F3B73F28-B537-45B6-AAA3-61F7E00CA3BB',@P3='2021-11-29 06:45:00.4808907',@P4='C4ED336C-3E9B-40FE-8B82-5632476472B4',@P5='1F30B03B-9445-4FFF-BC89-CA86C86353E5',@P6=N'Inserted',@P7=N'::1'
Проблема в том, что почемуто вместо того чтобы взять реальный ID из таблицы SysEntityChangeType, Creatio делает SELECT NULL FROM dbo.Empty. При этом NULL имеет по умолчанию INT тип данных. Соответсвенно получаем такую ошибку.
Вопрос, как это поправить?
Нравится
т.е. ошибка исчезает если написать так:
SELECT CAST(NULL AS UNIQUEIDENTIFIER) [Id] FROM [dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK) WHERE NULL = @P6) [SubSysEntityChangeType]
либо так:
SELECT [Id] FROM [dbo].[SysEntityChangeType] WITH(NOLOCK) WHERE [Name] = @P6) [SubSysEntityChangeType]
либо даже так
SELECT [Id]
FROM [dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK)
WHERE NULL = @P6) [SubSysEntityChangeType]
но как повлиять на генератор этого запроса? ничего в конфигурации не нашел. каким образом генерируется этот запрос...
т.к. сейчас идет попытка инсерта NULL (в MSSQL это тип INT) в колонку с типом UNIQUEINDENTIFIER...
Здравствуйте.
Боюсь, что самостоятельно данную проблему решить не получится. Напишите в службу поддержки Террасофт.
Здравствуйте!
Если для объекта Case настроен журнал изменений, а справочник "Тип изменения объекта" не внесен в справочник "Список объектов, доступных пользователям портала" и на него не настроены права доступа для портальных пользователей, то при создании обращения на портале будет возникать ошибка [Operand type clash: int is incompatible with uniqueidentifier]. (Конфликт типов операндов: int несовместим с uniqueidentifier).
Данная ошибка актуальна для любого объекта (при создании или редактировании записи), для которого включен журнал изменений.
Это известная ситуация, в будущих релизах её должный исправить.
Проверьте есть ли у пользователей портала доступа на чтение справочника "Тип изменения объекта" (используется в журнале изменений)? Также, внесен ли справочник "Тип изменения объекта", в справочник "Список объектов, доступных пользователям портала".
Если нет, необходимо настроить права доступа к справочнику "Тип изменения объекта" для портальных пользователей и внести его в справочник "Список объектов, доступных пользователям портала".
После этого проверить воспроизводится ли ошибка, её быть не должно