金蝶二开笔记&&setCancelMessage

setCancelMessage

setCancelMessage 是金蝶云苍穹开发中一个很实用的方法,主要用在插件里,当某些条件不满足,需要中断当前操作(比如保存、提交)时,向用户显示一个友好的文字提示

📌 核心功能

  • 配合 setCancel(true) 使用 :该方法需要和 setCancel(true) 搭配,setCancel(true) 负责中断操作,而 setCancelMessage("提示内容") 则告诉用户中断的原因。

  • 提升用户体验 :通过明确的提示,让用户知道操作被阻止的具体原因(如"无法找到同步参数,请维护! "或"对不起,您无权访问此页面!"),而不是无反馈的"点不动"。

⚙️ 使用场景与示例

这个方法主要用于在操作执行前的校验事件中,比如 beforeDoOperationpreOpenForm

场景一:在 beforeDoOperation 中拦截提交

假设你在点击提交前,需要校验单据状态,若校验不通过则拦截操作并给出提示。

java 复制代码
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
    // 获取操作的名称,例如 "submit"
    String opName = args.getSource().getOperateName();
    
    // 如果是提交操作,进行自定义校验
    if ("submit".equals(opName)) {
        // 假设校验失败,需要中断操作
        if (/* 校验失败条件, 比如单据状态不正确 */) {
            // 1. 调用setCancel(true)取消本次操作
            args.setCancel(true);
            // 2. 调用setCancelMessage设置用户可见的提示信息
            args.setCancelMessage("提交失败,当前单据状态不允许提交!");
        }
    }
}
复制代码

场景二:在 preOpenForm 中阻止打开页面

这个方法也可以在打开界面前,用于权限拦截。比如,当用户无权访问某页面时,可以中断页面打开并提示。

java 复制代码
@Override
public void preOpenForm(PreOpenFormEventArgs e) {
    // 假设权限校验失败
    if (/* 权限校验失败条件 */) {
        // 1. 取消打开页面
        e.setCancel(true);
        // 2. 设置提示消息
        e.setCancelMessage("对不起,您无权访问此页面!");
    }
}

⚠️ 常见问题:提示不显示

一个常见的问题是,明明调用了 args.setCancelMessage("..."),但页面却没有任何提示。

  • 根本原因 :这个问题通常是因为在调用 setCancelMessage() 时,使用的参数对象(如 args)的生命周期已结束,或它只是事件参数,不具备向前端发送指令的能力。

  • 解决方案 :推荐使用视图模型(IFormView)的 showErrorNotification 方法来显示错误信息。

java 复制代码
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
    // ... 校验逻辑
    if (/* 校验失败 */) {
        // 1. 取消操作
        args.setCancel(true);
        
        // 2. 使用视图模型显示错误提示(推荐)
        IFormView view = getView();
        if (view != null) {
            view.showErrorNotification("关闭失败,有任务正在执行");
        }
        
        // 3. 同时也可以调用setCancelMessage
        args.setCancelMessage("关闭失败,有任务正在执行");
    }
}

📚 相关方法一览

为了让你更好地了解它的"亲戚",这里整理了一些相关方法:

方法名 作用 备注
setCancel(boolean) 取消或终止正在进行的操作。 通常与 setCancelMessage 配对使用。
showMessage(String) 显示一条普通的悬浮消息。 通常会自动消失,用于非阻断性的提示。
showErrorNotification(String) 显示一条红色的错误通知消息。 用于突出显示错误信息,需要用户手动关闭。
showConfirm(String) 显示一个确认对话框。 需要用户点击"确定"或"取消"来继续后续操作。

💎 总结

总的来说,setCancelMessage 是配合 setCancel(true) 来显示取消提示的。虽然它的实现比较直观,但如果遇到提示不显示的问题,可以改用视图模型(IFormView)的 showErrorNotification 方法来替代,兼容性更好。

你是在哪个具体的事件里(比如 beforeDoOperation 还是 preOpenForm)使用这个方法遇到问题了吗?可以告诉我你的使用场景,我帮你看看具体的写法是否正确。

相关推荐
闪闪发亮的小星星3 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq3 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波3 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.3 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余3 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.3 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
秋波。未央3 天前
Java Agent 开发 · Day 1 学习笔记(含作业完整标准答案)
java·笔记·学习
中屹指纹浏览器3 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记
影寂ldy3 天前
WinForm PictureBox控件 + ImageList组件 完整笔记
开发语言·笔记·swift