weaver-e10-builder 1.1.9 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/actionflow.d.ts.map +1 -1
  3. package/dist/commands/actionflow.js +32 -0
  4. package/dist/commands/actionflow.js.map +1 -1
  5. package/dist/commands/app.d.ts.map +1 -1
  6. package/dist/commands/app.js +17 -5
  7. package/dist/commands/app.js.map +1 -1
  8. package/dist/commands/auth.d.ts.map +1 -1
  9. package/dist/commands/auth.js +9 -2
  10. package/dist/commands/auth.js.map +1 -1
  11. package/dist/commands/designer.d.ts.map +1 -1
  12. package/dist/commands/designer.js +22 -1
  13. package/dist/commands/designer.js.map +1 -1
  14. package/dist/commands/form-field-props.d.ts +3 -0
  15. package/dist/commands/form-field-props.d.ts.map +1 -0
  16. package/dist/commands/form-field-props.js +242 -0
  17. package/dist/commands/form-field-props.js.map +1 -0
  18. package/dist/commands/form-layout-init.d.ts +0 -7
  19. package/dist/commands/form-layout-init.d.ts.map +1 -1
  20. package/dist/commands/form-layout-init.js +23 -39
  21. package/dist/commands/form-layout-init.js.map +1 -1
  22. package/dist/commands/form-serial-mark.d.ts.map +1 -1
  23. package/dist/commands/form-serial-mark.js +134 -42
  24. package/dist/commands/form-serial-mark.js.map +1 -1
  25. package/dist/commands/form-virtual.d.ts +3 -0
  26. package/dist/commands/form-virtual.d.ts.map +1 -0
  27. package/dist/commands/form-virtual.js +197 -0
  28. package/dist/commands/form-virtual.js.map +1 -0
  29. package/dist/commands/form.d.ts +3 -0
  30. package/dist/commands/form.d.ts.map +1 -1
  31. package/dist/commands/form.js +263 -57
  32. package/dist/commands/form.js.map +1 -1
  33. package/dist/commands/interface.js +1 -1
  34. package/dist/commands/interface.js.map +1 -1
  35. package/dist/commands/report-admin.d.ts +5 -0
  36. package/dist/commands/report-admin.d.ts.map +1 -0
  37. package/dist/commands/report-admin.js +420 -0
  38. package/dist/commands/report-admin.js.map +1 -0
  39. package/dist/commands/report-query.d.ts +3 -0
  40. package/dist/commands/report-query.d.ts.map +1 -0
  41. package/dist/commands/report-query.js +314 -0
  42. package/dist/commands/report-query.js.map +1 -0
  43. package/dist/commands/report-validate.d.ts +3 -0
  44. package/dist/commands/report-validate.d.ts.map +1 -0
  45. package/dist/commands/report-validate.js +719 -0
  46. package/dist/commands/report-validate.js.map +1 -0
  47. package/dist/commands/report.d.ts +12 -0
  48. package/dist/commands/report.d.ts.map +1 -0
  49. package/dist/commands/report.js +666 -0
  50. package/dist/commands/report.js.map +1 -0
  51. package/dist/commands/wf-form.d.ts +34 -0
  52. package/dist/commands/wf-form.d.ts.map +1 -1
  53. package/dist/commands/wf-form.js +303 -127
  54. package/dist/commands/wf-form.js.map +1 -1
  55. package/dist/commands/workflow-advanced.d.ts.map +1 -1
  56. package/dist/commands/workflow-advanced.js +109 -90
  57. package/dist/commands/workflow-advanced.js.map +1 -1
  58. package/dist/commands/workflow-auth-resp.d.ts +8 -0
  59. package/dist/commands/workflow-auth-resp.d.ts.map +1 -0
  60. package/dist/commands/workflow-auth-resp.js +568 -0
  61. package/dist/commands/workflow-auth-resp.js.map +1 -0
  62. package/dist/commands/workflow-condition.d.ts.map +1 -1
  63. package/dist/commands/workflow-condition.js +3 -1
  64. package/dist/commands/workflow-condition.js.map +1 -1
  65. package/dist/commands/workflow-create-auth-resp.d.ts +4 -0
  66. package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -0
  67. package/dist/commands/workflow-create-auth-resp.js +204 -0
  68. package/dist/commands/workflow-create-auth-resp.js.map +1 -0
  69. package/dist/commands/workflow-node-overtime.d.ts.map +1 -1
  70. package/dist/commands/workflow-node-overtime.js +125 -92
  71. package/dist/commands/workflow-node-overtime.js.map +1 -1
  72. package/dist/commands/workflow-node-reject.d.ts +52 -0
  73. package/dist/commands/workflow-node-reject.d.ts.map +1 -1
  74. package/dist/commands/workflow-node-reject.js +134 -63
  75. package/dist/commands/workflow-node-reject.js.map +1 -1
  76. package/dist/commands/workflow-node-sign.d.ts.map +1 -1
  77. package/dist/commands/workflow-node-sign.js +14 -7
  78. package/dist/commands/workflow-node-sign.js.map +1 -1
  79. package/dist/commands/workflow-node-validate.d.ts +6 -0
  80. package/dist/commands/workflow-node-validate.d.ts.map +1 -1
  81. package/dist/commands/workflow-node-validate.js +143 -21
  82. package/dist/commands/workflow-node-validate.js.map +1 -1
  83. package/dist/commands/workflow-node.d.ts.map +1 -1
  84. package/dist/commands/workflow-node.js +359 -116
  85. package/dist/commands/workflow-node.js.map +1 -1
  86. package/dist/commands/workflow-numbering.d.ts.map +1 -1
  87. package/dist/commands/workflow-numbering.js +73 -34
  88. package/dist/commands/workflow-numbering.js.map +1 -1
  89. package/dist/commands/workflow-operator-sign.d.ts +10 -0
  90. package/dist/commands/workflow-operator-sign.d.ts.map +1 -1
  91. package/dist/commands/workflow-operator-sign.js +40 -53
  92. package/dist/commands/workflow-operator-sign.js.map +1 -1
  93. package/dist/commands/workflow-plan-range.d.ts +10 -0
  94. package/dist/commands/workflow-plan-range.d.ts.map +1 -1
  95. package/dist/commands/workflow-plan-range.js +15 -54
  96. package/dist/commands/workflow-plan-range.js.map +1 -1
  97. package/dist/commands/workflow-segment.d.ts.map +1 -1
  98. package/dist/commands/workflow-segment.js +22 -14
  99. package/dist/commands/workflow-segment.js.map +1 -1
  100. package/dist/commands/workflow.d.ts.map +1 -1
  101. package/dist/commands/workflow.js +13 -69
  102. package/dist/commands/workflow.js.map +1 -1
  103. package/dist/index.js +15 -0
  104. package/dist/index.js.map +1 -1
  105. package/dist/services/actionflow/build_workflow_draft.d.ts +6 -0
  106. package/dist/services/actionflow/build_workflow_draft.d.ts.map +1 -1
  107. package/dist/services/actionflow/build_workflow_draft.js +63 -4
  108. package/dist/services/actionflow/build_workflow_draft.js.map +1 -1
  109. package/dist/services/actionflow/calendar_mapper.d.ts +2 -2
  110. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  111. package/dist/services/actionflow/calendar_mapper.js +33 -13
  112. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  113. package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
  114. package/dist/services/actionflow/components/action_eb_add.js +13 -1
  115. package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
  116. package/dist/services/actionflow/components/action_eb_delete.js +2 -2
  117. package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
  118. package/dist/services/actionflow/components/action_eb_recover.js +2 -2
  119. package/dist/services/actionflow/components/action_eb_recover.js.map +1 -1
  120. package/dist/services/actionflow/components/action_eb_save_version.js +2 -2
  121. package/dist/services/actionflow/components/action_eb_save_version.js.map +1 -1
  122. package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
  123. package/dist/services/actionflow/components/action_eb_update.js +15 -3
  124. package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
  125. package/dist/services/actionflow/components/action_eb_update_compiler.js +5 -5
  126. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  127. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  128. package/dist/services/actionflow/components/approve_create.js +5 -2
  129. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  130. package/dist/services/actionflow/components/approve_trigger.d.ts.map +1 -1
  131. package/dist/services/actionflow/components/approve_trigger.js +5 -0
  132. package/dist/services/actionflow/components/approve_trigger.js.map +1 -1
  133. package/dist/services/actionflow/components/date_trigger.d.ts.map +1 -1
  134. package/dist/services/actionflow/components/date_trigger.js +14 -1
  135. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  136. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  137. package/dist/services/actionflow/components/dml_execute.js +18 -10
  138. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  139. package/dist/services/actionflow/components/document_actions.js +5 -5
  140. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  141. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  142. package/dist/services/actionflow/components/eb_get_data_by_id.js +8 -6
  143. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  144. package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
  145. package/dist/services/actionflow/components/enquiry_form.js +28 -9
  146. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  147. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  148. package/dist/services/actionflow/components/hrm_actions.js +34 -13
  149. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  150. package/dist/services/actionflow/components/index.js +3 -3
  151. package/dist/services/actionflow/components/index.js.map +1 -1
  152. package/dist/services/actionflow/components/inner_mq_send.d.ts.map +1 -1
  153. package/dist/services/actionflow/components/inner_mq_send.js +43 -4
  154. package/dist/services/actionflow/components/inner_mq_send.js.map +1 -1
  155. package/dist/services/actionflow/components/meeting_create.js +9 -9
  156. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  157. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  158. package/dist/services/actionflow/components/multiple_execution.js +83 -4
  159. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  160. package/dist/services/actionflow/components/output.d.ts +3 -2
  161. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  162. package/dist/services/actionflow/components/output.js +33 -0
  163. package/dist/services/actionflow/components/output.js.map +1 -1
  164. package/dist/services/actionflow/components/schedule_create.js +10 -10
  165. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  166. package/dist/services/actionflow/components/send_message.js +1 -1
  167. package/dist/services/actionflow/components/send_message.js.map +1 -1
  168. package/dist/services/actionflow/components/simple_scheduler.d.ts.map +1 -1
  169. package/dist/services/actionflow/components/simple_scheduler.js +42 -9
  170. package/dist/services/actionflow/components/simple_scheduler.js.map +1 -1
  171. package/dist/services/actionflow/components/time_batch_trigger.d.ts.map +1 -1
  172. package/dist/services/actionflow/components/time_batch_trigger.js +43 -13
  173. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  174. package/dist/services/actionflow/components/workflow_actions.d.ts +0 -1
  175. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  176. package/dist/services/actionflow/components/workflow_actions.js +21 -27
  177. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  178. package/dist/services/actionflow/context_preflight.d.ts +30 -1
  179. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  180. package/dist/services/actionflow/context_preflight.js +175 -2
  181. package/dist/services/actionflow/context_preflight.js.map +1 -1
  182. package/dist/services/actionflow/design_client.d.ts +4 -0
  183. package/dist/services/actionflow/design_client.d.ts.map +1 -1
  184. package/dist/services/actionflow/design_client.js +10 -0
  185. package/dist/services/actionflow/design_client.js.map +1 -1
  186. package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
  187. package/dist/services/actionflow/dynamic_resources.js +10 -3
  188. package/dist/services/actionflow/dynamic_resources.js.map +1 -1
  189. package/dist/services/actionflow/enrich_approve_trigger.d.ts.map +1 -1
  190. package/dist/services/actionflow/enrich_approve_trigger.js +18 -3
  191. package/dist/services/actionflow/enrich_approve_trigger.js.map +1 -1
  192. package/dist/services/actionflow/formula_service.d.ts +1 -1
  193. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  194. package/dist/services/actionflow/formula_service.js +135 -12
  195. package/dist/services/actionflow/formula_service.js.map +1 -1
  196. package/dist/services/actionflow/generation_service.d.ts.map +1 -1
  197. package/dist/services/actionflow/generation_service.js +18 -2
  198. package/dist/services/actionflow/generation_service.js.map +1 -1
  199. package/dist/services/actionflow/preflight_service.d.ts +1 -1
  200. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  201. package/dist/services/actionflow/preflight_service.js +168 -5
  202. package/dist/services/actionflow/preflight_service.js.map +1 -1
  203. package/dist/services/actionflow/save_workflow_draft.d.ts +8 -0
  204. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  205. package/dist/services/actionflow/save_workflow_draft.js +6 -2
  206. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  207. package/dist/services/actionflow/update_service.d.ts +6 -0
  208. package/dist/services/actionflow/update_service.d.ts.map +1 -1
  209. package/dist/services/actionflow/update_service.js +125 -7
  210. package/dist/services/actionflow/update_service.js.map +1 -1
  211. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  212. package/dist/services/actionflow/workflow_compiler.js +17 -9
  213. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  214. package/dist/services/browser.d.ts +34 -0
  215. package/dist/services/browser.d.ts.map +1 -0
  216. package/dist/services/browser.js +57 -0
  217. package/dist/services/browser.js.map +1 -0
  218. package/dist/services/esb-interface/document-parser.d.ts +5 -0
  219. package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
  220. package/dist/services/esb-interface/document-parser.js +117 -1
  221. package/dist/services/esb-interface/document-parser.js.map +1 -1
  222. package/dist/services/esb-interface/importer.d.ts.map +1 -1
  223. package/dist/services/esb-interface/importer.js +7 -2
  224. package/dist/services/esb-interface/importer.js.map +1 -1
  225. package/dist/services/field-props-data.d.ts +56 -0
  226. package/dist/services/field-props-data.d.ts.map +1 -0
  227. package/dist/services/field-props-data.js +732 -0
  228. package/dist/services/field-props-data.js.map +1 -0
  229. package/dist/services/form-edit-base.d.ts +45 -0
  230. package/dist/services/form-edit-base.d.ts.map +1 -0
  231. package/dist/services/form-edit-base.js +76 -0
  232. package/dist/services/form-edit-base.js.map +1 -0
  233. package/dist/services/form-field-drop.d.ts +41 -0
  234. package/dist/services/form-field-drop.d.ts.map +1 -0
  235. package/dist/services/form-field-drop.js +58 -0
  236. package/dist/services/form-field-drop.js.map +1 -0
  237. package/dist/services/form-style-template.d.ts +17 -0
  238. package/dist/services/form-style-template.d.ts.map +1 -0
  239. package/dist/services/form-style-template.js +102 -0
  240. package/dist/services/form-style-template.js.map +1 -0
  241. package/dist/services/form-virtual.d.ts +60 -0
  242. package/dist/services/form-virtual.d.ts.map +1 -0
  243. package/dist/services/form-virtual.js +331 -0
  244. package/dist/services/form-virtual.js.map +1 -0
  245. package/dist/services/report/analyze.d.ts +67 -0
  246. package/dist/services/report/analyze.d.ts.map +1 -0
  247. package/dist/services/report/analyze.js +173 -0
  248. package/dist/services/report/analyze.js.map +1 -0
  249. package/dist/services/report/build.d.ts +166 -0
  250. package/dist/services/report/build.d.ts.map +1 -0
  251. package/dist/services/report/build.js +520 -0
  252. package/dist/services/report/build.js.map +1 -0
  253. package/dist/services/report/constants.d.ts +145 -0
  254. package/dist/services/report/constants.d.ts.map +1 -0
  255. package/dist/services/report/constants.js +250 -0
  256. package/dist/services/report/constants.js.map +1 -0
  257. package/dist/services/report/dataset.d.ts +73 -0
  258. package/dist/services/report/dataset.d.ts.map +1 -0
  259. package/dist/services/report/dataset.js +185 -0
  260. package/dist/services/report/dataset.js.map +1 -0
  261. package/dist/services/report/fields.d.ts +80 -0
  262. package/dist/services/report/fields.d.ts.map +1 -0
  263. package/dist/services/report/fields.js +245 -0
  264. package/dist/services/report/fields.js.map +1 -0
  265. package/dist/services/report/forms.d.ts +70 -0
  266. package/dist/services/report/forms.d.ts.map +1 -0
  267. package/dist/services/report/forms.js +237 -0
  268. package/dist/services/report/forms.js.map +1 -0
  269. package/dist/services/report/guard.d.ts +73 -0
  270. package/dist/services/report/guard.d.ts.map +1 -0
  271. package/dist/services/report/guard.js +262 -0
  272. package/dist/services/report/guard.js.map +1 -0
  273. package/dist/services/report/http.d.ts +118 -0
  274. package/dist/services/report/http.d.ts.map +1 -0
  275. package/dist/services/report/http.js +159 -0
  276. package/dist/services/report/http.js.map +1 -0
  277. package/dist/services/report/lifecycle.d.ts +107 -0
  278. package/dist/services/report/lifecycle.d.ts.map +1 -0
  279. package/dist/services/report/lifecycle.js +323 -0
  280. package/dist/services/report/lifecycle.js.map +1 -0
  281. package/dist/services/report/permission.d.ts +59 -0
  282. package/dist/services/report/permission.d.ts.map +1 -0
  283. package/dist/services/report/permission.js +286 -0
  284. package/dist/services/report/permission.js.map +1 -0
  285. package/dist/services/report/query-checks.d.ts +124 -0
  286. package/dist/services/report/query-checks.d.ts.map +1 -0
  287. package/dist/services/report/query-checks.js +374 -0
  288. package/dist/services/report/query-checks.js.map +1 -0
  289. package/dist/services/report/query.d.ts +106 -0
  290. package/dist/services/report/query.d.ts.map +1 -0
  291. package/dist/services/report/query.js +278 -0
  292. package/dist/services/report/query.js.map +1 -0
  293. package/dist/services/report/render.d.ts +52 -0
  294. package/dist/services/report/render.d.ts.map +1 -0
  295. package/dist/services/report/render.js +138 -0
  296. package/dist/services/report/render.js.map +1 -0
  297. package/dist/services/report/reports.d.ts +110 -0
  298. package/dist/services/report/reports.d.ts.map +1 -0
  299. package/dist/services/report/reports.js +179 -0
  300. package/dist/services/report/reports.js.map +1 -0
  301. package/dist/services/report/safe-save.d.ts +57 -0
  302. package/dist/services/report/safe-save.d.ts.map +1 -0
  303. package/dist/services/report/safe-save.js +325 -0
  304. package/dist/services/report/safe-save.js.map +1 -0
  305. package/dist/services/report/sources.d.ts +48 -0
  306. package/dist/services/report/sources.d.ts.map +1 -0
  307. package/dist/services/report/sources.js +147 -0
  308. package/dist/services/report/sources.js.map +1 -0
  309. package/dist/services/report/types.d.ts +312 -0
  310. package/dist/services/report/types.d.ts.map +1 -0
  311. package/dist/services/report/types.js +2 -0
  312. package/dist/services/report/types.js.map +1 -0
  313. package/dist/services/report/validate.d.ts +169 -0
  314. package/dist/services/report/validate.d.ts.map +1 -0
  315. package/dist/services/report/validate.js +685 -0
  316. package/dist/services/report/validate.js.map +1 -0
  317. package/dist/services/report/verify.d.ts +72 -0
  318. package/dist/services/report/verify.d.ts.map +1 -0
  319. package/dist/services/report/verify.js +441 -0
  320. package/dist/services/report/verify.js.map +1 -0
  321. package/dist/services/report/workbook.d.ts +108 -0
  322. package/dist/services/report/workbook.d.ts.map +1 -0
  323. package/dist/services/report/workbook.js +471 -0
  324. package/dist/services/report/workbook.js.map +1 -0
  325. package/dist/services/rich-types.d.ts +39 -0
  326. package/dist/services/rich-types.d.ts.map +1 -1
  327. package/dist/services/rich-types.js +61 -30
  328. package/dist/services/rich-types.js.map +1 -1
  329. package/dist/services/workflow-node-layout.d.ts +214 -0
  330. package/dist/services/workflow-node-layout.d.ts.map +1 -0
  331. package/dist/services/workflow-node-layout.js +338 -0
  332. package/dist/services/workflow-node-layout.js.map +1 -0
  333. package/dist/services/workflow-operator.d.ts +47 -2
  334. package/dist/services/workflow-operator.d.ts.map +1 -1
  335. package/dist/services/workflow-operator.js +102 -5
  336. package/dist/services/workflow-operator.js.map +1 -1
  337. package/dist/services/workflow-overtime.d.ts +95 -0
  338. package/dist/services/workflow-overtime.d.ts.map +1 -0
  339. package/dist/services/workflow-overtime.js +207 -0
  340. package/dist/services/workflow-overtime.js.map +1 -0
  341. package/dist/services/workflow-plan-range.d.ts +18 -0
  342. package/dist/services/workflow-plan-range.d.ts.map +1 -0
  343. package/dist/services/workflow-plan-range.js +72 -0
  344. package/dist/services/workflow-plan-range.js.map +1 -0
  345. package/package.json +3 -2
  346. package/skill-docs/SKILL.md +277 -261
  347. package/skill-docs/_catalog.md +77 -66
  348. package/skill-docs/actionflows/SKILL.md +22 -14
  349. package/skill-docs/actionflows/references/components/calendar/MeetingCreate.md +17 -17
  350. package/skill-docs/actionflows/references/components/calendar/ScheduleCreate.md +17 -17
  351. package/skill-docs/actionflows/references/components/database/DMLExecute.md +3 -3
  352. package/skill-docs/actionflows/references/components/ebuilder/DateTrigger.md +32 -17
  353. package/skill-docs/actionflows/references/components/ebuilder/EbGetDataById.md +17 -17
  354. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +6 -0
  355. package/skill-docs/actionflows/references/components/ebuilder/EventFormData.md +2 -0
  356. package/skill-docs/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -17
  357. package/skill-docs/actionflows/references/components/logic/Output.md +28 -17
  358. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -2
  359. package/skill-docs/actionflows/references/components/personnel/AlterPersonStatus.md +30 -30
  360. package/skill-docs/actionflows/references/components/personnel/HrmEmployeeUpdate.md +32 -32
  361. package/skill-docs/actionflows/references/components/trigger/InnerMQListener.md +41 -40
  362. package/skill-docs/actionflows/references/components/trigger/SimpleScheduler.md +19 -17
  363. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +17 -17
  364. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +19 -17
  365. package/skill-docs/actionflows/references/components/workflow/ApproveEntrust.md +19 -17
  366. package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +17 -17
  367. package/skill-docs/actionflows/references/components/workflow/ApproveTrigger.md +99 -84
  368. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +39 -0
  369. package/skill-docs/references/common/guide-plan-template.md +251 -233
  370. package/skill-docs/references/common/ref-cli-commands.md +519 -373
  371. package/skill-docs/references/ebuilder-designer/guide-designer-components.md +1 -1
  372. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +460 -460
  373. package/skill-docs/references/ebuilder-designer/guide-designer.md +4 -4
  374. package/skill-docs/references/form/guide-create-form.md +232 -214
  375. package/skill-docs/references/form/guide-form-association.md +1 -1
  376. package/skill-docs/references/form/guide-form-view.md +318 -318
  377. package/skill-docs/references/form/guide-virtual-form.md +156 -0
  378. package/skill-docs/references/form/ref-form-fields.md +239 -100
  379. package/skill-docs/references/form/style-templates.md +80 -27
  380. package/skill-docs/references/report/add-dataset-registration-guide.md +139 -0
  381. package/skill-docs/references/report/ai-report-workflow.md +412 -0
  382. package/skill-docs/references/report/api-report-build-fast-path.md +275 -0
  383. package/skill-docs/references/report/app-datasource-lookup-guide.md +230 -0
  384. package/skill-docs/references/report/cell-config-echo-guide.md +163 -0
  385. package/skill-docs/references/report/cell-transform-guide.md +147 -0
  386. package/skill-docs/references/report/condition-format-guide.md +140 -0
  387. package/skill-docs/references/report/cross-dataset-filter-guide.md +304 -0
  388. package/skill-docs/references/report/dataset-query-filter-guide.md +235 -0
  389. package/skill-docs/references/report/dataset-sidebar-ops-guide.md +280 -0
  390. package/skill-docs/references/report/dataset-table-field-contract-guide.md +339 -0
  391. package/skill-docs/references/report/datasource-metadata-guide.md +365 -0
  392. package/skill-docs/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
  393. package/skill-docs/references/report/date-range-query-reference.md +102 -0
  394. package/skill-docs/references/report/default-header-style-guide.md +70 -0
  395. package/skill-docs/references/report/designer-blank-prevention-guide.md +111 -0
  396. package/skill-docs/references/report/event-hreflink-guide.md +184 -0
  397. package/skill-docs/references/report/field-bind-exact-match-guide.md +208 -0
  398. package/skill-docs/references/report/formula-cell-api-guide.md +258 -0
  399. package/skill-docs/references/report/guide-report-build.md +131 -0
  400. package/skill-docs/references/report/guide-report-modify.md +100 -0
  401. package/skill-docs/references/report/guide-report-multisource.md +143 -0
  402. package/skill-docs/references/report/guide-report-query.md +98 -0
  403. package/skill-docs/references/report/hidden-row-and-header-merge-guide.md +100 -0
  404. package/skill-docs/references/report/layout-showlocation-freeze-guide.md +167 -0
  405. package/skill-docs/references/report/preaggregate-auto-disable-guide.md +107 -0
  406. package/skill-docs/references/report/query-condition-api-guide.md +890 -0
  407. package/skill-docs/references/report/ref-report-commands.md +122 -0
  408. package/skill-docs/references/report/ref-report-pitfalls.md +226 -0
  409. package/skill-docs/references/report/report-baseinfo-defaults-guide.md +117 -0
  410. package/skill-docs/references/report/report-building-guide.md +511 -0
  411. package/skill-docs/references/report/report-config-schema.md +445 -0
  412. package/skill-docs/references/report/report-create-modes-guide.md +182 -0
  413. package/skill-docs/references/report/report-data-model.md +447 -0
  414. package/skill-docs/references/report/report-delivery-contract.md +101 -0
  415. package/skill-docs/references/report/report-designer-feature-map.md +500 -0
  416. package/skill-docs/references/report/report-internal-error-guide.md +78 -0
  417. package/skill-docs/references/report/report-knowledge-base.md +389 -0
  418. package/skill-docs/references/report/report-lifecycle-api-guide.md +392 -0
  419. package/skill-docs/references/report/report-list-page-ops-guide.md +191 -0
  420. package/skill-docs/references/report/report-permission-guide.md +365 -0
  421. package/skill-docs/references/report/report-requirement-analysis-template.md +202 -0
  422. package/skill-docs/references/report/report-self-check-guide.md +164 -0
  423. package/skill-docs/references/report/safe-partial-save-guide.md +151 -0
  424. package/skill-docs/references/report/snowflake-id-precision-guide.md +84 -0
  425. package/skill-docs/references/report/spec-build-schema.md +291 -0
  426. package/skill-docs/references/report/targeted-fix-guide.md +97 -0
  427. package/skill-docs/references/report/user-request-scope-only-guide.md +82 -0
  428. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +190 -0
  429. package/skill-docs/references/workflow/guide-workflow-node-layout.md +181 -0
  430. package/skill-docs/references/workflow/guide-workflow.md +7 -3
  431. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +0 -17
@@ -0,0 +1,275 @@
1
+ # API 从零搭建报表 · 快速路径(强制)
2
+
3
+ > **适用**:用户要求「在 XX 应用下搭建报表」「根据需求文档/Excel 建表」,且走 API/脚本落库。
4
+ > **目标**:**一次跑通**,禁止反复试探性 API、禁止二分调试脚本、禁止无用户许可的 copySheet。
5
+ > **优先级**:与本节冲突的旧文档表述(如「先 cache 后 dev」针对**新空报表**)以本节为准。
6
+ > **模式选型**:列表页「新建报表」三卡片见 **`report-create-modes-guide.md`**(模版创建 / 快速构建-列表式用 `e10-cli report create`)。**本节默认 = 从空白创建** 后的细粒度搭建。
7
+
8
+ ---
9
+
10
+ ## 〇、上下文与数据源定位(先于一切 ds API)
11
+
12
+ > **必加载** `app-datasource-lookup-guide.md` — 应用内 vs 全系统查找 + **§六探测预算/打断询问**。
13
+ > **必加载** `datasource-selection-and-parent-filter-guide.md` — **少挂数据源** + 连续区域只配入口父格筛选。
14
+
15
+ | 用户输入 | 行为 |
16
+ |----------|------|
17
+ | **已给 appId 或 appName** | 解析 appId → **先** `GET …/form/obj/getList/{appId}`(应用内)→ **未命中再**别处(lookup-guide §三);合计见探测预算 |
18
+ | **未给准确表名**(仅业务词/报表名) | **只在当前应用**检索候选 → **二次确认**后再 `addDataset`(lookup §2.0);CLI:`find form <appId> --suggest "…"`;**禁止**静默绑错表 |
19
+ | **已给 appId + sourceId** | **跳过**数据源搜索 |
20
+ | **未给 app** | 才允许全系统带关键字检索(**合计 ≤3**)→ 仍须用户确认唯一表 |
21
+ | **预算用尽仍不准** | **打断询问** — **禁止**继续盲扫 / 开浏览器扫页 / 固定 sleep |
22
+
23
+ **禁止**:用户已指定应用时,仍遍历全系统 `/ds/group` 或多分组空扫 —— 这是「发需求后响应慢」的首要原因。
24
+
25
+ **少挂源**:主表已有用户/部门等字段时,不要再挂人员表、部门表(见 selection-guide §一)。
26
+ ---
27
+
28
+ ## 一、执行纪律(响应时间)
29
+
30
+ | 规则 | 说明 |
31
+ |------|------|
32
+ | **单脚本单次交付** | 登录 → 定位 sourceId → 建壳 → 绑数据集 → 组 workbook → 保存 → 回读验证;**禁止**为定位再写 3~5 个 debug_*.js |
33
+ | **轻量加载文档** | API 建表任务**只加载**:`cold-start-scan-guide.md` + 本节 + `app-datasource-lookup-guide.md` + `datasource-selection-and-parent-filter-guide.md`(父格相关段)+ `safe-partial-save-guide.md`(保存相关段)+ `report-delivery-contract.md`(模式 A);**跳过** `report-knowledge-base.md` 全文、`report-requirement-analysis-template.md`、`report-help-guide.md`、`report-building-guide.md`、`datasource-metadata-guide.md`、`build_guide_html`、`weaver-e10-login`;**禁止**查找/加载 `e10-cli*` 与 `本地工作目录**` |
34
+ | **找表:先应用后别处** | 已给 app → **先** `GET /api/bs/ebuilder/form/obj/getList/{appId}`;未命中才别处检索;见 lookup-guide §二→§三 |
35
+ | **禁止固定 sleep** | `addDataset` 后用 **短轮询** `dataset/list`(如 100ms×≤8),**禁止** `sleep(800)` / 盲等 |
36
+ | **禁止为 API 启浏览器** | 建表/找表用 `https` multipart;**禁止** `chromium.launch` + 打开应用页扫表单 |
37
+ | **禁止探索性 API** | 未指向明确目的不得 copySheet、preCheck 全表、跨报表对比、全系统 ds/group 首轮遍历;找表超预算必须问用户 |
38
+ | **禁止擅自 copySheet** | 仅当用户**明确要求复制某张表**时使用;从模板 JSON 搭布局是默认路径 |
39
+ | **失败最多重试 1 次** | 同一 API/步骤最多再试 1 次;布局仍失败 → **删空壳**(见下)禁止同 id 死循环 |
40
+ | **失败/中止必删空壳** | 建壳后若布局未成功落库,或任务失败/用户中止 → **`deleteReport` 清掉临时壳**;禁止列表残留空白报表。见 `failure-cleanup-and-nonblocking-guide.md` §一 |
41
+ | **附属失败不卡死** | 查询条件/权限/快照等失败 → **提示用户** → 继续其它步骤 → 交付主表 → 收尾再自动补试 1 次;禁止卡在单点。见同指南 §二 |
42
+ | **CLI 优先** | 历史沉淀可执行点一律 `e10-cli report`(见 `e10-cli report -cli.md` §一映射);禁止堆 debug 脚本 |
43
+ | **多表关联** | 需求写明 → 按需求配;未写明 → `e10-cli report join-suggest` + **提示用户确认**(selection-guide §2.5) |
44
+ | **查询条件** | `e10-cli report query save`(multipart 单对象);失败提示后继续 |
45
+ | **失败删壳** | `e10-cli report cleanup` |
46
+ | **交付自检** | `e10-cli report verify all`(可后台) |
47
+ | **交付物克制** | **布局落库成功后立刻给设计器地址并结束**(`report-delivery-contract.md`);**默认不**做 HTML / verify / 预聚合 / 需求分析;用户要分析时才走分析模板 |
48
+ | **默认表头样式** | 用户未指定样式且无效果图 → 自动蓝标题+灰列头(`default-header-style-guide.md`);有指定/效果图则完全按用户 |
49
+ | **文档输入一次解析** | Excel/JSON 需求只解析一次 |
50
+ | **首建跳过 cache** | 单数据集、无跨表 leftFilterField 时,首次可省略 `saveReportWithCacheConfig` |
51
+ | **页面布局默认关闭** | 网格线 page `gridLine=0`;**workbook 禁写 gridline**(存在→500);落库前 `validate gridline`(§4.6.1) |
52
+ | **耗时目标** | 已给 app+表名:找表 **≤2s**;整段落库 **≤5s**(不含用户确认) |
53
+
54
+ ---
55
+
56
+ ## 二、标准流程(约数秒,非 30~60s)
57
+
58
+ ```
59
+ 0. e10-login status(本地,勿 sleep)
60
+ 0.2 【优先 CLI】e10-cli report find <appId> <准确表名>
61
+ 若用户未给准确表名 → find form <appId> --suggest "需求关键词" → **等用户确认** → 禁止静默 addDataset
62
+ 0.3 多表且需求未写关联 → e10-cli report join-suggest … → 提示用户确认(可先按 best 配并标注待确认)
63
+ 0.5 解析 appId;GET form/obj/getList/{appId} → sourceId(未中再别处,见 lookup-guide)
64
+ 1. POST baseInfo(id=0, **name=目标报表名**) → reportId
65
+ 2. POST addDataset(sourceId) **须** `sourceType=LOGIC` + `sourceGroup=weaver-ebuilder-form-service`(普通应用;见 `add-dataset-registration-guide.md`)
66
+ 2.1 poll dataset/list 直到 sourceId 命中 → datasetId(禁止固定 sleep;**禁止跨报表复用 datasetId**)
67
+ 3. GET fieldsAndOriginFields?isFront=true → data.fieldsKey(**同 reportId,禁止另建探测壳取字段**)
68
+ 3.1 **门禁**:业务字段应含 `field_*`;若多为裸雪花 → 注册错,delDataset 重建(禁止在 Field 上手工补前缀)
69
+ 4. 按模板 remap 字段 + buildWorkbook(多表入口格配父格筛选)
70
+ 5. POST saveReportDevInfo(**name=目标报表名**)
71
+ 6. [可选] saveReportWithCacheConfig
72
+ 7. GET getReportDevInfo 验证;**禁止**再 rename
73
+ ```
74
+
75
+ **失败清理**:步骤 1 已拿到 `reportId`,但步骤 5 未成功或任务中止 → **必须** `deleteReport` 删除空壳,见 `failure-cleanup-and-nonblocking-guide.md`。
76
+
77
+ ### 2.05 提速三件事( ;细则 `session-build-performance-guide.md` §六补充)
78
+
79
+ 1. **HTTPS 连接复用**:全程一条连接(keep-alive)。每请求 new 一次 ≈271ms/次,复用 ≈115ms/次。
80
+ 2. **ETEAMSID 只解析一次**:`e10-login status` ≈0.9s,写本地缓存复用;禁止每脚本/每请求 subprocess。
81
+ 3. **可省的接口**:新空壳 `saveReportDevInfo` 的 `designKey` 传空串即可(无需先 `getReportDevInfo`);`fillDatasetConfig` 只在运行态取不到数据时补;`dataset/list` 通常首次即命中,**禁止**预 sleep。
82
+
83
+ > 另:**禁止跨报表复用 datasetId**;仅本 report 已挂载的数据集可复用。取字段必须在本表 `addDataset` 之后。
84
+
85
+ ### 2.1 新建报表命名(禁止空壳临时名)
86
+
87
+ > **必加载** `report-baseinfo-defaults-guide.md`(平台默认值权威表)。
88
+
89
+ - **`baseInfo` / `saveReportDevInfo` 全程用目标报表名**;**禁止** `__build_*` / `__probe_*`。
90
+ - **禁止**落库后再 rename(撞名易残留壳名)。
91
+ - **字段先预检再建表**:`fieldsBySource` 精确匹配通过才 `baseInfo`;否则 exit 4(**不建表**)。
92
+ - **同源只挂一次**:本表已有同 `sourceId` 数据集必须复用,禁止二次 `addDataset`(否则左侧重复分组)。
93
+ - **对齐平台默认**:`groupId=0`、`showOrder=1`、`nameLabelId="-1"`;`groupId` 禁止写 `-1`(列表哨兵)。
94
+ - **`name` / `nameLabelId`**:trim;禁控制字符;落库前可 `validate base`。
95
+ - 定源未确认(fuzzy)前 **禁止** `baseInfo`。CLI:`e10-cli report build`。
96
+
97
+ ### 2.2 保存顺序(新空报表 · 已验证)
98
+
99
+ | 顺序 | 接口 | 新空报表 | 已有 layout 的报表 |
100
+ |------|------|----------|-------------------|
101
+ | **①** | `saveReportDevInfo` | **必须** | 必须(改 layout) |
102
+ | **②** | `saveReportWithCacheConfig` | 可选,且在 ① 成功之后 | 可选(跨表筛选缓存) |
103
+
104
+ **禁止**:新报表在 **从未** 成功 `saveReportDevInfo` 之前单独调用 `saveReportWithCacheConfig` —— 会损坏报表壳,后续 dev 保存持续 500。
105
+
106
+ ---
107
+
108
+ ## 三、字段映射(禁止字符串全局替换 · 禁止匹配失败)
109
+
110
+ > **必加载** `field-bind-exact-match-guide.md` — 字段名唯一来源、裸雪花 ID 事故、保存前后门禁。
111
+ > **必加载** `add-dataset-registration-guide.md` — **addDataset 必须与设计器一致**,否则 `fieldsKey` 无 `field_`。
112
+
113
+ ### 3.0 硬约束(零容忍)
114
+
115
+ | 规则 | 说明 |
116
+ |------|------|
117
+ | **注册先于绑定** | 普通应用 `addDataset`:`sourceType=LOGIC` + `sourceGroup=weaver-ebuilder-form-service`;错用 `form`+`sourceGroup=appId` → fieldsKey 裸雪花 |
118
+ | **唯一来源** | Field 的 `name` **必须**等于 **当前 dataset** 的 `fieldsKey[].name`(不是显示名、不是臆造前缀) |
119
+ | **常见形态** | 设计器兼容注册下业务字段为 `field_{雪花}`;系统字段为 `create_time` / `name` / `creator` 等原样 |
120
+ | **禁止去前缀** | `field_3506…` **不可**写成 `3506…` —— 设计器有格、取数全挂(事故 AAA) |
121
+ | **禁止手工补前缀** | fieldsKey 已是裸雪花时,**先修注册**再绑定;禁止只在 cell 上加 `field_` 凑数 |
122
+ | **保存前门禁** | 每个 Field:`fieldsKey.name` 集合 `.has(name)`;失败则**中止保存** |
123
+ | **保存后门禁** | `node e10-cli report verify bind <reportId> [appId]` 必须 PASS 才可交付 |
124
+
125
+ ### 3.1 正确做法
126
+
127
+ 对每个 `cellType=Field` 的模板单元格 **逐对象** 改写:
128
+
129
+ ```javascript
130
+ // fieldName = fieldsKey 中按 text/showName 命中的那一项的 .name
131
+ nf.dataSetId = newDatasetId;
132
+ nf.nameIndex = newSourceId;
133
+ nf.name = fieldName; // 必须 === fieldsKey[].name(含 field_ 前缀)
134
+ nf.fieldKey = `${newDatasetId}.${newSourceId}.${fieldName}`;
135
+ // 同步 patch style 内嵌的 cellType 对象(见 §四)
136
+ nf.allNeedFields = '';
137
+ assert(legalNames.has(nf.name), `name 必须∈ fieldsKey: ${nf.name}`);
138
+ // 裸雪花 / field_ 前缀以 fieldsKey 为准,禁止凭记忆改写
139
+
140
+ ```
141
+
142
+ ### 3.2 禁止
143
+
144
+ - `JSON.stringify` 全量后 `split(oldId).join(newId)` 替换 fieldKey(datasetId 先替换会导致 fieldKey 替换失败,残留旧字段 ID)
145
+ - 用裸雪花 ID(无 `field_`)作 `name` / fieldKey 末段 —— **字段获取不上**
146
+ - 用显示名(如「资产类别」)作 `name` 或完整 fieldKey
147
+ - 截断字段名(`field_5`)或臆造 `field_*`
148
+ - 用表单 fieldId 未与 `fieldsKey.name` 交叉核对就直接写入
149
+
150
+ ### 3.3 字段 discovery
151
+
152
+ ```
153
+ # ① 建表前预检(无需报表;与 fieldsKey 同形)
154
+ GET /api/bs/edc/dataset/fieldsBySource?sourceId=&sourceType=logic&groupId=weaver-ebuilder-form-service
155
+ # ② 落库前权威(本表 addDataset 之后)
156
+ GET /api/bs/edc/dataset/fieldsAndOriginFields
157
+ ?datasetId={id}&hasField=true&isFront=true&reportId={reportId}
158
+ → data.fieldsKey[] // 权威;取 .name 写入;isFront=false 常返回空
159
+ ```
160
+
161
+ `addDataset` 不返回 datasetId → 必须 `dataset/list?reportId=` 按 **sourceId** 匹配,**禁止**按数组下标。
162
+
163
+ **字段绑定门禁(2026-09-11 强制)**:用 `spec_lib.resolveFieldBindings()`,仅**精确**匹配
164
+ (`fieldName`/`fieldMap` → 列标题 === `text` → `field` === `text`/`name`);
165
+ 任一列无精确命中 → **exit 4**,把 `candidates`/`allFields` 交用户指定,**禁止模糊兜底、禁止回退系统字段**。
166
+ 详见 `field-bind-exact-match-guide.md §2.0`。
167
+
168
+ ---
169
+
170
+ ## 四、workbook 单元格 style 键名(字段丢失根因)
171
+
172
+ 平台 `getFieldsFromWorkbook` 读取的是 Java 字段 **`style.cellType`**(`AnalysisFieldCellType`),**不是** `analysisFieldCellType`。
173
+
174
+ | 场景 | 正确键名 |
175
+ |------|----------|
176
+ | **上传 workbook(saveReportDevInfo)** | `style.cellType` |
177
+ | **getReportDevInfo 回读的 fields[].style 字符串** | 可能含 `analysisFieldCellType`(库内序列化) |
178
+
179
+ **buildCellFromField 模板**:
180
+
181
+ ```javascript
182
+ const style = parseJson(f.style, {});
183
+ const ct = style.analysisFieldCellType || style.cellType;
184
+ if (ct && typeof ct === 'object') {
185
+ style.cellType = ct;
186
+ delete style.analysisFieldCellType;
187
+ }
188
+ // Formula 另加 cell.formula = f.cellText(无前导 =)
189
+ ```
190
+
191
+ **症状**:`fields.length=21` 但 `cellType` 全是 `Const`、设计器无字段绑定 → 即 style 键名错误。
192
+
193
+ ---
194
+
195
+ ## 五、保存后验证(一次回读 · 含字段精确匹配)
196
+
197
+ ```javascript
198
+ const dev = getReportDevInfo.data;
199
+ const types = countBy(dev.fields, 'cellType');
200
+ // 期望示例:{ Const: 11, Field: 8, Formula: 2 }
201
+ types.Field >= 1 || FAIL;
202
+ dev.fields.some(f => f.fieldKey && f.cellType === 'Field') || FAIL;
203
+
204
+ // 强制:每个 Field.name / fieldKey末段 ∈ fieldsKey.name(见 field-bind-exact-match-guide.md)
205
+ // 或: node e10-cli report verify bind <reportId> <appId>
206
+ ```
207
+
208
+ | 检查项 | 通过标准 |
209
+ |--------|----------|
210
+ | `fields.length` | ≥ 预期单元格数(通常 >15) |
211
+ | `cellType` 分布 | 含 `Field` 与(如有公式)`Formula` |
212
+ | fieldKey 三段 | `{datasetId}.{sourceId}.{fieldsKey.name}` |
213
+ | **精确匹配** | **每个** Field 的 `name` ∈ 当前数据集 `fieldsKey.name`;禁止裸雪花 ID |
214
+ | `verify_field_bind.js` | Exit 0;失败则**禁止交付** |
215
+ | 损坏壳 | save 500 且 fields 全 Const/0 → `deleteReport` 重建,勿 resume |
216
+
217
+ ---
218
+
219
+ ## 六、故障对照表(禁止盲目重试)
220
+
221
+ | 现象 | 根因 | 处理 |
222
+ |------|------|------|
223
+ | saveReportDevInfo **500** 新空壳 | 先调了 cache / 壳已损坏 / dev 保存用了目标名 | 删 reportId → 临时名重建 → dev 保存 **name=临时名** → 成功后再 baseInfo 改名 |
224
+ | fields 全 **Const** | workbook 用了 `analysisFieldCellType` | 改为 `style.cellType` 重保存 |
225
+ | fieldKey 末段仍是旧雪花 ID | 字符串 replace 顺序错误 | 逐字段对象 remap(§三) |
226
+ | **有 Field 格但字段获取不上 / 取数空** | **`name` 为裸雪花 ID(缺 `field_`)或不在 fieldsKey** | 按 `field-bind-exact-match-guide.md` 重绑;`verify_field_bind.js` |
227
+ | 设计器 0 字段 / workbook cells 0 | 损坏壳或空 workbook 落库 | deleteReport + 重建;见 `safe-partial-save-guide.md` |
228
+ | 同名第二张报表 | 重复 baseInfo | 列表查重,删多余壳,只保留一张 |
229
+
230
+ ---
231
+
232
+ ## 七、禁止走的弯路(已验证浪费时间)
233
+
234
+ 1. **copySheet** 探路 + 再手工建表(用户未要求复制时)
235
+ 2. **preCheck** 全表二分 / 去掉公式逐格试(应先查 §四 style 键名)
236
+ 3. **跨报表**把 A 报表 fields 保存到 B 报表壳(壳损坏时仍 500,不能证明 layout 有问题)
237
+ 4. 在同一损坏 **reportId** 上连续 save 10+ 次
238
+ 5. 收尾打开源码、changed files;或交链后仍跑 verify/HTML/配置检测
239
+ 6. 用户只要搭表时跑需求分析模板或多轮「深度解析」
240
+ 7. 「检测生成报表配置」整包自检后再搭表
241
+ 8. 查找已删除的测试用例/原型脚本(`generate_test_case` / `prototype-design`)
242
+
243
+
244
+ ---
245
+
246
+ ## 八、与现有文档关系
247
+
248
+ | 文档 | 关系 |
249
+ |------|------|
250
+ | `safe-partial-save-guide.md` | 已有报表改快照/权限;**新报表首次落 layout 以本节 §二 顺序为准** |
251
+ | `cross-dataset-filter-guide.md` | fieldKey / leftFilterField 细节 |
252
+ | `formula-cell-api-guide.md` | 公式 cellText、countType |
253
+ | `report-delivery-contract.md` | 收尾交付格式 |
254
+ | `failure-cleanup-and-nonblocking-guide.md` | 失败删空壳;附属失败不卡死 |
255
+ | `app-datasource-lookup-guide.md` | 应用内 sourceId 查找 + 探测预算/打断(§〇 强制) |
256
+ | `datasource-selection-and-parent-filter-guide.md` | 少挂源;连续区域仅入口父格筛选 |
257
+ | `field-bind-exact-match-guide.md` | Field.name 必须 ∈ fieldsKey;裸 ID 事故与门禁 |
258
+ | `add-dataset-registration-guide.md` | addDataset 与设计器对齐;fieldsKey 无 field_ 的根因 |
259
+ | `e10-cli report verify bind` | 保存后字段精确匹配校验(交付前必跑) |
260
+ | `e10-cli report fix(内部走安全局部保存)` | mergeWorkbookSafe;新建布局仍用本节 buildCellFromField |
261
+
262
+ ---
263
+
264
+ ## 九、API 请求头与 multipart 最小集(禁止浏览器自动化)
265
+
266
+ ```javascript
267
+ // headers 每次请求
268
+ { eteamsid, ebBusinessId, ebbusinessid, Referer: .../designer/{reportId},
269
+ 'User-Agent': 'Mozilla/5.0 AgentType=Agent,IsAgent=true' }
270
+
271
+ // saveReportDevInfo multipart
272
+ { groupId, appId, reportId, name, nameLabelId: '-1', designKey, workbook: gzipBase64 }
273
+ ```
274
+
275
+ `designKey` 来自当次 `getReportDevInfo`;保存前只拉 **一次**。
@@ -0,0 +1,230 @@
1
+ # 应用内数据源查找(强制优先级)
2
+
3
+ > **适用**:能力一/五、API 从零搭建报表时,需要把「需求里的表单/数据源名称」解析为 `sourceId`。
4
+ > **核心规则**:**先当前应用、后别处**;命中即停;**禁止**固定 `sleep`;**禁止**为找表启动 浏览器自动化 开应用页。
5
+
6
+ ---
7
+
8
+ ## 一、判定顺序(任务开始后第一步)
9
+
10
+ | 输入 | 解析 appId | 找 sourceId |
11
+ |------|------------|-------------|
12
+ | **appId + 数据源名** | 直接用 | **① 应用内**(§二)→ 未命中再 **② 别处**(§三,有限次) |
13
+ | **appName + 数据源名** | `GET /api/bs/ebuilder/app/list?name={appName}&pageNo=1&pageSize=20` **1 次** | 同上 |
14
+ | **仅数据源名,无 app** | — | 直接 §三(须带关键字) |
15
+ | **appId + sourceId 已给** | 直接用 | **跳过查找**,直接 `addDataset` |
16
+
17
+ **禁止(已指定 app 时的首轮)**:
18
+
19
+ - 一上来就 `GET /ds/group` 全系统遍历
20
+ - 对每个 `groupId` 循环 `listByPage` 空扫
21
+ - 多 module(`ebuilder` / `bs` / `datasource`)无关键字轮询试探
22
+ - **先拉系统级分页再本地过滤「当前应用」**(分页也必须带 appId)
23
+ - **`sleep` / `setTimeout` 固定等待** 代替「读接口直到有数据」
24
+ - **浏览器自动化 打开应用详情页** 扫网络找表单( ~17s,且非必要)
25
+
26
+ **强制优先级**:`e10-cli report find` = `getList/{appId}` → 未命中再问用户 / 有限次应用内关键字 listByPage → **最后**才别处。
27
+ 见 `session-build-performance-guide.md` §二。
28
+
29
+ ---
30
+
31
+ ## 二、应用内查找(已指定 appId · 优先 · 通常 1 次)
32
+
33
+ ### 2.0 未指定准确表名(强制 · 二次确认)
34
+
35
+ > **事故模式**:需求只写业务描述(如「资产统计」「党员发展」)未给表单名 → Agent 模糊匹配错表 → 数据集字段对不上。
36
+
37
+ | 用户输入 | Agent 行为 | 绑定 |
38
+ |----------|------------|------|
39
+ | **已给准确表名** 且应用内 **exact 唯一** | 可 `find form` 后绑定 | `autoBind=true`(建议仍口头确认) |
40
+ | **未给表名** / 只给业务词 / 报表名 | **只在当前应用** `getList/{appId}` 检索 → 按关键字打分出候选 | **`needConfirm=true`,禁止 addDataset** |
41
+ | **模糊命中 1 条或多条** | 展示候选(表名 + sourceId) | **必须等用户确认** 后再绑 |
42
+ | 应用内无候选 | 问用户准确表名/sourceId;**禁止**立刻全系统 `/ds/group` | 不绑 |
43
+
44
+ **二次确认话术(强制)**:
45
+
46
+ ```text
47
+ 需求未指定准确表名。已在当前应用内检索到以下候选,请确认用哪一张(回复表名或 sourceId):
48
+ 1. {nameA}(sourceId=…)
49
+ 2. {nameB}(sourceId=…)
50
+ 若都不是,请给出准确表单名或 sourceId。
51
+ ```
52
+
53
+ **禁止**:未确认就 `addDataset` / 落库绑字段;禁止用报表标题「看起来像」的表直接当数据源。
54
+
55
+ CLI:
56
+
57
+ ```bash
58
+ e10-cli report find <appId> --list
59
+ e10-cli report find <appId> --suggest "资产,台账"
60
+ e10-cli report find <appId> "准确表单名" # exact 才可 autoBind
61
+ ```
62
+
63
+ exit code **3** = 须二次确认(`needConfirm=true`)。
64
+
65
+ 按优先级尝试,**命中即停**(合计计入 §六预算):
66
+
67
+ ### 2.1 【首选 · eteams 已验证】应用表单列表
68
+
69
+ ```
70
+ GET /api/bs/ebuilder/form/obj/getList/{appId}?apid={appId}
71
+ ```
72
+
73
+ - Header:`eteamsid` + `Cookie: ETEAMSID=…` + `ebBusinessId={appId}`
74
+ - 响应为应用内表单数组(或包在 `data`);按 `name` **精确或包含**匹配需求表名
75
+ - 取命中项的 **`id`** 作为 `sourceId`(`addDataset` 用)
76
+ - **示例**:应用 `786501450842480640` 中「进销存-销售单」→ `787599094054395904`
77
+
78
+ ```javascript
79
+ async function findFormInApp(host, headers, appId, formName) {
80
+ const j = await get(`${host}/api/bs/ebuilder/form/obj/getList/${appId}`, { apid: appId }, headers);
81
+ const rows = Array.isArray(j.data) ? j.data : Array.isArray(j) ? j : j.data?.list || [];
82
+ const exact = rows.find((r) => r.name === formName);
83
+ if (exact) return String(exact.id);
84
+ const fuzzy = rows.find((r) => String(r.name || '').includes(formName) || formName.includes(String(r.name || '')));
85
+ return fuzzy ? String(fuzzy.id) : null;
86
+ }
87
+ ```
88
+
89
+ ### 2.2 CLI(表单类 · 优先)
90
+
91
+ ```bash
92
+ e10-cli report find <appId> <表单名> # 推荐(本包唯一 CLI 入口)
93
+ node e10-cli report find <appId> <表单名> # 仅 CLI 未装时
94
+ ```
95
+
96
+ 若 `e10-cli report` auth 与 `e10-login` 不同步失败 → **改走 §2.1**,不要去找 e10-cli。
97
+
98
+ 字段核对(已有 sourceId 后):
99
+
100
+ ```bash
101
+ # 报表侧(推荐):
102
+ # GET /api/bs/edc/dataset/fieldsBySource?sourceId=&sourceType=logic&groupId=weaver-ebuilder-form-service
103
+ # 或 addDataset 后 fieldsAndOriginFields?isFront=true
104
+ ```
105
+
106
+ ### 2.3 HTTP 备用(仅当 §2.1 失败)
107
+
108
+ ```
109
+ GET /api/datasource/ds/listByPage?sourceType=logic&appid={appId}&condition={关键字}&pageNo=1&pageSize=50
110
+ GET /api/ebuilder/form/ds/listByPage?sourceType=LOGIC&groupId=0&name={关键字}&appId={appId}&pageNo=1&pageSize=50
111
+ ```
112
+
113
+ > **注意**:部分环境 `form/ds/listByPage` 会 500;**不要**因此改去开 浏览器自动化,应回退 §2.1 或进入 §三 / 询问用户。
114
+
115
+ ---
116
+
117
+ ## 三、别处检索(应用内未命中 或 未给 app)
118
+
119
+ **仅当**:应用内 §二已试完仍无命中,**或**用户未指定应用。
120
+
121
+ 1. `GET /api/datasource/ds/listByPage`(或 `/api/{module}/ds/listByPage`)带 **`name`/`condition` 关键字** + 必要时 `groupId`
122
+ 2. **禁止**无关键字翻页扫全库
123
+ 3. 仍计入 §六预算;用尽 → **打断询问**,不要继续盲扫
124
+
125
+ > ** 坑(<your-e10-host>)**:按「应用名」找应用这条路在本环境不可用 ——
126
+ > `GET /api/bs/ebuilder/app/list?name={kw}` 与 `e10-cli report app-search --name {kw}` **服务端忽略 `name`**,
127
+ > 恒返回全量 998 条且顺序固定,**不能**靠它定位应用。找不到表时:直接用 `ds/listByPage` 关键字搜数据源,或向用户要 appId/sourceId。
128
+
129
+ 若用户其实给了应用名但 Agent 漏解析 → 应先补 `app/list` 再回 §二,而不是直接全系统扫。
130
+
131
+ ---
132
+
133
+ ## 四、与报表 API 闭环(禁止固定 sleep)
134
+
135
+ ```
136
+ 解析 appId(若需要,最多 1 次 app/list)
137
+ → findFormInApp / §二(优先 getList)
138
+ → [未命中] §三 别处(有限次)
139
+ → POST addDataset(sourceId)
140
+ → poll GET dataset/list?reportId= 直到出现匹配 sourceId 的行(见下)
141
+ → GET fieldsAndOriginFields?datasetId=&isFront=true&reportId=
142
+ ```
143
+
144
+ ### 4.1 addDataset 后:轮询代替 sleep(强制)
145
+
146
+ **禁止** `await sleep(800)` / `setTimeout(800)` 之类固定等待。
147
+
148
+ ```javascript
149
+ async function waitDatasetBySource(reportId, sourceId, { tries = 8, gapMs = 100 } = {}) {
150
+ for (let i = 0; i < tries; i++) {
151
+ const list = await getDatasetList(reportId); // GET /api/bs/edc/dataset/list?hasField=true&reportId=
152
+ const hit = (list || []).find((d) => String(d.sourceId) === String(sourceId));
153
+ if (hit) return hit;
154
+ await new Promise((r) => setTimeout(r, gapMs)); // 仅短间隔重试,非「盲等 800ms」
155
+ }
156
+ throw new Error(`dataset not ready for sourceId=${sourceId}`);
157
+ }
158
+ ```
159
+
160
+ - 首包常立刻命中(~60ms);未就绪再 100ms 级重试,总等待远小于固定 800ms。
161
+ - `addDataset` 不返回 `datasetId` → **必须**按 **sourceId** 匹配,禁止按下标 `[0]`。
162
+
163
+ ---
164
+
165
+ ## 五、HTTP 客户端优先(强制 · 性能)
166
+
167
+ | 做法 | 说明 |
168
+ |------|------|
169
+ | **首选** | Node `https` / `fetch` / 浏览器自动化 **仅** `request` API 发 HTTP(若已有 context) |
170
+ | **禁止为找表** | `chromium.launch` + `page.goto(应用详情)` 扫表单(~0.6s+0.5s+打开页数秒) |
171
+ | **禁止为纯 API 建表** | 仅为 `baseInfo/addDataset/save` 而启动浏览器;用 https + multipart 即可 |
172
+
173
+ 纯 API 路径找表 + 建表可压到数秒;浏览器自动化 启浏览器 alone ≈ **1s+**。
174
+
175
+ ---
176
+
177
+ ## 六、探测预算与打断询问(强制 · 防空耗)
178
+
179
+ ### 6.1 单次任务硬上限
180
+
181
+ | 项 | 上限 | 说明 |
182
+ |----|------|------|
183
+ | 应用解析 `app/list` | **1** | 已有 appId 则 0 |
184
+ | **应用内**找表(`getList` / `form list` / scoped listByPage) | **合计 ≤ 2** | 换关键字也算;命中即停 |
185
+ | **别处** `group` + `listByPage`(应用内未中或未给 app) | **合计 ≤ 3** | 必须带 name;禁止翻页空扫 |
186
+ | 同一关键字换 module 无脑重试 | **禁止** | |
187
+ | 固定 `sleep` ≥ 300ms 等数据集 | **禁止** | 用 §4.1 轮询 |
188
+ | 浏览器自动化 开应用页找表 | **禁止** | |
189
+
190
+ ### 6.2 何时必须打断并询问用户
191
+
192
+ 1. §6.1 预算用尽仍无唯一命中。
193
+ 2. 关键字命中多条,无法确认。
194
+ 3. 表名与应用内列表对不上。
195
+ 4. 连续 2 轮仍在换词/换接口盲扫。
196
+ 5. **用户未指定准确表名**(仅业务描述/报表名)→ 应用内 `--suggest`/`--list` 后 **二次确认**(§2.0);**禁止**静默绑定。
197
+ 6. **模糊匹配**(`match=fuzzy`)→ 即使只有 1 条也必须确认。
198
+
199
+ 询问:应用?准确表名或 **sourceId**?多候选点选哪张?
200
+
201
+ ### 6.3 禁止的空耗行为
202
+
203
+ - 未给 app 时先全系统 group「碰运气」
204
+ - 已给 app 却跳过 §二直接别处扫
205
+ - 固定 sleep、开浏览器扫页、输出长探测日志代替提问
206
+
207
+ ---
208
+
209
+ ## 七、耗时对照(优化目标)
210
+
211
+ | 路径 | 典型耗时 | 说明 |
212
+ |------|----------|------|
213
+ | `getList/{appId}` 应用内命中 | **~0.2–0.5s** | **推荐** |
214
+ | 固定 sleep(800) + 浏览器自动化 启浏览器 | **~2s+** | **禁止** |
215
+ | 浏览器自动化 打开应用详情扫表单 | **~15–20s** | **禁止** |
216
+ | 全系统 group 遍历 | **数秒~数十秒** | 仅 §三兜底 |
217
+
218
+ API 从零搭建:数据源定位应控制在 **2 秒内**(已给 app 时);整段建表(已知名)目标 **≤ 5s**(不含用户确认)。
219
+
220
+ ---
221
+
222
+ ## 八、与现有文档关系
223
+
224
+ | 文档 | 关系 |
225
+ |------|------|
226
+ | `e10-cli report find` | 应用内 `getList` 找 sourceId(无 sleep/无浏览器) |
227
+ | `api-report-build-fast-path.md` | 建表流程 §〇 / 性能纪律引用本节 |
228
+ | `datasource-metadata-guide.md` | 有 app → 本节;无 app → §三 |
229
+ | `datasource-selection-and-parent-filter-guide.md` | 少挂源 |
230
+ | `e10-cli-integration.md` | 本包不含 e10-cli;勿扫描 |
@@ -0,0 +1,163 @@
1
+ # 单元格配置回显契约(数字格式 / 日期分组 / 统计等)
2
+
3
+ > **根因(已验证 · 设计器 `main.js` `getFormaterInfo`)**:工具栏「数字格式」按下拉回显时,用 `getFormaterInfo(formatter, formatterType)` 在目录中查找:`item.id === formatter || item.key1 === formatterType[0]`。
4
+ > 若只写了近似的 `formatter`(如 `¥#,##0.00`)而 `formatterType` 仍为 `["common"]`,会**命中「常规」**,预览可能仍按货币算,但工具栏回显为「常规」。
5
+ > **日期分组**等右侧属性回显依赖 `fields[].groupType`(及 workbook `style.cellType.groupType`);重建 workbook 时 **禁止丢** `groupType` / `formatterType`。
6
+
7
+ ---
8
+
9
+ ## 一、硬约束
10
+
11
+ 1. **写数字格式必须「formatter + formatterType」成对**,且取值来自下表目录,禁止自造格式串。
12
+ 2. **写日期分组必须写 `groupType` 枚举**(见 §三),并写入 `fields[].groupType` + workbook `style.cellType.groupType`。
13
+ 3. **重建 workbook(`fieldToCell`)须透传**:`groupType`、`formatterType`、`countType`、`orderType`、`displayType`、`expandType`;`tag.formatterType` 与 `fields[].formatterType` 一致。
14
+ 4. **禁止整表一键刷单元格样式/边框**(用户未点名区域时):见 `user-request-scope-only-guide.md`;若用户要求「整表设样式」→ **提示不支持全量**,请其给出区域(如 B3:H5)。
15
+ 5. **字体/字号**须匹配设计器支持列表;不支持时 **提示用户**,按默认字号继续落库,**不要卡住**(见 §五)。
16
+ 6. **同款样式复用(强制 · 性能)**:多个单元格配置**相同**数字格式/字体/边框/对齐时 → **只校验/确认一次**,其余格 **深拷贝同一 style 模板**;**禁止**逐格再跑 `validate format`、禁止逐格翻 JSON 样例对照。
17
+
18
+ ---
19
+
20
+ ## 一补充、同款样式复用(强制)
21
+
22
+ | 场景 | 正确做法 | 禁止 |
23
+ |------|----------|------|
24
+ | N 个度量列都要「货币」 | `e10-cli report validate format --map "货币"` **一次** → 得到成对 formatter/formatterType → 赋给所有目标格 | 对每一格再 `--map` / 再读一遍样例 JSON |
25
+ | 同区标题行同字体同色 | 建 `styleHeader` 对象,循环 `Object.assign` / 结构化克隆 | 每格单独拼 style、每格问目录 |
26
+ | 交付前抽检 | 对**唯一样式指纹**各验 1 次即可 | 按 cells.length 循环 `validate format --file` |
27
+
28
+ **指纹示例**:`formatterType[0] + '|' + formatter + '|' + font + '|' + backColor`
29
+ 相同指纹 → 直接复用已通过的 style 对象引用(或深拷贝),**不再**走 JSON 样例确认。
30
+
31
+ ## 二、数字格式目录(工具栏回显金标准)
32
+
33
+ > 来源:设计器静态资源 `main.js` 中格式下拉 `g()` 目录。`¥` 为全角 `U+FFE5`(JSON 中写 `\uFFE5`)。
34
+
35
+ | 中文(工具栏) | `style.formatter`(必须全等) | `formatterType[0]`(key1) |
36
+ |----------------|------------------------------|----------------------------|
37
+ | 常规 | `General` | `common` |
38
+ | 数值 | `0.00_);[Red](0.00)` | `value` |
39
+ | **货币** | `"¥"#,##0.00_);[Red]("¥"#,##0.00)` | **`huobi`** |
40
+ | 会计专用 | `_ "¥"* #,##0.00_ ;_ "¥"* -#,##0.00_ ;_ "¥"* "-"??_ ;_ @_ ` | `kuaiji` |
41
+ | 短日期 | `yyyy/m/d;@__@` | `shortdate` |
42
+ | 长日期 | `yyyy"年"m"月"d"日";@` | `longdate` |
43
+ | 时间 | `h:mm:ss;@` | `time` |
44
+ | 百分比 | `0.00%` | `percent` |
45
+ | 分数 | `# ?/?` | `fenshu` |
46
+ | 科学计数 | `0.00E+00` | `kexuejishu` |
47
+ | 文本 | `@` | `text` |
48
+ | 其他 | (自定义) | `custom` |
49
+
50
+ ### 错误写法(会导致回显「常规」)
51
+
52
+ | 错误 | 原因 |
53
+ |------|------|
54
+ | `formatter: "¥#,##0.00"` + `formatterType: ["common"]` | id 不在目录;key1=common → 命中常规 |
55
+ | 只改 `formatter`、不改 `formatterType` | key1 仍为 common → 常规 |
56
+ | 半角 `¥`(U+00A5)代替全角 `¥`(U+FFE5) | 与目录 id 不全等 |
57
+
58
+ ### 正确写入示例(货币)
59
+
60
+ ```json
61
+ {
62
+ "style": {
63
+ "formatter": "\"¥\"#,##0.00_);[Red](\"¥\"#,##0.00)"
64
+ },
65
+ "formatterType": ["huobi"],
66
+ "tag": { "formatterType": ["huobi"] }
67
+ }
68
+ ```
69
+
70
+ UI 内部拼串形态(勿原样当 formatter):`"<formatter>__@__<key1>"`,如 `..."__@__huobi`。
71
+
72
+ ---
73
+
74
+ ## 三、日期分组(右侧「单元格」面板回显)
75
+
76
+ | 中文 | `groupType`(落库 / cellType) |
77
+ |------|-------------------------------|
78
+ | 不设置 | `none`(或未设置;面板默认) |
79
+ | **年份** | **`year`** |
80
+ | 年月 | `yearmonth`(部分 UI 文案控件曾用 `yearAndMonth`,**落库一律 `yearmonth`**) |
81
+ | 月份 | `month` |
82
+ | 年月日 | `yearmonthday` |
83
+ | 年周 | `yearweekday` |
84
+ | 月周 | `monthweekday` |
85
+
86
+ ### 写入要求
87
+
88
+ 1. `fields[].groupType = "year"`(等)
89
+ 2. workbook `style.cellType.groupType` 同步(`fieldToCell` 必须带上,禁止只改 fields 行却重建时丢掉)
90
+ 3. 回读校验:`getReportDevInfo` → 目标格 `groupType` 等于预期
91
+ 4. **选中正确单元格再看回显**(例:D5=年月字段才看「日期分组」;在金额格上看必然是「不设置」)
92
+
93
+ ---
94
+
95
+ ## 四、其它常见配置项回显对照(检查清单)
96
+
97
+ | 设计器位置 | 配置项 | 回显字段 | 注意 |
98
+ |------------|--------|----------|------|
99
+ | 开始 · 数字格式 | 常规/货币/… | `style.formatter` + `formatterType`/`tag.formatterType` | §二 成对 |
100
+ | 单元格 · 日期分组 | 年份/年月/… | `groupType` | §三 |
101
+ | 单元格 · 显示 | 分组/列表/… | `displayType` | `Group` / `List` / … |
102
+ | 单元格 · 扩展 | 纵向/横向/不扩展 | `expandType` | |
103
+ | 单元格 · 汇总 | 求和/计数/… | `countType` | |
104
+ | 单元格 · 排序 | 升/降/无 | `orderType` | `asc`/`desc`/`no` |
105
+ | 开始 · 字体 | 字体名/字号/粗斜体/下划线 | `style.font`、`textDecoration` | §五 |
106
+ | 开始 · 颜色/填充/边框 | fore/back/border* | `style.*` | 禁止未点名整表刷 |
107
+ | 左父格筛选 | 筛选字段 | `leftFilterField` 完整 fieldKey | 见 cross-dataset 回显 |
108
+ | 查询条件 | 类型/默认值 | saveQueryItem 形态 | 见 query-condition 回显 |
109
+ | 数据集名 | 左侧列表名 | addDataset `sourceName`=`{表}(业务模块)` | 见 add-dataset |
110
+
111
+ **原则**:凡设计器有下拉/单选回显的项,必须以**平台枚举/目录全等值**写入;「看起来生效、面板不对」优先查是否写了近似值或缺了成对字段。
112
+
113
+ ---
114
+
115
+ ## 五、字体与字号(不支持时提示、不卡住)
116
+
117
+ 1. 写入前用 CLI `validate format` / 本指南目录校验字体、字号是否在设计器支持列表内。
118
+ 2. **不支持**(例:用户要 10 号但当前租户目录无 10)→ **明确提示用户**:「报表不支持 N 号字体,已按默认字号(通常 12)展示」→ **继续用默认字号落库**,禁止中断任务。
119
+ - **禁止变通**:不要手工换算 px(如 10pt→`13.3333px`)绕过目录。后端不校验会照存,但设计器无该项、工具栏回显异常,属于假装支持。
120
+ 3. 字体名优先使用设计器可选名(如 `微软雅黑`);未知字体 → 提示并回退默认字体,同样不卡住。
121
+
122
+ ---
123
+
124
+ ## 六、禁止整表全量设样式 / 边框(提示话术)
125
+
126
+ 用户要求「整表单元格样式 / 整表边框」时:
127
+
128
+ > **不支持**:报表不允许对**整个报表**一次性全量设置单元格样式或边框样式(易误伤未点名区域,且与「仅改用户点名项」冲突)。
129
+ > 请给出具体区域(如 `B3:H5` 或「表头行」),我再按区域设置。
130
+
131
+ 然后 **不要执行**整表 style/border patch。
132
+
133
+ ---
134
+
135
+ ## 七、CLI
136
+
137
+ ```bash
138
+ # 校验 / 规范化数字格式与日期分组(不落库)
139
+ e10-cli report validate format --map "货币"
140
+ # 「转换」面板(字段转换/HTML/条码/隐藏/文字方向)→ cell-transform-guide.md
141
+ e10-cli report validate transform --map "人员"
142
+ e10-cli report validate transform --map "部门全路径"
143
+ e10-cli report validate transform --list
144
+ ```
145
+ e10-cli report validate format --map "货币"
146
+ e10-cli report validate format --map "年份"
147
+ e10-cli report validate format --file cell.json
148
+
149
+ # 线上回读检查(formatterType 与 groupType)
150
+ e10-cli report verify format <reportId> [appId]
151
+ ```
152
+
153
+ 脚本:`e10-cli report verify format`。
154
+
155
+ ---
156
+
157
+ ## 八、Agent 检查清单
158
+
159
+ - [ ] 货币等格式:formatter **全等**目录 id,且 `formatterType`/`tag` = 对应 key1(货币=`huobi`)
160
+ - [ ] 日期分组:`groupType` 为 `year`/`yearmonth`/…;workbook cellType 未丢
161
+ - [ ] 重建 workbook 使用已修补的 `fieldToCell`(透传 groupType/formatterType)
162
+ - [ ] 未点名禁止整表刷样式/边框;不支持字号已提示并默认继续
163
+ - [ ] 回读 VERIFY:目标格 `formatter`+`formatterType`、`groupType` 与需求一致