Использование Dynamics 365 версии 1612 (8.2.2.112) в локальной среде. В форме Quote я изменил действие, вызываемое Activate Quote, чтобы создать запись настраиваемого объекта (Deal), а затем перейти к вновь созданной записи. Еще две недели назад это прекрасно работало во всех браузерах. Теперь это не работает в IE (предпочтительнее для клиента, но работает в Chrome, Firefox и Edge), и все, что я получаю, - это общая ошибка JSON. «Недействительный JSON. Токен не был распознан в содержимом JSON».
Никакая отладка, которую я добавляю, не добавляет ясности. Я получаю сообщение об ошибке 400 в IE при запросе XMLHttpRequest по адресу https://xxx.xxx.com/CRM/api/data/v8.2/quotes(04224AF9-DD70-E811-8123-000D3A02DFDB)/Microsoft.Dynamics.CRM.new_SubmitQuote
Полный текст ответа вставлен ниже.
Полный JSON вставлен ниже
Это JS, который вызывает действие (new_SubmitQuote) для создания новой записи сущности сделки и перехода к этой новой записи.
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()"
}
}
}
Возможно, потому что вы используете JS-обещания, которые могут не поддерживаться некоторыми версиями IE, ссылающимися на mozilla.orgcaniuse.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.info("Client error");
result.error = JSON.parse(this.response).error;
console.info(result.error);
console.info(result.error.message);
if (ErrorCallBack)
ErrorCallBack(result);
} else if (s >= 500) { //server error
result.status = false;
console.info("Server error");
result.error = JSON.parse(this.response).error;
console.info(result.error);
console.info(result.error.message);
if (ErrorCallBack)
ErrorCallBack(result);
}
if (Parameters == "" || Parameters == null) {
req.send();
} else {
req.send(JSON.stringify(Parameters));
}
return result;
}