Я использую новую конечную точку OrganizationService в MS CRM 2011
- /XRMServices/2011/Organization.svc
.Составление RetrieveMultiple запроса с условием FetchXML
Кажется, что он не поддерживает старые команды Fetch
. И, как я выяснил, я все еще мог использовать запрос fetchXML
, передав его методу RetrieveMultiple
.
В C# это выглядит просто:
string expression = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='systemuser'>
<attribute name='businessunitid' />
<attribute name='systemuserid' />
<order attribute='businessunitid' descending='false' />
<filter type='and'>
<condition attribute='systemuserid' operator='eq-userid' />
</filter>
<link-entity name='businessunit' from='businessunitid' to='businessunitid' alias='ah'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>";
FetchExpression fetch = new FetchExpression(expression);
// let's assume GetOrganisationService will return correct instance of IOrganizationService
IOrganizationService service = GetOrganisationService();
EntityCollection result = service.RetrieveMultiple(fetch);
Но мне нужно, чтобы выполнить то же самое с JavaScript. И я не совсем уверен, как в этом случае можно составить правильный запрос.
Очевидно, что fetchXML
необходимо преобразовать в SOAP
каким-то образом, но я почистил по всему Интернету и SDK и не могу найти способ, как это сделать.
Как я мог бы поставить этот вид запроса:
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='systemuser'>
<attribute name='businessunitid' />
<attribute name='systemuserid' />
<order attribute='businessunitid' descending='false' />
<filter type='and'>
<condition attribute='systemuserid' operator='eq-userid' />
</filter>
<link-entity name='businessunit' from='businessunitid' to='businessunitid' alias='ah'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>
Внутри следующего SOAP
сообщение?
<soap:Body>
<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>
<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:QueryExpression'>
Some magic here
</RetrieveMultiple>
</soap:Body>
Хм, ты прав, я об этом не думал! Я мог бы использовать конечную точку REST. Однако я бы выбрал ответ 'JSON' вместо' OData'. – shytikov
@shytikov OData вернет результаты как JSON. OData - это используемый язык запросов. – Daryl
вы правы, извините, я думал, что «OData» - это уродливый XML, который они отправляют обратно. – shytikov