系统用户执行的Microsoft Dynamics CRM异步插件

时间:2014-03-26 10:41:19

标签: dynamics-crm-2011 impersonation

我在插件注册工具中注册了两个插件。这两个插件都有" 呼叫用户"在"在用户环境中运行"值。

  1. 第一个插件在实体X(异步)的更新后注册了一个步骤
  2. 第二个插件在检索多个产品(同步)
  3. 上注册了一个步骤

    第一个插件检索产品,因此触发第二个插件。当我检查第一个插件的 context.UserId 属性时,我找到了登录用户的userId。但在第二个插件中,该属性设置为 SYSTEM用户的Guid。

    我使用以下代码在两个插件中实现organisationService:

        this.OrganizationService = 
    factory.CreateOrganizationService(this.PluginExecutionContext.UserId);
    

    知道发生了什么事吗?为什么第二个插件没有被登录用户执行?

    编辑:

    当我查看系统作业跟踪时,我发现以下ID:

    插件1(异步):

    context.Initiating User: Logged in user
    context.User: SYSTEM
    

    插件2(同步):

    context.Initiating User ID: SYSTEM
    context.User ID: SYSTEM
    

    Async服务用户(SYSTEM)触发插件2确实有意义,因此插件2中的Context.UserId实际上是SYSTEM用户Guid。

    实际上我尝试做的事情(在伪代码中)是这样的(在插件1中):

    context.UserId = context.InitiatingUserId
    

    但问题是context.UserId是一个只读属性。

    任何想法如何引发这样的事情?

1 个答案:

答案 0 :(得分:0)

要根据上面的代码模拟插件,请执行以下操作:

((OrganizationServiceProxy)this.OrganizationService).CallerId = loggedInUserId;