为什么CRM 2013 Online Plugin一直在SYSTEM用户下运行

时间:2014-11-14 14:07:35

标签: plugins dynamics-crm crm microsoft-dynamics dynamics-crm-2013

我为Microsoft Dynamics CRM 2013 Online平台构建了一个插件。该插件已在Delete of my_custom_entity中注册。它是同步的和后期操作的。模拟设置为“呼叫用户”。据我所知,插件应该通过这些设置使用主叫用户的权限等来解雇。

我无法弄清楚原因,但我的插件总是在" SYSTEM"用户。我试图使用两个不同的系统用户,但没有任何运气。这是一个问题,因为我的插件正在调用工作流程,而工作流程正在发送电子邮件。 SYSTEM用户无法发送电子邮件。

这是CRM 2013中的新功能吗?我试图谷歌,但无法找到任何相关的东西。我已经尝试取消注册并再次注册我的插件程序集。没有区别。

如何更改插件注册,以便代表触发插件的用户(谁删除实体)运行。

谢谢

3 个答案:

答案 0 :(得分:3)

您是如何获得服务参考的?

如果您这样做,您应该以触发插件的用户身份执行所有操作。

// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

如果您传递空值,您将获得系统用户,例如serviceFactory.CreateOrganizationService()

IOrganizationServiceFactory.CreateOrganizationService

  

指定调用服务的系统用户。一个   null值表示SYSTEM用户。在插件中调用时,a   Guid.Empty值表示与IPluginExecutionContext相同的用户。   用户身份。在自定义工作流活动中调用时,为Guid.Empty值   表示与IWorkflowExecutionContext.UserId相同的用户。任何其他   value表示特定的系统用户。

答案 1 :(得分:0)

你应该使用context.InitiatingUserId。

IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId);

答案 2 :(得分:0)

InitiatingUserId将是触发删除操作的用户。在“删除”上下文中,UserId将是平台使用的系统。