首页 > 解决方案 > 为什么在 Dynamics 365 中对 html Web 资源使用 http 请求创建注释后会收到 500 内部服务器错误?

问题描述

用户希望从带有使用 html 和 javascript 创建的自定义 Notes 视图的选项卡中创建 Notes(注释)。我已将以下代码添加到资源中,尽管已创建注释并根据需要链接事件,但 Web 资源在表单上返回 500 内部服务器错误。

这是添加的代码:

    <script>
        function addNewNote(title_b, notetext_b) {
            debugger;
            caseId = getUrlParam("id");
            console.log("Case ID: " + caseId);
            console.log("Title: " + title_b);
            console.log("NoteText: " + notetext_b);
            var entity = {};
            entity["objectid_incident@odata.bind"] = "/incidents(" + caseId + ")";
            entity["subject"] = title_b;
            entity["notetext"] = notetext_b;

            var req = new XMLHttpRequest();
            req.open("POST", parent.Xrm.Page.context.getClientUrl() + "/api/data/v9.0/annotations", true);
            req.setRequestHeader("OData-MaxVersion", "4.0");
            req.setRequestHeader("OData-Version", "4.0");
            req.setRequestHeader("Accept", "application/json");
            req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
            req.onreadystatechange = function () {
                debugger;
                if (this.readyState === 4) {
                    req.onreadystatechange = null;
                    if (this.status === 204) {
                        var uri = this.getResponseHeader("OData-EntityId");
                        var regExp = /\(([^)]+)\)/;
                        var matches = regExp.exec(uri);
                        var newEntityId = matches[1];
                    } else {
                        parent.Xrm.Utility.alertDialog(this.statusText);
                    }
                }
            };
            req.send(JSON.stringify(entity));
            parent.Xrm.Page.getControl("WebResource_NotesTabView").refresh();
        }

    </script>
    <form action="" method="get" class="form-newnote">
        <div class="form-newnote">
            <label for="sub">Title </label>
            <input type="text" size="114" name="sub" id="sub" required="true">
        </div>
        <div class="form-newnote">
            <label for="notetext">Note </label>
            <textarea name="notetext" rows="4" cols="114" id="notetext"></textarea>
        </div>
        <div class="form-newnote">
            <button onclick="addNewNote(sub.value, notetext.value)">Add Note</button>
        </div>
    </form>

点击“添加注释”之前: 之前

点击“添加注释”后: after

请记住,注释已成功创建并链接到案例。

标签: javascripthtmlhttpwebrequestdynamics-365

解决方案


我能感觉到 2-3 个问题。

  1. this.status 我认为你应该在这里调试,可能你会返回 200 而不是 204。

  2. 您正在调用 webapi 异步,这应该不是问题,但请尝试将其称为同步。

  3. 如果您说在控制台中创建了日志跟踪并检查您的代码到达的位置。


推荐阅读