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

相关推荐
_李小白8 小时前
【OSG学习笔记】Day 45: osg::Camera::DrawCallback (抓取图片)
笔记·学习
Java面试题总结9 小时前
2026年Java面试题最新整理,附白话答案
java·开发语言·jvm·笔记·spring·intellij-idea
Westward-sun.9 小时前
OpenCV + dlib 人脸关键点检测学习笔记(68点)
人工智能·笔记·opencv·学习·计算机视觉
chushiyunen10 小时前
阿里云部署dify笔记
笔记·阿里云·云计算
大邳草民10 小时前
Python 对象模型与属性访问机制
开发语言·笔记·python
kinl201810 小时前
cs2385_note5 (lec18-lec19) Variational Inference & Control as Inference
笔记
智者知已应修善业11 小时前
【51单片机非精准计时2个外部中断启停】2023-5-29
c++·经验分享·笔记·算法·51单片机
仲芒11 小时前
[24年单独笔记] MySQL 中的简单查询搜索示例
笔记·mysql
Oll Correct11 小时前
实验十六:路由环路问题
网络·笔记