Синтаксис Join/Filter для указателей активности с использованием fetchxml

У меня есть требование передать оператор выборки для подсетки для использования в CRM 2013. Для этого необходимо получить следующее:

Все действия, касающиеся контактов, которые связаны с контактом через соединение. (Это утверждение получает те)

<?xml version="1.0" encoding="UTF-8"?>
<fetch distinct="true" mapping="logical" output-format="xml-platform" version="1.0">
   <entity name="activitypointer">
      <attribute name="activitytypecode" />
      <attribute name="subject" />
      <attribute name="statecode" />
      <attribute name="modifiedon" />
      <attribute name="instancetypecode" />
      <attribute name="scheduledend" />
      <attribute name="actualend" />
      <attribute name="regardingobjectid" />
      <attribute name="activityid" />
      <order descending="false" attribute="modifiedon" />
      <link-entity name="contact" to="regardingobjectid" from="contactid">
         <link-entity name="connection" to="contactid" from="record1id">
            <filter type="and">
               <condition attribute="record2id" value="someID" uitype="contact" operator="eq" />
            </filter>
         </link-entity>
      </link-entity>
   </entity>
</fetch>

Все действия, касающиеся возможностей, связанных с контактом. ((Это утверждение получает те))

<?xml version="1.0" encoding="UTF-8"?>
<fetch distinct="false" mapping="logical" output-format="xml-platform" version="1.0">
   <entity name="activitypointer">
      <attribute name="activitytypecode" />
      <attribute name="subject" />
      <attribute name="statecode" />
      <attribute name="modifiedon" />
      <attribute name="instancetypecode" />
      <attribute name="scheduledend" />
      <attribute name="actualend" />
      <attribute name="regardingobjectid" />
      <attribute name="activityid" />
      <order descending="false" attribute="modifiedon" />
      <link-entity name="opportunity" to="regardingobjectid" from="opportunityid">
         <filter type="and">
            <condition attribute="customerid" value="someID" uitype="contact" operator="eq" />
         </filter>
      </link-entity>
   </entity>
</fetch>

И все действия, касающиеся самого контакта.


Я пробовал несколько разных комбинаций объединений, но я не уверен, что их расположение или синтаксис верны. Я, к сожалению, удалил эти попытки после того, как все они не дали результатов. Вот одна из последних версий, которые я пробовал, но также не дал результатов.

<?xml version="1.0" encoding="UTF-8"?>
<fetch distinct="false" mapping="logical" output-format="xml-platform" version="1.0">
   <entity name="activitypointer">
      <attribute name="activitytypecode" />
      <attribute name="subject" />
      <attribute name="statecode" />
      <attribute name="modifiedon" />
      <attribute name="instancetypecode" />
      <attribute name="scheduledend" />
      <attribute name="actualend" />
      <attribute name="regardingobjectid" />
      <attribute name="activityid" />
      <order descending="false" attribute="modifiedon" />
      <link-entity name="opportunity" to="regardingobjectid" from="opportunityid">
         <attribute name="name" />
      </link-entity>
      <link-entity name="contact" to="regardingobjectid" from="contactid">
         <link-entity name="connection" to="contactid" from="record1id">
            <attribute name="record1id" />
         </link-entity>
      </link-entity>
      <filter type="or">
         <condition entityname="connection" attribute="record2id" value="&quot; + Xrm.Page.data.entity.getId() + &quot;" uitype="contact" operator="eq" />
         <condition entityname="activitypointer" attribute="regardingobjectid" value="&quot; + Xrm.Page.data.entity.getId() + &quot;" uitype="contact" operator="eq" />
         <condition entityname="opportunity" attribute="customerid" value="&quot; + Xrm.Page.data.entity.getId() + &quot;" uitype="contact" operator="eq" />
      </filter>
   </entity>
</fetch>

Если кто-то может помочь мне с форматированием, я буду благодарен.

Заранее спасибо.

1 ответ

Мне кажется, что хотя теперь вы можете использовать фильтр OR для таблиц в CRM 2013 (ваш синтаксис выглядит правильно), OR не применяется к самой ссылке. В терминах SQL это выглядит так, как будто вы сделали полное соединение между таблицами, а затем поместили логику ИЛИ в оператор WHERE. Если какое-либо из соединений не совпадает, вы не получите результатов.

select *
from activitypointer
join opportunity on ..
join connection on...
join contact on...
WHERE (opportunity.regardingID = SomeID) OR (opportunity.customerid = SomeID) OR (activitypointer.regardingobjectid = SomeID)

В нижнем примере ваша деятельность должна быть связана ОБА с возможностью И с контактом через соединение, и один ИЛИ другой должен соответствовать вашим критериям в фильтре ИЛИ. К сожалению, я не думаю, что вы можете написать желаемую версию, но я не уверен на 100% в этом, поэтому, если кто-то может подтвердить или опровергнуть это, сделайте это. Эта ссылка имеет хороший пример того, что вы можете сделать, используя фильтры OR для разных таблиц.

Другие вопросы по тегам