0

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

我需要在 iFrame 中设置机会页面和我的应用程序之间的通信。

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

我试过了:

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

当我从 IE Dev 工具调用这个函数时,它工作正常。但是从我的 JS 应用程序中,它会抛出拒绝访问。

我阅读了很多关于 iFrame 集成的信息,但没有一个适用于 MS Dynamics 365。

4

2 回答 2

2

The problem with "Access Denied" may be related with CORS policy if your JavaScript app is hosted outside Dynamics environment. To avoid this problem on one of my projects we were using postMessage API (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) instead of direct access to DOM model to send/receive messages between CRM form and IFRAME site.

I've written blog article describing how to make it work (unfortunately it is in Polish, but maybe some automatic translation will help;)): http://xrmlabs.piotrgaszewski.pl/?p=455

于 2017-08-22T06:28:07.740 回答
1

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

还有其他几个选项:

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