Web services 在CRM 4.0插件中,是否有办法区分SSIS执行与web UI执行?

Web services 在CRM 4.0插件中,是否有办法区分SSIS执行与web UI执行?,web-services,plugins,ssis,dynamics-crm-4,crm,Web Services,Plugins,Ssis,Dynamics Crm 4,Crm,以下是设置: Custom_entity从用户处获取一些输入,计算一个数字,并将其与数据库中存储的总数进行比较,以获得总体百分比。总数每周更新一次。为了更新每个用户的自定义实体以反映新的总数和这些总数的百分比,我创建了一个每周运行的SSIS包。当然,我表现得很好,也很合规,所以我使用API访问CRM Web服务来更新定制的实体 但是,用户也希望看到他们的自定义实体的实时更新,因此我创建了一个插件,在自定义实体更新时,该插件将重新计算他们的数字,检查数据库中的总数更新,并更新与所有其他更新相关的百

以下是设置:

Custom_entity从用户处获取一些输入,计算一个数字,并将其与数据库中存储的总数进行比较,以获得总体百分比。总数每周更新一次。为了更新每个用户的自定义实体以反映新的总数和这些总数的百分比,我创建了一个每周运行的SSIS包。当然,我表现得很好,也很合规,所以我使用API访问CRM Web服务来更新定制的实体

但是,用户也希望看到他们的自定义实体的实时更新,因此我创建了一个插件,在自定义实体更新时,该插件将重新计算他们的数字,检查数据库中的总数更新,并更新与所有其他更新相关的百分比

也许你现在看到了问题

当用户从web更新自定义实体实例的更新插件时,他们会得到即时反馈,看到自己的数字,并感到高兴。 当SSIS包运行时,更新插件为正在更新的所有自定义\u实体行触发。。。 我的问题: 是否有一种方法可以通过查看上下文来判断插件是通过SSIS作业还是通过web调用的,然后退出插件

目前只有很少的行,并且没有真正的性能影响,但是很明显,这肯定是糟糕的编程和不必要的CPU/带宽使用。插件本身在执行过程中会多次影响Web服务。我可以通过寻找一个特定的属性来短路插件,该属性只有在SSIS包调用插件时才会出现,但我想找到一个更好的方法


谢谢大家!

您可以查看context.CallerOrigin属性。它将向您显示触发该消息的源。在您的情况下,您应该检查WebServiceApi

看看我的文章

using System;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
 
public class OnlinePlugin : IPlugin
{
  public void Execute(IPluginExecutionContext context)
  {
     // Check to see if this is a playback context.
     CallerOrigin callerOrigin = context.CallerOrigin;
  
     if (callerOrigin is OfflineOrigin)
     {
       // This plug-in was fired from the playback queue after the user
       // selected to go online within Microsoft Dynamics CRM for Outlook.
       return;
     }
     else
     {
       // Do something here.
     }
  }
}