MS Dynamics 365 - Iframe - 访问Xrm - 权限被拒绝

时间:2017-08-21 14:56:51

标签: javascript iframe dynamics-crm dynamics-365

我在MS Dynamics CRM和我的javascript应用程序之间进行集成时遇到问题。

我需要在“机会”页面和iFrame中的应用之间建立通信。

问题是,当我需要访问页面中的XRM对象时,我总是得到Access Denied错误

我试过了:

parent.window.Xrm.Page.data.entity.attributes.get(“stateCode”).getValue();

当我从IE Dev工具调用此函数时,它工作正常。但是从我的JS应用程序中它会抛出Access Denied。

我阅读了很多有关iFrame集成的内容,但没有一项适用于MS Dynamics 365.

2 个答案:

答案 0 :(得分:2)

如果您的JavaScript应用程序托管在Dynamics环境之外,则“拒绝访问”的问题可能与CORS策略有关。为了避免我的一个项目出现此问题,我们使用postMessage API(https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)而不是直接访问DOM模型,以便在CRM表单和IFRAME站点之间发送/接收消息。

我写博客文章描述了如何让它发挥作用(不幸的是它是波兰语,但也许一些自动翻译会有所帮助;)):http://xrmlabs.piotrgaszewski.pl/?p=455

答案 1 :(得分:1)

在CRM表单上的IFrame中加载的HTML Web资源的parent.window实际上不是表单的窗口。事实上,在 Turbo Forms 模式下,无法使用DOM访问表单的窗口。

还有其他一些选择:

  1. 将实体ID和名称传递给HTML网络资源(MSDN),并使用网络API查询自定义页面上所需的其他数据。
  2. 从表单上的脚本访问Web资源,并将数据推送到自定义页面。 (注意:不要使用document.write,因为它不适用于每个浏览器。)
  3. 关闭turbo表单(设置 - >管理 - >系统设置 - >常规 - >使用旧版表单呈现)。建议不要这样做,因为您将为所有实体表单关闭它,但它不会提供持久的解决方案。