【问题标题】:How can know when the plugin ends in CRM 2016?如何知道插件何时在 CRM 2016 中结束?
【发布时间】:2017-04-23 08:39:58
【问题描述】:

我在 CRM 2016 中有一个插件 Code C#。 我想在插件结束时激活 Javascript 代码。 我尝试通过这个插件更新一个字段,当这个字段发生变化时,用 javaScript 代码触发变化事件。 我看到,该字段发生了变化,但它没有激活更改字段时发生的功能。 但是当手动更改此字段而不是通过插件时,该功能可以正常工作。

也许有一个关于如何知道插件何时结束的想法?

【问题讨论】:

  • 所以插件在更新时触发,对吗?此外,更新是从保存在 javascript 中的表单中调用的?

标签: javascript c# plugins dynamics-crm dynamics-crm-2016


【解决方案1】:

这是一个单独的答案,因为它是针对不同情况的解决方案。你会做这个或我的另一个答案,但可能不会两者都做,我不想把它们放在一个答案中来混淆。

如果这个“插件”是偶然的,因为它只是偶尔出现,而不是每次保存,这可能是使用 Actions 的好时机。在操作之前,我们通常会有“控制字段”——实体上没有任何数据值的字段,我们只是在保存时设置它们以使插件以特殊方式运行。如果是这种情况,我建议将代码重构为自定义活动(就像您为工作流制作自定义代码一样)并直接调用该操作,而不是在保存的插件中。在这种情况下,您不需要“在保存后运行 javascript”,因为您只是在调用一个操作并在此之后运行。

【讨论】:

    【解决方案2】:

    如果插件是从表单上的保存调用的,并且是同步注册的,您可以在从保存返回时运行脚本。您需要使用异步保存方法:Xrm.Page.data.save().then(_success, fail); 这与旧的 Xrm.Page.data.entity.save(saveType) 操作不同,后者是同步的,无法捕获返回。

    如果您需要此插件在每次保存时触发,则捕获 OnSave 事件,取消默认操作并使用此异步保存方法。这是一个讨论取消默认保存操作的页面:https://neilparkhurst.com/2015/11/11/javascript-prevent-save/ 您可以使用它来创建此“可恢复”保存操作。在您的then()成功方法中,您可以获取插件更改的属性并调用您的fireOnChange()方法。

    以下是此较新操作的 XRM 文档: https://msdn.microsoft.com/en-us/library/dn481607.aspx?f=255&MSPPError=-2147217396

    【讨论】:

    • 感谢您的回答。但我不能激活函数 Xrm.Page.data.save().then(_success, fail) 因为通过代码插件更新和保存字段它是服务器端。并且表单的保存功能在插件保存时不起作用,因为它是客户端。
    • 啊,那么触发插件的原因是什么?我以为您正在对表单进行更改,保存,从而触发插件。那么导致插件触发的原因是什么?如果它是你控制的东西,我的第二个答案可能更相关。
    【解决方案3】:

    服务器端插件执行完成后,我们无法在客户端执行一些Javascript功能代码块。

    但是通过扩展您的方法,您正在更新插件中的虚拟字段,因此刷新表单以查看最新更改,在表单加载时 - 触发该虚拟字段的 onchange() 方法应该可以很好地工作。

    【讨论】:

    • 在 2016 年不需要使用虚拟字段来控制插件行为,您可以将该功能重构为一个操作并直接调用该行为。
    猜你喜欢
    • 2013-03-19
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多