MS CRM中work order product实体如何避免重复创建 自动更新已有记录
Dynamics 365 CRM Online 需求实现方案
核心实现方式
采用workorderproduct实体Create消息的PreOperation同步插件实现,该方案天然覆盖所有系统创建入口:表单提交、数据导入、API调用、跨环境导出导入等场景,无需额外适配。
插件逻辑设计
- 注册配置:在插件注册工具中,对
workorderproduct实体的Create消息注册同步步骤,执行阶段选择PreOperation,执行优先级设置在系统内置逻辑之前即可,执行身份选择系统管理员避免权限问题。 - 执行逻辑:
- 从插件上下文的
Target实体中提取本次新建提交的product(产品关联ID)、quantity(数量)字段值,若需按所属工单维度去重,额外提取workorderid(关联工单ID)。 - 构造QueryExpression或FetchXML查询,筛选条件为
product等于本次提交的产品ID,若按工单调去重则增加workorderid等于本次提交的工单ID。 - 若查询到匹配的已有
workorderproduct记录:- 累加数量:已有记录的
quantity值 + 本次提交的quantity值,更新到已有记录中。 - 调用组织服务的
Update方法提交更新。 - 清空上下文的
Target实体,取消本次新建操作,无需抛出异常,避免前端或导入工具返回错误,实现无感知。
- 累加数量:已有记录的
- 若未查询到匹配记录,直接放行原有新建逻辑即可。
- 从插件上下文的
注意事项
- PreOperation阶段默认加入系统数据库事务,更新旧记录和取消新建操作天然保证数据一致性,无需额外处理事务。
- 若业务要求仅判断有效状态的重复记录,查询时可额外增加
status字段的筛选条件,匹配你要校验的有效状态枚举值。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

