用途:为 Frappe 设计工作流提供参考,遵循团队 edu_quality 约定。
主要能力与约定:workflow_state 通过自定义子应用中的 Custom Field 添加,而非修改源 DocType;字段设置含 fieldtype Link、options Workflow State、hidden 1、no_copy 1、allow_on_submit 1。程序化转换多用 db_set("workflow_state", "X"),会跳过条件、角色校验与通知;需要角色校验、条件与通知时用 apply_workflow。db_set 调用需用 hasattr(doc, "workflow_state") 防御。标准 Workflow 不适用时,自建工作流 DocType 加 Frappe Page。
使用方式:Workflow 本身是 DocType,含 document_type、workflow_state_field、is_active、states、transitions 等字段;状态用 Workflow Document State,转换用 Workflow Transition,可设 condition、allowed、allow_self_approval。导出用 bench --site <site> export-fixtures。迁移时先加 Custom Field,再 bench migrate,用 patch 回填旧数据。
适用场景:固定状态序列、不同角色在特定状态间转换、当前状态在 UI 与报表中有意义时用标准 Workflow;状态仅建议性、无需权限校验时用普通 Select 字段;涉及多文档联动或需更丰富 UI 时自建 DocType 与 Page。
限制:无 on_workflow_state_change 钩子,需在 validate 或 before_save 中检查 has_value_changed;condition 在受限上下文运行,失败会静默隐藏操作;read_only_depends_on 仅 UI 限制;与 is_submittable 并用需理解 docstatus 与工作流状态并存;db_set 不触发引擎校验与通知。