Синтаксис 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="" + Xrm.Page.data.entity.getId() + "" uitype="contact" operator="eq" />
<condition entityname="activitypointer" attribute="regardingobjectid" value="" + Xrm.Page.data.entity.getId() + "" uitype="contact" operator="eq" />
<condition entityname="opportunity" attribute="customerid" value="" + Xrm.Page.data.entity.getId() + "" 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 для разных таблиц.