8

我假设对于更新插件,它指定了一个属性列表,如果更改,会导致插件触发。

因此,如果我针对 注册了一个插件Foo,并且只针对 指定了一个过滤属性Bar,那么每次Foo更新实体时,CRM 都会检查是否Bar已更新,如果有,它会运行我的插件。因此,使用下面的代码,我希望我的插件执行一次。

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

我的这个假设是对的吗?

4

2 回答 2

14

虽然您的初始分析大致正确(即过滤属性仅在一个或多个过滤属性发生更改时才会触发插件),但这并不完全准确。

当实体发生变化时,例如联系人的电子邮件地址,平台(以及您的插件)仅接收增量。在我的示例中,TargetInputParameter 中将有一个实体,它只包含一个属性 ( email)。即使联系人记录包含更多数据也是如此 - 只有更改的数据才会发送到平台。(顺便说一句,这是 Pre 和 Post 实体图像的用武之地,因为它们允许您访问未更改的实体上的值,而无需发出 Retrieve)。

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

于 2012-12-08T08:21:48.113 回答
-1

这是为了缩小插件的执行范围。仅当一个或多个注册属性发生更改时,插件才会触发。

于 2012-12-08T07:22:50.333 回答