You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何隐藏功能区取消资格按钮的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修改功能区

  1. 打开Ribbon Workbench,加载包含Lead实体的解决方案。
  2. 在左侧实体列表中选择Lead,加载其功能区配置。
  3. 定位到原生的「取消资格」按钮(通常在「销售」命令组下):
    • 右键点击该按钮,选择Customize Command,将其启用规则设置为永远禁用(避免用户点击原生按钮)。
    • 在同一命令组中添加新按钮:
      • 设置按钮标签为「取消资格」,图标可选择与原生按钮一致的样式。
      • 创建新命令,为命令添加JavaScript Action,关联刚才上传的Web资源,指定函数名为handleLeadDisqualify。
  4. 保存并发布解决方案。

步骤3:测试验证

打开任意Lead表单,点击自定义的「取消资格」按钮,确认弹出的对话框中仅显示需要的状态原因选项,选择后可正常完成取消资格操作,且历史数据不受影响。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:44