我在新窗口中打开了一个 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_NAMES
在 main.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/