Dynamics 365 CRM:突然的JS错误

Red*_* 11 6 internet-explorer microsoft-dynamics json xmlhttprequest dynamics-crm

在本地使用Dynamics 365版本1612(8.2.2.112).在Quote表单上,我修改了Activate Quote调用的操作以创建自定义实体(Deal)记录,然后导航到新创建的记录.这在所有浏览器中都运行良好,直到2周前.现在,它在IE中不起作用(客户端首选 - 但在Chrome,Firefox和Edge中工作),我得到的是一些通用的JSON错误."无效的JSON.在JSON内容中无法识别令牌."

我添加的调试数量似乎没有增加任何清晰度.我在XMLHttpRequest上的IE中遇到400错误,地址是 https://xxx.xxx.com/CRM/api/data/v8.2/quotes(04224AF9-DD70-E811-8123-000D3A02DFDB)/Microsoft.Dynamics.CRM .new_SubmitQuote

  • 完整的响应主体粘贴在下面.

  • 完整的JSON粘贴在下面

这是JS调用操作(new_SubmitQuote)来创建新的Deal实体记录,然后导航到该新记录.

n.xxx_submitQuote=function(n){
    r.showXrmProgressIndicator("Submitting, please wait...");
     u.executeBoundAction("quotes",n,"new_SubmitQuote").then(function(n){
        t.Utility.openEntityForm("sut_deal",n.sut_dealid,null,null)}).catch(r.logError).then(function(){
            r.closeXrmProgressIndicator()
        })
    }
Run Code Online (Sandbox Code Playgroud)

任何想法,想法或建议将不胜感激.我很难过.

谢谢,诺亚

JSON

{  
   "@odata.context":"https://xxx.xxx.com/CRM/api/data/v8.2/$metadata#quotes/$entity",
   "@odata.etag":"W/\"54328330\"",
   "new_spread":95903.0200,
   "new_amount10percent":310777.7900,
   "new_revenue10":777.79,
   "new_paymentcount_date":"2018-06-19T00:53:29Z",
   "_pricelevelid_value":"bfa9dc95-dbcd-e611-80d7-000d3a01f3fc",
   "exchangerate":1.0000000000,
   "totaldiscountamount":0.0000,
   "name":"100026",
   "totallineitemamount":0.0000,
   "_transactioncurrencyid_value":"9107a2c3-bab1-e611-80d2-000d3a01f3fc",
   "_owninguser_value":"a9c113ac-d532-e811-8119-000d3a02dfdb",
   "totalamount":0.0000,
   "_ownerid_value":"a9c113ac-d532-e811-8119-000d3a02dfdb",
   "versionnumber":54328330,
   "quoteid":"04224af9-dd70-e811-8123-000d3a02dfdb",
   "totallineitemdiscountamount":0.0000,
   "timezoneruleversionnumber":0,
   "totalamountlessfreight_base":0.0000,
   "statuscode":1,
   "createdon":"2018-06-15T20:52:12Z",
   "totaltax_base":0.0000,
   "totallineitemamount_base":0.0000,
   "totalamount_base":0.0000,
   "modifiedon":"2018-06-15T20:53:23Z",
   "totaltax":0.0000,
   "totaldiscountamount_base":0.0000,
   "quotenumber":"QUO-38015-F3D2B8",
   "_modifiedby_value":"a9c113ac-d532-e811-8119-000d3a02dfdb",
   "revisionnumber":0,
   "_createdby_value":"a9c113ac-d532-e811-8119-000d3a02dfdb",
   "pricingerrorcode":0,
   "totallineitemdiscountamount_base":0.0000,
   "statecode":0,
   "_owningbusinessunit_value":"1a1ad33f-bab1-e611-80d2-000d3a01f3fc",
   "willcall":false,
   "_customerid_value":"7a60bf77-dd70-e811-8123-000d3a02dfdb",
   "billto_addressid":null,
   "discountpercentage":null,
   "shipto_composite":null,
   "onholdtime":null,
   "billto_line2":null,
   "closedon":null,
   "paymenttermscode":null,
   "freightamount_base":null,
   "_modifiedonbehalfby_value":null,
   "freightamount":null,
   "billto_city":null,
   "_campaignid_value":null,
   "shipto_line1":null,
   "_contactid_value":null,
   "requestdeliveryby":null,
   "freighttermscode":null,
   "billto_stateorprovince":null,
   "effectivefrom":null,
   "shipto_line3":null,
   "discountamount_base":null,
   "billto_line3":null,
   "shipto_telephone":null,
   "shipto_contactname":null,
   "expireson":null,
   "shipto_freighttermscode":null,
   "shipto_line2":null,
   "shipto_addressid":null,
   "_opportunityid_value":null,
   "shipto_fax":null,
   "shipto_country":null,
   "shipto_stateorprovince":null,
   "billto_composite":null,
   "billto_line1":null,
   "billto_contactname":null,
   "billto_telephone":null,
   "shipto_city":null,
   "_owningteam_value":null,
   "discountamount":null,
   "description":null,
   "shippingmethodcode":null,
   "processid":null,
   "_accountid_value":null,
   "_slainvokedid_value":null,
   "stageid":null,
   "traversedpath":null,
   "billto_postalcode":null,
   "utcconversiontimezonecode":null,
   "shipto_name":null,
   "overriddencreatedon":null,
   "billto_fax":null,
   "effectiveto":null,
   "importsequencenumber":null,
   "_new_createdby_value":null,
   "shipto_postalcode":null,
   "lastonholdtime":null,
   "billto_name":null,
   "_slaid_value":null,
   "_createdonbehalfby_value":null,
   "billto_country":null,
}
Run Code Online (Sandbox Code Playgroud)

错误

    {
    "error":{
    "code":"","message":"Invalid JSON. A token was not recognized in the JSON content.",
    "innererror":{
    "message":"Invalid JSON. A token was not recognized in the JSON content.","type":"Microsoft.Crm.CrmHttpException","stacktrace":"
    at Microsoft.Crm.Extensibility.OData.CrmODataUtilities.ValidateInputParameters(ModelStateDictionary controllerModelState)
    at Microsoft.Crm.Extensibility.OData.ActionController.PostBoundAction(String entityName, String key, String operationName, ODataUntypedActionParameters parameters)
    at lambda_method(Closure , Object , Object[] )
    at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
    at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
    --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Web.Http.Controllers.ActionFilterResult. <ExecuteAsync>d__2.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
    }
    }
    }
Run Code Online (Sandbox Code Playgroud)

小智 1

也许因为您使用的是 JS 承诺,某些版本的 IE 引用mozilla.org caniuse.com可能不支持该承诺,但是您可以通过尝试使用回调参数的常规操作调用来打开实体表单来解决此问题,请检查下面的示例,考虑更改API版本。

function ExecuteAction(entitySet, entityId, actionName, Parameters, successCallBack, ErrorCallBack, isAsync) {
debugger;
var clientUrl = Xrm.Page.context.getClientUrl();
var isAsync = isAsync || false;
var result = {};
entityId = entityId.replace('{', '').replace('}', '');
var req = new XMLHttpRequest();
req.open("POST", clientUrl + "/api/data/v8.1/" + entitySet + "(" + entityId + ")/Microsoft.Dynamics.CRM." + actionName, isAsync);
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 /* complete */) {
        req.onreadystatechange = null;
        var s = this.status;
        if (s >= 200 && s < 300) { //success 
            result.status = true;
            result.data = this.response;
            if (successCallBack) 
                successCallBack();

        } else if (s >= 400 && s < 500) { // client error 
            result.status = false;
            console.log("Client error");
            result.error = JSON.parse(this.response).error;
            console.log(result.error);
            console.log(result.error.message);
            if (ErrorCallBack)
                ErrorCallBack(result);


        } else if (s >= 500) { //server error 
            result.status = false;
            console.log("Server error");
            result.error = JSON.parse(this.response).error;
            console.log(result.error);
            console.log(result.error.message);
            if (ErrorCallBack) 
                ErrorCallBack(result);

        }

if (Parameters == "" || Parameters == null) {
    req.send();
} else {
    req.send(JSON.stringify(Parameters));
}

return result;
Run Code Online (Sandbox Code Playgroud)

}