weaver-e10-builder 1.0.12-beta → 1.1.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.
Files changed (217) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +17 -3
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +3 -0
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/form-association-manage.d.ts +3 -0
  8. package/dist/commands/form-association-manage.d.ts.map +1 -0
  9. package/dist/commands/form-association-manage.js +76 -0
  10. package/dist/commands/form-association-manage.js.map +1 -0
  11. package/dist/commands/form-association.d.ts.map +1 -1
  12. package/dist/commands/form-association.js +29 -25
  13. package/dist/commands/form-association.js.map +1 -1
  14. package/dist/commands/form-button.d.ts.map +1 -1
  15. package/dist/commands/form-button.js +71 -159
  16. package/dist/commands/form-button.js.map +1 -1
  17. package/dist/commands/form-field-linkage.d.ts +3 -0
  18. package/dist/commands/form-field-linkage.d.ts.map +1 -0
  19. package/dist/commands/form-field-linkage.js +300 -0
  20. package/dist/commands/form-field-linkage.js.map +1 -0
  21. package/dist/commands/form-list-columns.d.ts +3 -0
  22. package/dist/commands/form-list-columns.d.ts.map +1 -0
  23. package/dist/commands/form-list-columns.js +50 -0
  24. package/dist/commands/form-list-columns.js.map +1 -0
  25. package/dist/commands/form-list-stats.d.ts +0 -8
  26. package/dist/commands/form-list-stats.d.ts.map +1 -1
  27. package/dist/commands/form-list-stats.js +41 -133
  28. package/dist/commands/form-list-stats.js.map +1 -1
  29. package/dist/commands/form-list.d.ts.map +1 -1
  30. package/dist/commands/form-list.js +2 -126
  31. package/dist/commands/form-list.js.map +1 -1
  32. package/dist/commands/form.d.ts.map +1 -1
  33. package/dist/commands/form.js +116 -2
  34. package/dist/commands/form.js.map +1 -1
  35. package/dist/commands/interface.d.ts +3 -0
  36. package/dist/commands/interface.d.ts.map +1 -0
  37. package/dist/commands/interface.js +51 -0
  38. package/dist/commands/interface.js.map +1 -0
  39. package/dist/commands/menu-permission.d.ts.map +1 -1
  40. package/dist/commands/menu-permission.js +133 -82
  41. package/dist/commands/menu-permission.js.map +1 -1
  42. package/dist/commands/skill.js +2 -2
  43. package/dist/commands/skill.js.map +1 -1
  44. package/dist/commands/update.d.ts +13 -0
  45. package/dist/commands/update.d.ts.map +1 -0
  46. package/dist/commands/update.js +101 -0
  47. package/dist/commands/update.js.map +1 -0
  48. package/dist/commands/workflow-node-empty-handle.d.ts +13 -0
  49. package/dist/commands/workflow-node-empty-handle.d.ts.map +1 -0
  50. package/dist/commands/workflow-node-empty-handle.js +137 -0
  51. package/dist/commands/workflow-node-empty-handle.js.map +1 -0
  52. package/dist/commands/workflow.d.ts.map +1 -1
  53. package/dist/commands/workflow.js +90 -18
  54. package/dist/commands/workflow.js.map +1 -1
  55. package/dist/index.js +8 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/postinstall.d.ts +2 -0
  58. package/dist/postinstall.d.ts.map +1 -0
  59. package/dist/postinstall.js +17 -0
  60. package/dist/postinstall.js.map +1 -0
  61. package/dist/services/actionflow/command_output.d.ts +4 -0
  62. package/dist/services/actionflow/command_output.d.ts.map +1 -1
  63. package/dist/services/actionflow/command_output.js +44 -0
  64. package/dist/services/actionflow/command_output.js.map +1 -1
  65. package/dist/services/actionflow/component_registry.d.ts.map +1 -1
  66. package/dist/services/actionflow/component_registry.js +5 -1
  67. package/dist/services/actionflow/component_registry.js.map +1 -1
  68. package/dist/services/actionflow/components/action_eb_add.js +1 -1
  69. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  70. package/dist/services/actionflow/components/approve_trigger.d.ts +5 -0
  71. package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/approve_trigger.js +22 -1
  73. package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
  74. package/dist/services/actionflow/components/approve_trigger_compiler.js +2 -2
  75. package/dist/services/actionflow/components/approve_trigger_compiler.js.map +1 -1
  76. package/dist/services/actionflow/components/custom_trigger.d.ts +9 -0
  77. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -0
  78. package/dist/services/actionflow/components/custom_trigger.js +47 -0
  79. package/dist/services/actionflow/components/custom_trigger.js.map +1 -0
  80. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  81. package/dist/services/actionflow/components/enquiry_form.js +29 -3
  82. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  83. package/dist/services/actionflow/components/event_button.d.ts +3 -0
  84. package/dist/services/actionflow/components/event_button.d.ts.map +1 -0
  85. package/dist/services/actionflow/components/event_button.js +32 -0
  86. package/dist/services/actionflow/components/event_button.js.map +1 -0
  87. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  88. package/dist/services/actionflow/components/index.js +10 -0
  89. package/dist/services/actionflow/components/index.js.map +1 -1
  90. package/dist/services/actionflow/components/inner_mq_listener.d.ts +3 -0
  91. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -0
  92. package/dist/services/actionflow/components/inner_mq_listener.js +40 -0
  93. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -0
  94. package/dist/services/actionflow/components/inner_mq_send.d.ts +5 -0
  95. package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -0
  96. package/dist/services/actionflow/components/inner_mq_send.js +72 -0
  97. package/dist/services/actionflow/components/inner_mq_send.js.map +1 -0
  98. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  99. package/dist/services/actionflow/components/send_message.js +7 -4
  100. package/dist/services/actionflow/components/send_message.js.map +1 -1
  101. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  102. package/dist/services/actionflow/context_preflight.js +7 -1
  103. package/dist/services/actionflow/context_preflight.js.map +1 -1
  104. package/dist/services/actionflow/design_client.d.ts +13 -2
  105. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  106. package/dist/services/actionflow/design_client.js +56 -8
  107. package/dist/services/actionflow/design_client.js.map +1 -1
  108. package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
  109. package/dist/services/actionflow/enrich_approve_trigger.js +31 -0
  110. package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
  111. package/dist/services/actionflow/form_source.d.ts +2 -0
  112. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  113. package/dist/services/actionflow/form_source.js +5 -0
  114. package/dist/services/actionflow/form_source.js.map +1 -1
  115. package/dist/services/actionflow/formula_service.d.ts +1 -1
  116. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  117. package/dist/services/actionflow/formula_service.js +118 -12
  118. package/dist/services/actionflow/formula_service.js.map +1 -1
  119. package/dist/services/actionflow/functions_catalog.d.ts +2 -1
  120. package/dist/services/actionflow/functions_catalog.d.ts.map +1 -1
  121. package/dist/services/actionflow/functions_catalog.js +2392 -180
  122. package/dist/services/actionflow/functions_catalog.js.map +1 -1
  123. package/dist/services/actionflow/functions_source.d.ts.map +1 -1
  124. package/dist/services/actionflow/functions_source.js +3 -0
  125. package/dist/services/actionflow/functions_source.js.map +1 -1
  126. package/dist/services/actionflow/generation_service.d.ts +11 -0
  127. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  128. package/dist/services/actionflow/generation_service.js +66 -23
  129. package/dist/services/actionflow/generation_service.js.map +1 -1
  130. package/dist/services/actionflow/plan_constraints.d.ts +5 -0
  131. package/dist/services/actionflow/plan_constraints.d.ts.map +1 -0
  132. package/dist/services/actionflow/plan_constraints.js +54 -0
  133. package/dist/services/actionflow/plan_constraints.js.map +1 -0
  134. package/dist/services/actionflow/preflight_service.d.ts +3 -0
  135. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  136. package/dist/services/actionflow/preflight_service.js +152 -8
  137. package/dist/services/actionflow/preflight_service.js.map +1 -1
  138. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  139. package/dist/services/actionflow/readback_verifier.js +63 -2
  140. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  141. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  142. package/dist/services/actionflow/save_workflow_draft.js +43 -2
  143. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  144. package/dist/services/actionflow/update_service.d.ts +41 -0
  145. package/dist/services/actionflow/update_service.d.ts.map +1 -0
  146. package/dist/services/actionflow/update_service.js +767 -0
  147. package/dist/services/actionflow/update_service.js.map +1 -0
  148. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  149. package/dist/services/actionflow/workflow_compiler.js +120 -12
  150. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  151. package/dist/services/esb-interface/document-parser.d.ts +6 -0
  152. package/dist/services/esb-interface/document-parser.d.ts.map +1 -0
  153. package/dist/services/esb-interface/document-parser.js +247 -0
  154. package/dist/services/esb-interface/document-parser.js.map +1 -0
  155. package/dist/services/esb-interface/importer.d.ts +9 -0
  156. package/dist/services/esb-interface/importer.d.ts.map +1 -0
  157. package/dist/services/esb-interface/importer.js +44 -0
  158. package/dist/services/esb-interface/importer.js.map +1 -0
  159. package/dist/services/esb-interface/postman-collection.d.ts +9 -0
  160. package/dist/services/esb-interface/postman-collection.d.ts.map +1 -0
  161. package/dist/services/esb-interface/postman-collection.js +125 -0
  162. package/dist/services/esb-interface/postman-collection.js.map +1 -0
  163. package/dist/services/esb-interface/types.d.ts +91 -0
  164. package/dist/services/esb-interface/types.d.ts.map +1 -0
  165. package/dist/services/esb-interface/types.js +2 -0
  166. package/dist/services/esb-interface/types.js.map +1 -0
  167. package/dist/services/form-association.d.ts +49 -0
  168. package/dist/services/form-association.d.ts.map +1 -0
  169. package/dist/services/form-association.js +279 -0
  170. package/dist/services/form-association.js.map +1 -0
  171. package/dist/services/form-button-position.d.ts +35 -0
  172. package/dist/services/form-button-position.d.ts.map +1 -0
  173. package/dist/services/form-button-position.js +109 -0
  174. package/dist/services/form-button-position.js.map +1 -0
  175. package/dist/services/form-list-columns.d.ts +54 -0
  176. package/dist/services/form-list-columns.d.ts.map +1 -0
  177. package/dist/services/form-list-columns.js +236 -0
  178. package/dist/services/form-list-columns.js.map +1 -0
  179. package/dist/services/form-list-stats.d.ts +44 -0
  180. package/dist/services/form-list-stats.d.ts.map +1 -0
  181. package/dist/services/form-list-stats.js +302 -0
  182. package/dist/services/form-list-stats.js.map +1 -0
  183. package/dist/services/skill-provision.d.ts +6 -1
  184. package/dist/services/skill-provision.d.ts.map +1 -1
  185. package/dist/services/skill-provision.js +12 -2
  186. package/dist/services/skill-provision.js.map +1 -1
  187. package/dist/services/update-check.d.ts +24 -0
  188. package/dist/services/update-check.d.ts.map +1 -0
  189. package/dist/services/update-check.js +108 -0
  190. package/dist/services/update-check.js.map +1 -0
  191. package/package.json +2 -1
  192. package/skill-docs/SKILL.md +21 -106
  193. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +61 -39
  194. package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -21
  195. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +23 -21
  196. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +101 -75
  197. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -0
  198. package/skill-docs/actionflows/references/components/logic/Condition.md +23 -23
  199. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +40 -0
  200. package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
  201. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +45 -0
  202. package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +40 -0
  203. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +35 -0
  204. package/skill-docs/actionflows/references/condition_rules.md +4 -2
  205. package/skill-docs/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -1046
  206. package/skill-docs/actionflows/references/trigger_runtime_notes.md +53 -51
  207. package/skill-docs/references/common/guide-plan-template.md +201 -0
  208. package/skill-docs/references/common/ref-cli-commands.md +45 -11
  209. package/skill-docs/references/form/guide-create-form.md +4 -2
  210. package/skill-docs/references/form/guide-field-linkage.md +121 -0
  211. package/skill-docs/references/form/guide-form-association.md +108 -0
  212. package/skill-docs/references/form/guide-form-button.md +54 -0
  213. package/skill-docs/references/form/guide-form-view.md +26 -9
  214. package/skill-docs/references/form/guide-list-columns.md +52 -0
  215. package/skill-docs/references/form/guide-list-stats.md +83 -0
  216. package/skill-docs/references/workflow/guide-workflow-action.md +172 -168
  217. package/skill-docs/references/workflow/guide-workflow.md +16 -2
@@ -1,21 +1,23 @@
1
- # 删除表单数据(`ActionEbDelete`)
2
-
3
- ## 何时使用
4
-
5
- 按筛选条件删除 e-builder 表单数据;还原已删除数据使用 `ActionEbRecover`。
6
-
7
- ## 先查询
8
-
9
- 查询目标表单、条件字段和操作人。
10
-
11
- ## 不可猜测
12
-
13
- 筛选条件必须引用目标表真实字段;不能把名称或非本次上下文的字段键写入条件。
14
-
15
- ## 最小计划
16
-
17
- `targetForm`、`person`、`filterCondition`。
18
-
19
- ## filterCondition 格式
20
-
21
- **以 `actionflows/references/condition_rules.md` 为准**:`{"field":{"id":"<目标字段id>","label":"<字段名>"},"operator":"eq","right":{...}}`。`field` 是 `{id,label}` 对象、`operator` 用英文操作符(`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`)、右值键用 `right`。**勿用**废弃的 `value` 别名 / `=` / 裸字符串 `field`,否则编译报「左侧字段 id 不在目标表单实时字段列表中」。
1
+ # 删除表单数据(`ActionEbDelete`)
2
+
3
+ ## 何时使用
4
+
5
+ 按筛选条件删除 e-builder 表单数据;还原已删除数据使用 `ActionEbRecover`。
6
+
7
+ ## 先查询
8
+
9
+ 查询目标表单、条件字段和操作人。
10
+
11
+ ## 不可猜测
12
+
13
+ 筛选条件必须引用目标表真实字段;不能把名称或非本次上下文的字段键写入条件。
14
+
15
+ ## 最小计划
16
+
17
+ `targetForm`、`person`、`filterCondition`。
18
+
19
+ ## filterCondition 格式
20
+
21
+ **以 `references/condition_rules.md` 为准**:`{"field":{"id":"<目标字段id>","label":"<字段名>"},"operator":"eq","right":{...}}`。`field` 是 `{id,label}` 对象、`operator` 用英文操作符(`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`)、右值键用 `right`。**勿用**废弃的 `value` 别名 / `=` / 裸字符串 `field`,否则编译报「左侧字段 id 不在目标表单实时字段列表中」。
22
+
23
+ 当条件左字段是「关联流程」Workflow 时,必须由 Skill 根据实时字段元数据和 `workflowPath.formIds` 反查真实流程表单对象;编译后的左值使用原始数字 `fieldName`、`fieldType:"String"`、顶层 `sformId` 和 `formInfo.formId/layoutId`,不得套用普通业务字段的 `field_` 前缀或把目标表单版本 ID写成 `sformId`。
@@ -1,21 +1,23 @@
1
- # 更新表单数据(`ActionEbUpdate`)
2
-
3
- ## 何时使用
4
-
5
- 更新已有 e-builder 数据;新增数据使用 `ActionEbAdd`,删除数据使用 `ActionEbDelete`。
6
-
7
- ## 先查询
8
-
9
- 查询目标表单及字段;按条件更新还要确认条件左字段和本次触发器上下文。
10
-
11
- ## 不可猜测
12
-
13
- `id`、`updateData`、`fieldUpdate` 三种定位方式互不替代。`basisValue` 只用于真实上游明细依据值。
14
-
15
- ## 最小计划
16
-
17
- `targetForm`、`person`、更新赋值,以及与 `opType` 对应的定位参数。
18
-
19
- ## filterCondition 格式(opType=updateData 定位条件)
20
-
21
- **以 `actionflows/references/condition_rules.md` 为准**:`{"field":{"id":"<目标字段id>","label":"<字段名>"},"operator":"eq","right":{...}}`。`field` 是 `{id,label}` 对象、`operator` 用英文操作符(`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`)、右值键用 `right`。**勿用**废弃的 `value` 别名 / `=` / 裸字符串 `field`,否则编译报「左侧字段 id 不在目标表单实时字段列表中」。
1
+ # 更新表单数据(`ActionEbUpdate`)
2
+
3
+ ## 何时使用
4
+
5
+ 更新已有 e-builder 数据;新增数据使用 `ActionEbAdd`,删除数据使用 `ActionEbDelete`。
6
+
7
+ ## 先查询
8
+
9
+ 查询目标表单及字段;按条件更新还要确认条件左字段和本次触发器上下文。
10
+
11
+ ## 不可猜测
12
+
13
+ `id`、`updateData`、`fieldUpdate` 三种定位方式互不替代。`basisValue` 只用于真实上游明细依据值。
14
+
15
+ ## 最小计划
16
+
17
+ `targetForm`、`person`、更新赋值,以及与 `opType` 对应的定位参数。
18
+
19
+ ## filterCondition 格式(opType=updateData 定位条件)
20
+
21
+ **以 `references/condition_rules.md` 为准**:`{"field":{"id":"<目标字段id>","label":"<字段名>"},"operator":"eq","right":{...}}`。`field` 是 `{id,label}` 对象、`operator` 用英文操作符(`eq/neq/gt/lt/gte/lte/contains/uncontains/empty/nempty`)、右值键用 `right`。**勿用**废弃的 `value` 别名 / `=` / 裸字符串 `field`,否则编译报「左侧字段 id 不在目标表单实时字段列表中」。
22
+
23
+ 当条件左字段是「关联流程」Workflow 时,必须由 Skill 根据实时字段元数据和 `workflowPath.formIds` 反查真实流程表单对象;编译后的左值使用原始数字 `fieldName`、`fieldType:"String"`、顶层 `sformId` 和 `formInfo.formId/layoutId`,不得套用普通业务字段的 `field_` 前缀或把目标表单版本 ID写成 `sformId`。
@@ -1,75 +1,101 @@
1
- # 查询表单数据(`EnquiryForm`)
2
-
3
- ## 何时使用
4
-
5
- 查询 e-builder 表单列表或分组统计;按单条 ID 读取使用 `EbGetDataById`。
6
-
7
- ## 先查询
8
-
9
- 查询数据源、全部字段、筛选字段、输出字段和查询操作人。
10
-
11
- ## 不可猜测
12
-
13
- 筛选、排序、分组和输出字段都必须来自当前数据源;统计结果应作为后续节点上下文使用。
14
-
15
- ## 最小计划
16
-
17
- `dataSource`、`person`;按 `opType` 补充查询字段和筛选条件。未明确限制 `queryFields` 时不要传它(或传空数组),CLI 会默认全选主表和系统字段,包含“数据ID”。
18
-
19
- ## 批量新增主表字段引用查询结果(2026-08-27 真机钉死)
20
-
21
- **结论:当需求确实需要反查时,EnquiryForm 查询结果可以赋给 `batchInsert` 主表字段(标量),但只限"单值反查"场景**。它不是任何表单新增动作的默认前置节点。手动创建成功样本:`actionflows/references/examples/enquiry-form-batch-insert-scene2.json`(ApproveTrigger → EnquiryForm → ActionEbAdd(batchInsert) → Output)。
22
-
23
- 关键结构(与旧结论不同,已修正):
24
-
25
- 1. **EnquiryForm 节点(首动作)**:
26
- - `dataSource.type = "LOGIC"`、`dataSource.groupId = "weaver-ebuilder-form-service"`(不是表单所属应用 id!)
27
- - `queryFields[].id = "id"`(简写,不是 `{表id}[].id`);`fieldGroup = { name: 表名, id: 表id }`
28
- - 筛选:`filterInput.datas[].conditions.value` 用流程上下文 type=3(`ApprovalData.{wfId}.requestId`)
29
- - 首动作 **不需要 sources**(undefined),ActionEbAdd 的 sources 指向 EnquiryForm 节点 wId
30
-
31
- 2. **主表字段引用查询结果(项目名称 5453)**:
32
- - assign:`type=3`,`value = "FormData.{查询表id}[{positionId}].id"`(**数组下标用 positionId 而非 `[]`**)
33
- - `config.comType = "EnquiryForm"`、`config.comId = EnquiryForm 节点 id`、`config.paramKey = "{查询表id}[].id"`(paramKey 保持 `[]` 数组标记)
34
- - **childs 必须带固定值取下标**:`[{ type: "1", value: "0", position: "{positionId}" }]`(value=0 取第一条)
35
- - `frontId` = 查询结果字段的临时 id(非表单字段 id)
36
-
37
- 3. 其余明细字段仍用依据值下级 type=10 直连(paramKey `{wfId}.{明细表id}[].{子字段id}`,source=event 节点 id)。
38
-
39
- 4. 挂接注意:EnquiryForm 作为**流程首动作**保存成功;此前「两个起始执行组件」报错疑与给首动作补 sources 或 dataSource.type 用 FORM 有关,**勿给首动作补 sources**。
40
-
41
- 计划中引用该结果时,必须显式写 `kind:"query_result"`,不能把它写成普通流程字段。例如:
42
-
43
- ```json
44
- {
45
- "mapping": {
46
- "<查询表单id>[].id": {
47
- "target": "<目标字段id>",
48
- "kind": "query_result",
49
- "source": "<EnquiryForm动作ref>",
50
- "formId": "<查询表单id>",
51
- "fieldId": "id",
52
- "label": "数据ID",
53
- "index": 0
54
- }
55
- }
56
- }
57
- ```
58
-
59
- 其中查询动作需显式声明例如 `{"type":"EnquiryForm","ref":"项目查询","params":{...}}`,后续写 `source:"项目查询"`。编译器会将该语义 `ref` 替换为实际节点 ID,并生成保存所需的 `childs` 下标公式;禁止使用或猜测平台节点 ID。
60
-
61
- ## 关键边界:只支持"单值反查",不支持"逐行明细反查"(2026-08-27 用户确认)
62
-
63
- **适用条件(场景2 成立的唯一前提)**:EnquiryForm 的筛选条件用的是**流程级唯一值**(如 `关联流程 eq requestId`),业务上一个流程只对应一条查询结果 → 取第一条(childs value=0)就是唯一那条,赋值主表字段正确。
64
-
65
- **禁止场景(多条结果)**:如果筛选条件用的是**明细行 id/明细字段**(如"按任务编号反查"),查询结果会有多条,且**数据源返回结果的顺序与流程明细表的行顺序不保证一致**(第 1 行明细对应的结果可能排在返回结果第 5 行)。此时:
66
- - 无法用"取第一条"对应到正确的明细行;
67
- - 无法把查询结果作为依据值(basisValue)传给下方组件——明细字段值仍需以**流程明细表本身作为依据值**(type=10 直连);
68
- - **转化规则必须逐行做明细字段转化,多条结果做不到 → 该场景明确拒绝,不硬凑 EnquiryForm**。
69
-
70
- 一句话决策:**EnquiryForm 反查只能给"与明细行无关的全局单值"(主表字段,按流程级唯一条件查);凡需"按每行明细反查对应值"的,直接拒绝并告知用户**。
71
-
72
- ## 曾经的错误结论(已推翻,勿沿用)
73
-
74
- - ~~EnquiryForm 输出是列表数组不能赋主表标量~~ → 实际通过 childs 固定值取下标(value=0 第一条)实现(仅限单值反查)。
75
- - ~~批量新增场景不要用 EnquiryForm 反查~~ → 单值反查是标准做法,见上;逐行反查仍不可行。
1
+ # 查询表单数据(`EnquiryForm`)
2
+
3
+ ## 何时使用
4
+
5
+ 查询 e-builder 表单列表或分组统计;按单条 ID 读取使用 `EbGetDataById`。
6
+
7
+ ## 先查询
8
+
9
+ 查询数据源、全部字段、筛选字段、输出字段和查询操作人。
10
+
11
+ ## 不可猜测
12
+
13
+ 筛选、排序、分组和输出字段都必须来自当前数据源;统计结果应作为后续节点上下文使用。
14
+
15
+ ## 最小计划
16
+
17
+ `dataSource`、`person`;按 `opType` 补充查询字段和筛选条件。未明确限制 `queryFields` 时不要传它(或传空数组),CLI 会默认全选主表和系统字段,包含“数据ID”。
18
+
19
+ ## 分组/汇总查询
20
+
21
+ `opType:"groupFields"` 是原生“分组/汇总”能力,不需要规则集或外部计算组件:
22
+
23
+ - `groupFields` 是分组维度:`[{"field":"<真实字段id>"}]`;没有分组维度时传空数组。
24
+ - `groupMessage` 是汇总值:`[{"field":"<真实字段id>","aggregator":"SUM"}]`。
25
+ - 可用聚合方式:`SUM`、`MIN`、`AVG`、`MAX`、`COUNT`、`DISTINCTCOUNT`。其中 `SUM`/`AVG` 只用于数值字段。
26
+ - 汇总输出字段名由平台固定为 `s_sum_<字段id>`、`s_min_<字段id>`、`s_avg_<字段id>`、`s_max_<字段id>`、`s_count_<字段id>`、`s_distinctcount_<字段id>`;后续节点引用它时使用 `kind:"query_result"`、`fieldId:"s_sum_<字段id>"`、`source:"<查询动作ref>"`、`index:0`。
27
+
28
+ 示例:汇总“收款金额”并让后续节点取第一条汇总结果:
29
+
30
+ ```json
31
+ {
32
+ "type": "EnquiryForm",
33
+ "ref": "收款汇总",
34
+ "params": {
35
+ "dataSource": {"groupId":"<应用id>","id":"<合同收款表id>","text":"合同收款表"},
36
+ "person": {"type":"role"},
37
+ "opType": "groupFields",
38
+ "filter": {"field":{"id":"<关联项目字段id>","label":"关联项目"},"operator":"eq","right":{"kind":"context","paramKey":"<当前表单>.关联项目"}},
39
+ "groupFields": [],
40
+ "groupMessage": [{"field":"<收款金额字段id>","aggregator":"SUM"}]
41
+ }
42
+ }
43
+ ```
44
+
45
+ ## 批量新增主表字段引用查询结果(2026-08-27 真机钉死)
46
+
47
+ **结论:当需求确实需要反查时,EnquiryForm 查询结果可以赋给 `batchInsert` 主表字段(标量),但只限"单值反查"场景**。它不是任何表单新增动作的默认前置节点。手动创建成功样本:`references/examples/enquiry-form-batch-insert-scene2.json`(ApproveTrigger → EnquiryForm → ActionEbAdd(batchInsert) → Output)。样例中的 `opText` 是历史平台序列化快照,不是生成模板;生成时只依据语义 plan 和实时字段元数据,尤其不要复制其中 Workflow 左值的旧 `field_`/`Workflow` 组合。
48
+
49
+ 关键结构(与旧结论不同,已修正):
50
+
51
+ 1. **EnquiryForm 节点(首动作)**:
52
+ - `dataSource.type = "LOGIC"`、`dataSource.groupId = "weaver-ebuilder-form-service"`(不是表单所属应用 id!)
53
+ - `queryFields[].id = "id"`(简写,不是 `{表id}[].id`);`fieldGroup = { name: 表名, id: 表id }`
54
+ - 筛选:`filterInput.datas[].conditions.value` 用流程上下文 type=3(`ApprovalData.{wfId}.requestId`)
55
+ - 首动作 **不需要 sources**(undefined),ActionEbAdd 的 sources 指向 EnquiryForm 节点 wId
56
+
57
+ 2. **主表字段引用查询结果(项目名称 5453)**:
58
+ - assign:`type=3`,`value = "FormData.{查询表id}[{positionId}].id"`(**数组下标用 positionId 而非 `[]`**)
59
+ - `config.comType = "EnquiryForm"`、`config.comId = EnquiryForm 节点 id`、`config.paramKey = "{查询表id}[].id"`(paramKey 保持 `[]` 数组标记)
60
+ - **childs 必须带固定值取下标**:`[{ type: "1", value: "0", position: "{positionId}" }]`(value=0 取第一条)
61
+ - `frontId` = 查询结果字段的临时 id(非表单字段 id)
62
+
63
+ 3. 其余明细字段仍用依据值下级 type=10 直连(paramKey `{wfId}.{明细表id}[].{子字段id}`,source=event 节点 id)。
64
+
65
+ 4. 挂接注意:EnquiryForm 作为**流程首动作**保存成功;此前「两个起始执行组件」报错疑与给首动作补 sources 或 dataSource.type 用 FORM 有关,**勿给首动作补 sources**。
66
+
67
+ 计划中引用该结果时,必须显式写 `kind:"query_result"`,不能把它写成普通流程字段。例如:
68
+
69
+ ```json
70
+ {
71
+ "mapping": {
72
+ "<查询表单id>[].id": {
73
+ "target": "<目标字段id>",
74
+ "kind": "query_result",
75
+ "source": "<EnquiryForm动作ref>",
76
+ "formId": "<查询表单id>",
77
+ "fieldId": "id",
78
+ "label": "数据ID",
79
+ "index": 0
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ 其中查询动作需显式声明例如 `{"type":"EnquiryForm","ref":"项目查询","params":{...}}`,后续写 `source:"项目查询"`。编译器会将该语义 `ref` 替换为实际节点 ID,并生成保存所需的 `childs` 下标公式;禁止使用或猜测平台节点 ID。
86
+
87
+ ## 关键边界:只支持"单值反查",不支持"逐行明细反查"(2026-08-27 用户确认)
88
+
89
+ **适用条件(场景2 成立的唯一前提)**:EnquiryForm 的筛选条件用的是**流程级唯一值**(如 `关联流程 eq requestId`),业务上一个流程只对应一条查询结果 → 取第一条(childs value=0)就是唯一那条,赋值主表字段正确。
90
+
91
+ **禁止场景(多条结果)**:如果筛选条件用的是**明细行 id/明细字段**(如"按任务编号反查"),查询结果会有多条,且**数据源返回结果的顺序与流程明细表的行顺序不保证一致**(第 1 行明细对应的结果可能排在返回结果第 5 行)。此时:
92
+ - 无法用"取第一条"对应到正确的明细行;
93
+ - 无法把查询结果作为依据值(basisValue)传给下方组件——明细字段值仍需以**流程明细表本身作为依据值**(type=10 直连);
94
+ - **转化规则必须逐行做明细字段转化,多条结果做不到 → 该场景明确拒绝,不硬凑 EnquiryForm**。
95
+
96
+ 一句话决策:**EnquiryForm 反查只能给"与明细行无关的全局单值"(主表字段,按流程级唯一条件查);凡需"按每行明细反查对应值"的,直接拒绝并告知用户**。
97
+
98
+ ## 曾经的错误结论(已推翻,勿沿用)
99
+
100
+ - ~~EnquiryForm 输出是列表数组不能赋主表标量~~ → 实际通过 childs 固定值取下标(value=0 第一条)实现(仅限单值反查)。
101
+ - ~~批量新增场景不要用 EnquiryForm 反查~~ → 单值反查是标准做法,见上;逐行反查仍不可行。
@@ -0,0 +1,33 @@
1
+ # e-builder 按钮触发(`EventButton`)
2
+
3
+ ## 何时使用
4
+
5
+ 需求明确为点击 e-builder 表单上的某个按钮时触发。它与 `EventFormData` 不同:后者只监听数据变动,不能识别是由哪个按钮触发。
6
+
7
+ ## 先查询
8
+
9
+ 1. 用 `form-applications`、`form-list` 确认表单和所属业务应用。
10
+ 2. 用 `e10-cli actionflow form-buttons '{"tableId":"<表单ID>","appId":"<应用ID>"}'` 读取真实按钮 ID、名称与启用状态。
11
+
12
+ 不要按按钮名称猜测 ID,也不要创建按钮作为生成动作流的隐含步骤。
13
+
14
+ ## 最小计划
15
+
16
+ ```json
17
+ {
18
+ "event": {
19
+ "type": "EventButton",
20
+ "params": {
21
+ "targetForm": {"groupId":"<应用ID>","id":"<表单ID>"},
22
+ "buttonType": [{"id":"<按钮ID>","name":"<按钮名称>","buttonLocation":"after"}],
23
+ "triggerType": "sequence"
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ `buttonLocation` 只能是 `before`(按钮默认动作前)或 `after`(默认动作后)。多选记录场景的 `triggerType` 为 `sequence`、`merge` 或 `parallel`。需要异步时在对应按钮项写 `asyncExecution:true`。
30
+
31
+ ## 上下文
32
+
33
+ 触发后可引用 `FormData`、`FormField`、`FormButton`、`SettingInfo`、`accessId` 和 `monitorId`。先通过组件上下文预检获取当前租户的字段,禁止猜测字段路径。
@@ -1,23 +1,23 @@
1
- # 条件分支(`Condition`)
2
-
3
- ## 何时使用
4
-
5
- 根据上游字段进入 if/else if/else 分支。
6
-
7
- ## 先查询
8
-
9
- 查询当前触发器的真实上下文字段及字段类型。
10
-
11
- ## 不可猜测
12
-
13
- 条件左值只能引用当前可见上下文;右值、操作符和字段类型必须匹配。未知操作符或类型不兼容必须报错,不能静默改成“等于”。无法通过条件编辑器实际回显时,不伪称已验证。
14
-
15
- 右值使用 `fixed`、`system`、`context` 之一;动态右值传 `type:"context"` 和真实 `paramKey`,或传平台回读的完整 `formula`。不要把动态字段名当作固定字符串。
16
-
17
- ## 保存与回读
18
-
19
- 分支条件由运行时在预暂存注册来源节点后保存:取得真实 `mapBaseId`,保存完整嵌套 `childrens` 树,并以保存响应的真实 `conditionId/mapBaseId/mapId` 回填设计。新建后 `getExpressionBean` 可能只返回分组骨架,不能以它覆盖完整叶子树。所有平台 Long ID 都按字符串处理;最终以动作流暂存回读和设计器弹窗确认。
20
-
21
- ## 最小计划
22
-
23
- `branches`,每个 if/else if 有真实 `condition`,每个分支有动作列表。
1
+ # 条件分支(`Condition`)
2
+
3
+ ## 何时使用
4
+
5
+ 根据上游字段进入 if/else if/else 分支。
6
+
7
+ ## 先查询
8
+
9
+ 查询当前触发器的真实上下文字段及字段类型。
10
+
11
+ ## 不可猜测
12
+
13
+ 条件左值只能引用当前可见上下文;右值、操作符和字段类型必须匹配。未知操作符或类型不兼容必须报错,不能静默改成“等于”。无法通过条件编辑器实际回显时,不伪称已验证。
14
+
15
+ 右值使用 `fixed`、`system`、`context` 之一;动态右值传 `type:"context"` 和真实 `paramKey`,或传平台回读的完整 `formula`。不要把动态字段名当作固定字符串。
16
+
17
+ ## 保存与回读
18
+
19
+ 分支条件由运行时在预暂存注册来源节点后保存:取得真实 `mapBaseId`,保存完整 `childrens` 树,并以保存响应的真实 `conditionId/mapBaseId/mapId` 回填设计。顶层 `relationship` 直接作为根关系,不能再包一层相同关系的子组;只有 plan 明确写出的嵌套 AND/OR 才保留嵌套。新建后 `getExpressionBean` 可能只返回分组骨架,不能以它覆盖完整叶子树。所有平台 Long ID 都按字符串处理;最终以动作流暂存回读和设计器弹窗确认。
20
+
21
+ ## 最小计划
22
+
23
+ `branches`,每个 if/else if 有真实 `condition`,每个分支有动作列表。
@@ -0,0 +1,40 @@
1
+ # 内置 MQ 发送(`InnerMQSend`)
2
+
3
+ ## 何时使用
4
+
5
+ 向平台内置 MQ 的 Topic/队列发送消息时使用。它不是外部 MQ 连接器的生产者动作。
6
+
7
+ ## 参数
8
+
9
+ ```json
10
+ {
11
+ "actions": [
12
+ {
13
+ "type": "InnerMQSend",
14
+ "params": {
15
+ "queueName": "真实Topic名称",
16
+ "sendModel": "1",
17
+ "sendParams": "<平台 InnerMqComponentDTO.sendParams 原生 ParamMappingBean>"
18
+ }
19
+ }
20
+ ]
21
+ }
22
+ ```
23
+
24
+ - `queueName` 和 `sendParams` 必填;固定 Topic 直接传字符串,CLI 会转换为平台所需的 `FormulaBean`。
25
+ - `queueName` 也可以传已解析的 `context`/`fixed`/`system_variable` 赋值或平台原生 `FormulaBean`。
26
+ - `sendModel` 为 `1` 广播模式或 `2` 集群模式,省略时默认 `1`。
27
+ - `sendParams` 必须来自平台发送参数设计器的原生 `ParamMappingBean`,不要用 `receiveParams` 或普通字符串替代。
28
+
29
+ ### 参数类型与数据类型联动
30
+
31
+ `tableData` 中每一行的 `paramType` 决定 `dataType` 的合法候选和是否允许继续加下级,不能只把 `dataType` 当成一个任意字符串填写:
32
+
33
+ - 普通标量(如 `string`、`int`、`boolean` 等)且 `arrs:false` 时,合法数据类型只有“属性”;平台因此不会显示数据类型下拉,这是正常行为。
34
+ - `arrs:true` 时,平台允许在该参数类型对应的多个数据类型中选择;数组参数的 `paramKey` 回读时可能规范化为带 `[]` 的形式。
35
+ - `json`、`xml`、`xml_string` 是结构化参数,可以通过 `parentId` 组织下级参数;下级参数仍需按自身 `paramType` 和父节点限制填写,不能把结构化参数拍平成普通标量。
36
+ - 数据类型下拉是否显示是设计器根据参数类型、数组标志、父节点和固定类型限制计算出来的 UI 状态,不由服务端仅凭 `dataType` 字段强行打开。
37
+
38
+ 因此,需求只要求一个数据类型时不要伪造下拉;需求需要多种数据类型或下级节点时,必须按真实参数类型构造 `tableData` 层级。
39
+
40
+ `InnerMQSend` 与触发器 `InnerMQListener` 不能同时出现在一个动作流中,包括条件和循环内部;CLI 会在创建或更新前拒绝该计划。
@@ -6,11 +6,11 @@
6
6
 
7
7
  ## 先查询
8
8
 
9
- 固定接收人查询当前租户人员;动态内容查询本次上下文。
9
+ 固定接收人查询当前租户人员;上游负责人等动态接收人使用本次上下文;标题和正文中的动态片段也使用本次上下文。
10
10
 
11
11
  ## 不可猜测
12
12
 
13
- 标题和内容按需求选固定文本或 `parts` 模板;纯字符串保持固定值,只有 `parts` 模板才进入设计器的动态赋值。模板上下文只传 `paramKey` 和 `label`,由 CLI 按消息编辑器的动态片段结构编译。对定时批量、按日期字段、表单数据等 e-builder 记录触发器,未显式提供链接时 CLI 自动生成 PC/移动端详情链接:`formId` 为触发表单 ID 固定值,`dataId` 为上游“数据ID”动态上下文。显式 `pcLink` / `mobileLink` 会覆盖该默认行为。
13
+ 标题和内容按需求选固定文本或 `parts` 模板;纯字符串保持固定值,只有 `parts` 模板才进入设计器的动态赋值。需要动态接收人时传 `receiver: {"type":"context","paramKey":"<真实人员字段paramKey>","label":"<字段名>"}`,不能把人员字段当固定人员 ID,也不能省略 `paramKey`。模板上下文只传 `paramKey` 和 `label`,由 CLI 按消息编辑器的动态片段结构编译,并绑定当前触发节点。对定时批量、按日期字段、表单数据等 e-builder 记录触发器,未显式提供链接时 CLI 自动生成 PC/移动端详情链接:`formId` 为触发表单 ID 固定值,`dataId` 为上游“数据ID”动态上下文。显式 `pcLink` / `mobileLink` 会覆盖该默认行为。
14
14
 
15
15
  ## 最小计划
16
16
 
@@ -0,0 +1,45 @@
1
+ # 自定义事件触发(`CustomTrigger`)
2
+
3
+ ## 何时使用
4
+
5
+ 需求明确要求由平台自定义事件主动触发动作流时使用。它不是 e-builder 表单数据变化触发,也不是按钮触发。
6
+
7
+ ## 参数
8
+
9
+ 唯一必填参数是 `customData`。设计器实际使用的是 `SetParam` 的参数对象:顶层保留 `customId`、`formType`、`businessModule`、`tableList`,每个 `tableList` 项包含 `id`、`showName`、`isMain`、`orderNum` 和 `fields`;每个字段至少要有 `id`、`paramName`、`showName`、`paramType`。它必须来自平台自定义触发配置/回读或上下文接口返回的原生对象,不要改写成旧的 `tables` 结构,也不要猜测一套字段。
10
+
11
+ ```json
12
+ {
13
+ "event": {
14
+ "type": "CustomTrigger",
15
+ "params": {
16
+ "customData": {
17
+ "customId": "<平台返回>",
18
+ "formType": "input",
19
+ "businessModule": "esb",
20
+ "tableList": [{
21
+ "id": "<平台返回>",
22
+ "showName": "主表",
23
+ "isMain": true,
24
+ "orderNum": 0,
25
+ "fields": [{
26
+ "id": "<平台返回>",
27
+ "paramName": "payload",
28
+ "showName": "消息体",
29
+ "paramType": "string",
30
+ "isRequired": true
31
+ }]
32
+ }]
33
+ }
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ 自定义参数的字段定义是业务特定的。没有真实 `customData` 时先读取已有动作流/组件上下文,不要生成空壳触发器。`tableList` 或其中的 `fields` 为空时,设计器“输入参数设置”就是空白;这不是回读截断,而是发送的对象本身没有参数。
40
+
41
+ 根触发器图标不是 `Icon-custom-trigger`,编译器统一保存为 `Icon-N-Triggerrul`。
42
+
43
+ ## 上下文
44
+
45
+ 触发后可引用平台提供的 `FormData`、`FormField`、`SettingInfo`、`accessId` 和 `monitorId`;具体字段以当前租户上下文返回为准。
@@ -0,0 +1,40 @@
1
+ # 内置 MQ 监听(`InnerMQListener`)
2
+
3
+ ## 何时使用
4
+
5
+ 需求明确要求监听平台内置 MQ 广播 Topic 时使用。它不同于外部 RabbitMQ/Kafka 等 `MqConsumer`。
6
+
7
+ ## 参数
8
+
9
+ ```json
10
+ {
11
+ "event": {
12
+ "type": "InnerMQListener",
13
+ "params": {
14
+ "queueName": "真实Topic名称",
15
+ "sendModel": "1",
16
+ "receiveParams": {
17
+ "tableId": "<平台参数表 ID>",
18
+ "tableData": [{
19
+ "id": "<平台字段 ID>",
20
+ "paramKey": "payload",
21
+ "paramName": "payload",
22
+ "showName": "消息体",
23
+ "paramType": "string",
24
+ "dataType": "attribute",
25
+ "required": true,
26
+ "arrs": false
27
+ }]
28
+ }
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ - `queueName` 必填,使用平台真实 Topic/队列名称。
35
+ - `sendModel` 当前只支持 `1`(广播模式),省略时 CLI 默认填入 `1`。
36
+ - `receiveParams` 可选;有业务接收字段时传平台原生 `ParamSettingBean`,在当前设计器回读结构中表现为 `tableId + tableData`,没有时省略。不能传 `{type:'SETTING', tables:[]}` 期待它自动生成输入字段。
37
+
38
+ 根触发器图标不是猜测的 `Icon-message-queue`,平台内置 MQ 监听实际使用 `Icon-built-in-mq-listening-mcolor`;不要把发送动作的图标当成监听触发器图标。
39
+
40
+ `InnerMQListener` 与动作 `InnerMQSend` 不能同时出现在一个动作流中,包括条件和循环内部;CLI 会在创建或更新前拒绝该计划。
@@ -1,5 +1,40 @@
1
1
  # 流程触发(`ApproveTrigger`)
2
2
 
3
+ ## 同一流程的多条触发规则
4
+
5
+ 平台的“动作执行节点/出口”窗口可为同一个流程添加多行规则;不要把它误拆成多个动作流。计划用 `triggerRules` 表达:
6
+
7
+ ```json
8
+ {
9
+ "workflowPath": {"id":"<流程id>","name":"<流程名>"},
10
+ "triggerRules": [
11
+ {"triggerTiming":"leave","approveNode":{"id":"<发起节点id>","name":"发起节点"}},
12
+ {"triggerTiming":"arrive","nodeTime":"2","approveNode":{"id":"<发起节点id>","name":"发起节点"}},
13
+ {"triggerTiming":"workflow_completed","approveNode":{"id":"<结束节点id>","name":"结束节点"}}
14
+ ]
15
+ }
16
+ ```
17
+
18
+ CLI 会逐条校验真实节点/出口及其允许的执行时间,并写入同一流程的 `singleApproveConfigs[workflowId]` 数组。未传 `triggerRules` 时,才使用原来的单条 `triggerTiming` 写法。
19
+
20
+ ## 多时机触发不同动作时,先按触发上下文分支
21
+
22
+ 多条规则触发的仍是**同一张动作流画布**,因此不能把“新增 / 删除 / 更新”三个动作直接串在主链上。应在事件后的第一个节点放 `Condition`,用流程触发器实时输出的字段路由:
23
+
24
+ - `triggerType`:`pre`(节点前)、`after`(节点后)、`link`(出口)等;
25
+ - `executeTime`:例如 `2` 表示返回到达;
26
+ - `triggerNodeOrLinkId`:实际触发的节点或出口 ID。
27
+
28
+ 例如“发起节点离开新增、返回到达删除、结束节点正向到达更新”写成三条互斥分支:
29
+
30
+ ```text
31
+ triggerNodeOrLinkId = 发起节点 AND triggerType = after AND executeTime = 1 -> 新建
32
+ triggerNodeOrLinkId = 发起节点 AND triggerType = pre AND executeTime = 2 -> 删除
33
+ triggerNodeOrLinkId = 结束节点 AND triggerType = pre AND executeTime = 1 -> 更新
34
+ ```
35
+
36
+ 以上三个字段必须从当前流程触发器的 `getComponentContext` 返回结果取真实 `paramKey`,不要手写成业务表单字段。
37
+
3
38
  ## 何时使用
4
39
 
5
40
  由流程提交、审批、结束等时机触发动作流。
@@ -24,7 +24,7 @@
24
24
 
25
25
  分支条件和 `filterCondition` 共用 AND/OR 业务语义,但保存协议不同,不能互相复制 DTO。
26
26
 
27
- - 计划用 `condition: { relationship: "and|or", conditions: [...] }`;叶子为 `{left, operator, right}`。
27
+ - 计划用 `condition: { relationship: "and|or", conditions: [...] }`;叶子为 `{left, operator, right}`。顶层 `relationship` 直接作为条件树根关系;编译器不会额外套同关系 AND/OR,只有条件中明确嵌套的规则组才保留子组。
28
28
  - `left` 只能是当前上游组件的实时字段;`operator` 由字段类型限制,未知或不兼容时编译失败。
29
29
  - `right` 只用 `fixed`、`system`、`context`,或 `formula` 完整回读对象。`context` 必须写真实 `paramKey`,由运行时生成 FormulaBean;禁止把字段名作为固定值。
30
30
  - 保存采用 ESB `source=8`:预暂存注册来源节点 → `getConditionSet` → `saveCondition` → 以保存响应回填真实持久化 ID → 最终暂存。新建后 `getExpressionBean` 可能只返回分组骨架,不能覆盖完整 `childrens` 叶子树;`mapBaseId`、`conditionId`、`mapId` 和所有 Long ID 都保持字符串,新建条件不传本地 `conditionId`。
@@ -42,7 +42,9 @@ ESB 动作流的 `filterInput`(TimeBatchTrigger/DateTrigger/数据动作筛选
42
42
  }
43
43
  ```
44
44
 
45
- `fieldType/text/objId/compType` 等元信息由编译器按真实字段补全(`buildFilterInput`),**plan 里不写**。
45
+ `fieldType/text/objId/compType` 等元信息由编译器按真实字段补全(`buildFilterInput`),**plan 里不写**。对于关联字段,编译器必须保留平台所需的真实 `sformId`;`refObjId` 仅在该组件的正式 DTO 要求时保留,不能把它作为所有关联字段的统一必填项,也不能只写字段 ID或把表单版本 `formId` 当作关联对象身份,否则保存后设计器可能显示“字段已删除”。
46
+
47
+ 其中 Workflow 字段要区分两种 ID:`formInfo.formId` 是当前目标表单的版本 ID;顶层 `sformId` 是该字段关联的流程表单对象 ID。正式回读的 Workflow DTO 使用原始数字 `fieldName`、`fieldType:"String"`、空 `module`/`originBrowserType`,`config` 只保留 `fieldId`;不能按普通 e-builder 业务字段加 `field_` 前缀,也不能把组件名 `Workflow` 当作存储类型。`refObjId` 对 Workflow 不是必填。若实时字段接口没有返回 Workflow 的关联对象,预检必须根据当前 `workflowPath.formIds` 在同一应用的表单列表中反查对象 ID,并把目标表 `getFormLayout` 返回的默认布局 ID写入 `formInfo.layoutId`。反查不到时应报错停止,不能用目标表单版本 ID兜底。
46
48
 
47
49
  ### 2. 值类型 `conditions.type` 枚举
48
50