【问题标题】:Dynamics 365 CRM: Sudden JS ErrorDynamics 365 CRM:突然的 JS 错误
【发布时间】:2018-09-30 17:05:55
【问题描述】:

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

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

  • 下面粘贴了完整的响应正文。

  • 下面粘贴了完整的 JSON

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

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()
        })
    }

任何想法、想法或建议将不胜感激。我被难住了。

谢谢, 诺亚

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,
}

错误

    {
    "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()"
    }
    }
    }

【问题讨论】:

    标签: json internet-explorer xmlhttprequest dynamics-crm microsoft-dynamics


    【解决方案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;
    

    }

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2020-06-22
      • 2019-02-25
      • 2021-02-19
      • 2017-07-22
      • 2020-01-17
      • 2021-05-23
      • 2018-09-04
      • 2018-02-07
      相关资源
      最近更新 更多