Как связать сущности в запросе CRM 4.0 с помощью веб-службы и вернуть столбцы из обоих? - PullRequest
2 голосов
/ 05 марта 2009

У меня есть запрос, который мне нужно выполнить с CRM. Это эквивалентно следующему в SQL:

SELECT A.*, B.*
FROM Table1 A INNER JOIN Table2 B
ON A.ID = B.ID

Я создал запрос и добавил ссылку следующим образом:

link.JoinOperator = JoinOperator.Inner;
link.LinkFromEntityName = EntityName.new_Table1.ToString();
link.LinkFromAttributeName = "new_Table1ID";
link.LinkToEntityName = EntityName.new_Table2.ToString();
link.LinkToAttributeName = "new_Table2ID";
query.LinkEntities = new LinkEntity[] { link };

Однако он возвращает только столбцы из new_Table1.

Есть ли способ связать таким образом и вернуть столбцы из обеих сущностей, не создавая два запроса?

Ответы [ 2 ]

2 голосов
/ 05 марта 2009

QueryExpression не поддерживает это. Вам нужно будет использовать Fetch XML.

Из 'Использование FetchXML' в SDK - вы получите что-то вроде этого:

<fetch mapping='logical'>
      <entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
   <filter type='and'>
      <condition attribute='lastname' operator='ne' value='Cannon' />
   </filter>
   <attribute name='name' />
</link-entity>
      </entity>
   </fetch>

Если вы еще не использовали FetchXML, я настоятельно рекомендую http://www.stunnware.com/?area=products&group=swtools4 для сборки и тестирования FetchXML. Таким образом, вы можете получить предварительный просмотр вашего Result XML.

0 голосов
/ 08 марта 2009

Вы также можете использовать LinqtoCRM . Запрос, извлекающий роли системных пользователей, выглядит следующим образом:

var res = from u in p.Linq()
        join sr in p.Linq() on u.systemuserid.Value equals sr.systemuserid.Value
        join r in p.Linq() on sr.roleid.Value equals r.roleid.Value
        select new { u.fullname, r.name };

Это работает как для нормальных, так и (с CRMMetal) отношений «многие ко многим». Вы можете посмотреть веб-трансляцию здесь .

...