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

Frappe 14中如何避免给doctype附加文件时自动触发保存事件?

解决Frappe 14自定义Doctype附件上传时自动保存触发通知的问题

方法1:修改客户端脚本,阻止附件上传后的自动保存

在你的自定义Doctype的客户端脚本中添加以下代码,覆盖附件上传后的默认保存行为:

frappe.ui.form.on('你的自定义Doctype名称', {
    refresh(frm) {
        // 监听附件上传成功事件
        frm.uploader.on('upload-success', () => {
            // 重置表单的未保存状态,避免自动触发保存
            frm.__unsaved = false;
            // 手动更新附件显示,确保附件正常展示
            frm.refresh_field('attachments');
        });
    }
});

注意替换你的自定义Doctype名称为实际的Doctype名称。这个方法直接从前端阻止了上传附件后的自动保存触发。

方法2:优化通知规则的触发条件

如果不想修改前端逻辑,可以调整通知规则的触发条件,只在文档实际内容修改时发送通知,忽略仅附件变化的情况。

在通知规则的条件中添加以下Python表达式:

# 检查是否有除附件外的字段被修改
len(doc.get_modified_fields()) > 0 and not (len(doc.get_modified_fields()) == 1 and '_attachments' in doc.get_modified_fields())

这样只有当文档的其他字段(非附件)发生变化时,才会触发通知,附件单独上传时不会触发。

方法3:通过后端代码标记跳过通知

在自定义Doctype的Python文件中添加before_save钩子,标记仅附件修改的情况,然后在通知规则中排除该情况:

from frappe.model.document import Document

class 你的自定义Doctype名称(Document):
    def before_save(self):
        modified_fields = self.get_modified_fields()
        # 如果只有附件字段被修改,设置跳过通知标记
        if len(modified_fields) == 1 and '_attachments' in modified_fields:
            self.skip_notification = True
        else:
            self.skip_notification = False

然后在通知规则的条件中添加:

not doc.skip_notification

这种方法从后端层面控制通知的触发,适合需要更精细控制的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:33:23