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

如何用JS阻止销售订单取消?Mscrm取消按钮代码插入位置咨询

如何用JS阻止Dynamics 365销售订单的取消操作?

针对你的两个问题,我给你梳理下实际项目里常用的落地方案,都是经过验证的靠谱方法:

一、核心思路:拦截原生按钮的执行流程

原生的Mscrm.Form.salesorder.CancelOrder按钮属于系统命令栏按钮,我们要做的就是在它执行原生取消逻辑之前,插入自定义校验代码——如果校验触发了阻止条件,就中断默认操作并给用户提示。

二、具体实现步骤

1. 编写带校验逻辑的JavaScript函数

先写一个自定义函数,用来处理你的校验规则,并且在需要时阻止原生操作。示例代码如下:

function validateBeforeCancel(executionContext) {
    // 获取当前表单的上下文对象,这是获取表单数据的关键
    const formContext = executionContext.getFormContext();
    
    // 这里替换成你的实际校验逻辑,比如检查订单状态、自定义字段值等
    // 举个例子:如果订单已完成支付,就不允许取消
    const isPaid = formContext.getAttribute("new_ispaymentcompleted").getValue();
    
    if (isPaid) {
        // 给用户弹出友好提示
        Xrm.Navigation.openAlertDialog({ 
            text: "抱歉,该订单已完成支付,无法取消,请联系管理员处理!" 
        });
        
        // 关键操作:阻止原生取消按钮的默认执行逻辑
        executionContext.getEventArgs().preventDefault();
    }
}

2. 将函数注册到CancelOrder按钮的前置事件

因为是系统原生按钮,推荐用Ribbon Workbench(Dynamics 365自定义命令栏的专用工具,操作直观)来配置:

  • 打开Ribbon Workbench,加载销售订单实体的命令栏配置。
  • 找到Cancel Order按钮对应的系统Command(一般就是Mscrm.Form.salesorder.CancelOrder)。
  • 给这个Command添加一个Custom Action,设置为「前置执行」(也就是原生逻辑跑之前先执行我们的函数)。
  • 选择你上传到环境中的JS web资源,指定刚才写的validateBeforeCancel函数,一定要勾选「传递执行上下文」(不然拿不到executionContext就没法阻止默认操作)。

3. 测试验证

保存并发布命令栏配置后,打开销售订单表单点击取消按钮,就能触发你的校验逻辑了——如果符合阻止条件,会弹出提示,且不会执行原生的取消操作。

三、关于校验代码插入位置的解答

你的校验代码就放在上面这种前置拦截函数里,通过executionContext.getEventArgs().preventDefault()来中断原生按钮的默认流程。这个函数会在原生取消逻辑执行前被调用,完美匹配你的需求:先校验数据,再决定是否允许执行原有功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:17:58