工作流管理(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/mayan-edms/Mayan-EDMS/4.4-workflow-management
翻译时间:2026-05-27T08:44:23.768Z
翻译模型:deepseek-chat
原文字符数:11947
项目:Mayan EDMS (mayan-edms)
---
工作流管理
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
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 应用构建,为文档提供状态机实现。该架构将工作流模板(定义)与工作流实例(运行时执行)分离开来。
graph TB
subgraph "模板层"
Workflow["工作流<br/>(模板定义)"]
WorkflowState["工作流状态<br/>(状态定义)"]
WorkflowTransition["工作流转换<br/>(转换规则)"]
WorkflowStateAction["工作流状态动作<br/>(动作定义)"]
end
subgraph "运行时层"
WorkflowInstance["工作流实例<br/>(文档执行)"]
WorkflowInstanceLogEntry["工作流实例日志条目<br/>(审计追踪)"]
Document["文档<br/>(目标对象)"]
end
subgraph "支持组件"
WorkflowAction["工作流动作<br/>(动作基类)"]
DocumentStateHelper["文档状态助手<br/>(文档集成)"]
WorkflowRuntimeProxy["工作流运行时代理<br/>(监控)"]
end
Workflow --> WorkflowState
Workflow --> WorkflowTransition
WorkflowState --> WorkflowStateAction
WorkflowTransition --> WorkflowTransitionField["工作流转换字段"]
WorkflowTransition --> WorkflowTransitionTriggerEvent["工作流转换触发事件"]
Workflow --> WorkflowInstance
WorkflowInstance --> Document
WorkflowInstance --> WorkflowInstanceLogEntry
WorkflowInstance --> WorkflowState
WorkflowStateAction --> WorkflowAction
Document --> DocumentStateHelper
Workflow --> WorkflowRuntimeProxy
来源: mayan/apps/document_states/apps.py:89-115,mayan/apps/document_states/classes.py:17-26
工作流模板与实例
工作流模板
工作流模板定义了业务流程的蓝图。每个模板(Workflow 模型)包含:
- 状态:流程中定义的阶段(
WorkflowState) - 转换:在状态之间移动的规则(
WorkflowTransition) - 动作:由状态变更触发的自动化行为(
WorkflowStateAction) - 文档类型关联:哪些文档类型可以使用此工作流
工作流实例
当文档进入工作流时,会创建一个 WorkflowInstance 来跟踪文档在模板中的进度。每个实例维护:
- 当前状态
- 通过
WorkflowInstanceLogEntry记录的转换历史 - 运行时上下文数据
- 用户交互和评论
graph LR
subgraph "模板空间"
WT["工作流模板<br/>workflow_template_create"]
WS1["初始状态<br/>workflow_template_state_create"]
WS2["审核状态"]
WS3["最终状态"]
WTR1["提交转换<br/>workflow_template_transition_create"]
WTR2["批准转换"]
end
subgraph "运行时空间"
DOC["文档"]
WI["工作流实例<br/>workflow_instance_detail"]
LOG1["日志条目:已创建"]
LOG2["日志条目:已转换"]
CURR["当前状态:审核"]
end
WT --> WI
WS1 --> CURR
DOC --> WI
WI --> LOG1
WI --> LOG2
WI --> CURR
WS1 --> WTR1 --> WS2
WS2 --> WTR2 --> WS3
来源: 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 的基于模板的逻辑
- 字段:在转换执行期间收集的数据
- 触发器:自动执行转换的事件
stateDiagram-v2
[*] --> 草稿: "document_create"
草稿 --> 审核: "submit_transition<br/>condition: document.label != ''"
审核 --> 已批准: "approve_transition<br/>trigger: user_action"
审核 --> 已拒绝: "reject_transition<br/>action: send_notification"
已批准 --> [*]
已拒绝 --> 草稿: "revise_transition<br/>field: revision_comment"
state 草稿 {
action1: "WorkflowStateAction<br/>document_properties_edit"
}
state 审核 {
escalation1: "WorkflowStateEscalation<br/>auto_approve_after_7days"
}
来源: 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 请求 |
动作执行框架
graph TD
WS["WorkflowState<br/>initial=true"]
WSA["WorkflowStateAction<br/>when=WORKFLOW_ACTION_ON_ENTRY"]
WA["WorkflowAction.execute()"]
subgraph "动作类型"
DPE["DocumentPropertiesEditAction<br/>render_field()"]
DWL["DocumentWorkflowLaunchAction<br/>task_launch_workflow_for"]
HTTP["HTTPAction<br/>requests.request()"]
TAG["AttachTagAction<br/>tag.attach_to()"]
end
WS --> WSA
WSA --> WA
WA --> DPE
WA --> DWL
WA --> HTTP
WA --> TAG
DPE --> CTX["上下文:<br/>document, workflow_instance"]
DWL --> TASK["Celery 任务"]
HTTP --> EXT["外部系统"]
TAG --> PERM["ACL 检查"]
来源: 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