Я использую PHP для подключения к IFD Dynamics 2011 и успешно аутентифицирую и извлекаю контакты из моего веб-приложения.
Однако я пытаюсь обновить контакт.
Мой запрос SOAP (ниже) возвращает «Плохой запрос», и, к сожалению, у меня нет достаточного доступа администратора к серверу, чтобы включить более полезные отчеты об ошибках. Может ли кто-нибудь заметить что-то очевидное в этом XML, что может быть проблемой?
$request = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
'.$this->crmAuth->GetSoapHeaderOnPremise("Update").'
<s:Body>
<Update xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<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>contactid</b:key>
<b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">'.$contactid.'</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>firstname</b:key>
<b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">'.$firstname.'</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>lastname</b:key>
<b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">'.$lastname.'</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>'.$contactid.'</a:Id>
<a:LogicalName>contact</a:LogicalName>
<a:RelatedEntities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
</entity>
</Update>
</s:Body>
</s:Envelope>'
Функция getSoapHeaderOnPremise возвращает рабочие заголовки аутентификации для запросов retrieve / retrieveMultiple. Единственное отличие здесь заключается в том, что указывается метод Update:
<a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Update</a:Action>
Это дикая догадка, я не выполнил подобное обновление.
Удалить этот бит,
<a:KeyValuePairOfstringanyType>
<b:key>contactid</b:key>
<b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">'.$contactid.'</b:value>
</a:KeyValuePairOfstringanyType>
Это говорит о том, что вы пытаетесь установить поле идентификатора записи, что вы обычно не делаете.
У вас есть этот бит, который, кажется, связывает ваше обновление с одной записью, поэтому я подозреваю, что вышеупомянутое не требуется.
<a:Id>'.$contactid.'</a:Id>
Никогда не использовал его, но похоже, что есть проект на Git иметь дело с этим.