金蝶二开笔记&&setCancelMessage

setCancelMessage

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

📌 核心功能

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

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

⚙️ 使用场景与示例

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

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

相关推荐
叼烟扛炮17 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮21 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
且从容.1 天前
VUE3学习笔记(根据黑马教程总结)
笔记·学习
蒸蒸yyyyzwd1 天前
关于 AI 开发相关的一些面经。
笔记·学习
2603_969694851 天前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
迪康coolmu1 天前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
无咎.lsy1 天前
《机器学习》笔记
笔记·机器学习
坤坤子吖1 天前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd1 天前
后端相关学习笔记。
笔记·学习
旖旎夜光1 天前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习