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

如何在ERPNext教育模块中仅允许已缴费学生打印学生申请表?

修复:学生未结清费用时禁用Student Applicant打印功能

你的脚本无效的核心问题是用了同步方式获取Fees文档——客户端环境下frappe.get_doc无法直接拉取服务器端的最新数据,再加上没处理异步逻辑,导致还没拿到费用数据就走完了判断流程,自然拦不住打印操作。

下面是修复后的完整代码:

frappe.ui.form.on("Student Applicant", {
  onPrintDocument: function(frm, doc, ev) {
    // 先阻止默认打印行为,等验证完成后再决定是否放行
    ev.preventDefault();
    
    // 异步调用获取服务器端Fees文档的最新未结清金额
    frappe.call({
      method: "frappe.client.get",
      args: {
        doctype: "Fees",
        name: frm.doc.fees
      },
      callback: function(r) {
        if (r.message) {
          const outstandingAmount = r.message.outstanding_amount;
          if (outstandingAmount === 0) {
            // 费用已全额结清,手动触发打印
            frm.print_doc();
          } else {
            // 存在未结清费用,提示用户并取消打印
            frappe.msgprint("费用未全额缴纳,无法打印学生申请表");
          }
        } else {
          // 未找到关联的Fees记录,给出提示
          frappe.msgprint("当前申请表未关联有效的费用记录");
        }
      },
      error: function() {
        // 处理请求失败的情况
        frappe.msgprint("验证费用状态失败,请稍后重试");
      }
    });
  }
});

核心修改说明:

  • 先执行ev.preventDefault():直接阻止默认打印流程,避免异步请求还没返回就完成打印
  • 改用frappe.call异步获取数据:确保拿到的是服务器端最新的Fees未结清金额,避免本地数据过时或为空
  • 验证通过后手动触发打印:费用结清时调用frm.print_doc()完成打印操作
  • 增加异常处理:覆盖找不到费用记录、请求失败等场景,提升用户体验

注意:请确保Student Applicant表单中的fees字段已正确关联到对应的Fees文档,否则会触发「未关联有效费用记录」的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:42:19