javascript - 在新窗口打开的 Web 资源中使用 Xrm.WebApi 方法

标签 javascript dynamics-crm microsoft-dynamics dynamics-365 dynamics-crm-webapi

我在新窗口中打开了一个 HTML 网络资源:

Xrm.Navigation.openWebResource(webResource, windowOptions, data);

这是一个 HTML 网络资源,它在头部加载 ClientObject

<script type="text/javascript" src="../../../ClientGlobalContext.js.aspx" ></script>

然后我有一些 JavaScript 试图检索 Contact

var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`

但这是失败。我已经跟踪到 Xrm.WebApi方法,发现错误是在它尝试解析 "contact" 时到 Set Name

Code from Global.ashx

getEntitySetName: function(logicalName) {
    Mscrm.Utilities.addTelemetryLog("Xrm.Utility.getEntitySetName");
    var $v_0 = window.ENTITY_SET_NAMES || window.top.ENTITY_SET_NAMES;
    if (IsNull(this.$5H_1) && !isNullOrEmptyString($v_0))
        this.$5H_1 = JSON.parse($v_0);
    return this.$5H_1[logicalName.toLowerCase()]
},

出于某种原因 window.ENTITY_SET_NAMES对象为空,因此发生错误(空引用)

我已尝试将我的 Web 资源嵌入到 CRM 页面中,并且代码工作正常。问题似乎是通过 Xrm.Navigation.openWebResource 启动 Web 资源时出现的问题

有没有人试过用Xrm.WebApi在使用 Xrm.Navigation.openWebResource 打开的 Web 资源的上下文中?或者有人知道检索数据是否需要额外的步骤吗?


更新

ENTITY_SET_NAMESmain.aspx 中初始化. 我尝试将我的自定义 Web 资源直接嵌入到新的 Main Form 中部分和 retrieveRecord方法有效。

这似乎只有在通过 Xrm.Navigation.openWebResource 从新页面运行 Web 资源时才会出现问题


更新 2 - 对 Aron 的回应

我尝试使用 window.parent如下所示

var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = parent.Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`

此外还尝试了 window.parent.top

var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = parent.top.Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`

但两者都导致了同样的错误

最佳答案

听起来像是 ClientGlobalContext.js.aspx 中的产品错误,因为这应该为您提供完整的工作环境。

在这种情况下,您可能可以使用 window.opener.Xrm,因为 it worked对于 window.opener.Xrm.Page.getAttribute 它也应该适用于 Xrm.WebApi

您可以像这样尝试从开启器窗口访问变量:

window["ENTITY_SET_NAMES"] = window["ENTITY_SET_NAMES"] || window.opener.top.ENTITY_SET_NAMES;

关于javascript - 在新窗口打开的 Web 资源中使用 Xrm.WebApi 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51416490/

相关文章:

javascript - 如何有效地确定闭合深度

javascript - 当我运行程序时,我的内存不足。有没有更好的方法来做到这一点,或者我是否创建了任何无限循环?

dynamics-crm-2011 - 如何使用 JavaScript 在 CRM 2011 中获取安全角色?

javascript - 创建新实体时使用 javascript 刷新 View

dynamics-crm - 我可以使用 FetchXML 检索实体列表和属性列表吗?

plugins - Dynamics CRM 2011 插件检索和检索多个

javascript - 使用jquery影响具有相同id的div

javascript - Jquery如何在表中显示特定的输入值

javascript - 如何从函数中调用/返回ajax成功对象

c# - 在多重限制下检索大量记录,不会导致内存不足异常