CRM 2011插件注册工具的过滤属性有何作用?

Dar*_*ryl 8 dynamics-crm-2011

我假设对于Update插件,它指定了一个属性列表,如果被更改,则导致插件触发.

因此,如果我每次更新实体时Foo只针对一个过滤属性注册一个插件,CRM会执行检查以查看是否已更新,如果有,则运行我的插件.因此,使用下面的代码,我希望我的插件执行一次.BarFooBar

Foo foo = new Foo();
foo.Bar = 0;
foo.Id = service.Create(foo);
foo.Bar = 1;
service.Update(foo.Bar); // My plugin would execute
service.Update(foo.Bar); // Bar hasn't changed, I would assume the plugin will not  execute
Run Code Online (Sandbox Code Playgroud)

我在这个假设中是对的吗?

Gre*_*ens 14

虽然您的初始分析是松散正确的(即过滤属性导致插件仅在一个或多个过滤属性发生变化时才会触发),但这并不完全准确.

当实体被更改时,例如联系人的电子邮件地址,平台(以及您的插件)仅接收增量.在我的示例中,TargetInputParameter 中将有一个实体,它只包含一个属性(email).即使联系人记录包含更多数据,情况也是如此 - 只有更改的数据才会发送到平台.(另外,这是Pre和Post实体图像的来源,因为它们允许您访问未更改的实体上的值,而不必发出Retrieve).

因此,考虑到这一点,正确地说,过滤属性意味着只有在请求中存在一个或多个过滤属性时才会触发插件.CRM ui通常不会发送值,除非它已更改(forceubmit会覆盖此行为).在您的示例Daryl中,插件将触发两次,因为两个请求中都存在过滤属性.