这是针对CRM 2016的内部部署。
我在CRM 2016的命令栏中有一个自定义按钮,它使用javaScript Web资源调用位于另一台服务器上的外部asp.net页面。此外部页面允许用户执行一些自定义操作,然后显示在父页面的其中一个子网格上。
以下是CRM按钮用于打开外部网页的JavaScript。
+-------+------+---------------------+
| nid | mid | pdate |
+-------+------+---------------------+
| 12789 | 11 | 2016-09-26 00:00:00 |
| 12826 | 2 | 2016-07-13 00:00:00 |
| 12845 | 2 | 2016-07-05 00:00:00 |
| 12823 | 10 | 2016-06-21 00:00:00 |
| 12822 | 2 | 2016-06-17 00:00:00 |
| 12821 | 10 | 2016-06-07 00:00:00 |
| 12635 | 10 | 2016-06-07 00:00:00 |
| 12821 | 2 | 2016-06-07 00:00:00 |
| 12633 | 10 | 2016-05-25 02:19:29 |
| 12548 | 10 | 2016-05-20 00:00:00 |
+-------+------+---------------------+
我需要能够刷新父CRM页面以显示asp.net页面所做的更改。我宁愿只刷新父页面上的子网格,但如果必须的话,只需重新加载整个页面即可。
我尝试在子页面上使用javascript函数在窗口卸载事件上调用window.opener.location.reload(),但它不在父CRM页面上工作。我也尝试过window.opener.parent.refreshParent()。我认为问题是window.opener不包含值,因为CRM页面没有打开外部页面,它是由javascript函数打开的。
有没有办法通过javascript传递这个值,这样我在window.opener中有一个值可以使用?
有没有办法识别父页面上的子网格并向其发布刷新命令?
也许有一个更好的解决方案,我错过了?我愿意接受任何有关如何使其发挥作用的建议。
答案 0 :(得分:0)
我不知道window.postMessage是否适用于Windows,但您可以进行调查。
另一种选择是,不是在新窗口中加载子页面,而是将其加载到iframe叠加层中。那么你肯定能够使用postMessage,UX会更好。