工作流系统
工作流系统
相关源文件
以下文件为本维基页面的生成提供了上下文:
paperless.conf.examplesrc-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.htmlsrc-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.scsssrc-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.tssrc-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.tssrc-ui/src/app/data/workflow-action.tssrc-ui/src/app/data/workflow-trigger.tssrc/documents/admin.pysrc/documents/apps.pysrc/documents/consumer.pysrc/documents/file_handling.pysrc/documents/models.pysrc/documents/parsers.pysrc/documents/signals/handlers.pysrc/documents/tests/test_api_workflows.pysrc/documents/tests/test_consumer.pysrc/documents/tests/test_file_handling.pysrc/documents/tests/test_workflows.pysrc/documents/workflows/__init__.pysrc/documents/workflows/actions.pysrc/documents/workflows/mutations.pysrc/documents/workflows/utils.py
Paperless-ngx 中的工作流系统是一个灵活的自动化引擎,允许用户为文档管理定义"如果这样,则那样"的规则。它能够根据文档生命周期事件或计划任务,自动完成元数据分配、通知发送以及与外部服务的集成。
系统总览
工作流引擎通过将 WorkflowTrigger(工作流触发器)条件与文档进行匹配,并执行一系列 WorkflowAction(工作流动作)实体来运行。工作流在关键阶段被处理:在初始入库管线期间、文档被添加或更新时,或者通过周期性后台任务处理计划触发器。
工作流执行生命周期
下图展示了系统如何从文档事件过渡到自动化动作的执行。
工作流执行流程
来源:src/documents/signals/handlers.py:49-66, src/documents/apps.py:10-33, src/documents/consumer.py:67-87
工作流触发器
触发器定义了工作流被激活的条件。一个工作流可以拥有多个触发器。
| 触发器类型 | 代码符号 | 描述 |
|---|---|---|
| 入库开始 | CONSUMPTION | 在文档保存*之前*运行。可以在入库过程中覆盖元数据(标题、标签等)。 |
| 文档已添加 | ADDED | 在文档成功保存到数据库后运行。 |
| 文档已更新 | UPDATED | 每当文档的元数据或内容被修改时运行。 |
| 计划任务 | SCHEDULED | 基于日期字段运行(例如,"自定义日期 X 前 7 天")。 |
触发器支持基于文档属性(如 sources、tags、correspondent、document_type)以及使用 filter_filename 进行文件名模式匹配的广泛过滤。
有关触发器逻辑和过滤的详细信息,请参见工作流触发器与动作。
来源:src/documents/models.py:488-518, src/documents/consumer.py:80-84
工作流动作
动作定义了当触发器匹配时系统执行的操作。动作按照用户定义的顺序执行。
分配与移除
工作流可以自动修改文档元数据。这通过"变更"(mutations)来处理,这些变更要么直接应用于 Document 实例,要么在入库期间运行工作流时应用于 DocumentMetadataOverrides。
- 分配:分配标签、信函方、文档类型、存储路径、所有者或自定义字段。
- 移除:移除特定标签或清空元数据字段。
外部集成
- 邮件:使用 Django 的邮件系统发送通知。支持占位符,如
{{document_title}}。 - Webhook:向指定 URL 发送一个 POST 请求,请求体为包含文档元数据的 JSON 载荷。
- 移至回收站:自动将文档移至回收站(软删除)。
有关占位符模板和动作执行的详细信息,请参见工作流触发器与动作。
来源:src/documents/models.py:575-654, src/documents/workflows/mutations.py:10-25, src/documents/workflows/actions.py:58-61
工作流 UI 与 API
工作流系统通过 Paperless-ngx 前端中的专用界面进行管理。
前端编辑对话框
WorkflowEditDialogComponent 提供了一个嵌套式的手风琴界面,用于管理触发器和动作。它允许用户:
- 定义触发器过滤器(例如,仅对来自"邮件抓取"的文档触发)。
- 配置计划偏移量(例如,相对于自定义字段的"-30 天")。
- 拖放动作以重新排序执行。
REST 接口
工作流通过 /api/workflows/ 端点暴露。API 处理工作流、触发器和动作之间多对多关系的复杂嵌套序列化。
有关 UI 实现和 API 端点的详细信息,请参见工作流 UI 与 API。
来源:src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html:1-109, src/documents/serialisers.py:62-65
数据模型关系
下图将高层工作流概念映射到后端实现的 Django 模型。
工作流实体关系
来源:src/documents/models.py:448-470, src/documents/models.py:488-518, src/documents/models.py:575-654