ERPNext客户端调用服务端方法报错:找不到frappe.api模块
解决ERPNext Ajax调用方法路径错误问题
错误原因
你遇到的Failed to get method for command frappe.api.process_fetched_data with No module named 'frappe.api'报错,核心问题是客户端指定的方法路径完全错误:你的自定义函数process_fetched_data并不是frappe内置的frappe.api模块中的方法,而是属于你自己的自定义App模块,必须用自定义模块的完整路径来指定。
解决步骤
1. 确认服务端脚本的正确路径
假设你的自定义App名为my_custom_app,且服务端脚本process_fetched_data所在的文件路径是my_custom_app/my_custom_app/utils.py(如果是放在某个DocType的Python文件里,比如my_custom_app/my_custom_app/doctype/your_doctype/your_doctype.py,路径要对应调整),那方法的完整路径应该是:
- 对应utils.py的情况:
my_custom_app.utils.process_fetched_data - 对应DocType文件的情况:
my_custom_app.doctype.your_doctype.your_doctype.process_fetched_data
2. 修改客户端脚本的method参数
把原来的frappe.api.process_fetched_data替换成上面确认的正确路径,修改后的客户端代码示例:
frappe.call({ method: "my_custom_app.utils.process_fetched_data", // 替换成你的实际模块路径 args: { data: date, doc: frm.doc, }, callback: function(response) { if (response.message) { frappe.msgprint(response.message); } } });
3. 额外注意事项
- 确保服务端脚本所在的Python文件位于你的自定义App目录下,且目录结构符合ERPNext的模块规范(目录下存在
__init__.py文件,创建自定义App时默认会生成) - 服务端函数的
@frappe.whitelist()装饰器必须保留,这是允许客户端调用该函数的必要条件 - 客户端传递的
frm.doc是完整的文档对象,frappe会自动序列化,服务端用frappe.parse_json(doc)解析是正确的写法
内容的提问来源于stack exchange,提问作者Maryam Aftab
相关产品推荐
相关产品推荐

