Dynamics中FetchXML对特定用户失效问题求助
FetchXML内连接查询权限问题排查与解决
问题现象
- 同角色的非管理员用户中,部分能正常执行FetchXML查询返回数据,部分仅返回
<resultset morerecords="0" /> - 硬编码查询条件后问题依旧,仅分配管理员权限的用户可稳定获取结果
- 无法给所有有问题的用户分配管理员权限
涉及FetchXML代码
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' > <entity name='new_categorias' > <attribute name='new_name' /> <attribute name='new_codigo' /> <attribute name='new_categoriasid' /> <order attribute='new_name' descending='false' /> <link-entity name='new_conveniounitarios' from='new_categoria' to='new_categoriasid' link-type='inner' alias='ab' > <filter type='and' > <condition attribute='new_fechainicio' operator='on-or-after' value='2023-01-01' /> <condition attribute='new_fechainicio' operator='on-or-before' value='2023-12-31' /> <condition attribute='new_convenio' operator='eq' uitype='new_convenios' value='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' /> </filter> </link-entity> </entity> </fetch>
核心原因
问题出在数据权限链上,内连接会同时验证主实体(new_categorias)和关联实体(new_conveniounitarios、new_convenios)的访问权限,即使角色配置相同,也可能因以下细节导致权限差异:
- 关联实体的记录为私有状态,仅创建者或特定共享用户可访问
- 过滤字段(
new_fechainicio、new_convenio)设置了字段级安全,部分用户无读取权限 - 同角色用户被单独调整过权限,或角色对关联实体的权限范围不足(如仅“本地”而非“全局”)
解决步骤
1. 检查关联实体权限配置
- 确认有问题的用户对
new_conveniounitarios和new_convenios实体拥有读取权限,且权限范围覆盖目标记录(建议设置为“全局”或“部门+下级”) - 查看目标
new_conveniounitarios记录的所有权:若为私有,需将其共享给用户,或修改所有权为团队/组织级
2. 排查字段级安全设置
- 进入
new_fechainicio、new_convenio字段的配置页面,检查字段级安全组,确保用户所属组拥有读取权限
3. 调整FetchXML连接类型(可选)
若无法修改权限,可将内连接改为左外连接,并添加关联记录非空条件,确保仅返回符合条件的主实体记录(逻辑与原内连接一致,但绕过部分权限限制):
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' > <entity name='new_categorias' > <attribute name='new_name' /> <attribute name='new_codigo' /> <attribute name='new_categoriasid' /> <order attribute='new_name' descending='false' /> <link-entity name='new_conveniounitarios' from='new_categoria' to='new_categoriasid' link-type='outer' alias='ab' > <filter type='and' > <condition attribute='new_fechainicio' operator='on-or-after' value='2023-01-01' /> <condition attribute='new_fechainicio' operator='on-or-before' value='2023-12-31' /> <condition attribute='new_convenio' operator='eq' uitype='new_convenios' value='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' /> </filter> </link-entity> <filter type='and'> <condition attribute='ab.new_conveniounitariosid' operator='not-null' /> </filter> </entity> </fetch>
4. 验证角色权限一致性
- 检查有问题的用户是否完全继承目标角色的权限,未被单独移除或添加任何权限项
内容的提问来源于stack exchange,提问作者K M
相关产品推荐
相关产品推荐

