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

Dynamics crm 2011 系统用户执行的Microsoft Dynamics CRM异步插件,dynamics-crm-2011,impersonation,Dynamics Crm 2011,Impersonation,我在插件注册工具中注册了两个插件。这两个插件在“在用户上下文中运行”值处都有“调用用户” 第一个插件在实体X更新后注册了一个步骤(异步) 第二个插件在retrievemultiple of products(同步)上注册了一个步骤 第一个插件检索产品,因此它触发第二个插件。当我检查第一个插件的context.UserId属性时,我找到了登录用户的UserId。但是在第二个插件中,属性设置为系统用户的Guid 我使用以下代码在两个插件中安装OrganizationService: this

我在插件注册工具中注册了两个插件。这两个插件在“在用户上下文中运行”值处都有“调用用户”

  • 第一个插件在实体X更新后注册了一个步骤(异步)
  • 第二个插件在retrievemultiple of products(同步)上注册了一个步骤
  • 第一个插件检索产品,因此它触发第二个插件。当我检查第一个插件的context.UserId属性时,我找到了登录用户的UserId。但是在第二个插件中,属性设置为系统用户的Guid

    我使用以下代码在两个插件中安装OrganizationService:

        this.OrganizationService = 
    factory.CreateOrganizationService(this.PluginExecutionContext.UserId);
    
    知道发生了什么吗?为什么登录用户不执行第二个插件

    编辑:

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

    插件1(异步):

    插件2(同步):

    异步服务用户(系统)触发插件2是有意义的,因此插件2中的Context.UserId实际上是系统用户的Guid

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

    但问题是context.UserId是只读属性


    你知道如何实现这样的功能吗?

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

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

    我不是100%确定,但我相信你不能强制启动用户id,因为系统设置了这个。您可以尝试启动所需用户的新retrieveMultipleRequest设置,并忽略第一个设置。请提供有关您的问题的更多信息,以了解您为什么要这样做,也许还有其他解决方法。谢谢您的评论。实际上,我不想让Plugin2(一个多语言插件)触发。我只想异步更新产品。所以我不需要翻译。我解决这个问题的方法是在非安全配置中添加系统用户Guid,并检查是系统用户还是其他用户执行插件。如果是系统,停止插件的执行。
    context.Initiating User ID: SYSTEM
    context.User ID: SYSTEM
    
    context.UserId = context.InitiatingUserId
    
    ((OrganizationServiceProxy)this.OrganizationService).CallerId = loggedInUserId;