我使用以下方法在新窗口中打开了一个 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");`
但这失败了。我已经逐步跟踪该Xrm.WebApi
方法,发现错误是它尝试解析"contact"
为Set Name
来自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
对象为空,因此发生错误(空引用)
我尝试将我的网络资源嵌入到 CRM 页面中,并且代码可以正常工作。问题似乎是当网络资源通过 Xrm.Navigation.openWebResource
有没有人尝试在使用Xrm.WebApi
打开的网络资源的上下文中使用Xrm.Navigation.openWebResource
?或者有谁知道检索数据是否需要额外的步骤?
更新
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");`
但两者都导致相同的错误