我正在对ExecuteTransactionRequest进行一些技术调查。这不是我以前用过的东西所以我敲了一个非常快速的实验只是为了看它是如何工作的。但是,在发送请求时,OrganizationService会抛出FaultException(下面)。我认为正在发生的是我的CRM版本不支持OrganizationRequest。虽然我很确定我有正确的程序集和版本。
任何人都可以对我失踪的内容有所了解吗?
CRM部署版本: 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'。 反序列化器不知道映射到此名称的任何类型。 考虑更改您的ResolveName方法的实现 DataContractResolver返回name的非null值 '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);
答案 0 :(得分:1)
<强>更新强>
快速查看代码,看起来是因为CreateRequest
没有添加到集合中。在您发表评论并仔细检查crm组织版本后,您将进入CRM 2015(而非更新1)。只有CRM 2015更新1(版本7.1.XXX)和更高版本(版本8.0.XXX)支持ExecuteTransactionRequest。不幸的是,您的查询在至少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);