Здравствуйте. Есть ли в XRM возможность менять права доступа на запись при попадании её в динамическую группу?
Мне нужно реализовать следующее:
Если поле "Статус" = "Завершено", то ограничивать доступ.
Штатно нет такой возможности.
Чтоб быстро работало - сделать хранимую процедуру для изменения прав доступа и вызывать ее на AfterPost нужного датасета.
Привязывать к функционалу динамических групп довольно сложно, но если условие только одно, можно поступить следующим образом:
Если поле Статус = Завершено, то делать карточку нередактируемой для всех, кроме супервизора. Для этого на OnPrepare карточки вызывать функцию
IsArchive(DataFieldName, DataFieldValue);
где
DataFieldName - название поля Завершено в датасете
DataFieldValue - значение, при котором карточка доступна только на чтение
Тело функции:
function IsArchive(DataFieldName, DataFieldValue){if((!Connector.CurrentUser.IsAdmin)&&(dlData.Dataset(DataFieldName)== DataFieldValue)){
SetIsReadOnlyFields(Self, false);return;}
SetIsReadOnlyFields(Self, true);}
function SetIsReadOnlyFields(Window, IsEnabled){for(var i =0; i < Window.ComponentCount; i++){
var DataField = Window.Components(i).DataField;if(!IsUndefined(DataField)){
var Component = Window.Components(i);
Component.IsEnabled= IsEnabled;}}}
Тут будет нужно немного больше кода. Физически информация о вхождении контрагента в группу находится в ds_AccountInGroup.
Т.е. нам нужно будет фильтровать датасет контакт в группе и по результатам применять атрибут "только чтение".
function IsArchive(GroupID){
var dsAccInGroup = Services.GetSingleItemByUSI('ds_AccountInGroup');//проверяем вхождение в группу
ApplyDatasetFilter(dsAccInGroup, 'AccountID', dlData.Dataset('ID'),true);//фильтруем по текущей записи в карточке
ApplyDatasetFilter(dsAccInGroup, 'GroupID', GroupID,true);if((!Connector.CurrentUser.IsAdmin)&&(IsEmptyValue(dsAccInGroup)){//если датасет пустой - не входит в группу
SetIsReadOnlyFields(Self, false);return;}
SetIsReadOnlyFields(Self, true);}
Естественно, вызывать функцию тогда нужно будет так:
Такой вопрос ещё возник.
Допустим, есть запись, на которую ни у кого нет прав.
И есть группа, на которую у всех есть полный доступ.
Если запись переносится в эту группу, она всё равно остаётся без доступа?
Получается, права доступа группы - это права изменять собственно группу, а не записи в ней?
Предлагаю Вашему вниманию некоторую реализацаю возможности выгрузки фильтров динамической группы в файл (*.xml) и загрузки для другой динамической группы.
Добрый день! Подскажите пожалуйста как создать следующий фильтр:
В разделе "Контакты" необходимо создать динамическую группу с фильтром "должность содержит" например "бух", соответственно чтоб в такой группе отфильтровывались контакты в поле справочник "должность" которых указана должность содержащая "бух".
Важно! Следует фильтровать именно по полю-справочника "должность", а не по полю "Полное название должности", т.к. во втором случае всё понятно.
Пробовал делать стандартно через фильтр типа exist, но не получается :(
Версия 3.1
Заранее спасибо!