Мне нужно добавить несколько связанных сущностей в запрос SOAP в Dynamics 365 CRM (версия, о которой он сообщает, Version 1612 (8.2.1.176) (DB 8.2.1.176)
). Клиентская реализация находится на PHP.
С помощью проб и ошибок и множества примеров я смог составить что-то вроде следующего тела запроса. (Я не уверен, что это лучший способ структурировать запрос; кажется, есть несколько других, включая <fetch>
, но этот пока работает.)
<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:si="http://www.w3.org/2001/XMLSchema-instance">
<request xmlns:c="http://schemas.microsoft.com/xrm/2011/Contracts" si:type="c:RetrieveMultipleRequest">
<c:Parameters xmlns:c2="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<c:KeyValuePairOfstringanyType>
<c2:key>Query</c2:key>
<c2:value si:type="c:QueryExpression">
<c:ColumnSet>
<c:AllColumns>true</c:AllColumns>
<c:Columns/>
</c:ColumnSet>
<c:EntityName>entity1</c:EntityName>
<c:LinkEntities>
<c:LinkEntity>
<c:LinkFromAttributeName>entity2id</c:LinkFromAttributeName>
<c:LinkFromEntityName>entity1</c:LinkFromEntityName>
<c:LinkToAttributeName>entity2id</c:LinkToAttributeName>
<c:LinkToEntityName>entity2</c:LinkToEntityName>
<c:JoinOperator>Inner</c:JoinOperator>
<c:LinkEntities>
<c:LinkEntity>
<c:LinkFromAttributeName>entity3id</c:LinkFromAttributeName>
<c:LinkFromEntityName>entity2</c:LinkFromEntityName>
<c:LinkToAttributeName>entity3id</c:LinkToAttributeName>
<c:LinkToEntityName>entity3</c:LinkToEntityName>
<c:JoinOperator>Inner</c:JoinOperator>
</c:LinkEntity>
</c:LinkEntities>
</c:LinkEntity>
</c:LinkEntities>
<c:Orders>
<c:OrderExpression>
<c:AttributeName>name</c:AttributeName>
<c:OrderType>Ascending</c:OrderType>
</c:OrderExpression>
</c:Orders>
<c:PageInfo>
<c:Count>1</c:Count>
<c:PageNumber>1</c:PageNumber>
</c:PageInfo>
</c2:value>
</c:KeyValuePairOfstringanyType>
</c:Parameters>
<c:RequestName>RetrieveMultiple</c:RequestName>
</request>
</Execute>
(В этом случае связь выглядит как 1: n от entity1 к entity2 и n: 1 от entity2 к entity3. Фактически, entity2 содержит только внешние ключи для соединения entity1 и entity3 с некоторыми дополнительными атрибутами.)
Этот запрос, по-видимому, выполняется правильно (он выполняется без ошибок и ограничивает набор результатов в соответствии с внутренним соединением), но я получаю только столбцы из первого типа сущности.
Как мне на самом деле получить атрибуты объединенных сущностей?
Редактировать:
Я попытался добавить к элементу <c:LinkEntity>
каждое из следующих действий:
<c:ColumnSet>
<c:AllColumns>true</c:AllColumns>
</c:ColumnSet>
<c:Columns>
<c:AllColumns>true</c:AllColumns>
</c:Columns>
<c:Columns>
<a:string xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
attribute1
</a:string>
</c:Columns>
<c:ColumnSet>
<c:Columns>
<a:string xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
attribute1
</a:string>
</c:Columns>
</c:ColumnSet>
К сожалению, хотя ни один из них не вызвал ошибки, они также не изменили вывод.