【问题标题】:Can't close Incident through Web API client side无法通过 Web API 客户端关闭事件
【发布时间】:2018-07-09 12:37:48
【问题描述】:

在 Dynamics 365 上,我们正在尝试使用客户端 Web API 关闭事件。

查看文档(用 C# 编写)后,我们了解到我们首先需要创建一个 IncidentResolution 活动,我们成功地做到了。 但是,我们不知道如何完全关闭 Incident 实体。

我假设我们需要更新记录的 stateCode 和 statusCode。但是,如果我这样做,ajax 总是返回 500 错误。

其他更新工作正常。

这里有什么我们遗漏的吗?

var entity = {};
entity.statecode = 1; // Resolved
entity.statuscode = 5; // Problem Solved
entity.title = "Title of my case";

var req = new XMLHttpRequest();
req.open("PATCH", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents(Case's guid)", 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() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 204) {
            //Success - No Return Data - Do Something
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send(JSON.stringify(entity)); 

【问题讨论】:

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


    【解决方案1】:

    您必须使用CloseIncident ActionPOST 方法来执行此操作。使用PATCH方法不是一个简单的更新请求,基本上caseclosure会创建一个Incident Resolution实体记录。

    通常我会使用 CRM REST 构建器编写请求,即使在这种情况下 sn-p 没有成功执行。完整的工作代码示例:

    var incidentresolution = {
        "subject": "Put Your Resolve Subject Here",
        "incidentid@odata.bind": "/incidents(<GUID>)", //Replace <GUID> with Id of case you want to resolve
        "timespent": 60, //This is billable time in minutes
        "description": "Additional Description Here"
    };
    
    var parameters = {
        "IncidentResolution": incidentresolution,
        "Status": -1
    };
    
    var context;
    
    if (typeof GetGlobalContext === "function") {
        context = GetGlobalContext();
    } else {
        context = Xrm.Page.context;
    }
    
    var req = new XMLHttpRequest();
    req.open("POST", context.getClientUrl() + "/api/data/v8.2/CloseIncident", 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 () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 204) {
                //Success - No Return Data - Do Something
            } else {
                var errorText = this.responseText;
                //Error and errorText variable contains an error - do something with it
            }
        }
    };
    req.send(JSON.stringify(parameters));
    

    Reference

    【讨论】:

    • 我已经找到了这个 sn-p 但由于上下文变量它从未工作过。我删除了它,它运行良好。但是,我在 Rest 构建器中找不到 CloseIncident。正常吗?
    • @PierreBurton 从动作列表中选择“动作”,选择“同步”,不要选择“主要实体”,它被列为全局动作..
    • 你知道如何“取消”一个案件吗,上面的例子是为了解决案件。
    猜你喜欢
    • 2021-04-25
    • 2011-02-10
    • 2020-02-23
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多