用途:帮助决定 ERPNext 服务端功能“如何实现”,在无自定义 App 的低代码沙箱(Server Script)与完整 Python(Controller)之间做选择。精确语法请参看 erpnext-syntax-serverscripts。版本:兼容 v14/v15/v16。
主要能力与选择依据:无自定义 App、快速原型、简单校验/自动填充/通知,用 Server Script;需要 import 外部库(requests、pandas 等)、复杂多文档事务,用自定义 App 中的 Controller;无需自定义 App 建 REST API,用 Script 的 API 类型;简单定时后台任务用 Scheduler Event,复杂用 hooks.py;按用户动态过滤列表用 Permission Query。
脚本类型:Document Event 响应文档生命周期;API 创建端点(Allow Guest 控制是否公开);Scheduler Event 按 cron 运行;Permission Query 返回 WHERE 条件字符串。文档事件映射:Before Validate→before_validate,Before Save→validate,After Save→on_update,Before Submit→before_submit,After Submit→on_submit,Before Cancel→before_cancel,After Cancel→on_cancel,After Insert→after_insert,Before Delete→on_trash。
关键限制:Server Script 沙箱中所有 import 被阻止,例如 import json 或 from frappe.utils import 会报 ImportError;应直接使用预加载命名空间,如 frappe.utils.nowdate()、frappe.parse_json(data)。其他规则:Scheduler 脚本结尾须 frappe.db.commit();Before Save 中不要调用 doc.save();用 frappe.throw() 校验;SQL 中必须转义用户输入;查询须加 limit。
资料给出六类实现工作流(信用额度校验、自动计算填充、创建关联文档、自定义 API、定时任务、权限查询)及 Client Script 与 Server Script 集成示例,完整示例见 references 相关文档。缺失信息:安装命令、定价与收费方式暂未提供。