检索插件未被触发

Retrieve Plugin not getting triggered

我们使用的是 Dynamics CRM 2016 On-Premise。使用插件,我试图在用户打开 CRM 帐户表单时自动更新字段,在此示例中为值“5”。这是我的代码:

 var targetEntity = (Entity)context.OutputParameters["BusinessEntity"];

 if (targetEntity == null)
throw new InvalidPluginExecutionException(OperationStatus.Failed, "Target Entity cannot be null");

var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);

if (targetEntity.Attributes.Contains("MyField"))
fedTaxId = targetEntity.Attributes["MyField"].ToString();

targetEntity.Attributes.Add("MyField"d, "5");
targetEntity["MyField"] = "5";
service.Update(targetEntity); 

我在消息类型 10 中列出了它(在事务外的主要操作之前)。 在插件注册中,我将其列为 Post 操作阶段和同步。

但是,当我打开“帐户”表单时,页面会闪烁一次,但不会自动填充值。也没有 javascript 可以操纵此表单或值。 有什么建议吗?谢谢

两个选项:

  1. 在表单上添加脚本以设置字段值 加载时。请记住,只有当表单类型 = 2 时,此脚本才应该执行它的操作。

  2. (不推荐)在实体的同步postretrieve消息上注册一个插件。确保此步骤在 OutputParameters 集合中的实体对象上设置字段值。现在,请记住您的表单不会意识到该字段已被修改,因此它不会被标记为 dirty 并且在记录更改时不会自动提交保存。因此,在这种情况下,您仍然需要添加一些 JavaScript 或者您需要在实体设置字段的前 update 消息中注册一个额外的插件。