1

Я хочу ограничить выполнение своих рабочих процессов CRM определенными пользователями. Я попытался сделать объем рабочего процесса «уровнем пользователя» и совместно использовать рабочий процесс с пользователем.Могу ли я ограничить выполнение своих рабочих процессов CRM определенными пользователями

+0

Это невозможно, так как вы не можете разделить рабочие процессы - вы только можете назначить их. – Filburt

+0

FYI, я подумал, что эту проблему можно решить, добавив логику плагина в операцию PreRetrieveMultiple для объекта рабочего процесса. Однако кажется, что объект workflow не поддерживает никаких плагинов, поэтому кажется, что это тупик. – Zach

ответ

2

Вы можете сделать это, но логика должна быть встроена в сам код рабочего процесса.

Это даст вам GUID пользователя, выполнившего рабочий процесс:

IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>(); 
var userId = context.InitiatingUserId; 

Отсюда вы можете остановить/продолжить на основе пользователя.

Для решения, основанного на данных, вы можете построить логику только для продолжения на основе условий; например, пользователю назначается определенная роль.

Edit (основано на мой комментарий ниже)

В качестве альтернативы, вы можете создать рабочий процесс которые возвращает исполняющее пользователя. Таким образом, вам не нужно закодировать правила в источнике рабочего процесса, вместо этого вы можете добавить условия остановки в редактор рабочего процесса на основе возвращаемого значения рабочего процесса «получить исполняемый пользователь».

Кто-то уже написал код, чтобы сделать это: http://www.crmanswers.net/2013/10/get-current-user-inside-workflow.html

+0

Вы можете написать собственную сборку рабочего процесса, чтобы сделать то, что предложил Джейсон, попытаться сохранить внешний параметр, чтобы сделать его динамичным (поэтому вам не нужно больше кода, если вам нужно изменить список пользователей), например, вы можете написать подсказки разрешенных пользователей и проверить их против направляющей текущего. – Draiden

+0

Привет, Джейсон, Спасибо за ответ. Но при таком подходе каждый раз, когда я хочу добавить пользователя для доступа к логике, мне нужно внести изменения в код. Я хочу избежать изменений кода. – Vivek

+0

@Vivek - вы можете создать рабочий процесс, который _returns_ исполняющий пользователь, а затем у вас есть общее решение, которое вы можете использовать в будущих правилах WF. Таким образом, вы можете явно добавлять/удалять пользователей в состоянии остановки. Похоже, что на самом деле кто-то уже написал код для этого: http://www.crmanswers.net/2013/10/get-current-user-inside-workflow.html –

0

Вы также можете поместить сферу документооборота в бизнес-единицы или Родитель: Детский бизнес-единиц. Однако это вряд ли является хорошей причиной для изменения структуры вашей организации в CRM.

http://blog.profad.com/crm-3/defining-scope-using-workflows-in-microsoft-dynamics-crm-2011/

+0

На самом деле вы можете использовать роли безопасности для выполнения рабочих процессов у пользователя, единый, глубокий и организационный уровень. Vivek необходимо выполнить этот рабочий процесс для «определенных» пользователей, а это значит, что ему нужно новое поле для пользователя «Выполнять рабочий процесс», «Да или Нет» и запросить это поле в своем рабочем потоке. Мне не нравится это решение, но это подход. – Sxntk

+0

@ Zach, я ничего не сказал о ролях безопасности. Я говорил о бизнес-единицах, к которым принадлежат пользователи. – BlueSam

+0

Sxntk, я согласен с тем, что вы говорите в основном альтернативный способ сделать то, что предлагает Джейсон Фолкнер. Я не понимаю, как это имеет отношение к ролям безопасности. – Zach