Microsoft Dynamics CRM в настоящее время сводит меня с ума (и, к сожалению, я совершенно новичок в этом деле). Я пытаюсь добавить через PHP / SOAP новую запись в учетную запись Microsoft Dynamics CRM 2013, но я не получаю ответов. В соответствии с Блог Кампи тело запроса ADD xml должно содержать тег «create», подобный этому
<create xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
<entity xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
<a:attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<!-- ATTRIBUTE XML GOES HERE!! -->
</a:attributes>
<a:entitystate i:nil="true">
<a:formattedvalues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:id>00000000-0000-0000-0000-000000000000</a:id>
<a:logicalname><!-- ENTITY NAME GOES HERE!! --></a:logicalname>
<a:relatedentities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
</a:relatedentities></a:formattedvalues></a:entitystate></entity>
</create>
У меня уже есть рабочий скрипт загрузки списка элементов с использованием тега «request», поэтому я уверен, что часть «Header» полностью работает, и я могу сосредоточиться на «s: Body».
Я поместил пример фрагмента Campey в тег «Execute-> request» следующим образом. НО это вызывает у меня ошибки. Кажется, связано с атрибутом запроса тега xmlns, но не уверен в этом. Заранее благодарим за вашу драгоценную помощь!
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://schemas.microsoft.com/xrm/2011/Contracts/Services:request.
The InnerException message was 'Error in line 2 position 38.
Element 'http://schemas.microsoft.com/xrm/2011/Contracts/Services:request' contains data from a type that maps to the name 'http://www.w3.org/2005/08/addressing:CreateRequest'.
The deserializer has no knowledge of any type that maps to this name. Consider changing the implementation of the ResolveName method on your DataContractResolver to return a non-null value for name 'CreateRequest' and namespace 'http://www.w3.org/2005/08/addressing'.'. Please see InnerException for more detail
Структура XML
<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request i:type="a:CreateRequest" xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
<create xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
<entity xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
<a:attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:keyvaluepairofstringanytype>
<b:key>name</b:key>
<b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">aaa-test</b:value>
</a:keyvaluepairofstringanytype>
</a:attributes>
<a:entitystate i:nil="true">
<a:formattedvalues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:id>00000000-0000-0000-0000-000000000000</a:id>
<a:logicalname>account</a:logicalname>
<a:relatedentities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
</a:relatedentities></a:formattedvalues></a:entitystate></entity>
</create>
</request>
</Execute>
[РЕШЕНИЕ] ОБНОВЛЕНИЕ ПОСЛЕ ЧАСОВ WTFing
Я до сих пор не знаю, почему, но мне пришлось удалить тег «создать» и использовать просто выполнить-> запрос. Как только я разместил тег «request» с типом CreateRequest, он заработал. Это код на тот случай, если кому-то еще это нужно. Не уверен, что произошла смена структуры XML с CRM 2011 на CRM 2013 или она была плохо документирована. Кстати, большое спасибо за вашу помощь!
<Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
<request i:type='a:CreateRequest' xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts'>
<a:Parameters xmlns:b='http://schemas.datacontract.org/2004/07/System.Collections.Generic'>
<a:KeyValuePairOfstringanyType>
<b:key>Target</b:key>
<b:value i:type='a:Entity'>
<a:Attributes>
<a:KeyValuePairOfstringanyType>
<b:key>name</b:key>
<b:value i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>test1234</b:value>
</a:KeyValuePairOfstringanyType>
</a:Attributes>
<a:EntityState i:nil='true' />
<a:FormattedValues />
<a:Id>00000000-0000-0000-0000-000000000000</a:Id>
<a:LogicalName>account</a:LogicalName>
<a:RelatedEntities />
</b:value>
</a:KeyValuePairOfstringanyType>
</a:Parameters>
<a:RequestId i:nil='true' />
<a:RequestName>Create</a:RequestName>
</request>
</Execute>
Похоже, ты рядом!
Удалить
Выполнить и запросить строки
Вам нужно только <create>
площадь
Таким образом, весь ваш запрос должен выглядеть
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
HEADER GOES HERE
<s:Body>
<create xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
<entity xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
<a:attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:keyvaluepairofstringanytype>
<b:key>name</b:key>
<b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">aaa-test</b:value>
</a:keyvaluepairofstringanytype>
</a:attributes>
<a:entitystate i:nil="true">
<a:formattedvalues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:id>00000000-0000-0000-0000-000000000000</a:id>
<a:logicalname>account</a:logicalname>
<a:relatedentities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
</a:relatedentities></a:formattedvalues></a:entitystate></entity>
</create>
</s:Body>
</s:Envelope>
Других решений пока нет …