如何以特权用户身份运行CRM 2011自定义工作流活动?

时间:2013-04-13 00:35:51

标签: dynamics-crm-2011 dynamics-crm

我需要能够让一个用户暂时镜像另一个用户。镜像用户应该获得与目标用户相同的业务单位,团队和角色。现在它是手动完成的,但这很痛苦。我编写了一个自定义工作流活动来执行此操作,如果我以系统管理员身份运行并选择镜像用户和目标用户,它就可以工作。

但最终目标是允许某些用户自己运行对话框。如果我尝试以自己的身份运行它作为镜像用户,我会收到一条错误消息,说我没有权限分配角色,这是有道理的,因为工作流占用了我的角色,然后尝试为我分配目标用户的角色。

我希望工作流活动以特权用户身份运行,但到目前为止还没有任何运气。我尝试像这样创建IOrganizationService

var context = executionContext.GetExtension<IWorkflowContext>();
var serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
var service = serviceFactory.CreateOrganizationService(null);

根据使用CreateOrganizationService调用null的文档作为参数应该强制系统用户的用户,但它似乎仍然作为主叫用户运行。

我还尝试调用CreateOrganizationService并使用系统管理员角色传递其他用户的Guid,但结果相同。

2 个答案:

答案 0 :(得分:2)

工作流具有特殊条件,旨在忽略您传递给CreateOrganizationService的guid。

我从这个article获取下一段:

  

对于自动工作流程案例,工作流程的所有者也是   激活它的人以及选择触发机制的人   工作流步骤,如果工作流在该用户下执行,则可以   上下文。对于按需用户,用户特意请求   由工作流程代表他执行的一些操作,以便用户执行   完全了解工作流程定义并将执行;   因此,在该用户的上下文下执行工作流是安全的   而不是工作流所有者(可能不知道用户   请求按需执行。)

答案 1 :(得分:2)

  1. 可以将自定义工作流活动转换为已注册为在CRM服务或管理员环境中运行的插件
  2. 工作流程可以自动进行,而不是手动触发
    • 如果最终用户明确启动工作流,则它将在其用户上下文中运行
    • 对话框始终在初始用户上下文中运行
    • 由事件触发而不是由用户显式启动的工作流将在启动并拥有工作流的用户的上下文中运行 - 在这种情况下是管理员
    • 对话框或自定义功能区按钮可以更改记录上的某些内容(自定义字段),您的自定义工作流活动已注册以执行更改