2

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

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

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

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

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

我还尝试调用CreateOrganizationService并传递具有系统管理员角色的不同用户的 Guid,但得到了相同的结果。

4

2 回答 2

2

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

我从这篇文章中摘录下一段:

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

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