SuperAPI AI 工具集

frappe-syntax-controllers

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

用途:为 ERPNext/Frappe 的 DocType 编写服务端 Python Document Controller(控制器类),每个 DocType 对应一个控制器文件,类继承 frappe.model.document.Document。

主要能力:讲解生命周期钩子及执行顺序,如 insert 流程 before_insert→before_naming→autoname→before_validate→validate→before_save→db_insert→after_insert→on_update→on_change;save、submit、cancel、update_after_submit、delete、discard 各有对应顺序。提供钩子选择决策:校验与计算字段用 validate(对 self 的修改会保存);保存后动作(邮件、同步、关联文档)用 on_update(对 self 的修改不会保存,需用 db_set 或 frappe.db.set_value);仅新文档用 after_insert;自定义命名用 autoname;提交前后用 before_submit/on_submit;取消前后用 before_cancel/on_cancel;删除清理用 on_trash;任意值变化用 on_change(必须幂等)。

使用方式:控制器方法可加 @frappe.whitelist() 暴露给客户端 JS,通过 frm.call 调用。扩展机制包括 override_doctype_class(全量替换,仅一个应用可覆盖)、extend_doctype_class(v16+ mixin,可多应用扩展)、doc_events(按事件挂接,支持通配符)。命名支持 field:、naming_series:、表达式、hash、Prompt、autoincrement、UUID(v16+)及自定义 autoname 方法。

限制与规则:on_update 之后对 self 的修改不会保存;控制器中禁止调用 frappe.db.commit();覆盖方法必须调用 super();校验逻辑不能放在 on_update;递归需用 flags 防止;可提交文档应成对实现 on_submit 与 on_cancel 并相互冲销。版本差异:类型注解、before_discard/on_discard、extend_doctype_class、UUID 命名在 v16 才有,旧式格式命名在 v16 弃用。具体参数与完整示例见其参考文件,资料未提供收费、平台与效果信息。