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
相关产品推荐
相关产品推荐

