lan-low-code-cli 2.6.0 → 2.8.0
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/README.md +78 -1
- package/dist/api/flow.js +119 -0
- package/dist/api/operation.js +8 -0
- package/dist/commands/flow.js +817 -0
- package/dist/commands/operation.js +123 -14
- package/dist/generator/flow/compiler.js +397 -0
- package/dist/generator/flow/index.js +22 -0
- package/dist/generator/flow/layout.js +136 -0
- package/dist/generator/flow/schema-resolver.js +133 -0
- package/dist/generator/flow/schema.js +96 -0
- package/dist/generator/flow/types.js +10 -0
- package/dist/generator/flow/validate.js +129 -0
- package/dist/index.js +12 -1
- package/package.json +1 -1
- package/skills/lan-low-code-cli/SKILL.md +14 -4
- package/skills/lan-low-code-cli/SKILL.zh-CN.md +13 -3
- package/skills/lan-low-code-cli/references/cli-contract.md +76 -5
- package/skills/lan-low-code-cli/references/cli-contract.zh-CN.md +72 -4
|
@@ -18,8 +18,9 @@ llc -v | --version
|
|
|
18
18
|
- Most commands accept `--json` for script-friendly output.
|
|
19
19
|
- Exit codes: `0` success (including `--help`/`--version`); `1` failure (arguments, validation, API).
|
|
20
20
|
`LLC_DEBUG=1` also prints the stack.
|
|
21
|
-
- Destructive commands (`app|form delete`, `app|form delete-data`
|
|
22
|
-
only warns and does **not** execute.
|
|
21
|
+
- Destructive commands (`app|form delete`, `app|form delete-data`, `flow delete`, `flow disable`) require
|
|
22
|
+
`--yes`; without it the CLI only warns and does **not** execute. `flow apply` also needs `--yes` —
|
|
23
|
+
by default it only prints the payload.
|
|
23
24
|
- An unknown `llc help` path prints `未知命令:llc ...` and exits `1`.
|
|
24
25
|
|
|
25
26
|
## 2. config
|
|
@@ -122,8 +123,8 @@ maintained by the platform; the CLI only lists them and manages **custom** opera
|
|
|
122
123
|
|---|---|---|---|
|
|
123
124
|
| `llc operation list` | `--form-id <fdId>` | `--keyword <kw>` `--page-no <n>=1` `--page-size <n>=100` `--json` | lists a form's operations (built-ins included) |
|
|
124
125
|
| `llc operation get` | `--id <fdId>` | `--json` | detail; prints the parsed `fdConfig` |
|
|
125
|
-
| `llc operation create` | `--form-id` `--name` `--code` `--type`
|
|
126
|
-
| `llc operation update` | `--id <fdId>` | `--name` `--code` `--desc` `--position` `--type` `--url` `--script <code\|@file>` `--dialog-id` `--need-select`/`--no-need-select` `--enable`/`--disable` `--mobile-icon` `--dry-run` `--json` | edits an existing operation; `--type script` switches
|
|
126
|
+
| `llc operation create` | `--form-id` `--name` `--code` | `--type link\|script\|dialog` **or** `--trigger-flow <flowId>`; `--position list\|view` `--need-select` `--url` `--script <code\|@file>` `--dialog-id` `--inc-params <json\|@file>` `--desc` `--mobile-icon` `--dry-run` `--json` | creates an operation definition; `--trigger-flow` binds an action flow (`fdTriggerType=3`) |
|
|
127
|
+
| `llc operation update` | `--id <fdId>` | `--name` `--code` `--desc` `--position` `--type` `--url` `--script <code\|@file>` `--dialog-id` `--trigger-flow <flowId>` `--inc-params` `--need-select`/`--no-need-select` `--enable`/`--disable` `--mobile-icon` `--dry-run` `--json` | edits an existing operation; `--type script` switches to script mode, `--trigger-flow` switches to action-flow trigger |
|
|
127
128
|
| `llc operation delete` | `--id <fdId>` `--yes` | — | checks references (`listByRefer`) and refuses while still in use |
|
|
128
129
|
| `llc operation attach` | `--form-id` `--operation-id` | `--target list\|view` `--view-id` `--platform desktop\|mobile` `--position top\|rightHand\|rightSide` | writes the button into the view `operationList`; auto-detects the single view when `--view-id` is omitted |
|
|
129
130
|
| `llc operation detach` | `--form-id` `--operation-id` | `--target list\|view` `--view-id` `--platform` | removes the button from a view (definition kept) |
|
|
@@ -221,7 +222,77 @@ without error but never fires, so confirm it first:
|
|
|
221
222
|
| `--locale` | `"Cn,Us,Tw"` or `all` | comma-separated, **first entry is primary**; `all` = `Cn,Us,Tw` |
|
|
222
223
|
| `--lang-file` | `{"Us":{"姓名":"Name"}}` | inner keys may be field labels or field names; options support `field#value` |
|
|
223
224
|
|
|
224
|
-
## 10.
|
|
225
|
+
## 10. flow (action flow / process define)
|
|
226
|
+
|
|
227
|
+
Application-scoped action flows. Every write command needs `--yes` and an explicit `--app-code`
|
|
228
|
+
(or `appCode` in the spec). `--json` goes to stdout; all other output goes to stderr.
|
|
229
|
+
|
|
230
|
+
| Command | Required | Key options | Notes |
|
|
231
|
+
|---|---|---|---|
|
|
232
|
+
| `llc flow spec` | — | `--app-code` `--name` `--code` `--start-way` `--out` `--json` | prints a Flow Spec template; Start/End nodes are added by the compiler |
|
|
233
|
+
| `llc flow compile` | `--spec <@file\|json>` | `--layout ide\|layered\|passthrough` `--center-x` `--rank-padding` `--lane-gap` `--min-gap` `--sub-center-x` `--emit-waypoints` `--out` `--force` `--json` | compiles to `fdDesign` (JSON string) + `basicInfo`; **offline** |
|
|
234
|
+
| `llc flow validate` | `--spec` | layout options, `--json` | offline checks only; exits `1` on errors |
|
|
235
|
+
| `llc flow list` | `--app-code` | `--keyword` `--status draft\|stopped\|enabled` `--page-no` `--page-size` `--json` | read-only |
|
|
236
|
+
| `llc flow get` | `--id` | `--with-design` `--raw` `--json` | `--with-design` parses `fdDesign` |
|
|
237
|
+
| `llc flow category list` | `--app-code` | `--keyword` `--json` | read-only |
|
|
238
|
+
| `llc flow logs` | `--id` | `--limit` `--endpoint` `--json` | log endpoints differ per deployment; `--endpoint` overrides |
|
|
239
|
+
| `llc flow schema` | `--kind` | `--entity-id` `--code` `--app-code` `--api-type` `--api-method-path` | read-only, always JSON. Kinds: `businessNodes` `events` `source` `jsonSchema` `condition` `out` `active` `event` `interface` `apiMethod` `flowBots` `meta` `dataModel` `recycle` |
|
|
240
|
+
| `llc flow templates` | `--from <@file\|json>` | `--out` `--json` | extracts golden node skeletons from a `get` response / compile result / design; strips `drawAttr.bounds` |
|
|
241
|
+
| `llc flow apply` | `--spec` `--app-code` | `--draft` `--enable` `--resolve-schema` `--strict-schema` layout options `--force` `--yes` `--json` | **preview by default**; `--yes` calls `addPublish`/`addDraft` (or `update*` when the spec has `fdId`), then reads back |
|
|
242
|
+
| `llc flow diff` | `--id` `--spec` | `--no-ignore-bounds` `--resolve-schema` `--strict-schema` layout options `--json` | compares local design with remote; ignores coordinates by default |
|
|
243
|
+
| `llc flow script` | `--id` | `--out` `--json` | generates a `MKXFORM.flow_<fdCode>` button script |
|
|
244
|
+
| `llc flow run` | `--operation-id` `--yes` | `--view-id` `--doc-id` `--doc-ids` `--inc-params` `--json` | executes a button bound to a flow via `sysModelingMain/other`; returns `success` / `responseMsg` |
|
|
245
|
+
| `llc flow enable` | `--id` | `--json` | `startup` |
|
|
246
|
+
| `llc flow disable` | `--id` `--yes` | `--json` | `stop` |
|
|
247
|
+
| `llc flow delete` | `--id` `--yes` | `--json` | checks `listByRefer` before deleting |
|
|
248
|
+
|
|
249
|
+
**Flow Spec** (JSON — no new runtime dependency):
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"appCode": "cli-test", "name": "My flow", "code": "flow_a",
|
|
254
|
+
"startWay": "StartActiveNode", "centerX": 679,
|
|
255
|
+
"trigger": { "fdRunType": ["operate"], "fdFormRelation": "0", "dataType": 1,
|
|
256
|
+
"inParamType": 2, "inParam": { "id": "requestBody", "type": "object", "properties": {} } },
|
|
257
|
+
"nodes": [
|
|
258
|
+
{ "id": "N2", "type": "QueryDataNode", "name": "query",
|
|
259
|
+
"config": { "target": { "entityId": "sys-modeling#<fdId>" }, "resultType": "single" } },
|
|
260
|
+
{ "id": "N3", "type": "BranchNode", "name": "branch" },
|
|
261
|
+
{ "id": "N4", "type": "TransformNode", "name": "A", "config": { "outParamType": 0 } },
|
|
262
|
+
{ "id": "N5", "type": "TransformNode", "name": "B", "config": { "outParamType": 0 } }
|
|
263
|
+
],
|
|
264
|
+
"edges": [
|
|
265
|
+
{ "from": "N2", "to": "N3" },
|
|
266
|
+
{ "from": "N3", "to": "N4", "name": "yes", "formula": { "type": "Script", "script": "return true" } },
|
|
267
|
+
{ "from": "N3", "to": "N5", "name": "no", "default": true }
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
- `--code` must match `^[a-zA-Z0-9_]{1,30}$`; node `id` `^[0-9a-zA-Z_]{2,32}$`. Start/End nodes
|
|
273
|
+
and their edges are auto-added; disconnected roots/leaves are wired automatically.
|
|
274
|
+
- **Layout**: `ide` (default) reproduces the platform's arrangement — main chain centred on
|
|
275
|
+
`--center-x` (default `679`), `BranchNode` 56×56, branch successors on the same rank at lanes ±1,
|
|
276
|
+
join one rank lower, rank spacing `maxHeight + 52`. `layered` pushes branch successors to the
|
|
277
|
+
next rank; `passthrough` keeps `bounds` from the spec. `drawAttr.bounds` uses top-left `x/y` with
|
|
278
|
+
`relative:false` and is persisted verbatim by the IDE (it never recomputes coordinates).
|
|
279
|
+
- Branch handling: `defaultTargetRef` comes from the edge with `"default": true`; a
|
|
280
|
+
`formulaConfig.branchFormulas` referencing the real line IDs is generated automatically, and branch
|
|
281
|
+
edges get `exitX=0/1` anchor styles so they do not overlap in the designer.
|
|
282
|
+
- `--resolve-schema` fills `extraAttr.context_*` via `getSourceJsonSchema` /
|
|
283
|
+
`getProcessDataOutJsonSchema`. Those endpoints require a `sys-modeling#` prefixed `entityId`
|
|
284
|
+
(the CLI adds it). Failures are warnings unless `--strict-schema`.
|
|
285
|
+
- `fields` of `AddDataNode` / `AddOrUpdateNode` uses the platform's real shape
|
|
286
|
+
(`{field:{...},value:{format,valueJson}}`); the CLI passes it through and only validates field
|
|
287
|
+
names — it does **not** synthesise formulas. Use `llc flow templates` / `flow get` for golden shapes.
|
|
288
|
+
- Publishing derives `fdProcessActive` on the backend from `startNodeDef`; `fdStatus=1` means enabled.
|
|
289
|
+
`flow logs` endpoints vary by deployment (`ModelingProcessLog/findAll` vs
|
|
290
|
+
`sysModelingLog/findAllWithAppId`); use `--endpoint` if the defaults fail.
|
|
291
|
+
- Runtime trigger: `flow script` emits a `MKXFORM.flow_<fdCode>` call; attach it with
|
|
292
|
+
`llc operation create --type script --script @file` + `llc operation attach`.
|
|
293
|
+
`executeFlowForAjax` lives in the `sys-xform` runtime package, not in a documented REST endpoint.
|
|
294
|
+
|
|
295
|
+
## 11. Common failures
|
|
225
296
|
|
|
226
297
|
| Message | Cause / fix |
|
|
227
298
|
|---|---|
|
|
@@ -15,7 +15,7 @@ llc -v | --version # 版本号
|
|
|
15
15
|
- 配置优先级:`--base-url`/`--token` > `LLC_BASE_URL`/`LLC_TOKEN` > `./lcode.config.json`(当前目录)> `~/.lcode/config.json`(`llc config set` 写入);`timeout` 默认 `30000` ms。
|
|
16
16
|
- 多数查询/变更命令支持 `--json`(结构化输出,便于脚本处理)。
|
|
17
17
|
- 退出码:`0` 成功(含 `--help`/`--version`);`1` 失败(参数、校验、接口错误)。`LLC_DEBUG=1` 额外打印堆栈。
|
|
18
|
-
- 破坏性命令(`app|form delete`、`app|form delete-data`)必须带 `--yes
|
|
18
|
+
- 破坏性命令(`app|form delete`、`app|form delete-data`、`flow delete`、`flow disable`)必须带 `--yes`,否则仅告警且**不执行**;`flow apply` 同样需要 `--yes`,默认只打印提交体。
|
|
19
19
|
- `llc help xxx` 路径不存在时报 `未知命令:llc xxx` 并退出 `1`;未知子命令由 commander 报错(同为退出码 1)。
|
|
20
20
|
|
|
21
21
|
## 2. config
|
|
@@ -116,8 +116,8 @@ llc form create --name "简版分类表单" --app-id <appId> --type simpleCatego
|
|
|
116
116
|
|---|---|---|---|
|
|
117
117
|
| `llc operation list` | `--form-id <fdId>` | `--keyword <kw>` `--page-no <n>=1` `--page-size <n>=100` `--json` | 按表单列出操作(含内置) |
|
|
118
118
|
| `llc operation get` | `--id <fdId>` | `--json` | 详情;默认展开 `fdConfig` JSON |
|
|
119
|
-
| `llc operation create` | `--form-id` `--name` `--code` `--type`
|
|
120
|
-
| `llc operation update` | `--id <fdId>` | `--name` `--code` `--desc` `--position` `--type` `--url` `--script <code\|@file>` `--dialog-id` `--need-select`/`--no-need-select` `--enable`/`--disable` `--mobile-icon` `--dry-run` `--json` | 修改已有操作;`--type script`
|
|
119
|
+
| `llc operation create` | `--form-id` `--name` `--code` | `--type link\|script\|dialog` **或** `--trigger-flow <动作流fdId>`;`--position list\|view` `--need-select` `--url` `--script <code\|@file>` `--dialog-id` `--inc-params <json\|@file>` `--desc` `--mobile-icon` `--dry-run` `--json` | 新建操作定义;`--trigger-flow` 绑定动作流(`fdTriggerType=3`) |
|
|
120
|
+
| `llc operation update` | `--id <fdId>` | `--name` `--code` `--desc` `--position` `--type` `--url` `--script <code\|@file>` `--dialog-id` `--trigger-flow <动作流fdId>` `--inc-params` `--need-select`/`--no-need-select` `--enable`/`--disable` `--mobile-icon` `--dry-run` `--json` | 修改已有操作;`--type script` 切脚本、`--trigger-flow` 切动作流触发 |
|
|
121
121
|
| `llc operation delete` | `--id <fdId>` `--yes` | — | 先查引用(`listByRefer`),被引用时拒绝删除 |
|
|
122
122
|
| `llc operation attach` | `--form-id` `--operation-id` | `--target list\|view` `--view-id` `--platform desktop\|mobile` `--position top\|rightHand\|rightSide` | 把按钮写入视图 `operationList`;省略 `--view-id` 时自动定位唯一视图 |
|
|
123
123
|
| `llc operation detach` | `--form-id` `--operation-id` | `--target list\|view` `--view-id` `--platform` | 从视图移除按钮(保留操作定义) |
|
|
@@ -211,7 +211,75 @@ llc operation detach --form-id <fdId> --operation-id <operationId> #
|
|
|
211
211
|
| `--locale` | `"Cn,Us,Tw"` 或 `all` | 逗号分隔,**第一个为主语言**;`all` = `Cn,Us,Tw` |
|
|
212
212
|
| `--lang-file` | `{"Us":{"姓名":"Name"}}` | 内层 key 可为字段标题或字段名;选项支持 `字段名#值` |
|
|
213
213
|
|
|
214
|
-
## 10.
|
|
214
|
+
## 10. flow(动作流 / process define)
|
|
215
|
+
|
|
216
|
+
应用级动作流(`fdAppCode`)。所有写命令都需要 `--yes` 与显式 `--app-code`(或 spec 中的 `appCode`)。
|
|
217
|
+
`--json` 输出到 stdout,其余输出走 stderr。
|
|
218
|
+
|
|
219
|
+
| 命令 | 必填 | 主要选项 | 说明 |
|
|
220
|
+
|---|---|---|---|
|
|
221
|
+
| `llc flow spec` | — | `--app-code` `--name` `--code` `--start-way` `--out` `--json` | 生成 Flow Spec 模板;开始/结束节点由编译器自动补齐 |
|
|
222
|
+
| `llc flow compile` | `--spec <@文件\|json>` | `--layout ide\|layered\|passthrough` `--center-x` `--rank-padding` `--lane-gap` `--min-gap` `--sub-center-x` `--emit-waypoints` `--out` `--force` `--json` | 编译出 `fdDesign`(JSON 字符串)与 `basicInfo`;**纯离线** |
|
|
223
|
+
| `llc flow validate` | `--spec` | 布局选项、`--json` | 仅离线校验;有错误退出 `1` |
|
|
224
|
+
| `llc flow list` | `--app-code` | `--keyword` `--status draft\|stopped\|enabled` `--page-no` `--page-size` `--json` | 只读 |
|
|
225
|
+
| `llc flow get` | `--id` | `--with-design` `--raw` `--json` | `--with-design` 解析 `fdDesign` |
|
|
226
|
+
| `llc flow category list` | `--app-code` | `--keyword` `--json` | 只读 |
|
|
227
|
+
| `llc flow logs` | `--id` | `--limit` `--endpoint` `--json` | 日志端点因部署而异;`--endpoint` 可覆盖 |
|
|
228
|
+
| `llc flow schema` | `--kind` | `--entity-id` `--code` `--app-code` `--api-type` `--api-method-path` | 只读、恒为 JSON。kind:`businessNodes` `events` `source` `jsonSchema` `condition` `out` `active` `event` `interface` `apiMethod` `flowBots` `meta` `dataModel` `recycle` |
|
|
229
|
+
| `llc flow templates` | `--from <@文件\|json>` | `--out` `--json` | 从 `get` 响应 / 编译结果 / 设计对象抽取 golden 节点骨架;剥离 `drawAttr.bounds` |
|
|
230
|
+
| `llc flow apply` | `--spec` `--app-code` | `--draft` `--enable` `--resolve-schema` `--strict-schema` 布局选项 `--force` `--yes` `--json` | **默认预览**;`--yes` 才调用 `addPublish`/`addDraft`(spec 带 `fdId` 时走 `update*`),随后回读 |
|
|
231
|
+
| `llc flow diff` | `--id` `--spec` | `--no-ignore-bounds` `--resolve-schema` `--strict-schema` 布局选项 `--json` | 对比本地与远端设计;默认忽略坐标 |
|
|
232
|
+
| `llc flow script` | `--id` | `--out` `--json` | 生成 `MKXFORM.flow_<fdCode>` 按钮脚本 |
|
|
233
|
+
| `llc flow run` | `--operation-id` `--yes` | `--view-id` `--doc-id` `--doc-ids` `--inc-params` `--json` | 通过绑定动作流的业务操作执行一次(`sysModelingMain/other`),返回 `success` / `responseMsg` |
|
|
234
|
+
| `llc flow enable` | `--id` | `--json` | `startup` |
|
|
235
|
+
| `llc flow disable` | `--id` `--yes` | `--json` | `stop` |
|
|
236
|
+
| `llc flow delete` | `--id` `--yes` | `--json` | 删除前先查 `listByRefer` |
|
|
237
|
+
|
|
238
|
+
**Flow Spec**(JSON,不引入新的运行时依赖):
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"appCode": "cli-test", "name": "示例流程", "code": "flow_a",
|
|
243
|
+
"startWay": "StartActiveNode", "centerX": 679,
|
|
244
|
+
"trigger": { "fdRunType": ["operate"], "fdFormRelation": "0", "dataType": 1,
|
|
245
|
+
"inParamType": 2, "inParam": { "id": "requestBody", "type": "object", "properties": {} } },
|
|
246
|
+
"nodes": [
|
|
247
|
+
{ "id": "N2", "type": "QueryDataNode", "name": "查询",
|
|
248
|
+
"config": { "target": { "entityId": "sys-modeling#<fdId>" }, "resultType": "single" } },
|
|
249
|
+
{ "id": "N3", "type": "BranchNode", "name": "条件分支" },
|
|
250
|
+
{ "id": "N4", "type": "TransformNode", "name": "分支A", "config": { "outParamType": 0 } },
|
|
251
|
+
{ "id": "N5", "type": "TransformNode", "name": "分支B", "config": { "outParamType": 0 } }
|
|
252
|
+
],
|
|
253
|
+
"edges": [
|
|
254
|
+
{ "from": "N2", "to": "N3" },
|
|
255
|
+
{ "from": "N3", "to": "N4", "name": "是", "formula": { "type": "Script", "script": "return true" } },
|
|
256
|
+
{ "from": "N3", "to": "N5", "name": "否", "default": true }
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
- `--code` 需匹配 `^[a-zA-Z0-9_]{1,30}$`;节点 `id` 需匹配 `^[0-9a-zA-Z_]{2,32}$`。
|
|
262
|
+
开始/结束节点及其连线自动补齐,无入边/无出边的业务节点自动接线。
|
|
263
|
+
- **布局**:`ide`(默认)复刻平台编排——主链以 `--center-x`(默认 `679`)居中,`BranchNode`
|
|
264
|
+
为 56×56,分支后继与分支节点同层、泳道 ±1,汇聚下移一层,层距 = 该层最高节点 + 52。
|
|
265
|
+
`layered` 把分支后继放到下一层;`passthrough` 沿用 spec 中的 `bounds`。
|
|
266
|
+
`drawAttr.bounds` 是左上角 `x/y` 且带 `relative:false`,IDE **原样持久化、不会重算坐标**。
|
|
267
|
+
- 分支处理:`defaultTargetRef` 取自 `"default": true` 的出边;自动生成引用真实连线 ID 的
|
|
268
|
+
`formulaConfig.branchFormulas`;分支连线写入 `exitX=0/1` 锚点,避免 IDE 内两条线重叠。
|
|
269
|
+
- `--resolve-schema` 通过 `getSourceJsonSchema` / `getProcessDataOutJsonSchema` 补齐
|
|
270
|
+
`extraAttr.context_*`。这两个端点要求 `entityId` 带 `sys-modeling#` 前缀(CLI 自动补)。
|
|
271
|
+
失败默认只告警,`--strict-schema` 时升级为错误。
|
|
272
|
+
- `AddDataNode` / `AddOrUpdateNode` 的 `fields` 使用平台真实结构
|
|
273
|
+
(`{field:{...},value:{format,valueJson}}`);CLI 原样透传并只校验字段名,**不臆造公式**。
|
|
274
|
+
需要真实结构请用 `llc flow templates` / `flow get` 抽取 golden 骨架。
|
|
275
|
+
- 发布时后端从 `startNodeDef` 派生 `fdProcessActive`;`fdStatus=1` 表示已启用。
|
|
276
|
+
`flow logs` 端点因部署而异(`ModelingProcessLog/findAll` 与
|
|
277
|
+
`sysModelingLog/findAllWithAppId`);默认都失败时用 `--endpoint` 指定。
|
|
278
|
+
- 运行时触发:`flow script` 生成 `MKXFORM.flow_<fdCode>` 调用,可用
|
|
279
|
+
`llc operation create --type script --script @文件` + `llc operation attach` 挂载。
|
|
280
|
+
`executeFlowForAjax` 位于 `sys-xform` 运行时包,没有文档化的 REST 端点。
|
|
281
|
+
|
|
282
|
+
## 11. 常见失败提示
|
|
215
283
|
|
|
216
284
|
| 提示 | 原因与处理 |
|
|
217
285
|
|---|---|
|