2017-04-23 119 views
2

我在CRM 2016中有一个代码C#插件。 我想在插件结束时激活一个Javascript代码。 我尝试通过此插件更新字段,并在此字段更改时使用javaScript代码触发更改事件。 我看到,字段发生了变化,但它不会激活更改字段时发生的功能。 但是,当手动更改此字段而不是通过插件时,该功能运行良好。如何知道插件在CRM 2016中何时结束?

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

+0

因此,该插件正在更新,是否正确? 此外,更新是从javascript中的窗体保存调用? –

回答

1

如果从窗体上的保存中调用插件并同步注册插件,则可以从保存返回时运行脚本。您需要使用异步保存方法: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

+1

感谢您的回答。 但我不能激活功能Xrm.Page.data.save()。然后(_成功,失败) 因为,更新和保存字段的代码插件它是一个服务器端。 和函数save for form由插件保存时不起作用,因为它是客户端。 – Racheli

+0

啊,那么触发插件是什么?我以为你正在对表格进行修改,保存,从而触发插件。那么导致插件启动的是什么?如果它是你控制的东西,我的第二个答案可能更有意义。 –

1

这是一个单独的答案,因为它是一个不同的情况的解决方案。你会做这个或我的其他答案,但可能不是两个,我不想混淆,把它们放入一个答案。

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

0

完成Server端插件的执行后,我们无法在客户端执行一些Javascript函数代码块。

但通过扩展你的方法,你在插件更新空场,所以刷新的形式看到最新的变化,在形式负载 - 射击那空场的的onchange()方法应该很好地工作。

+1

2016年不需要使用虚拟字段来控制插件行为,您可以将该功能重构为动作并直接调用行为。 –

相关问题