Общий доступ к записям с помощью бизнес-процесса
Бизнес-процессы в MS CRM 4.0 предоставляют функциональные фозможности для создания, обновления и переназначения записей. Но в них нет ни одного способа для включения/отключениия общего доступа к записям. Но к счастью, это можно сделать спомощью SDK и кастомных плагинов.
Сегодня мы рассмотрим простой бизнес-процесс (написанный в Visual Studio – да-да, такое тоже возможно 🙂 ), расшаривающий любую запись (которая вообще может быть расшарена), а также снимающий с них общий доступ.
Скачайте Infusion.CRM.WF.CRM40ShareStep.dll (это плагин) и поместите его в папку C:\Program Files\Microsoft Dynamics CRM Server\Server\bin\assembly.
Теперь нужно зарегистрировать плагин:
- Скачайте Plugin Registration Tool и запустите;
- Введите параметры подключения к CRM серверу и жмите Connect (Вас попросят ввести пароль – не отказываейтесь 🙂 );
- Кликните Register — Register New Assembly. В открывшемся окне регистрации новой сборки, вверху справа, щелкните «…» и укажите путь к CRM.WF.CRM40ShareStep.dll, который Вы скопировали в самом начале (т.е. по умолчанию он будет C:\Program Files\Microsoft Dynamics CRM Server\Server\bin\assembly\CRM.WF.CRM40ShareStep.dll);
- В качестве месторасположения выберите Disk;
- Жмите Register Selected Plugins и дождитесь пока он зарегистрируется.
Ну, на этом все 🙂 Можете создавать свои бизнес-процессы. Но теперь в списке добавления шага появится новый пункт меню Utilities — Share Record. Открываете его свойства и задаете на кого переназначать и с какими правами! Только заметьте, что на одном шаге Вы можете расшариь запись только для двух пользователей и/или двух групп.
Также обратите внимание на исходные файлы этого солюшена 🙂
Супер вещь!!!
А где можно посмотреть код этой dll-сборки, чтобы иметь возможность внести изменения?
Прикрепил исходники 🙂
Большое спасибо!
А как убрать доступ не всем, а только некоторым. Чёто не получается у меня
Уже решил сам. Переписал слегка код.
private void RemovePrincipals(Context context, PrincipalAccess[] principals)
{
TargetOwnedDynamic target = new TargetOwnedDynamic();
target.EntityName = context.CurrentEntityName;
target.EntityId = context.CurrentRecordId;
RevokeAccessRequest request = new RevokeAccessRequest();
request.Target = target;
SecurityPrincipal principal = new SecurityPrincipal();
principal.Type = SecurityPrincipalType.User;
principal.PrincipalId = User1.Value;
request.Revokee = principal;
RevokeAccessResponse response = (RevokeAccessResponse)context.SvcHandle.Execute(request);
}
А для тех «кто в танке», может поясните, что в итоге получилось и с чем это есть?
И еще можете прислать готовый результат, чтобы можно было выложить здесь?
Доброго дня, а что то подобное для 2011 есть?
Здравствуйте. Попробуйте это: http://crm2011workflowutilsф.codeplex.com или http://crm2011sharestep.codeplex.com/
Спасибо огромное!)