如何在Dataverse中编写FetchXml解决关联实体重复数据问题
解决方案
1. 修改FetchXml避免重复记录(无需额外Dataverse连接器)
你不需要新增Dataverse连接器,调整现有FetchXml就能实现需求。核心思路是通过聚合函数直接判断是否存在关联的annotation记录,同时保证每条checklistquestionresponse只返回一条结果:
优化后的FetchXml代码
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" aggregate="true"> <entity name="checklistquestionresponse"> <attribute name="checklistquestionresponseid" alias="response_id" groupby="true" /> <attribute name="title" alias="response_title" groupby="true" /> <attribute name="instructions" alias="response_instructions" groupby="true" /> <attribute name="notes" alias="response_notes" groupby="true" /> <attribute name="checklist" alias="response_checklist" groupby="true" /> <link-entity name="annotation" from="objectid" to="checklistquestionresponseid" link-type="outer" alias="ae"> <attribute name="annotationid" alias="has_annotation" aggregate="count" /> </link-entity> <link-entity name="checklistasset" from="checklistassetid" to="checklistasset" visible="false" link-type="outer" alias="checklistasset"> <attribute name="name" alias="asset_name" groupby="true" /> </link-entity> <order attribute="title" descending="false" /> <filter type="and"> <condition attribute="checklist" operator="eq" uitype="checklist" value="@{triggerOutputs()?['body/checklistid']}" /> <filter type="or"> <condition attribute="notes" operator="not-null" /> <condition entityname="ae" attribute="annotationid" operator="not-null" /> </filter> <filter type="or"> <condition attribute="acceptableunacceptablerange" operator="eq" value="Acceptable" /> <condition attribute="responsevalue" operator="eq" value="Acceptable" /> </filter> </filter> </entity> </fetch>
关键修改说明:
- 开启
aggregate="true"进入聚合模式,按checklistquestionresponse的核心字段分组(groupby="true"),确保每条主记录只返回一次 - 对关联的
annotationid使用aggregate="count",通过别名has_annotation返回关联附件的数量——值大于0即表示存在关联记录 - 修正了原代码中
triggerOutputs()的语法错误(引号与括号不匹配问题)
如果仅需要过滤出存在关联annotation的记录,不需要显示标记,也可以用exists条件替代外连接:
<filter type="and"> <!-- 保留原有过滤条件 --> <condition entityname="ae" attribute="annotationid" operator="exists" /> </filter>
但该方案仅能筛选记录,无法在结果中直接体现“是否有附件”的标记。
2. HTML表格中的校验实现
拿到聚合后的查询结果后,按以下步骤在Power Automate中处理:
- 添加选择动作,将查询结果映射为表格需要的字段
- 对“是否关联附件”列,使用表达式判断:
if(greater(item()?['has_annotation'], 0), '是', '否') - 其他字段直接映射对应的聚合别名(如
item()?['response_title']对应原title字段)
- 对“是否关联附件”列,使用表达式判断:
- 将选择动作的输出传入创建HTML表格动作,即可生成包含校验标记的表格
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

