用途:在调试 Frappe/ERPNext 的 hooks.py 相关错误时使用,帮助定位钩子注册与执行中的异常。资料提供了一份“错误→成因→修复”对照表,以及按钩子类型划分的排查清单与代码模式。
主要能力:覆盖钩子完全不触发(点号路径拼写错误)、bench start 时的 ImportError(模块路径错误或循环导入)、AttributeError(函数名拼写不匹配)、app_include_js 资源未加载(缺 assets/ 前缀或扩展名错误)、scheduler_events 未运行(调度器未启用或 worker 未启动)、doc_events 处理器未被调用(DocType 名称拼写错误)、permission_query_conditions 导致列表视图崩溃、override_doctype_class 导入失败、extend_doctype_class 方法名冲突、fixtures 安装时不加载、extend_bootinfo 导致登录失败、通配符 * 处理器破坏所有保存、钩子触发但改动丢失(调度任务缺少 frappe.db.commit)、多处理器链中断等。
必要用法要点:修改 hooks.py 后需执行 bench restart(开发环境可用 bench clear-cache);检查应用是否安装可用 bench --site mysite list-apps;调度诊断使用 bench scheduler status、bench scheduler enable、bench doctor;导出 fixtures 使用 bench --site mysite export-fixtures。日志通过 frappe.log_error(frappe.get_traceback(), ...) 记录。
限制与注意事项:permission_query_conditions 与 has_permission 中绝不可 frappe.throw(),应返回安全回退值并转义参数;doc_events 中不可 frappe.db.commit(),事务由框架管理;scheduler_events 必须显式 commit 并捕获异常;事件处理器不得从 hooks.py 导入以避免循环依赖;override_doctype_class 每个 DocType 仅一个应用生效,多个应用注册需注意;extend_doctype_class [v16+] 的方法应加应用名前缀防冲突。资料还提及 references/patterns.md、references/examples.md、references/anti-patterns.md 等参考文件,以及 frappe-syntax-hooks、frappe-impl-hooks、frappe-errors-controllers 等关联技能,具体内容暂未提供。