如何通过代码关联Dynamics CRM VOC中ResponseAction与需显隐的问卷问题?
搞定Dynamics CRM VOC里ResponseAction和问卷问题的关联
兄弟,你说的这个情况我太熟了——ResponseAction实体本身真的不会直接带着它要控制的问卷问题引用,你得结合另外几个实体的数据才能把这层关联打通,毕竟这是Dynamics CRM VOC里典型的关联式数据设计。
核心关联逻辑拆解
先给你理清楚关键的几个实体和它们的关系:
msdyn_responseaction:就是你现在拿到的响应动作实体,负责定义「显示/隐藏」这个动作,但它本身只存动作规则,不直接绑问题msdyn_responserouting:你已经在使用的路由对象,它是ResponseAction的父容器,每个动作都属于某条路由msdyn_surveyquestion:真正存储问卷问题的实体,也是你要找的目标
具体怎么关联?
- 首先,每个
msdyn_responseaction都会通过msdyn_responseroutingid字段绑定到对应的msdyn_responserouting,这部分你应该已经有了 - 重点来了:ResponseAction要控制的问题,是通过**
msdyn_targetquestion**字段关联到msdyn_surveyquestion的!但问题是,默认查询ResponseAction的时候,这个关联字段不会自动返回,你得主动去加载它
实操方法:如何获取关联数据?
你需要在查询msdyn_responseaction的时候,用扩展查询把关联的问题数据拉回来:
- 如果用Web API的话,请求URL要加上
$expand参数,比如:
这样返回的ResponseAction对象里,就会包含GET [你的组织URI]/api/data/v9.2/msdyn_responseactions?$expand=msdyn_targetquestion&$filter=msdyn_responseroutingid eq [你的路由ID]msdyn_targetquestion节点,里面就是对应的问卷问题信息 - 如果用FetchXML的话,要在查询里加
<link-entity>节点关联msdyn_surveyquestion,示例大概是这样:<fetch> <entity name="msdyn_responseaction"> <attribute name="msdyn_name" /> <link-entity name="msdyn_surveyquestion" from="msdyn_surveyquestionid" to="msdyn_targetquestionid" link-type="inner" alias="targetQuestion"> <attribute name="msdyn_name" /> <attribute name="msdyn_questiontext" /> </link-entity> </entity> </fetch>
特殊情况:如果控制的是整组问题?
要是你的ResponseAction是控制整个问卷章节的显示/隐藏,那就要关联msdyn_surveysection实体,用msdyn_targetsection字段去关联,然后再从章节里拿到下面的所有问题。
总结一下:你确实需要额外加载关联的问卷问题(或章节)数据,默认的ResponseAction对象不会自带这些引用,只要在查询的时候扩展关联实体,就能拿到你要的关联关系了。
内容的提问来源于stack exchange,提问作者Headhunter Xamd
相关产品推荐
相关产品推荐

