金蝶二开笔记&&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)使用这个方法遇到问题了吗?可以告诉我你的使用场景,我帮你看看具体的写法是否正确。

相关推荐
ErizJ1 小时前
Linux|学习笔记
linux·笔记·学习
wanghanjiett2 小时前
笔记:ESP32驱动SimpleFOC成功(基于Espressif-IDE)
笔记·esp32·foc
大邳草民2 小时前
Python 爬虫:从 HTTP 请求到接口分析
笔记·爬虫·python
南湖渔歌2 小时前
【成功实践版】workbuddy_把多张图片转成完整Markdown笔记
人工智能·笔记·workbuddy
想成为优秀工程师的爸爸3 小时前
车载以太网之要火系列 - 第33篇:郭大侠学UDS(10服务)- 桃花岛内规矩多,模式切换要会说
网络·笔记·网络协议·信息与通信·车载以太网
智者知已应修善业3 小时前
【51单片机从奇数始再转偶数逐一点亮并循环】2023-9-8
c++·经验分享·笔记·算法·51单片机
sealaugh323 小时前
react native(学习笔记第三课) 英语打卡微应用(2)-从上传图片开始
笔记·学习·react native
李李李勃谦4 小时前
鸿蒙PC打造电子书阅读器:支持 EPUB/PDF、书签同步、笔记管理
笔记·华为·pdf·harmonyos
U盘失踪了4 小时前
【笔记】Cookie 请求头的写法
笔记
Brilliantwxx4 小时前
【C++】认识vector(概念+题目OJ)
开发语言·c++·笔记·算法