2013-03-27 2 views
0

Я использую новую конечную точку 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> 

ответ

1

Код, необходимый для установки C all the SOAP Retrieve multiple via SOAP from JavaScript довольно многословен.

Ваш запрос достаточно прост ... Любая причина, по которой вы не используете вызов OData rest?

+0

Хм, ты прав, я об этом не думал! Я мог бы использовать конечную точку REST. Однако я бы выбрал ответ 'JSON' вместо' OData'. – shytikov

+0

@shytikov OData вернет результаты как JSON. OData - это используемый язык запросов. – Daryl

+0

вы правы, извините, я думал, что «OData» - это уродливый XML, который они отправляют обратно. – shytikov

1

Нет необходимости строить что-то подобное вручную; есть сторонние библиотеки, такие как XrmServiceToolkit, которые могут обрабатывать все материалы SOAP и требуют, чтобы вы предоставили фактический FetchXml. Результат будет возвращен уже разрешенным объектам JavaScript.

+0

Мне не нравится идея использовать больше сторонних библиотек, чем я сейчас использую, но я проверю ее. Спасибо! – shytikov

Смежные вопросы