You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Dynamics 365 CRM:关联仅一个EntityB时自动填充EntityA查找字段

嘿,这个自动填充的需求我之前帮客户实现过,刚好适配你的场景!咱们分两种常用方案来搞,不管你是喜欢低代码还是写代码都能搞定:

方案1:Power Automate 低代码实现(推荐非开发人员)

这个方案不用写代码,通过可视化配置就能完成:

  • 触发规则:新建一个云流,触发条件选「当 Dataverse 记录被创建时」,实体选你的EntityA,额外加个触发筛选:Contact 字段不为空(毕竟从Contact新建时这个字段会自动填充,咱们只处理有Contact值的情况)
  • 查询关联的EntityB:添加「列出记录」动作,实体选EntityB,筛选条件设置为_contact_value eq @triggerBody()?['_contact_value'](这里的_contact_value是Contact查找字段的逻辑名称,你要换成自己系统里的实际字段名哦)
  • 判断并填充:加一个「条件」动作,判断刚才列出的EntityB记录数量是否等于1
    • 如果满足条件:添加「更新记录」动作,实体选EntityA,记录ID用触发的那条EntityA的ID,然后把EntityB查找字段设置为列出的那条EntityB记录的ID
    • 如果不满足:啥也不用做,或者可以加个发送邮件/Teams消息的动作,提醒创建人“当前Contact关联了多个EntityB,请手动选择”
  • 小提醒:因为EntityB是必填字段,建议把它的必填类型设为「业务必填」而非「系统必填」,这样创建时不会因为字段为空直接报错,等流跑完填充后再满足必填要求
方案2:Dataverse 插件代码实现(适合开发人员)

如果是开发同学,写个插件注册在EntityA的Create事件上更灵活:

  • 插件核心逻辑:
    1. 从新建的EntityA记录里拿到Contact的ID
    2. 查询该Contact关联的所有EntityB记录(用FetchXML或者LINQ都可以,这里用FetchXML示例)
    3. 如果查询结果只有1条,就把这条EntityB的ID赋值给EntityA的EntityB查找字段
  • 示例C#代码片段:
// 获取EntityA记录里的Contact字段值
var contactRef = entity.GetAttributeValue<EntityReference>("contactid");
if (contactRef != null)
{
    // 编写FetchXML查询关联的EntityB,最多查2条(只要判断数量是否为1,查2条足够)
    var fetchXml = $@"
    <fetch count='2'>
        <entity name='entityb'>
            <filter>
                <condition attribute='contactid' operator='eq' value='{contactRef.Id}' />
            </filter>
        </entity>
    </fetch>";
    var entityBResults = service.RetrieveMultiple(new FetchExpression(fetchXml));
    
    // 如果只有1条关联的EntityB,就填充字段
    if (entityBResults.Entities.Count == 1)
    {
        entity["entitybid"] = new EntityReference("entityb", entityBResults.Entities[0].Id);
    }
}
  • 注册插件时注意:把执行顺序设为「后操作」,确保在系统自动填充Contact字段之后再执行咱们的逻辑,避免拿不到Contact的值
额外优化:客户端JavaScript预填充

如果是从Contact表单的子网格新建EntityA,还可以在客户端用JS提前填充,让用户在创建时就能看到结果:

  • 在EntityA的新建表单加载时,获取当前Contact的ID(从表单的上下文参数里拿)
  • 用Web API查询该Contact关联的EntityB数量
  • 如果数量是1,就把EntityB字段的值自动填充到表单里
  • 这样用户提交前就能确认字段已填充,体验更好

内容的提问来源于stack exchange,提问作者user9487332

火山引擎 最新活动