SuperAPI AI 工具集

erpnext-impl-clientscripts

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

用途:该技能用于确定如何在 ERPNext(v14/v15/v16 兼容)中实现客户端功能,例如表单校验、动态 UI、服务端集成与子表逻辑。精确语法参见 erpnext-syntax-clientscripts。

核心决策:逻辑是否必须始终执行(包括导入、API 调用、Server Scripts)?是则放服务端(Controller 或 Server Script);否则按目标选择:UI 反馈/UX、显隐字段、链接过滤用 Client Script;数据校验客户端与服务端都要做;计算取决于关键程度。原则:UX 用客户端,完整性用服务端。

事件决策树:设置链接字段过滤用 setup;添加自定义按钮用 refresh;按条件显隐字段需 refresh 与 {fieldname} 两者;保存前校验用 validate(错误用 frappe.throw);保存成功后动作用 after_save;字段变化计算用 {fieldname};子表新增行用 {tablename}_add;子表字段变化用子 DocType 事件;一次性初始化用 setup 或 onload。

实现工作流示例:动态字段显隐(refresh 触发字段事件,toggle_display 与 toggle_reqd);级联下拉(setup 中 set_query,国家变化时清空城市);自动计算(父表 discount_percentage、子表 qty/rate 触发行金额,amount 变化汇总总额);获取服务端数据(async customer 事件,用 frappe.db.get_value 回填,客户清空则重置字段);带服务端校验的验证(validate 中 frappe.call 调用白名单方法,creditle limit 超限用 frappe.throw 抛出)。

集成矩阵:链接过滤可选自定义查询;获取服务端数据依赖 frappe.db.* 或白名单方法;调用文档方法需控制器中 @frappe.whitelist;复杂校验需服务端;创建文档用 frappe.db.insert 或白名单方法。客户端可用 frm.call 调用控制器方法后 reload_doc。

实现清单:确定范围(仅 UI/UX 用客户端,数据完整性加服务端);选择事件(显隐需组合 refresh 与字段事件);从 frappe.ui.form.on 开始并用 console.log 测试;加入错误处理(异步 try/catch、校验用 frappe.throw);测试边界(frm.is_new()、空值、子表空/满);界面文本用 __() 翻译。

关键规则:子表变更后 refresh_field() 同步 UI;set_query 放在 setup 事件;校验用 frappe.throw 而非 msgprint 以阻止保存;服务端调用用 async/await 防竞态;按钮检查 frm.is_new() 防新文档报错。相关技能包括语法、错误处理、白名单方法与 frappe.db 客户端 API。限制:资料未提供具体收费、价格或效果数据。