CRM 365托管解决方案导入未移除多余事件处理程序如何解决
根因说明
这是Dataverse模型驱动表单托管部署的典型分层规则问题:托管解决方案的更新/升级,默认只会覆盖同发布者、同解决方案ID对应层的组件配置。你导入的解决方案带的单事件绑定配置,之所以盖不住UAT上的双事件配置,是因为多余的那个事件绑定存在于优先级比你当前导入的解决方案更高的自定义层——要么是之前有人直接在UAT环境修改表单留下的非托管活动层(Active层),要么是其他发布者的托管解决方案层在该字段上追加了事件绑定,高优先级层的配置会始终覆盖低优先级层的内容,所以你单纯升级自己的解决方案删不掉多余配置。
处理步骤(全程不需要在UAT默认解决方案手动修改生成本地非托管层)
- 第一步:定位多余事件的所属层
- 登录UAT环境,进入高级设置-解决方案,找到异常表单所属的表,打开对应表单的设计器
- 选中绑定了错误事件的字段,切到事件配置tab,找到多余的那个事件处理程序,点击顶部工具栏的「查看解决方案层」
- 弹出的层列表从上到下优先级依次降低,直接定位到追加了多余事件绑定的最高优先级层,确认层的类型是托管层还是非托管的Active活动层。
- 第二步:按层来源针对性处理
- 如果多余事件来自其他发布者的托管层:
找到对应托管解决方案的源环境,在该解决方案中移除这个字段上的错误事件绑定,重新导出托管升级包,先在UAT升级这个来源解决方案,再重新导入你自己的表单解决方案即可。 - 如果多余事件来自最顶部的Active非托管活动层(绝大多数场景都是这个原因):
回到你自己的DEV环境,打开你要导出的托管解决方案,找到对应的表单组件,重新确认字段上只保留1个正确的事件处理程序后,导出解决方案时选择「升级」类型,同时勾选覆盖现有自定义的相关选项;在UAT导入这个升级包时,同样勾选导入向导里的「覆盖自定义」选项,导入完成后系统会自动清除该表单上优先级更高的非托管活动层配置,最终只保留你解决方案中定义的正确配置。
- 如果多余事件来自其他发布者的托管层:
- 第三步:结果校验
导入完成后清除浏览器缓存,重新打开表单设计器,检查字段的事件绑定数量,同时再次查看解决方案层,确认多余事件已被移除,且UAT环境没有生成新的本地非托管自定义层即可。
注意:不要直接在UAT的解决方案层界面手动删除Active非托管层,该操作会清除对应组件所有未被托管层覆盖的本地自定义,风险不可控;通过升级托管解决方案时勾选覆盖自定义的方式,只会替换你当前导入包内包含的组件的上层非托管配置,不会影响环境中其他组件的设置。
内容的提问来源于stack exchange,提问作者Dalele
相关产品推荐
相关产品推荐

