如何在CRM中当Opportunity表的Account查找字段变更时触发插件?
解决方案
Dynamics CRM的服务器端插件(包括你注册的create/update消息插件)仅在记录提交到服务器时触发(即点击保存按钮时),前端字段变更不会自动触发服务器端操作。要实现Account字段变更即时触发插件,需结合客户端脚本与服务器端插件:
1. 调整插件注册
- 保留
update消息,执行阶段可设为Pre-Validation或Pre-Operation,筛选属性维持accountid不变。
2. 编写客户端JavaScript脚本(Web资源)
在Opportunity表单上添加Web资源JS,监听Account字段的onChange事件,当字段值变更时,主动调用Web API对当前Opportunity记录执行局部更新(仅更新accountid字段,无需保存整个表单),以此触发注册的update消息插件。
示例JS代码:
function onAccountChange(executionContext) { var formContext = executionContext.getFormContext(); var opportunityId = formContext.data.entity.getId().replace("{", "").replace("}", ""); var accountId = formContext.getAttribute("accountid").getValue(); if (accountId) { // 构造更新数据 var updateData = { "accountid@odata.bind": "/accounts(" + accountId[0].id + ")" }; // 调用Web API执行局部更新 Xrm.WebApi.updateRecord("opportunity", opportunityId, updateData).then( function success(result) { // 更新成功,插件已触发 }, function error(error) { console.log(error.message); } ); } }
3. 配置表单事件
- 打开Opportunity表单编辑器,找到Account查找字段。
- 在字段的
事件选项卡中,添加onChange事件,关联你创建的Web资源JS,指定函数名为onAccountChange。 - 发布表单与Web资源。
注意事项
- 该方式会生成一条Opportunity的更新记录,需确认业务场景是否允许。
- 可在脚本中添加判断逻辑,仅当字段值真正发生变化时才执行更新,避免重复触发。
- 确保操作用户拥有Opportunity的更新权限,否则Web API调用会失败。
内容的提问来源于stack exchange,提问作者Godfred Boateng
相关产品推荐
相关产品推荐

