【发布时间】:2018-04-06 06:10:00
【问题描述】:
我在 Dynamics CRM 中使用 JavaScript 调用全局自定义操作时遇到问题。
In CRM I created this global action that takes an in parameter and returns an out parameter。我已确认该操作已激活且有效。当我尝试使用 JavaScript 调用它时,问题就出现了。
我的 JavaScript 代码如下:
callCustomAction: function (actionName, actionParameters) {
var result = null;
var req = new XMLHttpRequest();
req.open("POST", encodeURI(Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + actionName), false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4) {
req.onreadystatechange = null;
if (this.status == 200) {
result = JSON.parse(this.response);
} else {
var error = JSON.parse(this.response).error;
alert(error.message);
}
}
};
req.send(window.JSON.stringify(actionParameters));
return result;
}
现在,对我来说,这看起来是正确的,但我遇到了与 URL 相关的问题,该问题目前无处可去。我到处查看全局操作的 URL 只是组织 URL,后跟“/api/data/v8.2/”和我的操作名称,但对我来说它不起作用,我不知道为什么。
已解决 问题是混合使用 EntityReferences 和字符串作为输出参数,这使得我的操作不会显示在元数据下
【问题讨论】:
-
你有什么具体的错误吗?您的问题非常不清楚到底是什么问题。 “导致无处可去的 URL”不是问题 - 这是一个 POST 操作,因此您不会通过在浏览器中发布链接从 GET 获得任何响应...当您执行 JS 时从服务器返回什么错误?
-
当我做警报时(this.status);如果这就是你的意思,我会得到 404。这就是为什么我认为我的 URL 是错误的。
-
当您导出元数据(自定义 -> 开发人员资源 -> 下载 Odata 元数据)时,您的自定义操作是否可用并且输入/输出参数是否正常?另外 - 你确定这没有被一些跨站点脚本策略切断,也许你通过 IP 连接到你的 CRM 并通过完整的域名调用 API(我看到这个错误太多次了......)
-
同时做 alert(this.status) 并不是真正的调试。从您使用的任何浏览器附加一些开发人员工具调试器并检查完整的错误消息(即使没有调试器,您也应该能够在开发人员工具的网络选项卡中看到它)
-
我下载了 Odata 元数据,但找不到我的操作。这可能是导致问题的原因吗?不了解跨站点脚本策略。
标签: javascript dynamics-crm crm