【问题标题】:MS Dynamics 365 - Iframe - Access Xrm - permission deniedMS Dynamics 365 - Iframe - 访问 Xrm - 权限被拒绝
【发布时间】:2017-08-21 14:56:51
【问题描述】:

我在 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。

【问题讨论】:

    标签: javascript iframe dynamics-crm dynamics-365


    【解决方案1】:

    如果您的 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

    【讨论】:

    • 您是否尝试将事件侦听器直接添加到 Dynamics 表单/窗口?我们在这方面也没有成功。在我们的例子中 - 我们在 CRM 表单内的 Web 资源上添加了消息侦听器。此 Web 资源是包含 IFRAME 的 HTML 页面,显示外部系统,并在收到来自外部系统的消息时与具有标准上下文的 CRM 表单进行通信。
    【解决方案2】:

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

    还有其他几个选项:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 2014-08-10
      • 2013-08-07
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      相关资源
      最近更新 更多