如何隐藏功能区取消资格按钮的OptionSet值(状态原因)
隐藏线索取消资格按钮中的指定状态原因选项
解决思路
原生取消资格按钮弹出的状态原因选项无法直接通过配置隐藏,我们可以通过自定义JavaScript逻辑+Ribbon Workbench修改功能区的方式,替换原生按钮为自定义按钮,实现过滤指定状态原因选项的效果,同时保留历史数据不受影响。
步骤1:创建自定义JavaScript Web资源
编写JS函数,实现过滤状态原因选项、弹出自定义对话框、执行取消资格操作的逻辑:
function handleLeadDisqualify() { // 获取当前线索记录ID与表单上下文 const formContext = Xrm.Page; const leadId = formContext.data.entity.getId().replace(/[{}]/g, ""); // 定义需要隐藏的statusreason选项值(替换为你实际要隐藏的数值) const hiddenStatusReasons = [1, 3]; // 获取状态原因字段的所有选项 const statusReasonField = formContext.getAttribute("statusreason"); const allOptions = statusReasonField.getOptions(); // 过滤出允许显示的选项 const availableOptions = allOptions.filter(opt => !hiddenStatusReasons.includes(opt.value)); // 构建对话框的HTML选项列表 let optionsHtml = "<div style='padding:10px;'>"; availableOptions.forEach(opt => { optionsHtml += `<div style='margin:8px 0;'> <input type='radio' name='statusReason' value='${opt.value}' id='opt_${opt.value}' /> <label for='opt_${opt.value}'>${opt.text}</label> </div>`; }); optionsHtml += "</div>"; // 配置对话框参数 const dialogSettings = { title: "取消资格", subtitle: "请选择取消资格原因", actions: [{ text: "确认", value: 1 }, { text: "取消", value: 0 }], height: 220, width: 420 }; // 弹出对话框并处理用户选择 Xrm.Navigation.openDialog(optionsHtml, dialogSettings).then( function (result) { if (result.data === 1) { const selectedValue = document.querySelector("input[name='statusReason']:checked")?.value; if (selectedValue) { // 调用Web API更新线索状态为取消资格 const updatePayload = { statecode: 2, // 取消资格对应的状态码 statusreason: parseInt(selectedValue) }; Xrm.WebApi.updateRecord("lead", leadId, updatePayload).then( () => formContext.data.refresh(true), // 更新成功后刷新表单 (error) => Xrm.Utility.alertDialog(`取消资格失败:${error.message}`) ); } else { Xrm.Utility.alertDialog("请选择取消资格原因"); } } }, (error) => Xrm.Utility.alertDialog(`操作取消:${error.message}`) ); }
- 将上述代码保存为
.js文件,上传到Dynamics 365的Web资源中(类型选择Script (JScript))。
步骤2:用Ribbon Workbench修改功能区
- 打开Ribbon Workbench,加载包含Lead实体的解决方案。
- 在左侧实体列表中选择
Lead,加载其功能区配置。 - 定位到原生的「取消资格」按钮(通常在「销售」命令组下):
- 右键点击该按钮,选择
Customize Command,将其启用规则设置为永远禁用(避免用户点击原生按钮)。 - 在同一命令组中添加新按钮:
- 设置按钮标签为「取消资格」,图标可选择与原生按钮一致的样式。
- 创建新命令,为命令添加
JavaScript Action,关联刚才上传的Web资源,指定函数名为handleLeadDisqualify。
- 右键点击该按钮,选择
- 保存并发布解决方案。
步骤3:测试验证
打开任意Lead表单,点击自定义的「取消资格」按钮,确认弹出的对话框中仅显示需要的状态原因选项,选择后可正常完成取消资格操作,且历史数据不受影响。
内容的提问来源于stack exchange,提问作者Alireza
相关产品推荐
相关产品推荐

