Кастомизация
25
Сен
1

Field-level security для стандартных полей CRM

Как Вы знаете, CRM не позволяет включать безопасность полей для стандартных полей. Но небольшая (и, естественно, не поддерживаемая) манипуляция с БД позволяет задействовать безопасность поля и для стадартных полей. Посмотрим как это сделать…

  • Откройте SQL Management Studio;
  • Откройте таблицу MetadataSchema.Attribute из БД org_MSCRM и отфильтруйте вывадимые данные по нужному атрибуту. Например, по accountnumber:
    SELECT
    	CanBeSecuredForCreate,
    	CanBeSecuredForRead,
    	CanBeSecuredForUpdate
    FROM
    	MetadataSchema.Attribute
    WHERE
    	Name = 'accountnumber'
    
  • По умолчанию столбцы CanBeSecured* будут установлены в False и все что Вы должны сделать – изменить их на True (1) – тогда у Вас появится возможность (которую Вам и нужно реализовать) включать/выключать Field Level Security для стандартных полей:
    UPDATE
    	MetadataSchema.Attribute
    SET
    	CanBeSecuredForCreate = 1,
    	CanBeSecuredForRead = 1,
    	CanBeSecuredForUpdate =1
    WHERE
    	Name = 'accountnumber'
    
  • Далее нужно вставить 2 строки в таблицу FieldPermissionBase, первую строку с ComponentState = 2 и вторую строку с ComponentState = 0:
    Поле Значение
    FieldPermissionIdUnique Должен быть уникальный GUID для обеих строк
    ComponentState 0 или 2
    SolutionId GUID дефолтного Решения или GUID какого-либо другого Решения
    Can* 4
    SupportingSolutionId Пустой GUID
    FieldSecurityProfileId GUID одного из FieldSecurityProfileBase (Профиля безопасности полей)
    EntityName В столбец mislabeled нужно подставить typecode объекта (а не имя объекта)
    FieldPermissionId Какой-нибудь GUID, одинаковый для обоих записей
    OverwriteTime Установите в 1900-01-01
    AttributeLogicalName Имя атрибута

    Например, так:

    INSERT INTO FieldPermissionBase (
    	FieldPermissionIdUnique,
    	ComponentState,
    	SolutionId,
    	CanRead,
    	SupportingSolutionId,
    	CanCreate,
    	FieldSecurityProfileId,
    	EntityName,
    	FieldPermissionId,
    	OverwriteTime,
    	CanUpdate,
    	AttributeLogicalName
    )
    VALUES (
    	newid(), -- FieldPermissionIdUnique
    	0, -- ComponentState
    	'fd140aaf-4df4-11dd-bd17-0019b9312238', -- SolutionId
    	4, -- CanRead
    	NULL,
    	4, -- CanCreate
    	'E473C1D0-6EE5-E011-857D-000C29CDB72E', -- FieldSecurityProfileId
    	1, -- EntityName
    	'8C2F8701-70E5-E011-857D-000C29CDB72E', -- FieldPermissionId
    	'1900-01-01', -- OverwriteTime
    	4, -- CanUpdate
    	'accountnumber' -- AttributeLogicalName
    )
    
    INSERT INTO FieldPermissionBase (
    	FieldPermissionIdUnique,
    	ComponentState,
    	SolutionId,
    	CanRead,
    	SupportingSolutionId,
    	CanCreate,
    	FieldSecurityProfileId,
    	EntityName,
    	FieldPermissionId,
    	OverwriteTime,
    	CanUpdate,
    	AttributeLogicalName
    )
    VALUES (
    	newid(), -- FieldPermissionIdUnique
    	2, -- ComponentState
    	'fd140aaf-4df4-11dd-bd17-0019b9312238', -- SolutionId
    	4, -- CanRead
    	NULL,
    	4, -- CanCreate
    	'E473C1D0-6EE5-E011-857D-000C29CDB72E', -- FieldSecurityProfileId
    	1, -- EntityName
    	'8C2F8701-70E5-E011-857D-000C29CDB72E', -- FieldPermissionId
    	'1900-01-01', -- OverwriteTime
    	4, -- CanUpdate
    	'accountnumber' -- AttributeLogicalName
    )
    

Теперь у нас есть и Field Level Security для стандартных полей…




Комментарии (1)
  • Петр 25.09.2011

    Спасибо, то-что нужно! Пригодился!

*

code