我使用以下命令在新窗口中打开了 HTML Web 资源:
Xrm.Navigation.openWebResource(webResource, windowOptions, data);
这是一个 HTML Web 资源,它正在头部加载 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");`
但这是failing。我已逐步追踪到Xrm.WebApi
方法并发现错误是在尝试解决时"contact"
to a Set Name
代码来自全局.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
有没有人尝试过使用Xrm.WebApi
在使用以下命令打开的网络资源的上下文中Xrm.Navigation.openWebResource
?或者有人知道检索数据是否需要额外的步骤?
Update
ENTITY_SET_NAMES
初始化于main.aspx
。
我尝试将自定义 Web 资源直接嵌入到新的Main Form
部分和retrieveRecord
方法有效。
看来只有当通过新页面运行 Web 资源时这才是问题Xrm.Navigation.openWebResource
更新 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");`
但两者都导致了相同的错误