Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamics 365 CRM: Sudden JS Error

Using Dynamics 365 Version 1612 (8.2.2.112) on-premises. On the Quote form, I have modified the action called by the Activate Quote to create a custom entity (Deal) record and then navigate to the newly created record. This worked perfectly fine in all browsers until 2 weeks ago. Now, it doesn't work in IE (client preferred - but does work in Chrome, Firefox and Edge) and all I get is some generic JSON error. "Invalid JSON. A token was not recognized in the JSON content."

No amount of debugging that I add seems to add any clarity. I am getting a 400 error in IE on the XMLHttpRequest at https://xxx.xxx.com/CRM/api/data/v8.2/quotes(04224AF9-DD70-E811-8123-000D3A02DFDB)/Microsoft.Dynamics.CRM.new_SubmitQuote

  • The full Response Body is pasted below.

  • The full JSON is pasted below

This is the JS that calls the action (new_SubmitQuote) to create the new Deal entity record and then navigate to that new record.

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

Any thoughts, ideas or suggestions would be greatly appreciated. I am stumped.

Thanks, Noah

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

    {
    "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()"
    }
    }
    }
like image 568
Red Knight 11 Avatar asked Jun 19 '18 15:06

Red Knight 11


People also ask

How do I add JavaScript Web Resources to Dynamics 365?

To add a web resource, select the tab (for example, General or Notes) you would like to insert it on, and then on the Insert tab, select Web Resource. To edit a Web resource, select a form tab and the web resource that you want to edit, and then on the Home tab, select Change Properties.

What is JavaScript in CRM?

In addition to being used in Form Event Programming, JavaScript is used in other applications of CRM such as − Open Forms, Views and Dialogs with a unique URL. Using OData and SOAP endpoints to interact with web services. Referencing JavaScript code inside other Web Resources (such as HTML web resources).

Can d365 Action call another action?

You can call actions: From code that executes within a plug-in or custom workflow. From a command that is placed in the application and executes the operation using JavaScript code. From an integration with another system that uses the Dynamics 365 Customer Engagement (on-premises) web services.


1 Answers

Maybe because you are using JS promises which may not be supported by some versions of IE referring mozilla.org caniuse.com, however you may workaround it by trying regular action call with callback parameters for opening the entity form, check sample below, consider changing API version.

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;

}

like image 103
Muhammed Saad Avatar answered Sep 17 '22 16:09

Muhammed Saad