Workflow 工作流
Workflow Map 是 Aras Innovator 中实现业务流程自动化的核心机制。它以图形化的方式定义审批、校验、通知等流程节点,并通过 Assignment(任务分配)将工作推送给具体的 Identity 执行。
Workflow vs Lifecycle
两者容易混淆,但职责完全不同:
| 对比维度 | Lifecycle | Workflow |
|---|---|---|
| 核心职责 | 数据状态管理(Draft → Released) | 业务流程编排(审批、评审、通知) |
| 粒度 | 每个 Item 一个状态 | 每个 Item 可启动一个 Workflow 实例 |
| 权限影响 | 可以通过 State Permission 控制 | 通过 Activity Assignment 控制执行权 |
| 交互方式 | 用户主动 Promote | 用户在 Inbox 中接收并处理 Task |
| 关联关系 | 绑定在 ItemType 上 | 可绑定在 Lifecycle State 上(状态激活时自动启动) |
典型做法是:Lifecycle 管"东西在哪个阶段",Workflow 管"这个阶段要经过哪些人审批"。
Workflow 的核心概念
| 元素 | 说明 |
|---|---|
| Activity(活动) | 工作流中的一个步骤节点,用户需要在此节点执行操作(审批、填写、上传附件等) |
| Path(路径) | 连接两个 Activity 的有向边,定义流转方向和条件 |
| Assignment(任务分配) | 每个 Activity 上配置的执行者(Identity),决定谁会收到这个任务 |
| Task(任务) | Activity 分配给用户后的具体工作项,出现在用户的 Inbox 中 |
| Workflow Variables | 在 Workflow 执行过程中传递的变量,可用于条件判断和表单数据交换 |
创建 Workflow Map
- 导航到 Administration → Workflow Maps
- 创建新 Map,填写 Name
- 画布中自动包含 Start 和 End 节点
- 右键画布添加 Activity 节点
- 从一个 Activity 拖拽连线到另一个 Activity 创建 Path
- 配置每个 Activity 的 Assignment 和 Path 的条件
Activity 配置
| 配置项 | 说明 |
|---|---|
| Name | 活动名称 |
| Label | 显示标签 |
| Assignment | 关系标签页,配置该 Activity 的执行 Identity |
| Form | 该 Activity 下展示的表单(可与默认表单不同) |
| Task Description | 任务描述,显示在用户 Inbox 中 |
| Get Signature | 是否要求电子签名 |
| Server Events | 活动开始和结束时可触发的 Server Method |
Path 配置
| 配置项 | 说明 |
|---|---|
| Name | 路径名称(如 Pass、Reject、Revise) |
| Label | 路径按钮的显示文本 |
| Get Comment | 是否要求用户填写流转备注 |
| Condition | 路径的条件表达式(基于 Workflow Variable) |
| Server Events | 路径触发前后可执行的 Server Method |
绑定 Workflow 到 Lifecycle State
最常见的集成方式是将 Workflow 绑定到 Lifecycle Map 的某个 State:
- 打开 Lifecycle Map 编辑
- 选中目标 State → Workflow 字段,选择对应的 Workflow Map
- 当 Item 被 Promote 到该状态时,Workflow 自动启动
也可以通过 Server Method 在代码中动态启动 Workflow:
csharp
Innovator inn = this.getInnovator();
// 启动一个 Workflow
Item workflowMap = inn.getItemByKey("Workflow Map", "MAP_ID");
Item activity = inn.getItemByKey("Activity", "ACTIVITY_ID");
Item workflow = inn.newItem("Workflow", "add");
workflow.setProperty("source_id", this.getID());
workflow.setProperty("workflow_map_id", workflowMap.getID());
workflow.setProperty("starting_activity_id", activity.getID());
Item result = workflow.apply();
if (result.isError())
{
return inn.newError("工作流启动失败:" + result.getErrorDetail());
}Inbox 与任务处理
当 Workflow 的某个 Activity 被激活,且当前用户属于该 Activity 的 Assignment Identity 时,任务会出现在用户的 Inbox(收件箱)中。
用户在 Inbox 中可以:
- 查看任务详情和关联的 Item
- 选择 Path 按钮(如 Approve / Reject)推进流程
- 填写 Comment(如果 Path 配置了 Get Comment)
- 添加附件或签名
Workflow Variables
Workflow 变量用于在流程的不同 Activity 之间传递数据:
| 变量类型 | 说明 |
|---|---|
| List | 从预定义列表中选择值,用于条件分支判断 |
| Item | 引用数据库中的具体 Item |
| String | 文本值 |
变量可以在 Path Condition 中使用,实现条件流转:
Path "Approve": variable "ApprovalStatus" = "Approved"
Path "Reject": variable "ApprovalStatus" = "Rejected"Workflow 事件扩展
每个 Activity 和 Path 都支持在执行前后触发 Server Method:
| 事件 | 触发时机 | 典型用途 |
|---|---|---|
| OnActivate Activity | Activity 被激活时 | 发送通知邮件、初始化表单字段 |
| OnClose Activity | Activity 被完成时 | 数据校验、计算汇总 |
| On Before Path | Path 触发前 | 拦截不满足条件的流转 |
| On After Path | Path 触发后 | 更新关联记录、同步外部系统 |
常见工作流模式
简单审批流
Start → Draft → [Engineering 审批] → Approved / Rejected → End多级会签
Start → 初审 → [部门经理] → [技术总监] → [质量经理] → Approved → End条件分支
Start → 评估 → [金额 > 10万?]
├── Yes → [总经理审批] → End
└── No → [部门经理审批] → End退回循环
Start → 提交 → [评审]
├── Pass → 批准 → End
└── Fail → 退回修改 → 提交 → [评审]