Dynamics crm 2011 CRM 2011更新插件:哪些字段已更改?

Dynamics crm 2011 CRM 2011更新插件:哪些字段已更改?,dynamics-crm-2011,Dynamics Crm 2011,如何在同步插件中确定哪些字段已更改? 插件已在更新时注册。 类似于JavaScript中的isDirty(): //TODO:实现自定义插件业务逻辑。 IOOrganizationService=localContext.OrganizationService; 实体帐户=(实体)localContext.PluginExecutionContext.InputParameters[“目标”]; if(account.GetAttributeValue(“address1_latitude”).

如何在同步插件中确定哪些字段已更改?
插件已在更新时注册。
类似于JavaScript中的isDirty():

//TODO:实现自定义插件业务逻辑。
IOOrganizationService=localContext.OrganizationService;
实体帐户=(实体)localContext.PluginExecutionContext.InputParameters[“目标”];
if(account.GetAttributeValue(“address1_latitude”).isDirty())
{
Create(新潜在客户{FirstName=“LOCATION CHANGED”});//这是一个存根
} 

目标中实际存在的属性是已更改的属性。未更改的属性不会出现在那里。

我将稍微扩展一下GCATNM的答案。目标包含更新请求中包含的所有值,而不仅仅是与数据库中当前存在的值不同的值

除非在表单上执行一些非常“黑”的JavaScript,否则从CRM web前端更新/创建的目标实体将始终只包含已更改的值,因为CRM UI中的JavaScript将只发送已更改的值

但是,如果您通过其他方法(OData调用、使用SDK进行C#update)更新数据,并且更新请求中包含的值实际上没有更改,那么它们将显示在插件的目标中。例如,如果您有一个C#进程,该进程获取特定实体的所有属性,然后更新单个属性,则该实体的所有属性将显示在目标中


因此,真正的目标不是改变了什么,而是插件完成后实体将是什么。您需要在预映像中包含要检查更改的属性,以便能够确定值是否确实已更改。

如何访问未更改的属性?使用预映像或后映像()我将使用IOrganization。检索,因为Id可用,但是你的方式看起来更有效率。你的答案非常相关。我正在通过Resco Mobile CRM更新gps公司;该插件在lat或long更改时启动,并证明销售代表在该位置。在本例中,似乎所有字段值都将在localContext.PluginExecutionContext.InputParameters[“Target”]中找到,因此我将比较预映像值和[“Target”]值,以确定它们是否已更改。基本上,目标包含发送到服务器的值。不一定“改变”。请求中包含的内容(例如更新或创建)不是我说的吗?也许我应该修改一些措辞?