工作流管理
工作流管理
相关源文件
本章引用的主要源码文件:
mayan/apps/document_states/__init__.pymayan/apps/document_states/apps.pymayan/apps/document_states/classes.pymayan/apps/document_states/forms.pymayan/apps/document_states/icons.pymayan/apps/document_states/links.pymayan/apps/document_states/tests/literals.pymayan/apps/document_states/tests/test_workflow_actions.pymayan/apps/document_states/tests/test_workflow_views.pymayan/apps/document_states/urls.pymayan/apps/document_states/views/__init__.pymayan/apps/document_states/views/workflow_template_state_views.pymayan/apps/document_states/views/workflow_template_transition_views.pymayan/apps/document_states/views/workflow_template_views.pymayan/apps/document_states/workflow_actions.pymayan/apps/mailer/mailers.pymayan/apps/tags/workflow_actions.py
Mayan EDMS 的工作流管理系统为文档提供了自动化业务流程管理。它支持创建工作流模板,用于定义状态、转换以及文档可以流转的自动化操作。该系统涵盖了从模板定义到运行时执行和监控的完整生命周期。
关于通过元数据和索引进行文档组织的信息,请参阅文档组织。有关 REST API 实现的详细信息,请参阅 REST API 架构。
核心架构
工作流系统围绕 document_states 应用构建,为文档提供状态机实现。该架构将工作流模板(定义)与工作流实例(运行时执行)分离开来。
来源: mayan/apps/document_states/apps.py:89-115,mayan/apps/document_states/classes.py:17-26
工作流模板与实例
工作流模板
工作流模板定义了业务流程的蓝图。每个模板(Workflow 模型)包含:
- 状态:流程中定义的阶段(
WorkflowState) - 转换:在状态之间移动的规则(
WorkflowTransition) - 动作:由状态变更触发的自动化行为(
WorkflowStateAction) - 文档类型关联:哪些文档类型可以使用此工作流
工作流实例
当文档进入工作流时,会创建一个 WorkflowInstance 来跟踪文档在模板中的进度。每个实例维护:
- 当前状态
- 通过
WorkflowInstanceLogEntry记录的转换历史 - 运行时上下文数据
- 用户交互和评论
来源: mayan/apps/document_states/apps.py:102-106,mayan/apps/document_states/urls.py:74-95
状态与转换
工作流状态
状态代表业务流程中的离散阶段。每个 WorkflowState 具有:
| 属性 | 描述 | 代码引用 |
|---|---|---|
label | 人类可读的名称 | mayan/apps/document_states/forms.py:121 |
initial | 是否为起始状态 | mayan/apps/document_states/forms.py:121 |
completion | 完成百分比(0-100) | mayan/apps/document_states/forms.py:121 |
转换
转换(WorkflowTransition)定义了文档如何在状态之间移动,并包括:
- 源状态和目标状态:正在定义的状态变更
- 条件:必须评估为 true 的基于模板的逻辑
- 字段:在转换执行期间收集的数据
- 触发器:自动执行转换的事件
来源: mayan/apps/document_states/forms.py:125-149,mayan/apps/document_states/views/workflow_template_transition_views.py:40-81
工作流动作
工作流动作是在文档进入或离开状态时执行的自动化行为。该系统通过 WorkflowAction 基类提供可插拔的架构。
内置动作
| 动作类 | 用途 | 关键方法 |
|---|---|---|
DocumentPropertiesEditAction | 修改文档元数据 | execute() 带模板渲染 |
DocumentWorkflowLaunchAction | 启动额外的工作流 | 异步任务启动 |
HTTPAction | 外部系统集成 | 带认证的 HTTP 请求 |
动作执行框架
来源: mayan/apps/document_states/workflow_actions.py:22-308,mayan/apps/document_states/classes.py:27-135,mayan/apps/tags/workflow_actions.py:15-74
事件系统与触发器
工作流系统与 Mayan 的事件系统集成,以提供自动转换触发和审计追踪。
触发事件
当特定事件发生时,转换可以自动执行:
- 文档创建(
signal_post_document_type_change) - 用户操作(
handler_trigger_transition) - 基于时间的升级(
WorkflowStateEscalation) - 外部 API 调用
事件处理器
| 处理器函数 | 触发器 | 用途 |
|---|---|---|
handler_launch_workflow_on_create | 文档创建 | 自动启动工作流 |
handler_launch_workflow_on_type_change | 文档类型变更 | 重新评估工作流 |
handler_trigger_transition | 动作事件 | 执行自动转换 |
来源: mayan/apps/document_states/apps.py:675-692,mayan/apps/document_states/views/workflow_template_transition_views.py:327-402
管理界面
工作流系统为模板管理和运行时监控提供了全面的 Web 和 API 接口。
模板管理 URL
| URL 模式 | 视图类 | 用途 |
|---|---|---|
workflow_templates/ | WorkflowTemplateListView | 列出所有模板 |
workflow_templates/create/ | WorkflowTemplateCreateView | 创建新模板 |
workflow_templates/{id}/states/ | WorkflowTemplateStateListView | 管理状态 |
workflow_templates/{id}/transitions/ | WorkflowTemplateTransitionListView | 管理转换 |
运行时监控
系统提供运行时代理用于监控活跃的工作流:
WorkflowRuntimeProxy:工作流执行的聚合视图WorkflowStateRuntimeProxy:特定状态的文档计数WorkflowInstanceLogEntry:详细的审计追踪
来源: mayan/apps/document_states/urls.py:194-249,mayan/apps/document_states/views/workflow_proxy_views.py:38-117
集成点
文档集成
文档通过 DocumentStateHelper 类与工作流集成,该类提供:
# 通过 apps.py 添加到 Document 模型
Document.add_to_class(name='workflow', value=DocumentStateHelper.constructor)
这启用了如下访问模式:
document.workflow.<workflow_internal_name>.get_current_statedocument.workflows.all()- 文档的所有工作流实例
API 端点
| 端点模式 | 用途 |
|---|---|
/api/workflow_templates/ | 模板 CRUD 操作 |
/api/documents/{id}/workflow_instances/ | 实例管理 |
/api/workflow_templates/{id}/states/ | 状态配置 |
/api/workflow_templates/{id}/transitions/ | 转换管理 |
权限系统
工作流通过以下方式与 Mayan 的 ACL 系统集成:
permission_workflow_template_view- 查看模板permission_workflow_template_edit- 修改模板permission_workflow_tools- 执行工作流permission_workflow_instance_transition- 执行转换
来源: mayan/apps/document_states/apps.py:116-118,mayan/apps/document_states/urls.py:320-439,mayan/apps/document_states/permissions.py