通过JavaScript调用自定义操作时出现错误的请求错误

时间:2018-12-03 00:26:41

标签: javascript dynamics-crm dynamics-crm-365

我在CRM 365上创建了一个自定义操作,该操作具有一个类型为实体引用的输入参数,并且它引用了用户实体,因此我尝试将输入参数更改为另一种类型,并且效果很好。所以我认为问题出在我传递实体参考值的方式上,我试图更改它,但是我没有任何运气,所以有人可以告诉我下面的代码有什么问题吗?

function CreateBlockHistory() {
    var Id = Xrm.Page.data.entity.getId();
    Id = Id.replace("{", "").replace("}", "");
    var data = {
        "BlockedBy": {
            "ohd_blockedby": Xrm.Page.context.getUserId().replace("}", "").replace("{", ""),
            "@odata.type": "Microsoft.Dynamics.CRM.systemuser"
        }
    };
    var serverURL = window.parent.Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest();
    req.open("POST", serverURL + "/api/data/v8.1/new_units(" + Id + ")/Microsoft.Dynamics.CRM.ohd_ActionTest", 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 /* request completed */) {
            req.onreadystatechange = null;
            if (this.status == 200 /* response ready */) {
                var data = JSON.parse(this.response);
            }
            else {
                var error = JSON.parse(this.response).error;
            }
        }
    };
    req.send(window.JSON.stringify(data));
}

1 个答案:

答案 0 :(得分:0)

  1. 400 Bad request开始-这是一个非常普通的无用错误,而不是依靠它-尝试通过传递硬编码的guid参数以查看执行状态,在浏览器控制台或CRM REST Builder中运行相同的代码段。您也可以调试
  2. 我看到您的XMLHttpRequest正在同步运行(bool参数为false),将其切换为“异步”并查看
  3. 我还看到您有时会使用Xrm之类的混合方法来获得window.parent上下文,有时甚至会直接。 window.JSON。如果此操作不是以任何实体形式在Web资源中执行的,则对其进行适当修复
  4. 您可以在该自定义操作消息,配置文件/调试中注册插件,并查看任何线索