Microsoft Dynamics CRM-将参数从Web服务传递到IPlugins



我们正在通过继承IPlugin在Microsoft Dynamics CRM中构建一些插件。我们已经配置了这些,因此每当更新Account时,它们就会激发。

问题是插件正在调用我们的服务,这导致我们的服务以更新响应。我们现在正在做一些非常棘手的事情来防止这些周期性的更新发生。

我们想知道是否有一种方法可以将值传递给IOrganizationService服务(web服务),让插件查看。我们的另一个系统可以发送一个标志("嘿,不要麻烦发送更新!"),插件可以跳过回调。

我们可以将参数从web服务传递到插件吗?

最好使用自定义标志字段。例如,添加位字段并将其称为CallFromExternalSystem。因此,当您通过IOranizationService从外部系统进行更新时,您只需用true字段填充此标志,在插件中,您可以检查字段列表中是否存在此字段,这样您就不需要再次调用外部系统端点。

我们决定正确的解决方案是使用IPluginExecutionContext.InputParameters["Target"]中的值。在Update的情况下,这将返回一个Entity,其中包含已更新的所有属性的属性。

我们基本上有一个我们关心的属性名称列表。我们循环遍历名称,看看它们中是否有任何一个出现在实体属性列表中。如果是,我们会向其他系统发送更新。好消息是,Dynamics CRM会忽略值实际上没有更改的更新,因此尝试将值更新为自身是不可行的。

public void Execute(IServiceProvider serviceProvider)
{
    IPluginExecutionContext context = serviceProvider.GetService(typeof(IPluginExecutionContext));
    Entity entity = (Entity)context.InputParameters["Target"];
    string[] fields = new string[] { "name", "statecode", "address1_line1" };
    bool hasUpdates = fields.Where(f => entity.Attributes.Contains(f)).Any();
    if (!hasUpdates)
    {
        return;
    }
}

最新更新