2017-02-07 17 views
1

Я немного разбираюсь в ExecuteTransactionRequest. Это не то, что я когда-либо использовал, поэтому я очень быстро провел эксперимент, чтобы увидеть, как это работает. Однако при отправке запроса OrganizationService отбрасывает исключение FaultException (см. Ниже). Я считаю, что моя версия CRM не поддерживает этот OrganizationRequest. Хотя я уверен, что у меня есть правильные сборки и версия.FaultException при использовании ExecuteTransactionRequest (CRM 2015)

Может ли кто-нибудь пролить свет на то, что мне не хватает?

CRM Deployment Версия: 7.0.1.129

Организация Версия: 7.0.2.53

Microsoft.Xrm Ассамблеи Версия: 7.0.0.0 (Также случилось с 8.0.0.0)

Необработанное исключение типа «System.ServiceModel.FaultException» произошло в Microsoft.Xrm.Sdk.dll

Дополнительная информация: Форматировщик бросил исключение при попытке десериализовать сообщение: Был ошибка при попытке параметра десериализации http://schemas.microsoft.com/xrm/2011/Contracts/Services:request. Сообщение InnerException было «Ошибка в строке 1 позиция 451. Элемент 'http://schemas.microsoft.com/xrm/2011/Contracts/Services:request' содержит данные от типа, который отображается на имя 'http://schemas.microsoft.com/xrm/2011/Contracts:ExecuteTransactionRequest'. Deserializer не знает ни одного типа, который соответствует этому имени. Рассмотрите возможность изменения реализации метода ResolveName на вашем DataContractResolver, чтобы вернуть ненулевое значение для имени 'ExecuteTransactionRequest' и пространство имен 'http://schemas.microsoft.com/xrm/2011/Contracts'. '. Пожалуйста, см. InnerException для получения более подробной информации.

CrmConnection connection = CrmConnection.Parse(GetCrmConnectionString("unmanaged")); 
IOrganizationService orgService = new OrganizationService(connection); 

ExecuteTransactionRequest transactionRequest = new ExecuteTransactionRequest() 
{ 
    ReturnResponses = true, 
    Requests = new OrganizationRequestCollection() 
}; 

Entity newContact = new Entity("contact"); 
newContact["firstname"] = "Stack"; 
newContact["lastname"] = "Overflow"; 

CreateRequest createRequest = new CreateRequest() 
{ 
    Target = newContact 
}; 

transactionRequest.Requests.Add(createRequest); 

ExecuteTransactionResponse transactionResponse = (ExecuteTransactionResponse)orgService.Execute(transactionRequest); 

ответ

1

Update

Быстрый взгляд на код, посмотрел, как это было из-за CreateRequest не добавляется в коллекцию. После ваших комментариев и двойной проверки версии организации crm вы находитесь на CRM 2015 (не на обновлении 1). ExecuteTransactionRequest поддерживается только компаниями CRM 2015 update 1 (версия 7.1.XXX) и выше (версия 8.0.XXX). К сожалению, ваш запрос не будет работать, пока, по крайней мере, обновление 2015 года не будет применено к организации.


Вы не добавить свой создать запрос на ExecuteTransactionRequest - коллекции Requests. Пустая коллекция запросов вызывает наиболее вероятные исключения.

ExecuteTransactionRequest transactionRequest = new ExecuteTransactionRequest() 
{ 
    ReturnResponses = true, 
    Requests = new OrganizationRequestCollection() 
}; 

Entity newContact = new Entity("contact"); 
newContact["firstname"] = "Stack"; 
newContact["lastname"] = "Overflow"; 

CreateRequest createRequest = new CreateRequest() 
{ 
    Target = newContact 
}; 

transactionRequest.Requests.Add(createRequest); //missing 

ExecuteTransactionResponse transactionResponse = (ExecuteTransactionResponse)orgService.Execute(transactionRequest); 
+0

Спасибо за место. Это было просто потому, что я немного переработал код, чтобы сделать его более удобным для Stack и забыл добавить его обратно. Извините за путаницу! –

+0

Итак, вы по-прежнему получаете сообщение об ошибке даже после добавления запроса на создание запроса на запрос запроса транзакции? – dynamicallyCRM

+0

Да, к сожалению –