Frappe v7.1.0 版本更新全解析:Gantt 视图、Web Form 增强与自动化报告实战指南
【免费下载链接】frappeLow code web framework for real world applications, in Python and Javascript项目地址: https://gitcode.com/GitHub_Trending/fr/frappe
本篇文章基于 Frappe 框架仓库中的官方变更日志 v7_1_0.md,系统梳理 v7.1.0 引入的 Gantt 视图、应用内帮助、Web Form 能力增强、自动邮件报告等核心功能,并结合当前仓库中的实现源码(如 gantt.py、auto_email_report.py、web_form.json)深入剖析其工作原理。读完本文,你将掌握这些功能的配置入口、字段含义与底层调用逻辑,能够直接在实际项目中落地使用。
一、Gantt 视图:为日期范围型文档提供可视化调度
功能概述
v7.1.0 为包含日期范围(开始日期 / 结束日期)的文档新增了Gantt View(甘特图视图)。甘特图以横向时间条的形式展示任务的起止时间与重叠关系,非常适合项目管理、排产计划、预约调度等场景。
工作原理与源码佐证
甘特图在前端展示条形的起止位置,当用户拖动条形调整时间后,后端通过白名单接口更新文档字段。核心实现位于 frappe/desk/gantt.py:
@frappe.whitelist() def update_task(args: str | dict, field_map: str | dict): """Updates Doc (called via gantt) based on passed `field_map`""" args = frappe._dict(frappe.parse_json(args)) field_map = frappe._dict(frappe.parse_json(field_map)) d = frappe.get_doc(args.doctype, args.name) d.set(field_map.start, args.start) d.set(field_map.end, args.end) d.save()关键点解读:
- 前端把「当前拖动的文档」与「字段映射」以 JSON 传入,
args携带doctype、name、start、end,field_map指明起始字段名与结束字段名; - 后端通过
frappe.get_doc加载文档,用d.set(...)写入新时间后d.save()持久化,从而保持数据库与视图状态一致; - 由此可知,只要 DocType 中存在一对可用于起止的日期/时间字段,即可接入该接口。
使用建议
- 为 DocType 定义
start_date与end_date这类日期字段; - 在视图层配置 Gantt 视图并按需声明
field_map映射; - 拖动甘特条后,
update_task会被触发,实现所见即所得的日程调整。
二、In-App Help:应用内帮助搜索
v7.1.0 引入了In-App Help(应用内帮助):用户无需离开系统,直接点击界面上的 “Help” 即可搜索帮助内容。对开发者而言,这意味着 Frappe 开始把文档/帮助系统内嵌到运行时环境中,减少了用户切换上下文的时间成本。这一功能为后续版本中更完整的帮助中心与上下文感知文档体系奠定了基础。
三、Web Form 增强:从简单表单到完整业务入口
v7.1.0 显著扩充了 Web Form(网站表单)的能力,使其可以承载更复杂的业务场景:
- 支持 Grids(子表/Child Table):表单中可以内嵌可编辑的子表,适合录入明细行数据(如订单明细、多行联系方式);
- 支持 Page Breaks(分页):长表单可拆分为多页,改善填写体验;
- 支持 Payment Gateway(支付网关):表单可直接挂接在线支付,把「提交申请」升级为「提交并付款」;
- 支持附件上传(Attachments):允许访客随表单提交文件材料。
配置字段(源码视角)
从 frappe/website/doctype/web_form/web_form.json 可以看出,Web Form 的字段模型已包含与上述能力配套的配置项,例如:
web_form_fields(Table 类型,options: "Web Form Field"):定义表单字段,包括子表字段;max_attachment_size(Int 类型,说明为 “Set size in MB”):限制附件上传大小,单位 MB;show_attachments(Check):在表单中展示已上传附件;allow_incomplete(Check):允许在必填项未填全时保存,配合分页长表单的逐步填写;success_url/success_message:提交后的跳转地址与成功提示;button_label:自定义提交按钮文案;client_script/custom_css:自定义前端脚本与样式,可处理分页切换、字段联动等交互。
前端渲染逻辑可继续查阅 frappe/public/js/frappe/web_form/web_form.js 与 frappe/website/web_form/init.py,测试样例见 frappe/website/doctype/web_form/test_records.json。
落地场景
- 招聘/报名:分页 + 附件 + 子表(技能列表、经历明细);
- 在线订购:子表录入明细 + 支付网关完成收款;
- 服务申请:附件上传证明材料,
max_attachment_size控制上传上限。
四、Auto Email Report:自动化邮件报告
功能概述
v7.1.0 引入Auto Email Report(自动邮件报告),可让系统按每日 / 每周 / 每月频率自动将指定报表以邮件形式发送给目标用户,无需人工手动导出发送。
核心实现
主控制器位于 frappe/email/doctype/auto_email_report/auto_email_report.py,DocType 定义见 auto_email_report.json,测试用例见 test_auto_email_report.py。
关键字段说明
依据auto_email_report.py中的字段类型定义:
| 字段 | 类型 / 可选值 | 说明 |
|---|---|---|
report | Link | 要发送的报表(必填) |
user | Link | 报告归属用户 |
email_to | SmallText | 收件人列表,支持多地址(校验后以换行分隔) |
frequency | Daily / Weekdays / Weekly / Monthly | 发送频率 |
day_of_week | Monday~Sunday | 每周发送时的星期设置 |
format | HTML / XLSX / CSV / PDF | 输出格式 |
send_if_data | Check | 仅当有数据时才发送(空结果不发送) |
dynamic_date_period | Daily / Weekly / Monthly / Quarterly / Half Yearly / Yearly | 动态时间窗口 |
from_date_field/to_date_field | 字段名 | 与动态周期配合,自动写入起止过滤条件 |
use_first_day_of_period | Check | 是否取周期首日作为起始日期 |
no_of_rows | Int | 报表行数上限(默认 100) |
sender | Link | 发送邮箱账户(Email Account) |
data_modified_till | Int | 仅取最近 N 小时修改过的数据(Report Builder 报表) |
发送逻辑
send()(auto_email_report.py):按格式生成内容——HTML 直接作为邮件正文,XLSX / CSV / PDF 则作为附件(文件名规则见get_file_name(),形如Report-Name.xlsx),最终通过frappe.sendmail发出并支持queue_separately=True排队发送;- 频率控制:
process_auto_email_report()中对Weekdays跳过周六周日、对Weekly校验day_of_week,send_monthly()处理月度报告;调度入口send_daily()将任务入队到long队列执行; - 动态日期:
prepare_dynamic_filters()依据dynamic_date_period自动计算起止日期(如 Quarterly 前移 3 个月、Yearly 前移 1 年),并写入from_date_field/to_date_field对应的过滤条件; - 手动触发:白名单接口
send_now(name)可立即发送、download(name)可本地下载报告文件; - 数量限制:每个用户最多 20 个启用中的自动邮件报告,可通过 System Settings 的
max_auto_email_report_per_user调整(见validate_report_count()); - 发送失败时通过
log_error记录错误日志,便于排查。
配置步骤
- 在 Desk 中新建Auto Email Report,选择
report并设置email_to、frequency、format; - 若报表含必填过滤器,需在
filters中预先填好(validate_mandatory_fields()会强制校验); - 需要时间窗口时,勾选动态周期并指定起止字段;
- 保存并启用,等待调度器在对应时间点自动发送;也可点击 “Send Now” 立即验证。
五、其他重要修复与改进
v7.1.0 还包含一系列平台级改进,均可找到对应实现佐证:
- 登录弹窗通知(Note):勾选 Note 的 “Notify users with a popup when they log in” 后,用户登录时会收到弹窗提醒。实现见 frappe/desk/doctype/note/note.py:
notify_on_login开启时默认 7 天后过期(expire_notification_on),仅公开笔记可推送(非公开自动关闭),并通过Note Seen By子表与get_unseen_notes()记录已读状态、避免重复弹窗; - 门户用户角色(Portal Roles):客户、供应商、学生等门户用户可以拥有角色,且门户侧边栏按角色渲染,并可在Portal Settings中配置;
- 备份数量限制:可在 System Settings 中限制保留的备份数量,防止磁盘被历史备份占满;
- 调度器日志改进:Scheduler log 改为错误日志并以 MyISAM 存储,降低日常日志写入对主表的开销;
- 自定义与邮件提醒导出:提供了从Customize Form直接导出自定义项与 Email Alert 的更好方式,方便迁移与备份;
- 数据导入工具邮件:Data Import Tool 在适用场景下支持发送邮件,便于导入结果通知;
- Integration Broker:引入集成代理,为系统与外部服务的对接提供统一通道。
六、升级与验证建议
- 升级前请完整阅读 v7_1_0.md 并查看
frappe/change_log/下相邻版本的变更,评估破坏性改动; - 升级后重点回归验证:Gantt 视图拖动保存(调用 gantt.py 的
update_task)、Web Form 子表与附件上传、Auto Email Report 的定时触发与附件格式; - 可通过 test_auto_email_report.py 与 note.py 对应的测试文件快速验证相关模块行为。
总结
Frappe v7.1.0 是一次面向「可视化管理与自助化运营」的重要更新:Gantt 视图让日期型数据可拖拽管理,Web Form 的多能力扩展使外部表单能承载子表、分页、支付与附件,Auto Email Report 将报表分发自动化,配合登录弹窗、门户角色、备份限制等稳定性改进,共同提升了 Frappe 在真实业务场景中的可用性。上述每一项功能在当前仓库源码中都有完整实现与测试支撑,开发者可依据本文的字段说明与调用逻辑直接上手配置。
【免费下载链接】frappeLow code web framework for real world applications, in Python and Javascript项目地址: https://gitcode.com/GitHub_Trending/fr/frappe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考