weaver-e10-builder 1.6.15 → 1.7.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 (348) hide show
  1. package/dist/cli-register.d.ts +8 -1
  2. package/dist/cli-register.d.ts.map +1 -1
  3. package/dist/cli-register.js +238 -86
  4. package/dist/cli-register.js.map +1 -1
  5. package/dist/commands/actionflow.d.ts +1 -0
  6. package/dist/commands/actionflow.d.ts.map +1 -1
  7. package/dist/commands/actionflow.js +17 -1
  8. package/dist/commands/actionflow.js.map +1 -1
  9. package/dist/commands/designer-custom-page.d.ts +3 -0
  10. package/dist/commands/designer-custom-page.d.ts.map +1 -0
  11. package/dist/commands/designer-custom-page.js +56 -0
  12. package/dist/commands/designer-custom-page.js.map +1 -0
  13. package/dist/commands/designer-event.d.ts.map +1 -1
  14. package/dist/commands/designer-event.js +70 -5
  15. package/dist/commands/designer-event.js.map +1 -1
  16. package/dist/commands/designer-list-advanced.d.ts +3 -0
  17. package/dist/commands/designer-list-advanced.d.ts.map +1 -0
  18. package/dist/commands/designer-list-advanced.js +53 -0
  19. package/dist/commands/designer-list-advanced.js.map +1 -0
  20. package/dist/commands/designer-list-controls.d.ts +3 -0
  21. package/dist/commands/designer-list-controls.d.ts.map +1 -0
  22. package/dist/commands/designer-list-controls.js +39 -0
  23. package/dist/commands/designer-list-controls.js.map +1 -0
  24. package/dist/commands/designer-permission.d.ts +3 -0
  25. package/dist/commands/designer-permission.d.ts.map +1 -0
  26. package/dist/commands/designer-permission.js +32 -0
  27. package/dist/commands/designer-permission.js.map +1 -0
  28. package/dist/commands/designer-tabbar.d.ts +3 -0
  29. package/dist/commands/designer-tabbar.d.ts.map +1 -0
  30. package/dist/commands/designer-tabbar.js +24 -0
  31. package/dist/commands/designer-tabbar.js.map +1 -0
  32. package/dist/commands/ecode.d.ts +9 -0
  33. package/dist/commands/ecode.d.ts.map +1 -0
  34. package/dist/commands/ecode.js +81 -0
  35. package/dist/commands/ecode.js.map +1 -0
  36. package/dist/commands/form-base-setting.d.ts +3 -0
  37. package/dist/commands/form-base-setting.d.ts.map +1 -0
  38. package/dist/commands/form-base-setting.js +192 -0
  39. package/dist/commands/form-base-setting.js.map +1 -0
  40. package/dist/commands/form-field-linkage.d.ts +5 -0
  41. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  42. package/dist/commands/form-field-linkage.js +82 -16
  43. package/dist/commands/form-field-linkage.js.map +1 -1
  44. package/dist/commands/form-list-columns.d.ts.map +1 -1
  45. package/dist/commands/form-list-columns.js +4 -0
  46. package/dist/commands/form-list-columns.js.map +1 -1
  47. package/dist/commands/form-list-config.d.ts.map +1 -1
  48. package/dist/commands/form-list-config.js +19 -3
  49. package/dist/commands/form-list-config.js.map +1 -1
  50. package/dist/commands/form-list-permission.d.ts.map +1 -1
  51. package/dist/commands/form-list-permission.js +34 -1
  52. package/dist/commands/form-list-permission.js.map +1 -1
  53. package/dist/commands/form-obj-meta.d.ts.map +1 -1
  54. package/dist/commands/form-obj-meta.js +194 -1
  55. package/dist/commands/form-obj-meta.js.map +1 -1
  56. package/dist/commands/form-table-view.d.ts.map +1 -1
  57. package/dist/commands/form-table-view.js +14 -4
  58. package/dist/commands/form-table-view.js.map +1 -1
  59. package/dist/commands/matrix-person.d.ts +3 -0
  60. package/dist/commands/matrix-person.d.ts.map +1 -0
  61. package/dist/commands/matrix-person.js +95 -0
  62. package/dist/commands/matrix-person.js.map +1 -0
  63. package/dist/commands/matrix.d.ts.map +1 -1
  64. package/dist/commands/matrix.js +3 -1
  65. package/dist/commands/matrix.js.map +1 -1
  66. package/dist/commands/page-combination.d.ts.map +1 -1
  67. package/dist/commands/page-combination.js +15 -0
  68. package/dist/commands/page-combination.js.map +1 -1
  69. package/dist/commands/page-management.d.ts +3 -0
  70. package/dist/commands/page-management.d.ts.map +1 -0
  71. package/dist/commands/page-management.js +16 -0
  72. package/dist/commands/page-management.js.map +1 -0
  73. package/dist/commands/page.d.ts.map +1 -1
  74. package/dist/commands/page.js +8 -9
  75. package/dist/commands/page.js.map +1 -1
  76. package/dist/commands/report-cell.d.ts.map +1 -1
  77. package/dist/commands/report-cell.js +215 -0
  78. package/dist/commands/report-cell.js.map +1 -1
  79. package/dist/commands/report-code.d.ts +9 -0
  80. package/dist/commands/report-code.d.ts.map +1 -0
  81. package/dist/commands/report-code.js +105 -0
  82. package/dist/commands/report-code.js.map +1 -0
  83. package/dist/commands/report.d.ts.map +1 -1
  84. package/dist/commands/report.js +70 -17
  85. package/dist/commands/report.js.map +1 -1
  86. package/dist/core/client.d.ts +12 -0
  87. package/dist/core/client.d.ts.map +1 -1
  88. package/dist/core/client.js +23 -2
  89. package/dist/core/client.js.map +1 -1
  90. package/dist/index.js +15 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/services/action-detail.d.ts +2 -0
  93. package/dist/services/action-detail.d.ts.map +1 -1
  94. package/dist/services/action-detail.js +11 -5
  95. package/dist/services/action-detail.js.map +1 -1
  96. package/dist/services/actionflow/build_workflow_draft.d.ts +1 -1
  97. package/dist/services/actionflow/build_workflow_draft.d.ts.map +1 -1
  98. package/dist/services/actionflow/build_workflow_draft.js +28 -24
  99. package/dist/services/actionflow/build_workflow_draft.js.map +1 -1
  100. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  101. package/dist/services/actionflow/components/action_eb_update_compiler.js +2 -15
  102. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  103. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  104. package/dist/services/actionflow/components/custom_set_form.js +1 -9
  105. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  106. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  107. package/dist/services/actionflow/components/dml_execute.js +3 -4
  108. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  109. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  110. package/dist/services/actionflow/components/document_actions.js +0 -3
  111. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  112. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  113. package/dist/services/actionflow/components/form_data_builder.js +27 -5
  114. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  115. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  116. package/dist/services/actionflow/components/hrm_actions.js +1 -3
  117. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  118. package/dist/services/actionflow/components/index.d.ts +1 -1
  119. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  120. package/dist/services/actionflow/components/index.js +1 -1
  121. package/dist/services/actionflow/components/index.js.map +1 -1
  122. package/dist/services/actionflow/components/inner_mq_listener.js +1 -1
  123. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  124. package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -1
  125. package/dist/services/actionflow/components/inner_mq_send.js +6 -2
  126. package/dist/services/actionflow/components/inner_mq_send.js.map +1 -1
  127. package/dist/services/actionflow/components/multiple_execution.d.ts +1 -2
  128. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  129. package/dist/services/actionflow/components/multiple_execution.js +55 -276
  130. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  131. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  132. package/dist/services/actionflow/components/output.js +3 -7
  133. package/dist/services/actionflow/components/output.js.map +1 -1
  134. package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
  135. package/dist/services/actionflow/components/send_message.js +6 -10
  136. package/dist/services/actionflow/components/send_message.js.map +1 -1
  137. package/dist/services/actionflow/components/serverless_action.d.ts.map +1 -1
  138. package/dist/services/actionflow/components/serverless_action.js +3 -2
  139. package/dist/services/actionflow/components/serverless_action.js.map +1 -1
  140. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  141. package/dist/services/actionflow/components/workflow_actions.js +0 -3
  142. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  143. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  144. package/dist/services/actionflow/context_preflight.js +12 -9
  145. package/dist/services/actionflow/context_preflight.js.map +1 -1
  146. package/dist/services/actionflow/filter_rules.js +4 -4
  147. package/dist/services/actionflow/filter_rules.js.map +1 -1
  148. package/dist/services/actionflow/formula_service.d.ts +0 -13
  149. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  150. package/dist/services/actionflow/formula_service.js +45 -267
  151. package/dist/services/actionflow/formula_service.js.map +1 -1
  152. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  153. package/dist/services/actionflow/generation_service.js +10 -12
  154. package/dist/services/actionflow/generation_service.js.map +1 -1
  155. package/dist/services/actionflow/id_generator.d.ts +2 -2
  156. package/dist/services/actionflow/id_generator.d.ts.map +1 -1
  157. package/dist/services/actionflow/id_generator.js +5 -11
  158. package/dist/services/actionflow/id_generator.js.map +1 -1
  159. package/dist/services/actionflow/loop_context.d.ts +12 -0
  160. package/dist/services/actionflow/loop_context.d.ts.map +1 -0
  161. package/dist/services/actionflow/loop_context.js +134 -0
  162. package/dist/services/actionflow/loop_context.js.map +1 -0
  163. package/dist/services/actionflow/param_group_dto.d.ts +7 -0
  164. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  165. package/dist/services/actionflow/param_group_dto.js +128 -16
  166. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  167. package/dist/services/actionflow/param_mapping_basis.js +2 -2
  168. package/dist/services/actionflow/param_mapping_basis.js.map +1 -1
  169. package/dist/services/actionflow/preflight_service.d.ts +1 -0
  170. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  171. package/dist/services/actionflow/preflight_service.js +88 -291
  172. package/dist/services/actionflow/preflight_service.js.map +1 -1
  173. package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
  174. package/dist/services/actionflow/readback_verifier.js +21 -2
  175. package/dist/services/actionflow/readback_verifier.js.map +1 -1
  176. package/dist/services/actionflow/save_workflow_draft.d.ts +2 -3
  177. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  178. package/dist/services/actionflow/save_workflow_draft.js +14 -16
  179. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  180. package/dist/services/actionflow/update_service.d.ts +5 -0
  181. package/dist/services/actionflow/update_service.d.ts.map +1 -1
  182. package/dist/services/actionflow/update_service.js +126 -3
  183. package/dist/services/actionflow/update_service.js.map +1 -1
  184. package/dist/services/actionflow/workflow_compiler.d.ts +1 -2
  185. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  186. package/dist/services/actionflow/workflow_compiler.js +79 -105
  187. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  188. package/dist/services/designer-custom-page.d.ts +11 -0
  189. package/dist/services/designer-custom-page.d.ts.map +1 -0
  190. package/dist/services/designer-custom-page.js +227 -0
  191. package/dist/services/designer-custom-page.js.map +1 -0
  192. package/dist/services/designer-event.d.ts +7 -2
  193. package/dist/services/designer-event.d.ts.map +1 -1
  194. package/dist/services/designer-event.js +357 -33
  195. package/dist/services/designer-event.js.map +1 -1
  196. package/dist/services/designer-list-advanced.d.ts +9 -0
  197. package/dist/services/designer-list-advanced.d.ts.map +1 -0
  198. package/dist/services/designer-list-advanced.js +64 -0
  199. package/dist/services/designer-list-advanced.js.map +1 -0
  200. package/dist/services/designer-list-controls.d.ts +2 -0
  201. package/dist/services/designer-list-controls.d.ts.map +1 -0
  202. package/dist/services/designer-list-controls.js +85 -0
  203. package/dist/services/designer-list-controls.js.map +1 -0
  204. package/dist/services/designer-list-presentation.d.ts +2 -0
  205. package/dist/services/designer-list-presentation.d.ts.map +1 -0
  206. package/dist/services/designer-list-presentation.js +45 -0
  207. package/dist/services/designer-list-presentation.js.map +1 -0
  208. package/dist/services/designer-list-runtime.d.ts +2 -0
  209. package/dist/services/designer-list-runtime.d.ts.map +1 -0
  210. package/dist/services/designer-list-runtime.js +80 -0
  211. package/dist/services/designer-list-runtime.js.map +1 -0
  212. package/dist/services/designer-list-search.d.ts +2 -0
  213. package/dist/services/designer-list-search.d.ts.map +1 -0
  214. package/dist/services/designer-list-search.js +72 -0
  215. package/dist/services/designer-list-search.js.map +1 -0
  216. package/dist/services/designer-permission.d.ts +52 -0
  217. package/dist/services/designer-permission.d.ts.map +1 -0
  218. package/dist/services/designer-permission.js +316 -0
  219. package/dist/services/designer-permission.js.map +1 -0
  220. package/dist/services/designer-tabbar.d.ts +11 -0
  221. package/dist/services/designer-tabbar.d.ts.map +1 -0
  222. package/dist/services/designer-tabbar.js +114 -0
  223. package/dist/services/designer-tabbar.js.map +1 -0
  224. package/dist/services/ecode-check.d.ts +50 -0
  225. package/dist/services/ecode-check.d.ts.map +1 -0
  226. package/dist/services/ecode-check.js +408 -0
  227. package/dist/services/ecode-check.js.map +1 -0
  228. package/dist/services/esb-interface/importer.d.ts +35 -1
  229. package/dist/services/esb-interface/importer.d.ts.map +1 -1
  230. package/dist/services/esb-interface/importer.js +77 -1
  231. package/dist/services/esb-interface/importer.js.map +1 -1
  232. package/dist/services/form-base-setting.d.ts +88 -0
  233. package/dist/services/form-base-setting.d.ts.map +1 -0
  234. package/dist/services/form-base-setting.js +272 -0
  235. package/dist/services/form-base-setting.js.map +1 -0
  236. package/dist/services/form-list-columns.d.ts.map +1 -1
  237. package/dist/services/form-list-columns.js +12 -3
  238. package/dist/services/form-list-columns.js.map +1 -1
  239. package/dist/services/form-list-config.d.ts +40 -3
  240. package/dist/services/form-list-config.d.ts.map +1 -1
  241. package/dist/services/form-list-config.js +207 -25
  242. package/dist/services/form-list-config.js.map +1 -1
  243. package/dist/services/form-list-fields.d.ts.map +1 -1
  244. package/dist/services/form-list-fields.js +3 -1
  245. package/dist/services/form-list-fields.js.map +1 -1
  246. package/dist/services/form-log-setting.d.ts +55 -0
  247. package/dist/services/form-log-setting.d.ts.map +1 -0
  248. package/dist/services/form-log-setting.js +108 -0
  249. package/dist/services/form-log-setting.js.map +1 -0
  250. package/dist/services/form-obj-lang.d.ts +45 -0
  251. package/dist/services/form-obj-lang.d.ts.map +1 -0
  252. package/dist/services/form-obj-lang.js +127 -0
  253. package/dist/services/form-obj-lang.js.map +1 -0
  254. package/dist/services/form-obj-meta.d.ts +34 -0
  255. package/dist/services/form-obj-meta.d.ts.map +1 -1
  256. package/dist/services/form-obj-meta.js +81 -12
  257. package/dist/services/form-obj-meta.js.map +1 -1
  258. package/dist/services/form-table-view.d.ts +8 -2
  259. package/dist/services/form-table-view.d.ts.map +1 -1
  260. package/dist/services/form-table-view.js +22 -5
  261. package/dist/services/form-table-view.js.map +1 -1
  262. package/dist/services/form-view.d.ts +1 -1
  263. package/dist/services/form-view.d.ts.map +1 -1
  264. package/dist/services/form-view.js +38 -13
  265. package/dist/services/form-view.js.map +1 -1
  266. package/dist/services/matrix-person.d.ts +37 -0
  267. package/dist/services/matrix-person.d.ts.map +1 -0
  268. package/dist/services/matrix-person.js +57 -0
  269. package/dist/services/matrix-person.js.map +1 -0
  270. package/dist/services/org-browser.d.ts +32 -0
  271. package/dist/services/org-browser.d.ts.map +1 -1
  272. package/dist/services/org-browser.js +90 -12
  273. package/dist/services/org-browser.js.map +1 -1
  274. package/dist/services/page-combination.d.ts +1 -1
  275. package/dist/services/page-combination.d.ts.map +1 -1
  276. package/dist/services/page-combination.js +43 -10
  277. package/dist/services/page-combination.js.map +1 -1
  278. package/dist/services/page-management.d.ts +67 -0
  279. package/dist/services/page-management.d.ts.map +1 -0
  280. package/dist/services/page-management.js +166 -0
  281. package/dist/services/page-management.js.map +1 -0
  282. package/dist/services/page-permission.d.ts +2 -2
  283. package/dist/services/page-permission.d.ts.map +1 -1
  284. package/dist/services/page-permission.js +22 -9
  285. package/dist/services/page-permission.js.map +1 -1
  286. package/dist/services/report/cell-transform.d.ts +62 -0
  287. package/dist/services/report/cell-transform.d.ts.map +1 -0
  288. package/dist/services/report/cell-transform.js +192 -0
  289. package/dist/services/report/cell-transform.js.map +1 -0
  290. package/dist/services/report/code-block.d.ts +45 -0
  291. package/dist/services/report/code-block.d.ts.map +1 -0
  292. package/dist/services/report/code-block.js +92 -0
  293. package/dist/services/report/code-block.js.map +1 -0
  294. package/dist/services/report/dataset.d.ts +40 -0
  295. package/dist/services/report/dataset.d.ts.map +1 -1
  296. package/dist/services/report/dataset.js +171 -1
  297. package/dist/services/report/dataset.js.map +1 -1
  298. package/dist/services/report/lifecycle.d.ts.map +1 -1
  299. package/dist/services/report/lifecycle.js +24 -3
  300. package/dist/services/report/lifecycle.js.map +1 -1
  301. package/dist/services/workflow-base-settings.d.ts.map +1 -1
  302. package/dist/services/workflow-base-settings.js +19 -5
  303. package/dist/services/workflow-base-settings.js.map +1 -1
  304. package/ecode-ui/README.md +9 -0
  305. package/ecode-ui/ui-types.zip +0 -0
  306. package/ecode-ui/version.json +7 -0
  307. package/package.json +4 -1
  308. package/skill-docs/SKILL.md +19 -5
  309. package/skill-docs/_catalog.md +22 -1
  310. package/skill-docs/actionflows/SKILL.md +15 -11
  311. package/skill-docs/actionflows/references/components/database/DMLExecute.md +4 -0
  312. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +1 -1
  313. package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +2 -0
  314. package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +9 -30
  315. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +7 -3
  316. package/skill-docs/actionflows/references/components/serverless/ServerlessAction.md +4 -0
  317. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +6 -6
  318. package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +46 -41
  319. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +4 -0
  320. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +3 -4
  321. package/skill-docs/actionflows/references/function_rules.md +5 -1
  322. package/skill-docs/actionflows/references/trigger_runtime_notes.md +1 -1
  323. package/skill-docs/assets/factory/factory-custom-page.json +339 -0
  324. package/skill-docs/references/common/ref-cli-commands.md +34 -5
  325. package/skill-docs/references/ebuilder-designer/component-permission.md +131 -0
  326. package/skill-docs/references/ebuilder-designer/events/actions-interaction.md +132 -108
  327. package/skill-docs/references/ebuilder-designer/events/guide-events.md +112 -57
  328. package/skill-docs/references/ebuilder-designer/guide-custom-page.md +176 -0
  329. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +2 -0
  330. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +2 -0
  331. package/skill-docs/references/ebuilder-designer/guide-designer.md +304 -296
  332. package/skill-docs/references/ebuilder-designer/guide-list.md +339 -0
  333. package/skill-docs/references/ebuilder-designer/guide-page-combination.md +162 -142
  334. package/skill-docs/references/ebuilder-designer/guide-page-management.md +90 -0
  335. package/skill-docs/references/ebuilder-designer/guide-page-permission.md +151 -145
  336. package/skill-docs/references/ebuilder-designer/guide-tabbar.md +57 -0
  337. package/skill-docs/references/esb-interface/guide-import.md +38 -34
  338. package/skill-docs/references/form/guide-create-form.md +13 -0
  339. package/skill-docs/references/form/guide-form-base-setting.md +78 -0
  340. package/skill-docs/references/form/guide-form-view.md +77 -13
  341. package/skill-docs/references/form/guide-list-columns.md +8 -0
  342. package/skill-docs/references/hrm/guide-matrix.md +16 -0
  343. package/skill-docs/references/report/cell-transform-guide.md +17 -3
  344. package/skill-docs/references/report/code-block-guide.md +54 -0
  345. package/skill-docs/references/report/dataset-sidebar-ops-guide.md +8 -0
  346. package/skill-docs/references/report/ref-report-commands.md +7 -1
  347. package/skill-docs/references/report/report-designer-feature-map.md +1 -1
  348. package/skill-docs/references/report/report-list-page-ops-guide.md +2 -0
@@ -10,13 +10,50 @@ import * as logicFlowSource from './logicflow_source.js';
10
10
  import { completeEbuilder, pickEbuilderBrowserRow } from './ebuilder_source.js';
11
11
  import { resolveHttpBindings } from './http_source.js';
12
12
  import { registerTargetFormFields, registerTargetDetailFields, registerWorkflowFieldIds, registerWorkflowContextFields, getWorkflowFieldIds, getWorkflowDetailFields, getWorkflowDetailNames, getTargetFormFields, getTargetDetailFields, replaceTargetDataSourceFields, } from './runtime_metadata.js';
13
+ // 循环数据的子字段来自已读取的来源上下文;按父字段 ID 展开,不查询字段名称。
14
+ export function expandLoopContext(step, loopContext) {
15
+ const mode = String(step.params?.cycleMode || '1');
16
+ if (mode !== '3' && mode !== '4')
17
+ return;
18
+ const selected = step.params?.[mode === '3' ? 'detailData' : 'batchDetailData'];
19
+ const resolved = selected?._resolvedContext;
20
+ const sourceRows = resolved?.tableContext?.tableData;
21
+ const selectedId = String(resolved?.fieldId || '');
22
+ const group = Object.values(loopContext).find((entry) => entry?.type === 'context_group' && String(entry.primaryKey) === 'CycleParams');
23
+ if (!selectedId || !Array.isArray(sourceRows) || !group)
24
+ return;
25
+ const rootId = mode === '3' ? '744564088747180033' : '744564088747180034';
26
+ const prefix = mode === '3' ? 'cycle.dataDetail' : 'cycle.dataDetail[]';
27
+ const queue = [{ id: selectedId, key: prefix }];
28
+ const seen = new Set([selectedId]);
29
+ while (queue.length) {
30
+ const parent = queue.shift();
31
+ for (const row of sourceRows) {
32
+ if (String(row?.parentId || '') !== parent.id || !row?.id || seen.has(String(row.id)))
33
+ continue;
34
+ const suffix = String(row.paramKey || '').split('.').pop();
35
+ if (!suffix)
36
+ continue;
37
+ const key = `${parent.key}.${suffix}`;
38
+ const raw = { ...row, paramKey: key, parentId: parent.id === selectedId ? rootId : parent.id };
39
+ const field = { key, paramKey: key, id: String(row.id), label: String(row.showName || row.paramName || suffix), name: String(row.paramName || row.showName || suffix), type: String(row.paramType || 'string'), value: key, group: 'CycleParams', tablePrimaryKey: 'CycleParams', tableName: String(group.name || ''), componentType: 'MultipleExecution', parentName: '', raw };
40
+ loopContext[key] = field;
41
+ loopContext[`CycleParams.${key}`] = field;
42
+ group.fields.push(raw);
43
+ raw.parentName = getParentName1(group.fields, raw.id);
44
+ field.parentName = raw.parentName;
45
+ seen.add(String(row.id));
46
+ queue.push({ id: String(row.id), key });
47
+ }
48
+ }
49
+ }
13
50
  // workflow_id → 目标表单 id(进程缓存)
14
51
  const FORM_ID_CACHE = {};
15
- import { ContextStore, PlatformContextProvider } from './context_provider.js';
52
+ import { ContextStore, PlatformContextProvider, getParentName1 } from './context_provider.js';
16
53
  import { hydrateContextReferences, hydrateQueryResultReferences, queryNodeContext, resolveContextGroupRoot, } from './context_preflight.js';
17
54
  import { get as getComponent } from './components/index.js';
18
55
  import { getStepBranches } from './step_branches.js';
19
- import { normalizeParamGroupSetting } from './param_group_dto.js';
56
+ import { normalizeParamGroupSetting, normalizeParamSettingBean, normalizeParamMappingBean, prepareNativeParamMapping, paramDtoNeedsAllocation, remapParamInputBasisIds, prepareResultSetParamDtos } from './param_group_dto.js';
20
57
  import { genSfId } from './id_generator.js';
21
58
  import { OPTION_FIELD_COMPONENT_KEYS } from './option_field_types.js';
22
59
  // 表单字段进程缓存
@@ -1580,9 +1617,7 @@ export function checkSourceReferences(plan, eventContextFields, errors, availabl
1580
1617
  realKeys.add(pk);
1581
1618
  realKeys.add(pk.replace(/\[\]$/, ''));
1582
1619
  }
1583
- }
1584
- // 循环的 detailData/batchDetailData 可以来自前序 EnquiryForm、HTTP 等动作,
1585
- // 不只来自触发器。这里使用按拓扑查询后累积的上下文补充来源键;不接受
1620
+ } // 不只来自触发器。这里使用按拓扑查询后累积的上下文补充来源键;不接受
1586
1621
  // 计划自行编造的字段,因为 availableContext 只来自平台 getComponentContext。
1587
1622
  for (const key of Object.keys(availableContext || {})) {
1588
1623
  if (key.startsWith('_source_'))
@@ -1657,21 +1692,7 @@ export function checkSourceReferences(plan, eventContextFields, errors, availabl
1657
1692
  if (['ActionEbAdd', 'ActionEbUpdate', 'ActionEbDelete', 'ActionEbRecover', 'ActionEbSaveVersion', 'EbGetDataById'].includes(step.type)) {
1658
1693
  if (params && typeof params === 'object') {
1659
1694
  const mapping = params.mapping;
1660
- if (mapping && typeof mapping === 'object' && !Array.isArray(mapping)) {
1661
- // 循环体字段来自 MultipleExecution 的 CycleParams,不属于最外层
1662
- // 触发器流程上下文;它由循环节点查询后的 hydrateCurrentLoopReferences
1663
- // 单独校验和补全,不能再按 workflowId 源字段检查。
1664
- const topLevelMapping = Object.fromEntries(Object.entries(mapping).filter(([, value]) => {
1665
- if (!value || typeof value !== 'object' || Array.isArray(value))
1666
- return true;
1667
- return String(value.scope ?? value.contextScope ?? '') !== 'current_loop'
1668
- && String(value.assignment?.scope ?? value.assignment?.contextScope ?? '') !== 'current_loop';
1669
- }));
1670
- checkMapping(topLevelMapping, `${path}.mapping`);
1671
- }
1672
- else {
1673
- checkMapping(mapping, `${path}.mapping`);
1674
- }
1695
+ checkMapping(mapping, `${path}.mapping`);
1675
1696
  const bv = params.basisValue;
1676
1697
  if (bv && typeof bv === 'object') {
1677
1698
  if (String(bv.kind || bv.assignmentKind || '') !== 'query_result') {
@@ -1702,15 +1723,6 @@ export function checkSourceReferences(plan, eventContextFields, errors, availabl
1702
1723
  }
1703
1724
  }
1704
1725
  }
1705
- if (step.type === 'MultipleExecution') {
1706
- for (const fieldName of ['cycleTimes', 'detailData', 'batchDetailData']) {
1707
- const formula = params?.[fieldName];
1708
- if (formula && typeof formula === 'object' && ['context', 'reference'].includes(String(formula.kind ?? formula.assignmentKind ?? ''))) {
1709
- checkSourceKey(String(formula.paramKey || formula.key || formula.fieldKey || ''), `${path}.${fieldName}`);
1710
- }
1711
- }
1712
- walk(step.actions || [], `${path}.actions`);
1713
- }
1714
1726
  if (step.type === 'Condition') {
1715
1727
  for (const [bi, branch] of (getStepBranches(step) || []).entries()) {
1716
1728
  if (branch && typeof branch === 'object')
@@ -1721,256 +1733,6 @@ export function checkSourceReferences(plan, eventContextFields, errors, availabl
1721
1733
  };
1722
1734
  walk(plan.actions || []);
1723
1735
  }
1724
- function loopContextDescriptor(field, fallbackComponent = '') {
1725
- const componentType = String(field?.componentType || field?._context_component_type || fallbackComponent || 'ApproveTrigger');
1726
- const parameterTable = String(field?.tablePrimaryKey
1727
- || field?.tableKey
1728
- || field?._context_table_primary_key
1729
- || field?.raw?.tablePrimaryKey
1730
- || field?.raw?.tableKey
1731
- || field?.raw?.primaryKey
1732
- || '').trim();
1733
- const tablePrimaryKey = parameterTable
1734
- || (componentType === 'CustomTrigger' ? 'SelectParams' : componentType === 'ApproveTrigger' ? 'ApprovalData' : 'FormData');
1735
- const tableName = String(field?.tableName || field?.raw?.tableName || field?.raw?.name || (tablePrimaryKey === 'SelectParams'
1736
- ? '选择参数' : tablePrimaryKey === 'ApprovalData' ? '流程数据' : tablePrimaryKey));
1737
- return {
1738
- componentType,
1739
- tablePrimaryKey,
1740
- tableName,
1741
- parentName: String(field?.parentName || field?.newParentName || field?.label || field?.showName || field?.paramName || ''),
1742
- };
1743
- }
1744
- function hydrateLoopCycleTimes(plan, eventContextFields) {
1745
- const byKey = new Map();
1746
- for (const field of eventContextFields) {
1747
- if (field && typeof field === 'object' && field.paramKey)
1748
- byKey.set(String(field.paramKey), field);
1749
- }
1750
- const walk = (steps) => {
1751
- for (const step of steps || []) {
1752
- if (!step || typeof step !== 'object')
1753
- continue;
1754
- if (step.type === 'MultipleExecution') {
1755
- for (const fieldName of ['cycleTimes', 'detailData', 'batchDetailData']) {
1756
- const formula = step.params?.[fieldName];
1757
- const kind = String(formula?.kind ?? formula?.assignmentKind ?? '');
1758
- if (!formula || typeof formula !== 'object' || !['context', 'reference'].includes(kind))
1759
- continue;
1760
- const paramKey = String(formula.paramKey ?? formula.key ?? formula.fieldKey ?? '');
1761
- const field = byKey.get(paramKey);
1762
- if (field) {
1763
- const label = String(field.showName || field.paramName || paramKey);
1764
- const workflowId = String(plan.event?.params?.workflowPath?.id || '');
1765
- formula.paramKey = String(field.paramKey);
1766
- formula.label = label;
1767
- formula.valueType = String(field.paramType || field.fieldType || 'string');
1768
- formula.fieldType = String(field.paramType || field.fieldType || 'string');
1769
- const descriptor = loopContextDescriptor(field);
1770
- formula._resolvedContext = {
1771
- fieldId: String(field.id || field.paramId || ''),
1772
- fieldType: String(field.paramType || field.fieldType || 'string'),
1773
- label,
1774
- componentType: descriptor.componentType,
1775
- tablePrimaryKey: descriptor.tablePrimaryKey,
1776
- tableName: descriptor.tableName,
1777
- parentName: descriptor.parentName || (workflowId ? `${workflowId}.${label}` : label),
1778
- rawField: { ...field },
1779
- };
1780
- }
1781
- }
1782
- walk(step.actions || []);
1783
- }
1784
- if (step.type === 'Condition')
1785
- for (const branch of getStepBranches(step) || [])
1786
- walk(branch?.actions || []);
1787
- }
1788
- };
1789
- walk(plan.actions || []);
1790
- }
1791
- /**
1792
- * 循环体里的 scope=current_loop 引用必须使用循环节点 getComponentContext 返回的
1793
- * CycleParams 元数据。这里补 fieldId/类型/名称,供 FormulaBean 的 frontId 和
1794
- * 配置字段直接复用;不将它误识别成流程表单 FormData。
1795
- */
1796
- function hydrateCurrentLoopReferences(steps, context, loopRef) {
1797
- const walkValue = (value) => {
1798
- if (Array.isArray(value)) {
1799
- for (const item of value)
1800
- walkValue(item);
1801
- return;
1802
- }
1803
- if (!value || typeof value !== 'object')
1804
- return;
1805
- if (value.type === 'MultipleExecution') {
1806
- walkValue(value.params || {});
1807
- return;
1808
- }
1809
- if (String(value.scope ?? value.contextScope ?? '') === 'current_loop') {
1810
- const paramKey = String(value.paramKey ?? value.key ?? value.fieldKey ?? '');
1811
- const field = context[paramKey];
1812
- if (field && typeof field === 'object') {
1813
- const raw = field.raw && typeof field.raw === 'object' ? field.raw : {};
1814
- const label = String(field.label ?? raw.showName ?? raw.paramName ?? paramKey);
1815
- const fieldType = String(field.type ?? raw.paramType ?? 'int');
1816
- value.paramKey = paramKey;
1817
- value.label = label;
1818
- value.valueType = fieldType;
1819
- value.fieldType = fieldType;
1820
- value.source = loopRef;
1821
- value.comId = loopRef;
1822
- value._resolvedContext = {
1823
- fieldId: String(raw.id ?? raw.paramId ?? value.frontId ?? paramKey),
1824
- fieldType,
1825
- label,
1826
- componentType: 'MultipleExecution',
1827
- comId: loopRef,
1828
- tablePrimaryKey: 'CycleParams',
1829
- tableName: '循环参数',
1830
- parentName: `循环.${label}`,
1831
- sourceComponentType: String(raw.sourceComponentType || ''),
1832
- sourceTablePrimaryKey: String(raw.sourceTablePrimaryKey || ''),
1833
- sourceTableName: String(raw.sourceTableName || ''),
1834
- sourceParamKey: String(raw.sourceParamKey || ''),
1835
- sourceComponentId: String(raw.sourceComponentId || ''),
1836
- rawField: raw,
1837
- };
1838
- }
1839
- }
1840
- for (const child of Object.values(value))
1841
- walkValue(child);
1842
- };
1843
- for (const step of steps || [])
1844
- walkValue(step?.params || {});
1845
- }
1846
- /** 循环自身的列表来源也要回填实时字段 DTO,不能只保留语义上的 paramKey。 */
1847
- function hydrateLoopSourceReferences(step, context) {
1848
- if (!step || step.type !== 'MultipleExecution')
1849
- return;
1850
- for (const fieldName of ['cycleTimes', 'detailData', 'batchDetailData']) {
1851
- const ref = step.params?.[fieldName];
1852
- const kind = String(ref?.kind ?? ref?.assignmentKind ?? '');
1853
- if (!ref || typeof ref !== 'object' || !['context', 'reference'].includes(kind))
1854
- continue;
1855
- const paramKey = String(ref.paramKey ?? ref.key ?? ref.fieldKey ?? '');
1856
- const field = context[paramKey];
1857
- if (!field || typeof field !== 'object')
1858
- continue;
1859
- const raw = field.raw && typeof field.raw === 'object' ? field.raw : field;
1860
- const label = String(field.label ?? raw.showName ?? raw.paramName ?? paramKey);
1861
- const sourceGroup = field.type === 'context_group'
1862
- ? field
1863
- : field.group ? context[String(field.group)] : null;
1864
- const componentType = String(raw.sourceComponentType
1865
- || field.componentType
1866
- || field.component
1867
- || sourceGroup?.component
1868
- || raw.componentType
1869
- || (/\[\]$/.test(paramKey) ? 'EnquiryForm' : 'ApproveTrigger'));
1870
- const descriptor = loopContextDescriptor(field, componentType);
1871
- const tablePrimaryKey = descriptor.tablePrimaryKey;
1872
- const tableName = descriptor.tableName;
1873
- ref.paramKey = paramKey;
1874
- ref.label = label;
1875
- ref.valueType = String(field.type ?? raw.paramType ?? ref.valueType ?? 'json');
1876
- ref.fieldType = String(field.type ?? raw.paramType ?? ref.fieldType ?? 'json');
1877
- ref._resolvedContext = {
1878
- fieldId: String(raw.id ?? raw.paramId ?? ref.frontId ?? paramKey),
1879
- fieldType: ref.fieldType,
1880
- label,
1881
- componentType,
1882
- tablePrimaryKey,
1883
- tableName,
1884
- parentName: descriptor.parentName || String(field.group || '').replace(/\.$/, '') || label,
1885
- rawField: { ...raw },
1886
- };
1887
- }
1888
- }
1889
- /**
1890
- * 对齐设计器 MultipleExecution.getRequest:把列表来源的字段展开到
1891
- * cycle.dataDetail(逐条)或 cycle.dataDetail[](分批)下面。
1892
- * 仅复制上游 getComponentContext 已返回的字段元数据,不猜字段 ID。
1893
- */
1894
- function expandLoopDataContext(step, store) {
1895
- if (!step || step.type !== 'MultipleExecution')
1896
- return;
1897
- const mode = String(step.params?.cycleMode ?? '1');
1898
- if (!['3', '4'].includes(mode))
1899
- return;
1900
- const ref = step.params?.[mode === '4' ? 'batchDetailData' : 'detailData'];
1901
- if (!ref || typeof ref !== 'object')
1902
- return;
1903
- const sourceKey = String(ref.paramKey ?? ref.key ?? ref.fieldKey ?? '');
1904
- const context = store.asDict();
1905
- const source = context[sourceKey];
1906
- let sourceFields = source && typeof source === 'object' && Array.isArray(source.fields) ? source.fields : [];
1907
- if (!sourceFields.length) {
1908
- // EnquiryForm 返回的列表根字段通常和所有字段一起挂在 FormData.fields,
1909
- // 根键本身只是一个普通字段对象,不带 fields 数组。
1910
- for (const group of Object.values(context)) {
1911
- if (!group || typeof group !== 'object' || !Array.isArray(group.fields))
1912
- continue;
1913
- if (group.fields.some((field) => String(field?.paramKey || '') === sourceKey)) {
1914
- sourceFields = group.fields;
1915
- break;
1916
- }
1917
- }
1918
- }
1919
- if (!sourceFields.length)
1920
- return;
1921
- const sourceGroup = source && source.type === 'context_group'
1922
- ? source
1923
- : source?.group ? context[String(source.group)] : null;
1924
- const sourceComponentType = String(ref._resolvedContext?.componentType
1925
- || ref.componentType
1926
- || source?.componentType
1927
- || source?.component
1928
- || sourceGroup?.component
1929
- || source?.raw?.sourceComponentType
1930
- || (/\[\]$/.test(sourceKey) ? 'EnquiryForm' : 'ApproveTrigger'));
1931
- const sourceDescriptor = loopContextDescriptor(source || {}, sourceComponentType);
1932
- const sourceTablePrimaryKey = sourceDescriptor.tablePrimaryKey;
1933
- const sourceTableName = sourceDescriptor.tableName;
1934
- const prefix = mode === '4' ? 'cycle.dataDetail[]' : 'cycle.dataDetail';
1935
- const expanded = {};
1936
- for (const rawField of sourceFields) {
1937
- if (!rawField || typeof rawField !== 'object')
1938
- continue;
1939
- const rawKey = String(rawField.paramKey || '');
1940
- if (!rawKey.startsWith(sourceKey))
1941
- continue;
1942
- const suffix = rawKey.slice(sourceKey.length);
1943
- if (!suffix.startsWith('.'))
1944
- continue;
1945
- const key = `${prefix}${suffix}`;
1946
- const field = {
1947
- ...rawField,
1948
- paramKey: key,
1949
- value: key,
1950
- group: 'CycleParams',
1951
- parentId: String(rawField.parentId || ''),
1952
- // 循环体里的业务字段最终不是 CycleParams 引用,而是上游列表
1953
- // 的 FormData[位置].字段。保留来源元数据供 FormulaBean 编译使用。
1954
- sourceParamKey: rawKey,
1955
- sourceComponentId: String(ref.source ?? ref.comId ?? ''),
1956
- sourceComponentType,
1957
- sourceTablePrimaryKey,
1958
- sourceTableName,
1959
- };
1960
- expanded[key] = {
1961
- key,
1962
- label: String(rawField.showName || rawField.paramName || suffix.slice(1)),
1963
- name: String(rawField.paramName || rawField.showName || suffix.slice(1)),
1964
- type: String(rawField.paramType || rawField.fieldType || 'string'),
1965
- value: key,
1966
- group: 'CycleParams',
1967
- description: String(rawField.description || ''),
1968
- raw: field,
1969
- };
1970
- }
1971
- if (Object.keys(expanded).length)
1972
- store.merge(expanded, 'MultipleExecution');
1973
- }
1974
1736
  /**
1975
1737
  * 显式 mapping 必须带实时显示名和完整上下文。
1976
1738
  *
@@ -2226,8 +1988,6 @@ export function hydrateWorkflowProvenanceMappings(plan, eventContextFields) {
2226
1988
  if (step.type === 'Condition')
2227
1989
  for (const [bi, branch] of (getStepBranches(step) || []).entries())
2228
1990
  walk(branch?.actions || [], `${path}[${index}].branches[${bi}].actions`);
2229
- if (step.type === 'MultipleExecution')
2230
- walk(step.actions || [], `${path}[${index}].actions`);
2231
1991
  }
2232
1992
  };
2233
1993
  walk(plan.actions || [], 'actions');
@@ -2288,6 +2048,9 @@ export function syncQueryFieldsToDraft(draft, plan) {
2288
2048
  for (let j = 0; j < pa.length && j < da.length; j++)
2289
2049
  syncStep(pa[j], da[j]);
2290
2050
  }
2051
+ const pa = planStep.actions || [], da = draftStep.actions || [];
2052
+ for (let i = 0; i < pa.length && i < da.length; i++)
2053
+ syncStep(pa[i], da[i]);
2291
2054
  };
2292
2055
  syncStep(plan.event, draft.event);
2293
2056
  const pa = plan.actions || [], da = draft.actions || [];
@@ -3040,8 +2803,8 @@ export async function preflightContext(plan, appId, client) {
3040
2803
  await hydrateFilterFields(branch.actions || [], formConditionOnly);
3041
2804
  }
3042
2805
  }
3043
- if (step.type === 'MultipleExecution' && Array.isArray(step.actions))
3044
- await hydrateFilterFields(step.actions, true);
2806
+ if (step.type === 'MultipleExecution')
2807
+ await hydrateFilterFields(step.actions || [], formConditionOnly);
3045
2808
  }
3046
2809
  };
3047
2810
  await hydrateFilterFields([event]);
@@ -3134,6 +2897,9 @@ export async function preflightContext(plan, appId, client) {
3134
2897
  event.params.request = normalizeParamGroupSetting(request);
3135
2898
  }
3136
2899
  }
2900
+ if (String(event?.type || '') === 'InnerMQListener' && event?.params?.receiveParams) {
2901
+ event.params.receiveParams = normalizeParamSettingBean(event.params.receiveParams);
2902
+ }
3137
2903
  const eventResult = await queryNodeContext(event, appId, 'event_1', store, provider, 'event', { allowPlannedDynamicResources, strictComponentContext: true });
3138
2904
  errors.push(...eventResult.errors);
3139
2905
  eventContext = eventResult.context;
@@ -3272,7 +3038,6 @@ export async function preflightContext(plan, appId, client) {
3272
3038
  // 显式 mapping 补实时显示名
3273
3039
  hydrateMappingLabels(plan, eventContextFields, eventContext);
3274
3040
  hydrateWorkflowProvenanceMappings(plan, eventContextFields);
3275
- hydrateLoopCycleTimes(plan, eventContextFields);
3276
3041
  // finalOutput 不属于 actions,但其 CustFormDetailDto.formulaValue 也可能
3277
3042
  // 引用 CustomTrigger 的表/字段;提前回填 DTO 真实 id,供终止节点编译 FormulaBean。
3278
3043
  if (plan.finalOutput?.params && typeof plan.finalOutput.params === 'object') {
@@ -3297,6 +3062,32 @@ export async function preflightContext(plan, appId, client) {
3297
3062
  continue;
3298
3063
  }
3299
3064
  const path = `${prefix}[${index}]`;
3065
+ // 参数 ID 必须在首次 getComponentContext 前生成并写回计划,避免
3066
+ // 预检和最终编译各自生成一套雪花 ID,导致后续 frontId 指向旧参数行。
3067
+ try {
3068
+ const params = step.params || {};
3069
+ if (step.type === 'ServerlessAction') {
3070
+ if (params.request) {
3071
+ const original = params.request;
3072
+ params.request = normalizeParamMappingBean(original);
3073
+ params.inputParams = remapParamInputBasisIds(original, params.request, params.inputParams);
3074
+ }
3075
+ if (params.response)
3076
+ params.response = normalizeParamSettingBean(params.response);
3077
+ }
3078
+ else if (step.type === 'InnerMQSend' && paramDtoNeedsAllocation(params.sendParams, true)) {
3079
+ const original = params.sendParams;
3080
+ params.sendParams = prepareNativeParamMapping(original);
3081
+ params.inputParams = remapParamInputBasisIds(original, params.sendParams, params.inputParams);
3082
+ }
3083
+ else if (step.type === 'DMLExecute' && Array.isArray(params.resultSets)) {
3084
+ params.resultSets = prepareResultSetParamDtos(params.resultSets);
3085
+ }
3086
+ }
3087
+ catch (error) {
3088
+ errors.push(`${path}: ${String(error?.message || error)}`);
3089
+ return;
3090
+ }
3300
3091
  let result;
3301
3092
  try {
3302
3093
  result = await queryNodeContext(step, appId, 'event_1', branchStore, provider, path, { allowPlannedDynamicResources, strictComponentContext: true });
@@ -3334,12 +3125,18 @@ export async function preflightContext(plan, appId, client) {
3334
3125
  }
3335
3126
  }
3336
3127
  else if (step.type === 'MultipleExecution') {
3337
- // 循环体可以引用该循环刚返回的 CycleParams(当次循环);先查询循环节点,
3338
- // 再携带其上下文进入循环体,不能把循环体当作独立主链处理。
3339
- expandLoopDataContext(step, branchStore);
3340
- hydrateCurrentLoopReferences(step.actions || [], branchStore.asDict(), sourceRef);
3341
- hydrateLoopSourceReferences(step, branchStore.asDict());
3342
- await walk(step.actions || [], new ContextStore(branchStore.asDict()), `${path}.actions`);
3128
+ const children = Array.isArray(step.actions) ? step.actions : [];
3129
+ if (!children.length) {
3130
+ errors.push(`${path}.actions 循环体不能为空`);
3131
+ return;
3132
+ }
3133
+ const counter = result.context['cycle.hasCycled'] || result.context['CycleParams.cycle.hasCycled'];
3134
+ if (counter?.raw?.id || counter?.id)
3135
+ step._loopCounter = { id: String(counter.raw?.id || counter.id), paramKey: 'cycle.hasCycled', name: '已循环次数' };
3136
+ expandLoopContext(step, result.context);
3137
+ branchStore.merge(result.context, 'MultipleExecution');
3138
+ hydrateContextReferences(children, result.context, { id: sourceRef, type: 'MultipleExecution' });
3139
+ await walk(children, new ContextStore(branchStore.asDict()), `${path}.actions`);
3343
3140
  }
3344
3141
  else if (['ApproveCreate', 'ApproveSave', 'ApproveCommit', 'ApproveSendBack'].includes(String(step.type))) {
3345
3142
  await resolveBizCreateFields(step, plan, client, errors, path);
@@ -3349,7 +3146,7 @@ export async function preflightContext(plan, appId, client) {
3349
3146
  await walk(plan.actions || [], store, 'actions');
3350
3147
  // 目标表单字段元数据在上面的 walk 中已完成(ApproveCreate 也会在此处
3351
3148
  // 拉取 _bizFields),现在统一处理所有 componentKey 对应的固定 Browser 值。
3352
- // 动态赋值、函数和循环引用由公式编译链继续处理,不在这里查询。
3149
+ // 动态赋值和函数由公式编译链继续处理,不在这里查询。
3353
3150
  try {
3354
3151
  await resolveFormFieldBrowserFixedValues(plan, client);
3355
3152
  }