@microi.net/cli 4.6.2
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/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/mcp-codex-stdio-adapter.js +189 -0
- package/dist/mcp-server.js +972 -0
- package/dist/mcp-trae-windows-launcher.cmd +21 -0
- package/dist/microi-cli-mcp.js +7 -0
- package/dist/microi-cli.js +1645 -0
- package/dist/microi-skills.meta.json +335 -0
- package/dist/microi.skills/.microi-skills-version.json +6 -0
- package/dist/microi.skills/README.md +276 -0
- package/dist/microi.skills/ai-engine/SKILL.md +140 -0
- package/dist/microi.skills/ai-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/app-store/SKILL.md +105 -0
- package/dist/microi.skills/app-store/agents/openai.yaml +4 -0
- package/dist/microi.skills/business-blueprint/SKILL.md +184 -0
- package/dist/microi.skills/datasource-engine/SKILL.md +89 -0
- package/dist/microi.skills/datasource-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/dos-orm/SKILL.md +76 -0
- package/dist/microi.skills/dos-orm/references/api-reference.md +229 -0
- package/dist/microi.skills/job-engine/SKILL.md +141 -0
- package/dist/microi.skills/job-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/message-notification/SKILL.md +113 -0
- package/dist/microi.skills/message-notification/agents/openai.yaml +6 -0
- package/dist/microi.skills/message-notification/references/contracts.md +99 -0
- package/dist/microi.skills/microi-ai-app-auth.js +651 -0
- package/dist/microi.skills/microi-ai-application/SKILL.md +80 -0
- package/dist/microi.skills/microi-ai-application/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-ai-application/references/frontend-baseline.md +164 -0
- package/dist/microi.skills/microi-client-frontend/SKILL.md +562 -0
- package/dist/microi.skills/microi-datasource-mapping/SKILL.md +108 -0
- package/dist/microi.skills/microi-db-schema/SKILL.md +170 -0
- package/dist/microi.skills/microi-db-schema/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-db-schema/references/core-tables.md +695 -0
- package/dist/microi.skills/microi-db-schema/references/form-component-options.md +256 -0
- package/dist/microi.skills/microi-db-schema/references/schema-overview.md +203 -0
- package/dist/microi.skills/microi-db-schema/references/schema.md +647 -0
- package/dist/microi.skills/microi-db-schema/references/table-catalog.md +1607 -0
- package/dist/microi.skills/microi-deployment/SKILL.md +117 -0
- package/dist/microi.skills/microi-deployment/references/deployment-matrix.md +94 -0
- package/dist/microi.skills/microi-docs-coverage/SKILL.md +91 -0
- package/dist/microi.skills/microi-docs-coverage/references/capability-map.md +65 -0
- package/dist/microi.skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +887 -0
- package/dist/microi.skills/microi-form-engine/SKILL.md +159 -0
- package/dist/microi.skills/microi-form-engine/references/component-catalog.md +116 -0
- package/dist/microi.skills/microi-form-engine/references/data-source-events.md +117 -0
- package/dist/microi.skills/microi-form-layout/SKILL.md +373 -0
- package/dist/microi.skills/microi-frontend-sdk/SKILL.md +304 -0
- package/dist/microi.skills/microi-left-right-layout/SKILL.md +132 -0
- package/dist/microi.skills/microi-microservice/SKILL.md +115 -0
- package/dist/microi.skills/microi-microservice/references/runtime-delivery.md +145 -0
- package/dist/microi.skills/microi-mobile-app-quality/SKILL.md +436 -0
- package/dist/microi.skills/microi-solution-quotation/SKILL.md +76 -0
- package/dist/microi.skills/microi-solution-quotation/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -0
- package/dist/microi.skills/microi-system-delivery/SKILL.md +446 -0
- package/dist/microi.skills/microi-ui/SKILL.md +321 -0
- package/dist/microi.skills/microi-uniapp-frontend/SKILL.md +483 -0
- package/dist/microi.skills/microi.v8.js +1758 -0
- package/dist/microi.skills/module-engine/SKILL.md +131 -0
- package/dist/microi.skills/module-engine/references/module-config.md +174 -0
- package/dist/microi.skills/page-engine/SKILL.md +397 -0
- package/dist/microi.skills/performance-testing/SKILL.md +207 -0
- package/dist/microi.skills/playwright-e2e/SKILL.md +769 -0
- package/dist/microi.skills/print-engine/SKILL.md +237 -0
- package/dist/microi.skills/production-readonly-audit/SKILL.md +39 -0
- package/dist/microi.skills/report-engine/SKILL.md +69 -0
- package/dist/microi.skills/report-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/search-engine/SKILL.md +73 -0
- package/dist/microi.skills/search-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/spider-engine/SKILL.md +188 -0
- package/dist/microi.skills/translate-engine/SKILL.md +91 -0
- package/dist/microi.skills/translate-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/ui-design/SKILL.md +1575 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/app.js +54 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/index.html +163 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/styles.css +311 -0
- package/dist/microi.skills/ui-design/assets/templates/MCI-DESIGN.md +98 -0
- package/dist/microi.skills/ui-design/references/design-pattern-library.md +171 -0
- package/dist/microi.skills/ui-design/references/mci-design-contract.md +84 -0
- package/dist/microi.skills/ui-design/references/motion-and-media.md +71 -0
- package/dist/microi.skills/ui-design/references/product-flow-recipes.md +94 -0
- package/dist/microi.skills/uniapp-mall-assets/SKILL.md +105 -0
- package/dist/microi.skills/v8-api-config/SKILL.md +272 -0
- package/dist/microi.skills/v8-cache-pattern/SKILL.md +286 -0
- package/dist/microi.skills/v8-crud-api/SKILL.md +398 -0
- package/dist/microi.skills/v8-debugging/SKILL.md +279 -0
- package/dist/microi.skills/v8-explorer-tree/SKILL.md +224 -0
- package/dist/microi.skills/v8-export-import/SKILL.md +590 -0
- package/dist/microi.skills/v8-file-upload/SKILL.md +497 -0
- package/dist/microi.skills/v8-formengine-http/SKILL.md +218 -0
- package/dist/microi.skills/v8-frontend-events/SKILL.md +349 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print-api.md +107 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print.md +185 -0
- package/dist/microi.skills/v8-http-integration/SKILL.md +379 -0
- package/dist/microi.skills/v8-image-processing/SKILL.md +187 -0
- package/dist/microi.skills/v8-image-processing/agents/openai.yaml +4 -0
- package/dist/microi.skills/v8-image-processing/references/api-reference.md +620 -0
- package/dist/microi.skills/v8-menu-buttons/SKILL.md +661 -0
- package/dist/microi.skills/v8-mongodb/SKILL.md +149 -0
- package/dist/microi.skills/v8-mq-mqtt/SKILL.md +227 -0
- package/dist/microi.skills/v8-saas-multi-tenant/SKILL.md +193 -0
- package/dist/microi.skills/v8-security/SKILL.md +417 -0
- package/dist/microi.skills/v8-sql-query/SKILL.md +290 -0
- package/dist/microi.skills/v8-table-event/SKILL.md +385 -0
- package/dist/microi.skills/v8-template-engine/SKILL.md +165 -0
- package/dist/microi.skills/v8-utilities/SKILL.md +79 -0
- package/dist/microi.skills/v8-utilities/references/client-api-index.md +136 -0
- package/dist/microi.skills/v8-utilities/references/platform-http-routes.md +80 -0
- package/dist/microi.skills/v8-utilities/references/server-api-index.md +129 -0
- package/dist/microi.skills/v8-workflow/SKILL.md +322 -0
- package/dist/microi.skills/workspace-conventions/SKILL.md +479 -0
- package/package.json +40 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: v8-workflow
|
|
3
|
+
description: Microi V8 工作流事件指南。用于编写审批流条件、节点 V8 代码、wf_flowdesign/wf_node/wf_line 逻辑、V8.WF 变量和工作流路由。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Microi V8 工作流事件开发
|
|
7
|
+
|
|
8
|
+
你正在开发 Microi 吾码平台的工作流(审批流程)V8 事件。流程引擎基于表单引擎,通过 V8 事件控制审批逻辑。
|
|
9
|
+
|
|
10
|
+
## 本地优先与版本头(必做)
|
|
11
|
+
|
|
12
|
+
工作流节点、连线条件、开始/结束节点等 V8 代码如果有本地文件,必须优先修改 `microi-v8-engine/<租户>/<项目>/...` 下的本地文件,再同步到数据库。插件提示本地/远端不一致时,先比对并合并,不得直接覆盖。
|
|
13
|
+
|
|
14
|
+
每次修改、上传、推送工作流 V8 事件代码,都要维护顶部版本区域。版本号从 `v1.0.0` 开始;每次上传/推送/修改递增 1;补丁位和次版本位最大为 9 并向前进位(`v1.0.9 -> v1.1.0`、`v1.9.9 -> v2.0.0`、`v9.9.9 -> v10.0.0`)。代码头只写完整功能说明,不写修改历史、时间戳或 ChangeLog。
|
|
15
|
+
|
|
16
|
+
```javascript
|
|
17
|
+
/*
|
|
18
|
+
* V8 工作流
|
|
19
|
+
* WorkflowKey: 示例流程Key
|
|
20
|
+
* EventType: WFNodeLine/WFNodeStart/WFNodeEnd
|
|
21
|
+
* Version: v1.0.0
|
|
22
|
+
* 功能说明:
|
|
23
|
+
* - 完整说明该工作流 V8 控制的节点动作、路线条件、审批变量和副作用。
|
|
24
|
+
*/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
保存工作流包前要先跑拓扑/条件检查;保存后用样例表单数据测试至少一条会经过该 V8 的路线。
|
|
28
|
+
|
|
29
|
+
生成工作流 V8 代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;路线选择、审批人计算、状态回写、撤回/驳回处理、跨表联动等复杂代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。若工作流存储表支持 `Version`/`ChangeHistory`,历史说明也必须最新在前并保留旧记录。
|
|
30
|
+
|
|
31
|
+
## 工作流物理表
|
|
32
|
+
|
|
33
|
+
| 表名 | 说明 |
|
|
34
|
+
|------|------|
|
|
35
|
+
| `wf_flowdesign` | 流程设计(流程定义) |
|
|
36
|
+
| `wf_node` | 流程节点 |
|
|
37
|
+
| `wf_line` | 节点间连线/条件 |
|
|
38
|
+
| `wf_flow` | 流程实例(一次发起对应一行) |
|
|
39
|
+
| `wf_work` | 待办/已办工作 |
|
|
40
|
+
| `wf_history` | 审批历史(每次同意/拒绝/撤回的记录) |
|
|
41
|
+
|
|
42
|
+
直接 SQL 查询常用场景:
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
// 我的待办
|
|
46
|
+
var todo = V8.Db.FromSql(
|
|
47
|
+
'SELECT * FROM wf_work WHERE TodoUserId = @p0 AND Status = @p1 ORDER BY CreateTime DESC'
|
|
48
|
+
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
49
|
+
.AddInParameter("@p1", 'Pending')
|
|
50
|
+
.ToArray();
|
|
51
|
+
|
|
52
|
+
// 我发起的
|
|
53
|
+
var mine = V8.Db.FromSql(
|
|
54
|
+
'SELECT * FROM wf_flow WHERE CreateUserId = @p0 ORDER BY CreateTime DESC'
|
|
55
|
+
).AddInParameter("@p0", V8.CurrentUser.Id)
|
|
56
|
+
.ToArray();
|
|
57
|
+
|
|
58
|
+
// 流程历史
|
|
59
|
+
var history = V8.Db.FromSql(
|
|
60
|
+
'SELECT * FROM wf_history WHERE FlowId = @p0 ORDER BY CreateTime ASC'
|
|
61
|
+
).AddInParameter("@p0", V8.Param.flowId)
|
|
62
|
+
.ToArray();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 流程 V8 事件执行顺序
|
|
66
|
+
|
|
67
|
+
1. 用户点击发起流程或处理工作
|
|
68
|
+
2. **表单进入 V8 事件(前端 FormIn)**
|
|
69
|
+
3. 用户点击【提交】按钮
|
|
70
|
+
4. **节点开始 V8 事件(前端 WFNodeStart)**
|
|
71
|
+
5. 表单提交前 V8 事件(前端 FormSubmitBefore)
|
|
72
|
+
6. 表单提交前 V8 事件(后端 FormSubmitBefore)
|
|
73
|
+
7. 表单提交后 V8 事件(后端 FormSubmitAfter)
|
|
74
|
+
8. 表单提交后 V8 事件(前端)
|
|
75
|
+
9. 调用后端处理工作接口
|
|
76
|
+
10. **条件判断 V8 事件(后端 WFNodeLine)**
|
|
77
|
+
11. **节点开始 V8 事件(后端 WFNodeStart)**
|
|
78
|
+
12. **节点结束 V8 事件(后端 WFNodeEnd)**
|
|
79
|
+
13. **节点结束 V8 事件(前端 WFNodeEnd)**
|
|
80
|
+
|
|
81
|
+
## V8.WF 上下文属性
|
|
82
|
+
|
|
83
|
+
### 所有流程事件可访问
|
|
84
|
+
|
|
85
|
+
| 属性 | 类型 | 说明 |
|
|
86
|
+
|------|------|------|
|
|
87
|
+
| `V8.WF.ApprovalType` | string | 审批类型:`Agree`(同意)/`Disagree`(拒绝)/`Recall`(撤回)/`Auto`(自动) |
|
|
88
|
+
| `V8.WF.ApprovalIdea` | string | 用户填写的审批意见 |
|
|
89
|
+
| `V8.WF.AddUsers` | array | 用户添加的审批人 |
|
|
90
|
+
| `V8.WF.SelectUsers` | array | 用户选择的审批人 |
|
|
91
|
+
| `V8.WF.CurrentFlowDesign` | object | 当前流程设计图实体 |
|
|
92
|
+
| `V8.WF.CurrentNode` | object | 当前节点实体 |
|
|
93
|
+
| `V8.WF.BackNodeId` | string | 拒绝时选择退回的节点 Id |
|
|
94
|
+
|
|
95
|
+
### 节点开始事件(前端)额外属性
|
|
96
|
+
|
|
97
|
+
| 属性 | 说明 |
|
|
98
|
+
|------|------|
|
|
99
|
+
| `V8.WF.ForceSelectUsers` | 强制指定下一节点审批人(可写),赋值 `['userid1', 'userid2']` |
|
|
100
|
+
|
|
101
|
+
### 节点结束事件(后端)额外属性
|
|
102
|
+
|
|
103
|
+
| 属性 | 说明 |
|
|
104
|
+
|------|------|
|
|
105
|
+
| `V8.WF.NextNode` | 下一节点实体 |
|
|
106
|
+
| `V8.WF.NextTodoUsers` | 接收人,格式:`[{ Id: '', Name: '' }]` |
|
|
107
|
+
|
|
108
|
+
### 节点结束事件(前端)额外属性
|
|
109
|
+
|
|
110
|
+
| 属性 | 说明 |
|
|
111
|
+
|------|------|
|
|
112
|
+
| `V8.WF.WorkResult` | 流程执行结果(发送到了哪个节点、哪些审批人) |
|
|
113
|
+
|
|
114
|
+
## ApprovalType 审批类型
|
|
115
|
+
|
|
116
|
+
| 值 | 说明 |
|
|
117
|
+
|---|---|
|
|
118
|
+
| `Agree` | 同意 |
|
|
119
|
+
| `Disagree` | 拒绝 |
|
|
120
|
+
| `Recall` | 撤回 |
|
|
121
|
+
| `Auto` | 发起流程(开始节点) / 业务节点 / 自动结束节点 |
|
|
122
|
+
|
|
123
|
+
## 条件判断 V8 事件(后端 WFNodeLine)
|
|
124
|
+
|
|
125
|
+
根据业务规则决定流程走向。优先推荐设置 `V8.NextNodeId` 直接指定下一节点;如仍使用条件线的条件值,也可以设置 `V8.LineValue`。
|
|
126
|
+
|
|
127
|
+
```javascript
|
|
128
|
+
// V8.EventName === 'WFNodeLine'
|
|
129
|
+
// V8.Form 是当前表单数据
|
|
130
|
+
|
|
131
|
+
if (V8.Form.Money <= 100) {
|
|
132
|
+
V8.NextNodeId = 'node_id_1'; // 直接走指定下一节点(推荐)
|
|
133
|
+
} else if (V8.Form.Money <= 10000) {
|
|
134
|
+
V8.LineValue = 2; // 也可走条件值为 2 的线(兼容旧配置)
|
|
135
|
+
} else {
|
|
136
|
+
V8.NextNodeId = 'node_id_3';
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 节点开始 V8 事件
|
|
141
|
+
|
|
142
|
+
### 前端 — 指定审批人
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
// V8.EventName === 'WFNodeStart'
|
|
146
|
+
// 可以强制指定下一节点审批人
|
|
147
|
+
if (V8.Form.DeptId === 'special-dept') {
|
|
148
|
+
V8.WF.ForceSelectUsers = ['user-id-1', 'user-id-2'];
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 后端 — 阻止流程提交
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
// V8.EventName === 'WFNodeStart'
|
|
156
|
+
// 返回 Code: 0 可以阻止流程提交并回滚事务
|
|
157
|
+
if (!V8.Form.ApprovalFiles) {
|
|
158
|
+
V8.Result = { Code: 0, Msg: '请先上传审批附件' };
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## 节点结束 V8 事件
|
|
163
|
+
|
|
164
|
+
### 后端 — 流程结束后业务处理
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
// V8.EventName === 'WFNodeEnd'
|
|
168
|
+
var approvalType = V8.WF.ApprovalType;
|
|
169
|
+
|
|
170
|
+
// 同意 — 更新业务状态
|
|
171
|
+
if (approvalType === 'Agree') {
|
|
172
|
+
// 判断是否到达最终节点
|
|
173
|
+
var nextNode = V8.WF.NextNode;
|
|
174
|
+
if (!nextNode || nextNode.NodeType === 'End') {
|
|
175
|
+
// 流程结束,更新业务状态
|
|
176
|
+
V8.FormEngine.UptFormData(V8.TableModel.Name, {
|
|
177
|
+
Id: V8.Form.Id,
|
|
178
|
+
ApprovalStatus: 'Approved',
|
|
179
|
+
ApprovalTime: DateNow('yyyy-MM-dd HH:mm:ss')
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 拒绝 — 回退状态
|
|
185
|
+
if (approvalType === 'Disagree') {
|
|
186
|
+
V8.FormEngine.UptFormData(V8.TableModel.Name, {
|
|
187
|
+
Id: V8.Form.Id,
|
|
188
|
+
ApprovalStatus: 'Rejected',
|
|
189
|
+
RejectReason: V8.WF.ApprovalIdea
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// 撤回
|
|
194
|
+
if (approvalType === 'Recall') {
|
|
195
|
+
V8.FormEngine.UptFormData(V8.TableModel.Name, {
|
|
196
|
+
Id: V8.Form.Id,
|
|
197
|
+
ApprovalStatus: 'Draft'
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// 通知下一审批人
|
|
202
|
+
if (V8.WF.NextTodoUsers && V8.WF.NextTodoUsers.length > 0) {
|
|
203
|
+
for (var i = 0; i < V8.WF.NextTodoUsers.length; i++) {
|
|
204
|
+
V8.ApiEngine.Run('send-notification', {
|
|
205
|
+
userId: V8.WF.NextTodoUsers[i].Id,
|
|
206
|
+
title: '您有新的审批任务',
|
|
207
|
+
content: V8.CurrentUser.Name + '提交了' + V8.TableModel.Name + '审批'
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 前端 — 流程提交后提示
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
// V8.EventName === 'WFNodeEnd'
|
|
217
|
+
if (V8.WF.WorkResult) {
|
|
218
|
+
V8.Tips('流程已提交', true);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 前端发起流程
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
// 在 V8 按钮或自定义逻辑中发起流程
|
|
226
|
+
V8.WF.StartWork({
|
|
227
|
+
FlowDesignId: 'flow-design-id', // 必传:流程设计 Id
|
|
228
|
+
TableRowId: V8.Form.Id, // 必传:关联数据 Id
|
|
229
|
+
FormData: JSON.stringify(V8.Form), // 可选:表单数据
|
|
230
|
+
NoticeFields: JSON.stringify([ // 可选:通知字段
|
|
231
|
+
{ Id: 'field1', Name: 'Name', Label: '姓名', Value: V8.Form.Name }
|
|
232
|
+
])
|
|
233
|
+
}, function(result) {
|
|
234
|
+
if (result.Code === 1) {
|
|
235
|
+
V8.Tips('流程发起成功', true);
|
|
236
|
+
V8.RefreshTable({ _PageIndex: 1 });
|
|
237
|
+
} else {
|
|
238
|
+
V8.Tips(result.Msg, false);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## 前端打开流程表单
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
// 发起流程
|
|
247
|
+
V8.OpenFormWF(V8.Form, 'Add', {
|
|
248
|
+
WorkType: 'StartWork',
|
|
249
|
+
FlowDesignId: 'flow-design-id'
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// 查看流程
|
|
253
|
+
V8.OpenFormWF(V8.Form, 'View', {
|
|
254
|
+
WorkType: 'ViewWork',
|
|
255
|
+
FlowDesignId: 'flow-design-id'
|
|
256
|
+
});
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## MCP 创建/检查/测试工作流
|
|
260
|
+
|
|
261
|
+
从自然语言需求创建审批流时,优先整理成完整 Manifest 的 `workflows` 配置,再走 MCP 干跑和验收流程。
|
|
262
|
+
|
|
263
|
+
```json
|
|
264
|
+
{
|
|
265
|
+
"workflows": [
|
|
266
|
+
{
|
|
267
|
+
"FlowDesign": { "FlowName": "请假审批", "table": "diy_leave", "IsEnable": 1 },
|
|
268
|
+
"Nodes": [
|
|
269
|
+
{ "Id": "start", "NodeName": "发起人", "NodeType": "Start", "LineValueV8": "" },
|
|
270
|
+
{ "Id": "leader", "NodeName": "部门负责人审批", "NodeType": "Approve", "Roles": "dept-leader" },
|
|
271
|
+
{ "Id": "end", "NodeName": "结束", "NodeType": "End" }
|
|
272
|
+
],
|
|
273
|
+
"Lines": [
|
|
274
|
+
{ "Id": "line_start_leader", "FromNodeId": "start", "ToNodeId": "leader", "LineName": "发起人 到 部门负责人审批", "LineValue": "" },
|
|
275
|
+
{ "Id": "line_leader_end", "FromNodeId": "leader", "ToNodeId": "end", "LineName": "部门负责人审批 到 结束", "LineValue": "" }
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
MCP 操作顺序:
|
|
283
|
+
|
|
284
|
+
1. `microi_get_db_schema`:确认业务表、已有流程、角色、字段。
|
|
285
|
+
2. `microi_get_manifest_schema`:按 Manifest 协议生成 tables/modules/workflows。
|
|
286
|
+
3. `microi_plan_system`:本地干跑,必须修复 workflow 拓扑错误。
|
|
287
|
+
4. `microi_check_workflow_package`:单独检查某个 workflow package。
|
|
288
|
+
5. `microi_test_workflow_condition`:对图形条件生成的 `LineValueV8` 传入样例 `formData`,验证会选中哪条路线。
|
|
289
|
+
6. `microi_generate_system` 或 `microi_save_workflow_package`:用户明确确认后再写入。
|
|
290
|
+
|
|
291
|
+
工作流建模规则:
|
|
292
|
+
|
|
293
|
+
- 必须有且仅有 1 个开始节点,至少 1 个结束节点。
|
|
294
|
+
- 所有 `wf_line.FromNodeId/ToNodeId` 必须指向存在的节点。
|
|
295
|
+
- 线路标题 `LineName` 默认使用 `{起点节点名称} 到 {终点节点名称}`,不要把业务条件名写成线路标题。
|
|
296
|
+
- 条件名称只作为图形配置/注释标记里的业务说明;修改条件名称不应改变线路标题。
|
|
297
|
+
- 多出线节点必须配置条件判断 V8,优先设置 `V8.NextNodeId`,只有兼容旧条件值时才设置 `V8.LineValue`。
|
|
298
|
+
- 图形条件生成的 V8 会带 `MICROI_WF_LINE_CONDITION_JSON` 标记,MCP 测试工具只解析该标记,不执行任意手写 V8。
|
|
299
|
+
|
|
300
|
+
## 发起流程与表单保存
|
|
301
|
+
|
|
302
|
+
新建业务数据并发起流程时,应先保存表单,再启动流程,或使用平台的合并接口 `StartWorkWithForm` 在同一事务里完成。首次发起建议以 `Add` 模式打开流程表单;如果前端提前生成了 `Id` 但业务表还没有该行,后端会使用 `_NoLineForAdd` 兜底,避免 `UptFormData` 报“数据显示不存在”。
|
|
303
|
+
|
|
304
|
+
## 流程相关表
|
|
305
|
+
|
|
306
|
+
| 表 | 说明 |
|
|
307
|
+
|---|---|
|
|
308
|
+
| `WF_FlowDesign` | 流程图设计表 |
|
|
309
|
+
| `WF_Node` | 流程节点属性表 |
|
|
310
|
+
| `WF_Line` | 流程条件(线)属性表 |
|
|
311
|
+
| `WF_Flow` | 流程实例表 |
|
|
312
|
+
| `WF_Work` | 流程工作待办表 |
|
|
313
|
+
| `WF_History` | 流程轨迹表 |
|
|
314
|
+
|
|
315
|
+
## 注意事项
|
|
316
|
+
|
|
317
|
+
- 条件判断 V8 事件可以设置 `V8.NextNodeId` 直接指定下一节点;未设置时才按 `V8.LineValue` 匹配条件线的**条件值**
|
|
318
|
+
- 配置图形化条件时,节点/路线标识来自流程拓扑,条件名称只是规则名称,不要用条件名称覆盖 `wf_line.LineName`
|
|
319
|
+
- 节点开始后端事件返回 `{ Code: 0, Msg: '...' }` 或 `V8.Result = { Code: 0 }` 可阻止流程提交
|
|
320
|
+
- 流程事件在事务中执行,任何节点返回失败都会回滚
|
|
321
|
+
- `V8.WF.ApprovalType === 'Auto'` 表示自动节点(发起、业务节点、自动结束),无需人工审批
|
|
322
|
+
- `V8.WF.ForceSelectUsers` 仅在**前端节点开始事件**中有效
|