Dynamics crm 2011 在CRM 2011中保存表单后调用javascript函数

Dynamics crm 2011 在CRM 2011中保存表单后调用javascript函数,dynamics-crm-2011,dynamics-crm,dynamics-crm-4,dynamics-crm-online,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm 4,Dynamics Crm Online,我是CRM 2011的新手。我在Common.js文件中创建了一个javascript函数。此函数将在许多形式的其他函数中调用。此函数还包含FetchXML查询。在每个表单中,我都创建了一个特定的函数,其中包含对泛型函数的调用。我在表单的OnSave事件中调用这个特定函数。问题是,当我调用save上的特定函数时,在泛型函数中,我将对刚刚保存的实体执行FetchXML查询,但FetchXML查询会在保存之前返回值(我刚刚保存的实体调用了具有FetchXML查询的函数,我在FetchXML查询的结果

我是CRM 2011的新手。我在Common.js文件中创建了一个javascript函数。此函数将在许多形式的其他函数中调用。此函数还包含FetchXML查询。在每个表单中,我都创建了一个特定的函数,其中包含对泛型函数的调用。我在表单的OnSave事件中调用这个特定函数。问题是,当我调用save上的特定函数时,在泛型函数中,我将对刚刚保存的实体执行FetchXML查询,但FetchXML查询会在保存之前返回值(我刚刚保存的实体调用了具有FetchXML查询的函数,我在FetchXML查询的结果中看不到更改的属性及其新值!)我尝试了另一种解决方案,没有从OnSave对话框调用特定函数,而是使用了方法Xrm.Page.data.entity.addOnSave(我的特定函数)确保表单保存后会调用它,但它仍在获取旧值。您能帮我吗

谢谢,
Walloud

Xrm.Page.data.entity.addOnSave
将在
OnSave
事件中添加一个函数,这意味着在保存记录之前仍将执行该函数


我建议将逻辑移到插件中。

有两种可能性:

  • 我认为您应该使用form onload事件,并检查Xrm.Page.ui.getFormType()是否为第一个类型创建了记录。不获取XML bceause将创建新记录

  • 如果Xrm.Page.ui.getFormType()=2,则为FetchXml

    或者你可以使用

     setInterval  (function() FetchXML},3000);
    

  • 谢谢Guido!这是我在CRM 2011上的第一个任务,我从未使用过插件,我仍然不知道如何编写和如何从javascript调用它。你能解释一下插件如何解决这个问题吗?有没有更简单的解决方案?谢谢!什么用例要求你检索更新实体的以前的值?a下面的指南说明了您想要实现的目标并不容易,但有一些复杂的解决方法可以实现您的目标-它们需要大量的编码和对CRM开发的透彻理解,以阅读审计中心,以便您可以检索实体的上一次更新更改。如果您希望从当前nt record,不要使用FetchXML-在onSave事件期间直接从表单中获取它们。如果您想要相关记录中的数据,则无论是在保存之前还是之后运行,因为这些数据来自数据库,与对当前记录所做的更改无关。抱歉,伙计们,我想我没有很好地解释我的请求。我解释过了不是说我需要更新前的值,而是相反。想想一个表单,当我保存字段时,我调用Common.js中的一个函数,该函数获取许多包含更新实体的实体,但获取结果不包含字段的新值:(您忘记了保存和关闭场景,如果您将逻辑移动到onload事件,然后单击“确定保存和关闭”,则不会执行fetchxml代码。谢谢。我可能会做一些更安全但不太干净的事情。我会将字段作为参数传递,并比较它们是否更改。这很愚蠢,但我现在没有选择。这是我的f。)动力学领域的第一个任务,我觉得很奇怪,像这样一个明显的问题没有得到处理。我可以问你是否有什么好的动力学2011实验室吗?非常感谢!@Walloud我没有动力学2011实验室,但我从我的高年级老师那里得到了培训,他太好了:)如果你需要学习任何东西,谷歌是你最好的朋友。