@microi.net/cli 5.7.3 → 5.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/README.md +71 -71
- package/assets/build-meta.json +7 -7
- package/cordis.patch.yml +2 -2
- package/package.json +1 -1
- package/scripts/mcp-server.js +101 -101
- package/scripts/microi-cli.js +2 -2
- package/scripts/microi-codex-broker.js +450 -447
- package/scripts/microi-codex-router.js +2 -2
- package/scripts/microi-skills.meta.json +231 -222
- package/skills/.microi-skills-version.json +6 -6
- package/skills/.progressive-disclosure-manifest.json +3566 -3566
- package/skills/ai-engine/SKILL.md +31 -11
- package/skills/ai-engine/references/ai-employees.md +44 -0
- package/skills/ai-engine/references/self-hosted-digital-human.md +45 -0
- package/skills/app-store/SKILL.md +249 -208
- package/skills/job-engine/SKILL.md +21 -20
- package/skills/message-notification/SKILL.md +156 -155
- package/skills/microi-ai-application/SKILL.md +7 -3
- package/skills/microi-client-frontend/SKILL.md +34 -32
- package/skills/microi-codex/SKILL.md +8 -8
- package/skills/microi-codex-installer/SKILL.md +5 -5
- package/skills/microi-datasource-mapping/SKILL.md +9 -1
- package/skills/microi-docs-coverage/references/capability-map.md +4 -0
- package/skills/microi-form-engine/SKILL.md +7 -1
- package/skills/microi-frontend-sdk/SKILL.md +4 -2
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +1 -1
- package/skills/microi-microservice/SKILL.md +41 -30
- package/skills/module-engine/SKILL.md +58 -42
- package/skills/playwright-e2e/SKILL.md +3 -3
- package/skills/print-engine/SKILL.md +50 -48
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-file-upload/SKILL.md +189 -182
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +13 -3
- package/skills/v8-mq-mqtt/SKILL.md +2 -1
- package/skills/v8-saas-multi-tenant/SKILL.md +7 -1
- package/skills/v8-table-event/SKILL.md +4 -2
- package/skills/v8-tcp-integration/SKILL.md +2 -2
- package/skills/v8-workflow/SKILL.md +93 -66
- package/skills/v8-workflow/references/workflow-configuration.md +49 -0
- package/skills/workspace-conventions/SKILL.md +261 -261
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -208
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +7 -7
|
@@ -1,21 +1,48 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: v8-workflow
|
|
3
|
-
description: Microi V8 工作流事件指南。用于编写审批流条件、节点 V8 代码、wf_flowdesign/wf_node/wf_line 逻辑、V8.WF 变量和工作流路由。
|
|
3
|
+
description: Microi V8 工作流事件指南。用于编写审批流条件、节点 V8 代码、wf_flowdesign/wf_node/wf_line 逻辑、V8.WF 变量和工作流路由。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
7
|
|
|
8
8
|
# Microi V8 工作流事件开发
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
## AI / MCP 生成流程的必检契约
|
|
11
|
+
|
|
12
|
+
这里的流程是 `wf_flowdesign + wf_node + wf_line` 审批引擎,不是 `ai-workflow`。
|
|
13
|
+
先用 `microi_get_db_schema` 查询 `wf_flowdesign`、`wf_node`、`wf_line`、
|
|
14
|
+
`sys_menu` 与目标业务表,再用 `microi_list_roles` 或管理员只读表查询确认当前租户的
|
|
15
|
+
真实用户、角色、部门、岗位 Id。人工节点 `Approve/Countersign/End` 必须配置
|
|
16
|
+
`Users/Roles/Depts/BindJobs` 至少一种真实 `[{"Id":"...","Name":"..."}]`
|
|
17
|
+
绑定,或明确采用上游节点 `AllowSelectUsers=1` 手动选人。
|
|
18
|
+
`SameDeptApprove=1` 只筛选候选人,不能单独产生审批人。
|
|
19
|
+
不能把 `Roles:"Manager"`、字符串 Id 数组或另一个租户的 Id 当作绑定。
|
|
20
|
+
|
|
21
|
+
节点类型只使用 `Start/Auto/Business/Approve/Countersign/End/AutoEnd`;
|
|
22
|
+
`End` 是人工节点,自动结束用 `AutoEnd`。每个节点应有稳定 Id;
|
|
23
|
+
`PositionLeft/PositionTop` 使用像素(如 `"320px"`)。新版 MCP 对缺失坐标按
|
|
24
|
+
拓扑层级布局并补 `px`,明确重叠、非法类型、断线、不可达、无人审批会在写入前失败。
|
|
25
|
+
节点人员绑定在写入时仅保留 `Id/Name`,不能把完整 `sys_user` 记录及密码字段嵌入流程。
|
|
26
|
+
MCP 写入前会回读当前租户的用户、角色、部门和岗位 Id;回读失败或 Id 不存在时停止保存。
|
|
27
|
+
|
|
28
|
+
模块入口使用 `sys_menu.OpenType="WorkFlow"`、`FlowDesignId=<已启用流程真实 Id>`,
|
|
29
|
+
`DiyTableId` 与 `wf_flowdesign.TableId` 相同。完整 Manifest 内可用模块
|
|
30
|
+
`flowName` 指向同一份 `workflows[].FlowDesign.FlowName`,生成器保存流程后补写并回读
|
|
31
|
+
`FlowDesignId`;引用既有流程时传 `flowDesignId`。上线前从模块打开并发起一条真实
|
|
32
|
+
业务记录,确认流程图节点、人员待办、审批、历史与模块入口均正确。
|
|
33
|
+
|
|
34
|
+
全部配置字段、节点类型和运行操作见
|
|
35
|
+
[流程配置清单](references/workflow-configuration.md)。
|
|
36
|
+
|
|
37
|
+
你正在开发 Microi 吾码平台的工作流(审批流程)V8 事件。流程引擎基于表单引擎,通过 V8 事件控制审批逻辑。
|
|
38
|
+
|
|
39
|
+
## 后端类库与接口边界
|
|
40
|
+
|
|
41
|
+
- 工作流运行时固定属于独立 `Microi.WorkFlow` 类库;`Microi.net.Api` 只注册 `AddMicroiWorkFlow()`,不得恢复 `WorkFlowController` 或把流程业务写回 `Program.cs`。
|
|
42
|
+
- 对外与旧移动端路由统一由官方 Managed `platform-workflow` 接口引擎承载,历史 `/api/WorkFlow/*` 地址写入同一记录的 `ApiRoutes`。租户个性化逻辑写在 CreateIfMissing `platform-workflow-custom-hook`,默认只返回 `{ Code: 1 }`。
|
|
43
|
+
- `Microi.Core` 只保留避免循环引用所需的 `IWFEngine`、模型和最小运行时合同;发起、审批、撤回、移交、退回及审批人计算实现在 `Microi.WorkFlow`,并按职责拆分 partial 文件。
|
|
44
|
+
- 新业务规则仍优先写工作流 V8/接口引擎。只有事务、流程状态机、可信当前用户和运行时内核缺少不可伪造的底层原子时,才扩展 `Microi.WorkFlow`。
|
|
45
|
+
- 官方发布时 `Microi.WorkFlow` 必须生成 NuGet 包,并与 `Microi.AI` 使用同一 Obfuscar 配置加密后替换包内 DLL;不得推送未加密的 WorkFlow 包。开源安装只消费 NuGet,不要求存在私有源码。
|
|
19
46
|
|
|
20
47
|
<!-- microi-progressive:begin -->
|
|
21
48
|
<!-- microi-progressive:chunk id=v8-workflow-000 sha256=9030cd2de9f1febfb9a749c82cf83e97ccb8fb972a3f8f0ff11067488e14cd8e -->
|
|
@@ -27,11 +54,11 @@ description: Microi V8 工作流事件指南。用于编写审批流条件、节
|
|
|
27
54
|
|
|
28
55
|
```javascript
|
|
29
56
|
/*
|
|
30
|
-
* V8 工作流
|
|
31
|
-
* WorkflowKey: 示例流程Key
|
|
57
|
+
* V8 工作流
|
|
58
|
+
* WorkflowKey: 示例流程Key
|
|
32
59
|
* EventType: WFNodeLine/WFNodeStart/WFNodeEnd
|
|
33
60
|
* Version: v1.0.0
|
|
34
|
-
* 功能说明:
|
|
61
|
+
* 功能说明:
|
|
35
62
|
* - 完整说明该工作流 V8 控制的节点动作、路线条件、审批变量和副作用。
|
|
36
63
|
*/
|
|
37
64
|
```
|
|
@@ -42,7 +69,7 @@ description: Microi V8 工作流事件指南。用于编写审批流条件、节
|
|
|
42
69
|
|
|
43
70
|
<!-- /microi-progressive:chunk -->
|
|
44
71
|
<!-- microi-progressive:chunk id=v8-workflow-001 sha256=53550786c531c347cfe9d92247b07d127c348210f07e302a1b68f278136c3e77 -->
|
|
45
|
-
## 工作流物理表
|
|
72
|
+
## 工作流物理表
|
|
46
73
|
|
|
47
74
|
| 表名 | 说明 |
|
|
48
75
|
|------|------|
|
|
@@ -51,51 +78,51 @@ description: Microi V8 工作流事件指南。用于编写审批流条件、节
|
|
|
51
78
|
| `wf_line` | 节点间连线/条件 |
|
|
52
79
|
| `wf_flow` | 流程实例(一次发起对应一行) |
|
|
53
80
|
| `wf_work` | 待办/已办工作 |
|
|
54
|
-
| `wf_history` | 审批历史(每次同意/拒绝/撤回的记录) |
|
|
55
|
-
|
|
56
|
-
### 原生人员、自动结束与取消快照契约
|
|
57
|
-
|
|
58
|
-
- `wf_node.Users` 是 JSON 序列化的 `IdName` 对象数组,例如 `[{"Id":"<user-id>","Name":"审核人"}]`;不能保存为字符串 Id 数组。`Name` 仅供显示,业务授权仍须按当前主库用户、角色和实际待办接收人判断。前端 `V8.WF.ForceSelectUsers` 的字符串数组是另一份 API 契约,不能混用。
|
|
59
|
-
- 自动结束节点的 `NodeType` 使用 `AutoEnd`。它可能继承上一人工节点的 `ApprovalType=Agree`,并生成一条结束历史;核对独立审批人数时只计入明确配置的人工节点,不能把结束节点当成额外审核人。
|
|
60
|
-
- 原生 `CancelFlow` 可将请求中的 `FormData` 写回 `wf_flow.FormData`;未传时可能保存 `{}`。应用不能把取消后的实例 `FormData` 当成不可变的原始提交快照。需要恢复冻结业务单时,优先核对业务表保存的服务端快照摘要;若使用原生历史,必须限定同一实例、同一业务表/行、唯一原始开始节点及发起人、自动提交历史,并检查版本、金额、配置摘要和零待办。此分支只能恢复草稿或驳回状态,不能据此批准或过账。
|
|
61
|
-
- 当前 `CancelFlow(WFParam)` 使用独立事务,没有 `StartWork/SendWork` 的共享 `DbTrans` 重载。应用不得在持有实例、工作或业务行锁的接口事务内调用取消,也不能假设给它多传一个参数便会共享事务。微服务可顺序执行“服务端核验并返回真实待办坐标 → 原生取消 → 业务终态复核”,每个请求完成后释放其事务;网络结果未知时先复核终态,不能盲目重发取消或提前恢复业务状态。
|
|
62
|
-
- 验收至少覆盖真实取消时不传 `FormData`、伪造取消载荷、退回后直接重提被拒绝、取消后新实例重提、自动结束继承 `Agree`,以及普通角色不能修改取证用的流程历史。模拟正确 JSON 不替代原生 HTTP 验收。
|
|
63
|
-
|
|
64
|
-
直接 SQL 查询常用场景:
|
|
81
|
+
| `wf_history` | 审批历史(每次同意/拒绝/撤回的记录) |
|
|
82
|
+
|
|
83
|
+
### 原生人员、自动结束与取消快照契约
|
|
84
|
+
|
|
85
|
+
- `wf_node.Users` 是 JSON 序列化的 `IdName` 对象数组,例如 `[{"Id":"<user-id>","Name":"审核人"}]`;不能保存为字符串 Id 数组。`Name` 仅供显示,业务授权仍须按当前主库用户、角色和实际待办接收人判断。前端 `V8.WF.ForceSelectUsers` 的字符串数组是另一份 API 契约,不能混用。
|
|
86
|
+
- 自动结束节点的 `NodeType` 使用 `AutoEnd`。它可能继承上一人工节点的 `ApprovalType=Agree`,并生成一条结束历史;核对独立审批人数时只计入明确配置的人工节点,不能把结束节点当成额外审核人。
|
|
87
|
+
- 原生 `CancelFlow` 可将请求中的 `FormData` 写回 `wf_flow.FormData`;未传时可能保存 `{}`。应用不能把取消后的实例 `FormData` 当成不可变的原始提交快照。需要恢复冻结业务单时,优先核对业务表保存的服务端快照摘要;若使用原生历史,必须限定同一实例、同一业务表/行、唯一原始开始节点及发起人、自动提交历史,并检查版本、金额、配置摘要和零待办。此分支只能恢复草稿或驳回状态,不能据此批准或过账。
|
|
88
|
+
- 当前 `CancelFlow(WFParam)` 使用独立事务,没有 `StartWork/SendWork` 的共享 `DbTrans` 重载。应用不得在持有实例、工作或业务行锁的接口事务内调用取消,也不能假设给它多传一个参数便会共享事务。微服务可顺序执行“服务端核验并返回真实待办坐标 → 原生取消 → 业务终态复核”,每个请求完成后释放其事务;网络结果未知时先复核终态,不能盲目重发取消或提前恢复业务状态。
|
|
89
|
+
- 验收至少覆盖真实取消时不传 `FormData`、伪造取消载荷、退回后直接重提被拒绝、取消后新实例重提、自动结束继承 `Agree`,以及普通角色不能修改取证用的流程历史。模拟正确 JSON 不替代原生 HTTP 验收。
|
|
90
|
+
|
|
91
|
+
直接 SQL 查询常用场景:
|
|
65
92
|
|
|
66
93
|
```javascript
|
|
67
94
|
// 我的待办
|
|
68
|
-
var todo = V8.Db.FromSql(
|
|
69
|
-
'SELECT Id, FlowId, NodeId, FlowTitle, WorkState, ReceiverId, TableRowId FROM wf_work WHERE ReceiverId = @p0 AND WorkState = @p1 ORDER BY CreateTime DESC'
|
|
70
|
-
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
71
|
-
.AddInParameter("@p1", 'Todo')
|
|
72
|
-
.ToArray();
|
|
73
|
-
|
|
74
|
-
// 我发起的
|
|
75
|
-
var mine = V8.Db.FromSql(
|
|
76
|
-
'SELECT Id, FlowTitle, FlowState, SenderId, TableRowId FROM wf_flow WHERE SenderId = @p0 ORDER BY CreateTime DESC'
|
|
77
|
-
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
78
|
-
.ToArray();
|
|
79
|
-
|
|
80
|
-
// 流程历史
|
|
81
|
-
var history = V8.Db.FromSql(
|
|
82
|
-
'SELECT * FROM wf_history WHERE FlowId = @p0 ORDER BY CreateTime ASC'
|
|
83
|
-
).AddInParameter("@p0", V8.Param.flowId)
|
|
84
|
-
.ToArray();
|
|
85
|
-
```
|
|
95
|
+
var todo = V8.Db.FromSql(
|
|
96
|
+
'SELECT Id, FlowId, NodeId, FlowTitle, WorkState, ReceiverId, TableRowId FROM wf_work WHERE ReceiverId = @p0 AND WorkState = @p1 ORDER BY CreateTime DESC'
|
|
97
|
+
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
98
|
+
.AddInParameter("@p1", 'Todo')
|
|
99
|
+
.ToArray();
|
|
100
|
+
|
|
101
|
+
// 我发起的
|
|
102
|
+
var mine = V8.Db.FromSql(
|
|
103
|
+
'SELECT Id, FlowTitle, FlowState, SenderId, TableRowId FROM wf_flow WHERE SenderId = @p0 ORDER BY CreateTime DESC'
|
|
104
|
+
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
105
|
+
.ToArray();
|
|
106
|
+
|
|
107
|
+
// 流程历史
|
|
108
|
+
var history = V8.Db.FromSql(
|
|
109
|
+
'SELECT * FROM wf_history WHERE FlowId = @p0 ORDER BY CreateTime ASC'
|
|
110
|
+
).AddInParameter("@p0", V8.Param.flowId)
|
|
111
|
+
.ToArray();
|
|
112
|
+
```
|
|
86
113
|
|
|
87
114
|
<!-- /microi-progressive:chunk -->
|
|
88
115
|
<!-- microi-progressive:chunk id=v8-workflow-002 sha256=377698ecb64266fb74399ea664010e0a46156d13c3e047de1b2cbae3dbba15c7 -->
|
|
89
|
-
## 流程 V8 事件执行顺序
|
|
90
|
-
|
|
91
|
-
工作流合并提交请求的 `_FormSubmitAction` 可使用 `Add/Edit`;表单后端事件中的
|
|
92
|
-
`V8.FormSubmitAction` 实际为 `Insert/Update/Delete`,两者不能混淆。删除事件把服务端
|
|
93
|
-
读取的待删除行放在 `V8.Form`,`V8.OldForm` 为空;校验删除归属、状态或引用时应以
|
|
94
|
-
`V8.Form.Id` 在共享事务中重新读取并锁定原行,不应假定 `OldForm` 与修改事件相同。
|
|
95
|
-
|
|
96
|
-
节点开始事件成功继续流转时保持 `V8.Result` 为空或设为布尔 `true`;不要用
|
|
97
|
-
`V8.Result={Code:1}`,非布尔结果会提前结束当前流转。节点校验失败应抛出异常,
|
|
98
|
-
尤其节点结束事件不可依赖 `return {Code:0}` 阻止事务提交。
|
|
116
|
+
## 流程 V8 事件执行顺序
|
|
117
|
+
|
|
118
|
+
工作流合并提交请求的 `_FormSubmitAction` 可使用 `Add/Edit`;表单后端事件中的
|
|
119
|
+
`V8.FormSubmitAction` 实际为 `Insert/Update/Delete`,两者不能混淆。删除事件把服务端
|
|
120
|
+
读取的待删除行放在 `V8.Form`,`V8.OldForm` 为空;校验删除归属、状态或引用时应以
|
|
121
|
+
`V8.Form.Id` 在共享事务中重新读取并锁定原行,不应假定 `OldForm` 与修改事件相同。
|
|
122
|
+
|
|
123
|
+
节点开始事件成功继续流转时保持 `V8.Result` 为空或设为布尔 `true`;不要用
|
|
124
|
+
`V8.Result={Code:1}`,非布尔结果会提前结束当前流转。节点校验失败应抛出异常,
|
|
125
|
+
尤其节点结束事件不可依赖 `return {Code:0}` 阻止事务提交。
|
|
99
126
|
|
|
100
127
|
1. 用户点击发起流程或处理工作
|
|
101
128
|
2. **表单进入 V8 事件(前端 FormIn)**
|
|
@@ -178,7 +205,7 @@ if (V8.Form.Money <= 100) {
|
|
|
178
205
|
|
|
179
206
|
<!-- /microi-progressive:chunk -->
|
|
180
207
|
<!-- microi-progressive:chunk id=v8-workflow-006 sha256=8e2a82330c7f49c3a03920123531d310ea329fd310179918d835e3c05d49771a -->
|
|
181
|
-
## 前端发起流程
|
|
208
|
+
## 前端发起流程
|
|
182
209
|
|
|
183
210
|
```javascript
|
|
184
211
|
// 在 V8 按钮或自定义逻辑中发起流程
|
|
@@ -197,18 +224,18 @@ V8.WF.StartWork({
|
|
|
197
224
|
V8.Tips(result.Msg, false);
|
|
198
225
|
}
|
|
199
226
|
});
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
<!-- /microi-progressive:chunk -->
|
|
203
|
-
## “我的工作”与审核界面交付规则
|
|
204
|
-
|
|
205
|
-
- 模块使用“流程引擎”打开方式时,关联流程只能选择已启用的 `wf_flowdesign`;交付前同时验证流程已启用、模块 `OpenType=WorkFlow`、`FlowDesignId` 正确,且开始节点不存在测试阻断 V8。
|
|
206
|
-
- `StartWork` / `DoWork` 必须通过工作流与表单合并提交能力保存。审核态只保留“处理工作”、流转记录/流程图和关闭;不得同时显示普通保存、取消编辑、草稿箱、删除、显示隐藏字段或普通表单更多按钮。
|
|
207
|
-
- “我的工作”菜单角标使用“未处理待办 + 未读抄送”。待办 Tab 显示未处理数,抄送 Tab 显示未读数;我发起的、我处理的、我相关的按各自列表查询口径统计,不能用 `wf_work` 的近似口径代替 `wf_flow` 列表口径。
|
|
208
|
-
- 新抄送项应显式保存 `IsRead=false`,用户打开后由可信后端按当前身份标记已读。历史 `CopyUsers` 项没有 `IsRead` 时按已读兼容,避免升级后把全部历史抄送误报为未读。
|
|
209
|
-
- “查看流程图”验收必须从真实流转记录入口打开,确认流程定义、当前节点高亮、连线和弹窗尺寸正常,并检查浏览器无脚本错误;只验证流程 JSON 拓扑不等于完成 UI 验收。
|
|
210
|
-
|
|
211
|
-
## 详细参考路由(渐进披露)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
<!-- /microi-progressive:chunk -->
|
|
230
|
+
## “我的工作”与审核界面交付规则
|
|
231
|
+
|
|
232
|
+
- 模块使用“流程引擎”打开方式时,关联流程只能选择已启用的 `wf_flowdesign`;交付前同时验证流程已启用、模块 `OpenType=WorkFlow`、`FlowDesignId` 正确,且开始节点不存在测试阻断 V8。
|
|
233
|
+
- `StartWork` / `DoWork` 必须通过工作流与表单合并提交能力保存。审核态只保留“处理工作”、流转记录/流程图和关闭;不得同时显示普通保存、取消编辑、草稿箱、删除、显示隐藏字段或普通表单更多按钮。
|
|
234
|
+
- “我的工作”菜单角标使用“未处理待办 + 未读抄送”。待办 Tab 显示未处理数,抄送 Tab 显示未读数;我发起的、我处理的、我相关的按各自列表查询口径统计,不能用 `wf_work` 的近似口径代替 `wf_flow` 列表口径。
|
|
235
|
+
- 新抄送项应显式保存 `IsRead=false`,用户打开后由可信后端按当前身份标记已读。历史 `CopyUsers` 项没有 `IsRead` 时按已读兼容,避免升级后把全部历史抄送误报为未读。
|
|
236
|
+
- “查看流程图”验收必须从真实流转记录入口打开,确认流程定义、当前节点高亮、连线和弹窗尺寸正常,并检查浏览器无脚本错误;只验证流程 JSON 拓扑不等于完成 UI 验收。
|
|
237
|
+
|
|
238
|
+
## 详细参考路由(渐进披露)
|
|
212
239
|
|
|
213
240
|
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
214
241
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# 工作流引擎配置清单
|
|
2
|
+
|
|
3
|
+
事实源:当前租户 `microi_get_db_schema`、`Microi.Core/Param/WFParam.cs`、
|
|
4
|
+
`Microi.WorkFlow` 运行时、PC `views/workflow/component`。下表只描述审批工作流。
|
|
5
|
+
|
|
6
|
+
## 定义、节点、连线
|
|
7
|
+
|
|
8
|
+
| 资源 | 可配置字段 | 用途与注意 |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `wf_flowdesign` | `FlowName, Category, Description, Remark, Sort, Preview, JsonData` | 名称、分类、说明、排序、预览与画布数据;画布最终按 `wf_node/wf_line` 渲染。 |
|
|
11
|
+
| `wf_flowdesign` | `TableId, IsEnable, Roles, StartV8, EndV8` | 关联业务 `diy_table.Id`、启用、允许发起角色、流程开始/结束事件。模块流程只选已启用项。 |
|
|
12
|
+
| `wf_node` | `Id, NodeName, NodeType, Icon, Description, Remark, PositionLeft, PositionTop` | 稳定节点身份、类型和画布位置。坐标写为 CSS 像素;缺失时 MCP 自动布局。 |
|
|
13
|
+
| `wf_node` | `Users, Roles, Depts, BindJobs, SameDeptApprove` | 前四者是 `[{Id,Name}]` JSON 审批人来源;`SameDeptApprove` 只进一步筛选同部门候选人,不能单独提供接收人。不能伪造跨租户 Id。 |
|
|
14
|
+
| `wf_node` | `AllowSelectUsers, AllowAddUsers, AllowRecall, AllowHandOver, HideHandOverSelect, BackNodes, Timeout` | 上游手选下节点人员、加签、撤回、移交、隐藏移交选择、可退回节点、超时。`BackNodes` 保存 `[{Id,NodeName}]`;会签通常不启用手选。 |
|
|
15
|
+
| `wf_node` | `CopyUsers, DisplayFields, HideFields, EditFields, FieldsConfig, FieldsConfigComponent, TableId` | 抄送 `IdName` 列表、节点表单字段权限、配置组件与业务表。字段配置应从当前表真实字段建模。 |
|
|
16
|
+
| `wf_node` | `StartV8, StartV8Server, EndV8, EndV8Server, LineValueV8, AllowAddUserV8Code` | 前后端节点开始/结束事件、多出线选择与加签过滤代码。条件写在当前节点,不要误放在 `wf_line.V8Code`。 |
|
|
17
|
+
| `wf_line` | `Id, FromNodeId, ToNodeId, LineName, LineValue, V8Code` | 稳定线身份、端点、展示标题、条件值与兼容线代码。标题用“起点 到 终点”;分支由源节点 `LineValueV8` 指定 `V8.NextNodeId` 或 `V8.LineValue`。 |
|
|
18
|
+
|
|
19
|
+
`NodeType`:`Start` 发起;`Auto` 自动;`Business` 业务提交;
|
|
20
|
+
`Approve` 审批;`Countersign` 会签;`End` 人工结束;`AutoEnd` 自动结束。
|
|
21
|
+
人工节点必须有真实接收人策略,否则流程可能创建实例却无待办。
|
|
22
|
+
|
|
23
|
+
## 实例与操作
|
|
24
|
+
|
|
25
|
+
| 资源/动作 | 功能 |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `wf_flow` | 流程实例、业务表/行、发起人、状态、最近表单 JSON、经办人与抄送汇总。`FormData` 会变化,不是原始快照。 |
|
|
28
|
+
| `wf_work` | 每个接收人的待办/已办;按 `ReceiverId + WorkState` 确定可处理工作。 |
|
|
29
|
+
| `wf_history` | 每一步的起止节点、连线、处理人、意见、表单与抄送历史。 |
|
|
30
|
+
| `StartWork / StartWorkWithForm` | 发起流程;新业务行建议使用合并表单提交接口。 |
|
|
31
|
+
| `SendWork / SendWorkWithForm` | 处理审批、业务节点、会签及后续自动节点。 |
|
|
32
|
+
| `GetStartWFNode / GetWFNodeModel / GetNextNodeConfirmUsers` | 查询开始节点、节点属性及下一节点接收人。 |
|
|
33
|
+
| `RecallWork / CancelFlow / HandOverWork` | 撤回、取消、移交。取消独立事务且可改写实例 `FormData`,须按业务终态复核。 |
|
|
34
|
+
| `GetWFWork / GetWFFlow / GetWFHistory / GetWFStats / MarkCopyRead` | 待办、实例、历史、统计与抄送已读。普通用户须走身份与菜单/工作权限边界。 |
|
|
35
|
+
|
|
36
|
+
## MCP 到模块的生成顺序
|
|
37
|
+
|
|
38
|
+
1. 查询当前租户业务表、角色、用户、部门、岗位和现有流程;不要复制其它租户 Id。
|
|
39
|
+
2. Manifest 写入 `workflows[]` 的 `FlowDesign/Nodes/Lines`;人工节点设置人员策略,
|
|
40
|
+
所有连线指向同包节点,分支节点写 `LineValueV8`。
|
|
41
|
+
3. 模块设置 `openType:"WorkFlow"`、`table:"业务表名"`,同包流程传
|
|
42
|
+
`flowName:"流程名称"`;现有流程传 `flowDesignId:"真实 Id"`。
|
|
43
|
+
4. 执行 `microi_plan_system`、`microi_check_workflow_package`,分支调用
|
|
44
|
+
`microi_test_workflow_condition`;写入后回读三张定义表与 `sys_menu`,
|
|
45
|
+
用实际账号发起、处理、查看历史与流程图。
|
|
46
|
+
|
|
47
|
+
`microi_check_workflow_package` 是本地结构检查;MCP 保存前还会核对当前租户的
|
|
48
|
+
用户、角色、部门和岗位 Id。账号是否仍有效、审批人是否有业务权限以及实际到达待办,
|
|
49
|
+
仍必须通过运行时与真实业务回读。
|