【问题标题】:Calling global custom action using JavaScript in Dynamics CRM在 Dynamics CRM 中使用 JavaScript 调用全局自定义操作
【发布时间】: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


【解决方案1】:

无法使用 Web API 调用具有关联输出参数的全局操作。对于没有输出参数的操作,情况并非如此。

这是因为状态码有时为 200,有时不同。我们注意到了这个错误并观察到它只发生在具有输出参数的操作中。我们还注意到这种情况在某些时候发生,而不是经常发生,因为有时你会得到输出,但有时不会。

作为一种解决方法,您需要使用传统的 SOAP 查询并执行工作流,然后解析响应。

希望 MS 尽快解决这个问题

【讨论】:

  • 从来没有遇到过你描述的这个问题,我经常使用动作,有或没有输出参数,有复杂的类型等。有时需要重新部署动作,但一旦你能够调用它们 - 它们工作没有问题
  • Pawel,您是否尝试过添加 Entity/EntityReference/EntityCollection 参数以及字符串/整数等简单参数?试试看,你的动作会神秘地消失。检查这个 - butenko.pro/2016/09/23/action-not-available-webapi
猜你喜欢
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多