如何在同步插件中确定哪些字段发生了变化?
插件在更新时注册.
类似于JavaScript中的isDirty():
// TODO: Implement your custom Plug-in business logic.
IOrganizationService service = localContext.OrganizationService;
Entity account = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
if (account.GetAttributeValue<String>("address1_latitude").isDirty())
{
service.Create(new Lead { FirstName = "LOCATION CHANGED" }); // this is a stub
}
Run Code Online (Sandbox Code Playgroud)
Tea*_*Dev 13
Target中实际存在的属性是已更改的属性.不存在未更改的属性.
Dar*_*ryl 11
我将略微扩展GCATNM的答案.目标包含将要更新的所有值,不一定包含已更改的所有值.
除非您在表单上执行一些非常"hacky"的javascript,否则从CRM Web前端更新/创建的目标实体将始终只包含已更改的值,因为CRM UI中的javascript只会发送值已经改变.
但是,如果您通过其他方法(odata调用,使用SDK进行C#更新)更新数据,并且更新请求中包含的值尚未实际更改,则它们将显示在插件的目标中.例如,如果您有一个C#进程来抓取特定实体的所有属性,那么更新单个属性,该实体的所有属性都将显示在目标中.
所以真正的目标不是改变了什么,而是插件完成后实体将会是什么.您需要在预映像中包含要检查更改的属性,以便能够确定值是否确实已更改.
| 归档时间: |
|
| 查看次数: |
8505 次 |
| 最近记录: |