weaver-e10-builder 1.2.5 → 1.5.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 (230) hide show
  1. package/assets/org-employee-template.xlsx +0 -0
  2. package/dist/commands/form-add-physical-field.d.ts +3 -0
  3. package/dist/commands/form-add-physical-field.d.ts.map +1 -0
  4. package/dist/commands/form-add-physical-field.js +125 -0
  5. package/dist/commands/form-add-physical-field.js.map +1 -0
  6. package/dist/commands/form-button.d.ts.map +1 -1
  7. package/dist/commands/form-button.js +28 -5
  8. package/dist/commands/form-button.js.map +1 -1
  9. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  10. package/dist/commands/form-field-linkage.js +27 -6
  11. package/dist/commands/form-field-linkage.js.map +1 -1
  12. package/dist/commands/form-formula-linkage.d.ts +3 -0
  13. package/dist/commands/form-formula-linkage.d.ts.map +1 -0
  14. package/dist/commands/form-formula-linkage.js +434 -0
  15. package/dist/commands/form-formula-linkage.js.map +1 -0
  16. package/dist/commands/form-formula.d.ts.map +1 -1
  17. package/dist/commands/form-formula.js +22 -3
  18. package/dist/commands/form-formula.js.map +1 -1
  19. package/dist/commands/form-list-click.d.ts.map +1 -1
  20. package/dist/commands/form-list-click.js +2 -1
  21. package/dist/commands/form-list-click.js.map +1 -1
  22. package/dist/commands/form-list-permission.js +1 -1
  23. package/dist/commands/form-list-permission.js.map +1 -1
  24. package/dist/commands/form-native.d.ts.map +1 -1
  25. package/dist/commands/form-native.js +11 -3
  26. package/dist/commands/form-native.js.map +1 -1
  27. package/dist/commands/form-physical-table.d.ts +3 -0
  28. package/dist/commands/form-physical-table.d.ts.map +1 -0
  29. package/dist/commands/form-physical-table.js +195 -0
  30. package/dist/commands/form-physical-table.js.map +1 -0
  31. package/dist/commands/form.d.ts.map +1 -1
  32. package/dist/commands/form.js +246 -549
  33. package/dist/commands/form.js.map +1 -1
  34. package/dist/commands/matrix.d.ts.map +1 -1
  35. package/dist/commands/matrix.js +175 -36
  36. package/dist/commands/matrix.js.map +1 -1
  37. package/dist/commands/org.d.ts +10 -0
  38. package/dist/commands/org.d.ts.map +1 -0
  39. package/dist/commands/org.js +402 -0
  40. package/dist/commands/org.js.map +1 -0
  41. package/dist/commands/role.d.ts.map +1 -1
  42. package/dist/commands/role.js +106 -62
  43. package/dist/commands/role.js.map +1 -1
  44. package/dist/commands/wf-form.d.ts.map +1 -1
  45. package/dist/commands/wf-form.js +501 -26
  46. package/dist/commands/wf-form.js.map +1 -1
  47. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  48. package/dist/commands/workflow-auth-resp.js +53 -5
  49. package/dist/commands/workflow-auth-resp.js.map +1 -1
  50. package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -1
  51. package/dist/commands/workflow-create-auth-resp.js +5 -1
  52. package/dist/commands/workflow-create-auth-resp.js.map +1 -1
  53. package/dist/commands/workflow-operator-sign.js +1 -1
  54. package/dist/commands/workflow-operator-sign.js.map +1 -1
  55. package/dist/commands/workflow.d.ts.map +1 -1
  56. package/dist/commands/workflow.js +78 -9
  57. package/dist/commands/workflow.js.map +1 -1
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/services/action-detail.d.ts.map +1 -1
  61. package/dist/services/action-detail.js +5 -4
  62. package/dist/services/action-detail.js.map +1 -1
  63. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  64. package/dist/services/actionflow/components/action_eb_update_compiler.js +22 -7
  65. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  66. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/approve_create.js +6 -3
  68. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  69. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/custom_set_form.js +35 -1
  71. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  72. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/custom_trigger.js +4 -1
  74. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  75. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  76. package/dist/services/actionflow/components/dml_execute.js +7 -3
  77. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  78. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  79. package/dist/services/actionflow/components/document_actions.js +7 -3
  80. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  81. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  82. package/dist/services/actionflow/components/hrm_actions.js +7 -3
  83. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  84. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/multiple_execution.js +14 -5
  86. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  87. package/dist/services/actionflow/components/output.js +1 -1
  88. package/dist/services/actionflow/components/output.js.map +1 -1
  89. package/dist/services/actionflow/components/send_message.js +2 -2
  90. package/dist/services/actionflow/components/send_message.js.map +1 -1
  91. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  92. package/dist/services/actionflow/components/workflow_actions.js +7 -3
  93. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  94. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  95. package/dist/services/actionflow/context_preflight.js +12 -2
  96. package/dist/services/actionflow/context_preflight.js.map +1 -1
  97. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  98. package/dist/services/actionflow/context_provider.js +21 -2
  99. package/dist/services/actionflow/context_provider.js.map +1 -1
  100. package/dist/services/actionflow/custom_trigger_context.d.ts +10 -0
  101. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -0
  102. package/dist/services/actionflow/custom_trigger_context.js +46 -0
  103. package/dist/services/actionflow/custom_trigger_context.js.map +1 -0
  104. package/dist/services/actionflow/filter_rules.js +2 -2
  105. package/dist/services/actionflow/filter_rules.js.map +1 -1
  106. package/dist/services/actionflow/formula_service.d.ts +9 -1
  107. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  108. package/dist/services/actionflow/formula_service.js +59 -21
  109. package/dist/services/actionflow/formula_service.js.map +1 -1
  110. package/dist/services/actionflow/id_generator.d.ts +2 -0
  111. package/dist/services/actionflow/id_generator.d.ts.map +1 -1
  112. package/dist/services/actionflow/id_generator.js +13 -0
  113. package/dist/services/actionflow/id_generator.js.map +1 -1
  114. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  115. package/dist/services/actionflow/preflight_service.js +6 -1
  116. package/dist/services/actionflow/preflight_service.js.map +1 -1
  117. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  118. package/dist/services/actionflow/workflow_compiler.js +89 -35
  119. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  120. package/dist/services/auth-resp-condition.d.ts +35 -0
  121. package/dist/services/auth-resp-condition.d.ts.map +1 -0
  122. package/dist/services/auth-resp-condition.js +111 -0
  123. package/dist/services/auth-resp-condition.js.map +1 -0
  124. package/dist/services/condition-rules.d.ts.map +1 -1
  125. package/dist/services/condition-rules.js +4 -1
  126. package/dist/services/condition-rules.js.map +1 -1
  127. package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
  128. package/dist/services/esb-interface/document-parser.js +62 -5
  129. package/dist/services/esb-interface/document-parser.js.map +1 -1
  130. package/dist/services/form-association.d.ts +19 -0
  131. package/dist/services/form-association.d.ts.map +1 -1
  132. package/dist/services/form-association.js +64 -0
  133. package/dist/services/form-association.js.map +1 -1
  134. package/dist/services/form-button-action.d.ts +7 -0
  135. package/dist/services/form-button-action.d.ts.map +1 -1
  136. package/dist/services/form-button-action.js +11 -1
  137. package/dist/services/form-button-action.js.map +1 -1
  138. package/dist/services/form-create.d.ts +4 -0
  139. package/dist/services/form-create.d.ts.map +1 -1
  140. package/dist/services/form-create.js +18 -12
  141. package/dist/services/form-create.js.map +1 -1
  142. package/dist/services/form-field-build.d.ts +71 -0
  143. package/dist/services/form-field-build.d.ts.map +1 -0
  144. package/dist/services/form-field-build.js +436 -0
  145. package/dist/services/form-field-build.js.map +1 -0
  146. package/dist/services/form-field-patch.d.ts +3 -1
  147. package/dist/services/form-field-patch.d.ts.map +1 -1
  148. package/dist/services/form-field-patch.js +23 -9
  149. package/dist/services/form-field-patch.js.map +1 -1
  150. package/dist/services/form-formula-linkage.d.ts +349 -0
  151. package/dist/services/form-formula-linkage.d.ts.map +1 -0
  152. package/dist/services/form-formula-linkage.js +546 -0
  153. package/dist/services/form-formula-linkage.js.map +1 -0
  154. package/dist/services/form-layout-insert.d.ts +84 -0
  155. package/dist/services/form-layout-insert.d.ts.map +1 -0
  156. package/dist/services/form-layout-insert.js +244 -0
  157. package/dist/services/form-layout-insert.js.map +1 -0
  158. package/dist/services/form-linkage-condition.d.ts +159 -0
  159. package/dist/services/form-linkage-condition.d.ts.map +1 -0
  160. package/dist/services/form-linkage-condition.js +307 -0
  161. package/dist/services/form-linkage-condition.js.map +1 -0
  162. package/dist/services/form-physical-table.d.ts +115 -0
  163. package/dist/services/form-physical-table.d.ts.map +1 -0
  164. package/dist/services/form-physical-table.js +153 -0
  165. package/dist/services/form-physical-table.js.map +1 -0
  166. package/dist/services/formula-detail.d.ts +98 -6
  167. package/dist/services/formula-detail.d.ts.map +1 -1
  168. package/dist/services/formula-detail.js +208 -26
  169. package/dist/services/formula-detail.js.map +1 -1
  170. package/dist/services/matrix-rows.d.ts +43 -0
  171. package/dist/services/matrix-rows.d.ts.map +1 -0
  172. package/dist/services/matrix-rows.js +104 -0
  173. package/dist/services/matrix-rows.js.map +1 -0
  174. package/dist/services/org-department.d.ts +114 -0
  175. package/dist/services/org-department.d.ts.map +1 -0
  176. package/dist/services/org-department.js +209 -0
  177. package/dist/services/org-department.js.map +1 -0
  178. package/dist/services/org-employee.d.ts +191 -0
  179. package/dist/services/org-employee.d.ts.map +1 -0
  180. package/dist/services/org-employee.js +400 -0
  181. package/dist/services/org-employee.js.map +1 -0
  182. package/dist/services/role-member.d.ts +99 -0
  183. package/dist/services/role-member.d.ts.map +1 -0
  184. package/dist/services/role-member.js +206 -0
  185. package/dist/services/role-member.js.map +1 -0
  186. package/dist/services/workflow-info.d.ts +83 -0
  187. package/dist/services/workflow-info.d.ts.map +1 -0
  188. package/dist/services/workflow-info.js +97 -0
  189. package/dist/services/workflow-info.js.map +1 -0
  190. package/dist/services/workflow-odoc-setting.d.ts +1 -1
  191. package/dist/services/workflow-odoc-setting.d.ts.map +1 -1
  192. package/dist/services/workflow-odoc-setting.js +15 -6
  193. package/dist/services/workflow-odoc-setting.js.map +1 -1
  194. package/dist/utils/column-name.d.ts +24 -0
  195. package/dist/utils/column-name.d.ts.map +1 -1
  196. package/dist/utils/column-name.js +16 -0
  197. package/dist/utils/column-name.js.map +1 -1
  198. package/ecodecmd/package.json +1 -2
  199. package/ecodecmd/src/loaddep.js +19 -9
  200. package/package.json +4 -4
  201. package/skill-docs/SKILL.md +13 -9
  202. package/skill-docs/_catalog.md +86 -81
  203. package/skill-docs/actionflows/SKILL.md +173 -170
  204. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  205. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +32 -0
  206. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  207. package/skill-docs/references/common/guide-plan-template.md +9 -3
  208. package/skill-docs/references/common/ref-cli-commands.md +54 -23
  209. package/skill-docs/references/esb-interface/guide-import.md +4 -1
  210. package/skill-docs/references/form/guide-create-form.md +13 -0
  211. package/skill-docs/references/form/guide-field-linkage.md +2 -0
  212. package/skill-docs/references/form/guide-form-association.md +1 -1
  213. package/skill-docs/references/form/guide-form-formula-functions.md +36 -0
  214. package/skill-docs/references/form/guide-form-layout-incremental.md +75 -0
  215. package/skill-docs/references/form/guide-form-linkage.md +62 -4
  216. package/skill-docs/references/form/guide-form-physical-table.md +146 -0
  217. package/skill-docs/references/form/guide-formula-linkage.md +250 -0
  218. package/skill-docs/references/form/ref-form-fields.md +6 -0
  219. package/skill-docs/references/hrm/guide-matrix.md +79 -16
  220. package/skill-docs/references/hrm/guide-org-employee.md +124 -0
  221. package/skill-docs/references/report/cell-config-echo-guide.md +1 -1
  222. package/skill-docs/references/report/dataset-query-filter-guide.md +3 -3
  223. package/skill-docs/references/report/date-range-query-reference.md +2 -2
  224. package/skill-docs/references/report/query-condition-api-guide.md +11 -11
  225. package/skill-docs/references/report/report-designer-feature-map.md +1 -1
  226. package/skill-docs/references/report/report-permission-guide.md +2 -2
  227. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +48 -22
  228. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +248 -0
  229. package/skill-docs/references/workflow/guide-workflow-odoc.md +23 -51
  230. package/skill-docs/references/workflow/guide-workflow.md +1 -1
@@ -0,0 +1,124 @@
1
+ # 组织架构 — 人员录入(Excel 批量导入)
2
+
3
+ > **平台自己解析 Excel,CLI 只负责把文件送上去、把解析结果取回来** —— CLI 不解析单元格,
4
+ > 也不想解析:字段映射、必填校验、主子表展开全在平台侧,CLI 自己解一遍只会跟平台不一致。
5
+
6
+ ## 命令
7
+
8
+ | 命令 | 说明 |
9
+ |------|------|
10
+ | `e10-cli org employee template [--out <路径>]` | 导出人员导入模板(xlsx)。默认输出到当前目录的 `人员导入模板.xlsx` |
11
+ | `e10-cli org employee import <file>` | 从 Excel 导入人员。`--dry-run` 只预览不导入;`--mode add\|update`(默认 `add`);`--find-by <字段>`(更新时按哪个字段认人,默认 `username`);`--review <n>` 预览行数(默认 100) |
12
+ | `e10-cli org employee task <taskId>` | 查某个导入任务的结果(没等、或等超时了,用这个补看) |
13
+
14
+ 导入默认**等结果**:打完 `已导入 N 条 / 失败 M 条` 才结束,**有失败行时退出码非 0**,脚本可以直接判。
15
+
16
+ | 选项 | 说明 |
17
+ |---|---|
18
+ | `--no-wait` | 提交后立刻返回。⚠ 不等就等于不校验 —— **「已提交」不代表导入成功**,要自己再用 `task` 查 |
19
+ | `--wait-timeout <ms>` | 等结果的超时(默认 60000)。超时不编成功,如实报「仍在处理中」并给 taskId |
20
+ | `--error-file <路径>` | 失败数据的保存路径。默认与源文件同目录、同名 + `.错误数据.xlsx` |
21
+ | `--no-error-file` | 不保存失败数据文件(原因仍会打出来) |
22
+
23
+ ## ⚠ 先 `--dry-run`,再真导
24
+
25
+ 批量写组织数据是**外部可见且不好撤销**的操作。导入前先干跑一次:
26
+
27
+ ```bash
28
+ e10-cli org employee import 人员.xlsx --dry-run
29
+ ```
30
+
31
+ 干跑会打出**平台解析出来的**工作表名、列数、行数和前几行内容 —— 拿它跟你的原表对一遍,
32
+ 确认列没串、行数对得上(尤其是**模板自带的示例行要删掉**),再去掉 `--dry-run` 真导。
33
+
34
+ `--dry-run` 停在「预览」这一步,**这一步之前不会往组织里写任何东西**。
35
+
36
+ ## 链路(七步,每步产出喂给下一步)
37
+
38
+ | | 端点 | 产出 |
39
+ |---|---|---|
40
+ | ⓪ | `POST /api/bs/hrm/emp/edit/importParam` | `bizId` + moduleName / functionName / handlerName / serviceName / dataType |
41
+ | ① | `POST /api/file/preUploadCheck`(multipart) | 预上传 id |
42
+ | ② | `POST /api/file/module/upload`(multipart) | `fileId` |
43
+ | ③ | `POST /api/ebatch/checkFilePassword` | — |
44
+ | ④ | `POST /api/ebatch/uploadFileId` | `taskId` |
45
+ | ⑤ | `POST /api/ebatch/getExcelData` | 预览行(**不落库**) |
46
+ | ⑥ | `POST /api/ebatch/importExcelData` | 真正执行 |
47
+ | ⑦ | `POST /api/ebatch/getByTaskId` | **导入结果**:条数 / 失败原因 / 错误文件 |
48
+
49
+ - **⓪ 把 ④ 要的元数据全给了** —— moduleName / functionName / handlerName / serviceName / dataType
50
+ 都不是 CLI 硬编码的,`bizId` 更是每次调用现生成。
51
+ - **①② 的 multipart 字段逐字相同**,② 只多 `preUploadId` 与 `uploadType=common`。
52
+ - ⑤⑥⑦ 的参数全在 **query string**,body 为空。
53
+
54
+ ## 导入结果(⑥ 只是「提交了」,结论在 ⑦)
55
+
56
+ **⑥ 的响应体只有一个 `true`** —— 条数、失败原因、错误文件**全都不在里面**。只发 ⑥ 就报成功,
57
+ 会让**整批失败也显示成「导入已提交」**,所以命令发完 ⑥ 会去轮询 ⑦。
58
+
59
+ ```json
60
+ {"status": -1,
61
+ "msg": "存在错误数据,下载错误文件查看",
62
+ "callbackData": "{\"msg\":\"导入失败\",\"errorFileId\":\"...\",\"module\":\"hrm\",\"successCount\":0,\"errorCount\":\"1\"}"}
63
+ ```
64
+
65
+ - **`callbackData` 是一个 JSON 字符串**,要二次解析 —— 条数和错误文件 id 都在里面。
66
+ - ⚠ **`successCount` 是数字、`errorCount` 是字符串**(`1` / `"0"`),同一段 JSON 里类型不一致,两边都得转一遍。
67
+ - ⚠ **`status: 0` 不是「成功」** —— 它是个**中途值**:同一个任务先读到 `status: 0` + `msg: 成功`、
68
+ `callbackData` 还是空的,几秒后才落成 `-1` + 失败 1 条。**判完成的依据是 `callbackData` 能不能解出来,不是 `status`**;
69
+ 按 `status` 收工就会把失败读成成功。
70
+ - `status: -1` = 存在错误数据,可以直接当终态(命令也这么处理)。
71
+
72
+ ### 失败原因在**单元格批注**里,不在任何一列
73
+
74
+ 导出的失败数据文件里**只有出错的那几行,没有「原因」列** —— 用表格软件打开看值,看不出为什么失败。
75
+ 原因挂在**出错单元格的批注(Excel comment)**上,形态是:
76
+
77
+ | 单元格 | 值 | 批注 |
78
+ |---|---|---|
79
+ | A2 | 人员A | **姓名 重复** |
80
+
81
+ 所以 `import` / `task` 会把批注读出来直接打给你:
82
+
83
+ ```
84
+ 导入结果: 人员A.xlsx
85
+ 已导入 0 条
86
+ 失败 1 条
87
+ 平台说明 存在错误数据,下载错误文件查看
88
+ 失败原因
89
+ 第 2 行 · 姓名(人员A): 姓名 重复
90
+ 失败数据 1323916251655815168 → 人员A.错误数据.xlsx
91
+ ```
92
+
93
+ ### 失败数据怎么下来的
94
+
95
+ ```
96
+ GET /api/file/remotedownload/<fileId>/token/true?authModule=ebatch
97
+ → 302 → 对象存储的签名地址(文件真身在这边,文件名也在这一步给)
98
+ ```
99
+
100
+ 下载按**两步**取:先带鉴权拿到 302,再**不带任何鉴权头**去对象存储取字节 ——
101
+ 会话凭证不跟着跳转发到第三方域名上。
102
+
103
+ ## 几个坑
104
+
105
+ - **取 id 的层级三步三样**:① 在 `data.preUploadId`(**有的环境**是 `data.uploadModuleDto.fileid`)、
106
+ ② 在 `data.fileid`(**小写 d**)、④ 在 `data.data.taskId`(多一层)。照着别的接口的写法套会静默取到空。
107
+ - **① 的返回形状随环境变**:有的环境 `preUploadCheck` 只回 `data.preUploadId`
108
+ (`data` 下就 `preUploadId` / `uploadType` / `permissionType` 三个键,**没有** `uploadModuleDto`)。
109
+ 两种写法语义相同,命令都认;一个都没有才报错。只认其中一种的话,那条环境整条导入链**第①步就断**。
110
+ - **⑤ 的参数是 `rerviewNum`** —— 平台把 review 拼错了,别"顺手改正"成 `reviewNum`。
111
+ - **`weaTable[0].total` 是 `-1`**,不能拿来当行数;行数看 `data` 数组长度。
112
+ - **`rerviewNum` 只是一次取多少行**,预览到的未必是全部 —— 行数刚好等于上限时命令会提示。
113
+ - **⚠⚠ 分部名写错不会报错 —— 平台会静默新建一个分部,把人放进去。**
114
+ 「分部(必填)」填一个机构里不存在的名字(例如把「泛微北京」写成「泛微北金」),导入**照样回成功**,
115
+ 然后机构里会多出一个同名分部(父级 = 操作者所在组织),人落在里面。**没有报错、没有警告**,
116
+ `--dry-run` 的预览也看不出来 —— 预览只是把单元格原样回显,**不做任何校验**。
117
+ 所以:**分部名必须是机构里已有的名字**,导之前自己核一遍 —— 一次手误就是一条脏组织数据 + 一个错位的人。
118
+ - **模板里的示例行**(`user001`~`user008`)是平台放的演示数据,**导入前务必删掉**,否则会被当成真人建进去。
119
+ - **`importType` 在 ④ 的报文里出现两次**:顶层是空串、真正生效的在 `uploadSet.customObj` 里。
120
+
121
+ ## 环境差异
122
+
123
+ `emp/edit/importParam` 是判定「这个环境能不能导入人员」的探针 —— 返回里没有 `bizId` / `functionName`
124
+ 就说明该环境不支持,命令会直接报错,不会带着半截参数往下走。
@@ -28,7 +28,7 @@
28
28
  **指纹示例**:`formatterType[0] + '|' + formatter + '|' + font + '|' + backColor`
29
29
  相同指纹 → 直接复用已通过的 style 对象引用(或深拷贝),**不再**走 JSON 样例确认。
30
30
 
31
- ## 二、数字格式目录(工具栏回显金标准)
31
+ ## 二、数字格式目录(工具栏回显参照)
32
32
 
33
33
  > 来源:设计器静态资源 `main.js` 中格式下拉 `g()` 目录。`¥` 为全角 `U+FFE5`(JSON 中写 `\uFFE5`)。
34
34
 
@@ -1,7 +1,7 @@
1
1
  # 数据集筛选(queryInfoSave)API 写入规范
2
2
 
3
3
  > **适用场景**:设计器左侧「数据集 → 筛选条件」、行级数据权限、整表预过滤。
4
- > **金标准报表**:`1304979556231593985`(EBU 经营数据统计)
4
+ > **参考报表**:`1304979556231593985`(EBU 经营数据统计)
5
5
  > **代码实现**:`本地工作目录` → `build_*_dataset_query_filter()` / `ensure_*_dataset_filter()`
6
6
  > **执行**:`python 本地工作目录`
7
7
 
@@ -160,7 +160,7 @@ def _build_compare_form_field(origin_field):
160
160
 
161
161
  ---
162
162
 
163
- ## 七、EBU 金标准示例
163
+ ## 七、EBU 参考示例
164
164
 
165
165
  报表 `1304979556231593985`
166
166
 
@@ -186,7 +186,7 @@ rootStr:`( 负责人姓名 等于 '{lastname}' ) AND ( 创建者 等于 '{user
186
186
 
187
187
  rootStr:`(( 核算机构 不等于合同种类 ) 或 ( 创建时间 开头包含 '{thisyear}' ))`
188
188
 
189
- ### 7.3 历史验证过的其他写法(按需)
189
+ ### 7.3 其他可用写法(按需)
190
190
 
191
191
  | 场景 | func | value |
192
192
  |------|------|-------|
@@ -1,6 +1,6 @@
1
1
  # 日期区间查询条件选项参考(已验证样例)
2
2
 
3
- > **金标准来源**:报表 `1304979556231593985`(EBU 经营数据统计)· 查询条件「入职时间」
3
+ > **来源**:报表 `1304979556231593985`(EBU 经营数据统计)· 查询条件「入职时间」
4
4
  > **完整规范**:`query-condition-api-guide.md`(条件字段形态、系统参数默认值、验证清单)
5
5
  > **filterParam 快照**:`outputs/join_date_filterparam.json`(运行 `本地工作目录` 可重新导出)
6
6
  > **代码实现**:`本地工作目录` → `_default_date_filter_param()`
@@ -97,6 +97,6 @@
97
97
  | 文件 | 用途 |
98
98
  |------|------|
99
99
  | `query-condition-api-guide.md` | 查询条件总规范 |
100
- | `outputs/join_date_filterparam.json` | filterParam 金标准 |
100
+ | `outputs/join_date_filterparam.json` | filterParam 参考样本 |
101
101
  | `本地工作目录` | 生成/修复 |
102
102
  | `本地工作目录` | 扫描导出 |
@@ -1,7 +1,7 @@
1
1
  # 查询条件 API 写入规范
2
2
 
3
3
  > **适用场景**:通过 `saveQueryItem` / `saveQueryConfig` API 或脚本添加、修复报表查询条件。
4
- > **金标准报表**:`1304979556231593985`(EBU 经营数据统计)
4
+ > **参考报表**:`1304979556231593985`(EBU 经营数据统计)
5
5
  > **代码实现**:`本地工作目录` → `ensure_query_conditions()`;执行 `python 本地工作目录`
6
6
  > **核心规则**:数据集合选取后,**选择类型未特别指定 SQL 时,一律默认为「条件字段」**。
7
7
 
@@ -43,7 +43,7 @@
43
43
 
44
44
  ## 二、条件字段标准形态(saveQueryItem)
45
45
 
46
- 设计器 save 后回读的金标准结构:
46
+ 设计器 save 后回读的基准结构:
47
47
 
48
48
  | 字段 | 条件字段正确值 |
49
49
  |------|----------------|
@@ -118,7 +118,7 @@ await saveQueryItem({ reportId, queryItems: '{}' }); // conditions 缺失 → 50
118
118
 
119
119
  ### 2.1 显示方式(强制 · 不可不选)
120
120
 
121
- > **✅ 终局定案(2026-09-11 · 以「设计器手工配置的真实条件」为金标准反推)**
121
+ > **✅ 终局定案(2026-09-11 · 以「设计器手工配置的真实条件」为基准反推)**
122
122
  >
123
123
  > 条件级「显示方式」的正确落库值是 **JSON 数组字符串**:
124
124
  >
@@ -278,7 +278,7 @@ Content-Disposition: form-data; name="queryItems"
278
278
  | 条件级与报表级是两个独立字段,互不影响 | ❌ 错。`updateQueryType` 用 `queryType` **批量覆盖所有条件**(§2.1.3 真正根因) |
279
279
  | `updateQueryType` 只改报表级「高级搜索显示形式」 | ❌ 错。它会把入参写进每条条件 → 长码一键摧毁全表回显 |
280
280
 
281
- **旧结论怎么来的 / 为什么错**:早期用 JS 合成事件点击条件 tag,实际点到了**左侧字段面板**的「显示方式」(那是字段属性,非条件显示方式),读取勾选态得到假信号;且未把「人工配置的条件」作为金标准对照。**修复方式**:改用 **CDP `Input.dispatchMouseEvent` 真实鼠标事件**点条件 tag,读「编辑查询条件」弹窗,并以人工条件为参照。
281
+ **旧结论怎么来的 / 为什么错**:早期用 JS 合成事件点击条件 tag,实际点到了**左侧字段面板**的「显示方式」(那是字段属性,非条件显示方式),读取勾选态得到假信号;且未把「人工配置的条件」作为基准对照。**修复方式**:改用 **CDP `Input.dispatchMouseEvent` 真实鼠标事件**点条件 tag,读「编辑查询条件」弹窗,并以人工条件为参照。
282
282
 
283
283
  **真正根因的发现路径**:给 `save` 加「落库后回读自检」时,发现**刚写入的数组被回读成长码** → 隔离实验证明只有 `saveQueryItem` 时数组完好,一旦再调 `updateQueryType` 即被批量覆盖 → 穷举入参证明 `updateQueryType` 是「全表条件 `queryType` 批量写」。**AI 自检回读是抓到它的关键手段**,务必保留。
284
284
 
@@ -297,7 +297,7 @@ e10-cli report query fix-echo <reportId> --app-id <appId> # 长码/空值 →
297
297
  e10-cli report query verify <reportId> --app-id <appId> --fix # 体检 Q1~Q10 + 幂等修复
298
298
  ```
299
299
 
300
- **设计器真实保存形态(金标准,从 `saveQueryItem` 实际请求)**
300
+ **设计器真实保存形态(基准,从 `saveQueryItem` 实际请求)**
301
301
 
302
302
  ```json
303
303
  {
@@ -339,7 +339,7 @@ e10-cli report query verify <reportId> --app-id <appId> --fix # 体检 Q1~Q10 +
339
339
  | 唯一功能读点 | `SheetServiceImpl`:取**第一条**高级搜索条件的 `advancedSearchType`,`=='openCondition'` → `isOpenCondition=true` |
340
340
  | 页面效果 | `isOpenCondition=true` → 报表页查询区**展开铺开**(「展开条件」);否则 → **默认样式**(右上角搜索图标,点击才展开) |
341
341
  | 设计器入口 | 报表级「查询设置」弹窗的 **高级搜索显示形式:默认样式 / 展开条件** |
342
- | 人工条件(金标准) | **该键不存在**(`undefined`),平台不主动写 |
342
+ | 人工条件(基准) | **该键不存在**(`undefined`),平台不主动写 |
343
343
 
344
344
  **硬规则**
345
345
 
@@ -438,7 +438,7 @@ e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-
438
438
 
439
439
  > **事故**:同报表查询条件「销售部门」绑定字段 `originFieldType=Department`,但设计器关联类型显示为空/默认**人员**。**定案根因:`browserType` 写成了简写 `[{"id":"HrmDepartmentComInfo"}]`,缺少 `name`/`type` 等字段 → 前端无法解析显示名 → 退回默认「人员」标签页。**
440
440
 
441
- **设计器真实形态(金标准)**:`browserType` 是 **全字段富对象数组**,关键字段 `name`(显示名)、`type`(`department`/`employee`)、`module`、`groupId`、`tenantKey`、`dataId`、`labelId`、`id`。**`browserTypeStr` 才是落库判据**(服务端存 `[{"id":"HrmDepartmentComInfo"}]` 形式的字符串)。
441
+ **设计器真实形态(基准)**:`browserType` 是 **全字段富对象数组**,关键字段 `name`(显示名)、`type`(`department`/`employee`)、`module`、`groupId`、`tenantKey`、`dataId`、`labelId`、`id`。**`browserTypeStr` 才是落库判据**(服务端存 `[{"id":"HrmDepartmentComInfo"}]` 形式的字符串)。
442
442
 
443
443
  | 字段 `originFieldType` | `displayType` | `browserTypeStr`(落库) | 设计器关联类型 |
444
444
  |------------------------|---------------|--------------------------|----------------|
@@ -490,7 +490,7 @@ queryType 以 "[" 开头 → 数组 → UI 勾选正常 ✅
490
490
  queryType 是其它字符串 → 退化 → UI 不勾选 ❌(改写为 '["advance"]')
491
491
  ```
492
492
 
493
- > 复现路径存档:前端 bundle 经 CDP `Debugger.getScriptSource` 导出至 `本地工作目录`
493
+ > 来源:前端 bundle 经 CDP `Debugger.getScriptSource` 导出至 `本地工作目录`
494
494
  > (`route_DatasetList.js` 179879B / `route_ReportDesigner.js` 702877B / `lib.js` 661658B);
495
495
  > UI 回显用 `_q_real2.py`(CDP `Input.dispatchMouseEvent` 真实鼠标点击条件 tag + 读「编辑查询条件」弹窗 checkbox)。
496
496
 
@@ -579,7 +579,7 @@ POST /api/bs/edc/report/saveQueryItem (multipart: reportId + queryItems 单对
579
579
  | 3 | `conditions` | **非 null 数组**,至少 1 个 `{dataSetId, fieldId, relation}` |
580
580
  | 4 | Header | `ebBusinessId` = 报表所属 **appId**;`eteamsid` + Cookie |
581
581
  | 5 | 多条条件 | **多次** POST,每次一条;不要一次塞数组 |
582
- | 6 | 对照金标准 | 先 `getQueryItem` 拉已有报表一条,改 `text`/`fieldId` 再 save |
582
+ | 6 | 对照基准 | 先 `getQueryItem` 拉已有报表一条,改 `text`/`fieldId` 再 save |
583
583
 
584
584
  **不要**:为排 500 去开浏览器扫页(浪费);先按上表自检。仍 500 时看响应 `msg` 是否权限/报表不存在,再问用户。
585
585
 
@@ -803,7 +803,7 @@ function inferQueryDisplay(text, fieldMeta) {
803
803
 
804
804
  ## 七、数据集筛选(设计器左侧 · 行级权限)
805
805
 
806
- > **完整规范已独立成文**:`dataset-query-filter-guide.md`(func 对照、字段对比、日期 format、AND/OR、EBU 金标准、验证清单)。
806
+ > **完整规范已独立成文**:`dataset-query-filter-guide.md`(func 对照、字段对比、日期 format、AND/OR、EBU 参考样本、验证清单)。
807
807
  > 本节仅保留与高级搜索的边界说明。
808
808
 
809
809
  **与高级搜索不同**:设计器左侧数据集右键「筛选条件」走 **`queryInfoSave` / `queryInfoGet`**(`conditionData` + `otherData`),**不是** `saveQueryItem`。
@@ -886,5 +886,5 @@ function inferQueryDisplay(text, fieldMeta) {
886
886
  | `report-building-guide.md` §6 | 设计器操作步骤 |
887
887
  | `report-config-schema.md` §五 | Schema 摘要 |
888
888
  | `SKILL.md` §6.3–§6.4 | Agent 步骤入口 |
889
- | `outputs/join_date_filterparam.json` | filterParam 金标准 |
889
+ | `outputs/join_date_filterparam.json` | filterParam 参考样本 |
890
890
  | `本地工作目录` | 生成/修复实现 |
@@ -488,7 +488,7 @@ pageNo=1&pageSize=10&dateRange=["",""]&sheetId=<reportId>&versionName=&creators=
488
488
  | `designKey` | 设计器会话 UUID |
489
489
  | `pageSetting` | JSON 数组,含 `split`(分页/分栏)、`scrollPage` 等 |
490
490
 
491
- ### 11.4 复现实际请求
491
+ ### 11.4 对照实际请求
492
492
 
493
493
  ```bash
494
494
  cd 本地工作目录
@@ -75,7 +75,7 @@ flowchart TB
75
75
  | 外部联系人 | `external` | `obj_id_external` | `external` | `7` | 外部人 ID | 须 browser 查真实 ID |
76
76
  | 所有外部人 | `allExternal` | (无) | `allExternal` | `12` | `0` | 无对象选择框 |
77
77
 
78
- > **targetType 金标准**(`edc_report_ph_report_view` 的 `org_config.typeEnum`,weaver-edcreportd SQL):
78
+ > **targetType 判断依据**(`edc_report_ph_report_view` 的 `org_config.typeEnum`,weaver-edcreportd SQL):
79
79
  > 人员 `1|17` · 部门 `2|3|4|…` · 分部 `5|6|7|…` · **角色 `10`** · **群组(channel) `14|1411`** · 岗位 `12|13|…` · 外部 `110` · 所有人 `11`
80
80
  > 写入前务必 `table/list/new` 回读;**禁止**把角色写成 `targetType:3`、群组写成 `targetType:5`(会分别落库为部门/分部)。
81
81
  > **安全级别**:通用项均可带 `seclevel: {"min": -999, "max": 999}`(UI「安全级别」列)。
@@ -272,7 +272,7 @@ Content-Type: application/json
272
272
  ]
273
273
  ```
274
274
 
275
- > **矩阵字段 JSON 结构**因「矩阵表 vs e-Builder 表单」及租户配置而异,**必须以设计器 Network 实际请求为金标准**;Skill 禁止臆造 `matrixConditionData` / `matrixValueRelation` 内部键名。
275
+ > **矩阵字段 JSON 结构**因「矩阵表 vs e-Builder 表单」及租户配置而异,**必须以设计器 Network 实际请求为准**;Skill 禁止臆造 `matrixConditionData` / `matrixValueRelation` 内部键名。
276
276
 
277
277
  ---
278
278
 
@@ -4,15 +4,15 @@
4
4
 
5
5
  ## 一、选择方式
6
6
 
7
- - 需要独立维护、供多个流程复用:先创建独立权责表,再由流程引用并映射变量。
8
- - 只服务于当前流程,且表单已经确定:创建权责表方式流程时选择新建权责表,条件直接引用表单字段。
9
- - 需要插入另一张权责表的审批路径中:创建中间片段型权责表,首尾位置使用审批等中间节点类型,再由宿主权责表按分支引用。
7
+ - **默认选择随流程新建权责表**:创建权责表方式流程时使用 `--new-table`,条件直接引用当前流程表单字段。这条路径配置更直接,不需要额外维护变量映射,适用于一般权责表流程。
8
+ - 只有权责规则需要被多个流程复用时,才先创建独立权责表,再使用 `--reuse-table` 引用并映射变量。
9
+ - 需要多重嵌套权责表时,独立创建可复用的中间片段型权责表,首尾位置使用审批、确认等中间节点类型,再由宿主权责表按分支引用。
10
10
  - 普通顺序、分支流程继续使用流程图方式;只有需求明确要求权责表时才使用本指南。
11
11
 
12
12
  ## 二、独立权责表搭建顺序
13
13
 
14
14
  1. `workflow auth-resp create` 创建权责表并记录 `authRespId`。
15
- 2. `workflow auth-resp variable add` 创建条件需要的变量;条件只能引用已创建变量。变量还必须在某个分支条件里**真正被引用**,否则复用该权责表建流程时它不会进变量映射列表(见 §五)。
15
+ 2. 条件可以直接使用系统字段;需要表达业务表单字段时,先用 `workflow auth-resp variable add` 创建变量。变量必须在某个分支条件里被引用,复用到流程后再映射为实际表单字段(见 §五)。
16
16
  3. 建立发起、结束设置和多个中间审批节点。中间节点统一作为列创建,操作者规则沿用工作流节点操作者规则。
17
17
  4. 为每个有效分支填写分支场景说明并创建条件。
18
18
  5. 每个分支从已有中间节点中选择自己的路径,通过顺序号表达串行或并行。
@@ -46,18 +46,8 @@ e10-cli workflow auth-resp configure <authRespId> --config @auth-resp.json
46
46
  "scenario": "合同金额不超过5万元",
47
47
  "condition": {
48
48
  "relation": "AND",
49
- "childrens": [
50
- {
51
- "selectType": "4",
52
- "formField": [{ "id": "-自定义稳定ID", "name": "合同金额", "fieldType": "NumberComponent", "variable": true, "varFirstType": "wf_number" }],
53
- "NumberCompareOptionLeft": "4",
54
- "NumberValueOptionLeft": "1",
55
- "NumberTextValueLeft1": 50000,
56
- "elementValue1Id": "",
57
- "elementValue2Id": "",
58
- "expressionBaseId": "",
59
- "dataValueId": ""
60
- }
49
+ "rules": [
50
+ { "source": "form", "field": "合同金额", "operator": "小于等于", "value": 50000 }
61
51
  ]
62
52
  },
63
53
  "path": [
@@ -69,13 +59,28 @@ e10-cli workflow auth-resp configure <authRespId> --config @auth-resp.json
69
59
  }
70
60
  ```
71
61
 
72
- 流程内新建权责表时,`workflowId` 写真实流程 ID,条件 `formField` 使用该流程实际表单字段;独立权责表使用 `workflowId=-99999999`,条件引用 `variables` 中的变量。操作者类型直接支持 `all`、`user`、`initiator`;其他已有操作者类型使用 `raw` 并提供平台 `itemDatas`,结构与普通流程操作者一致。
62
+ 流程内新建权责表时,`workflowId` 写真实流程 ID,`source=form` 直接解析当前流程表单字段;独立权责表使用 `workflowId=-99999999`,`source=form` 会解析为 `variables` 中的同名变量。系统字段统一使用 `source=system`。复杂条件也可直接提供平台原始 `childrens`。操作者类型直接支持 `all`、`user`、`initiator`;其他已有操作者类型使用 `raw` 并提供平台 `itemDatas`,结构与普通流程操作者一致。
63
+
64
+ 条件字段查询:
65
+
66
+ ```bash
67
+ e10-cli workflow auth-resp condition-fields <authRespId> --source-id <分支sourceId> --workflow-id <流程ID|-99999999>
68
+ ```
69
+
70
+ | 业务来源 | 随流程新建权责表 | 独立或复用权责表 |
71
+ |---|---|---|
72
+ | 系统字段 `system` | 直接选择并保存 | 直接选择并保存 |
73
+ | 表单字段 `form` | 直接选择当前流程实际表单字段 | 选择权责表变量作为表单字段的抽象 |
74
+ | 变量 `variable` | 一般不需要 | 创建后用于条件,复用流程时映射到实际表单字段 |
75
+
76
+ 因此两种搭建方式都可以配置系统字段和表单字段条件;区别是独立权责表尚未绑定具体表单,配置时以变量表示表单字段,并在流程引用该权责表后完成变量映射。
73
77
 
74
78
  `usage=workflow` 表示完整流转,首尾默认使用发起和结束节点。`usage=fragment` 表示供其他权责表路径引用的中间片段,`start.type` 与 `end.type` 均配置为 `approve`、`confirm` 等中间节点类型;首尾位置不能使用 `start` 或 `end`。
75
79
 
76
80
  ```bash
77
81
  e10-cli workflow auth-resp create "合同分级审批权责表"
78
82
  e10-cli workflow auth-resp variable add <authRespId> "合同金额" wf_number
83
+ e10-cli workflow auth-resp variable add <authRespId> "出行人" wf_browser --second-type wf_sub_company --detail
79
84
  e10-cli workflow auth-resp variable list <authRespId>
80
85
  e10-cli workflow auth-resp read <authRespId> --base-id <baseId> > design.json
81
86
  e10-cli workflow auth-resp save-design <authRespId> --config @design.json
@@ -91,6 +96,25 @@ e10-cli workflow auth-resp save-design <authRespId> --config @design.json
91
96
  | `wf_browser` | 浏览 | `--second-type` |
92
97
  | `wf_browser_relate` | 关联浏览 | `--relate-browser @browser.json` |
93
98
 
99
+ 变量既可以属于主表,也可以通过 `--detail` 创建为明细变量。明细变量用于表达未来流程表单中的某个明细字段,分支条件必须同时指定行量词:
100
+
101
+ ```json
102
+ {
103
+ "condition": {
104
+ "relation": "AND",
105
+ "rules": [
106
+ { "source": "form", "field": "出行人", "operator": "等于", "value": [{ "id": "分部ID", "name": "泛微西安" }], "detail": "any" },
107
+ { "source": "form", "field": "出行人", "operator": "不为空", "detail": "all" }
108
+ ]
109
+ }
110
+ }
111
+ ```
112
+
113
+ - `detail: "any"`:任一行满足该条件,保存为 `detailOption=1`。
114
+ - `detail: "all"`:所有行满足该条件,保存为 `detailOption=2`。
115
+ - 字符串规则也可在末尾写 `:任一` 或 `:所有`。
116
+ - 独立权责表中的 `source=form` 会按变量解析;明细变量被分支条件引用后,复用到流程时映射至类型匹配的实际明细字段。
117
+
94
118
  ## 三、表格设计结构
95
119
 
96
120
  `read` 返回的设计以 `columns` 和 `rows` 为核心:
@@ -103,7 +127,7 @@ e10-cli workflow auth-resp save-design <authRespId> --config @design.json
103
127
 
104
128
  每个有效分支必须有非空 `eventColumn` 和 `conditionKey`。界面用于继续录入的空白占位行不进入 CLI 保存数据。
105
129
 
106
- 操作者和条件的业务规则与普通工作流一致,具体语法读取 [流程指南](guide-workflow.md) 和 [流程条件指南](guide-workflow-condition.md)。权责表条件的上下文标识由权责表命令负责,不把独立权责表变量当作表单字段创建。
130
+ 操作者和条件的业务规则与普通工作流一致,具体语法读取 [流程指南](guide-workflow.md) 和 [流程条件指南](guide-workflow-condition.md)。权责表命令自动补充 `belongScene=3`、权责表 ID、分支 ID 等上下文;独立权责表使用变量表达未来需要映射的表单字段。
107
131
 
108
132
  ## 四、在分支中引用权责表
109
133
 
@@ -141,7 +165,9 @@ e10-cli workflow auth-resp reference remove <宿主sourceId> <被引用sourceId>
141
165
 
142
166
  权责表是流程的搭建方式,流程表单来源仍按原生工作流程规则选择:自建流程表单、绑定已有流程表单或绑定 EB 表单。基础表单参数写入 `base.json`,其字段与 `workflow create-workflow` 的创建结构一致。
143
167
 
144
- ### 随流程新建权责表
168
+ 一般需求默认使用“随流程新建权责表”;仅在需求明确要求复用已有权责规则,或需要以独立中间型权责表组成多重嵌套结构时,使用“复用已有权责表”。
169
+
170
+ ### 默认:随流程新建权责表
145
171
 
146
172
  ```bash
147
173
  e10-cli workflow auth-resp-flow create "合同审批流程" --base @base.json --new-table "合同审批权责表"
@@ -149,7 +175,7 @@ e10-cli workflow auth-resp-flow create "合同审批流程" --base @base.json --
149
175
 
150
176
  服务端在创建流程时生成并返回 `workflowId`、`formId` 和 `newAuthRespId`。这种方式已确定实际表单,分支条件直接选择表单字段,不做变量映射;发起和结束位置直接设置操作者。
151
177
 
152
- ### 复用已有权责表
178
+ ### 按需:复用已有权责表
153
179
 
154
180
  ```bash
155
181
  e10-cli workflow auth-resp-flow create "合同审批流程" --base @base.json --reuse-table <authRespId> --mappings @mappings.json
@@ -163,7 +189,7 @@ e10-cli workflow auth-resp-flow mapping-read <workflowId>
163
189
  e10-cli workflow auth-resp-flow mapping-save <workflowId> --mappings @mappings.json
164
190
  ```
165
191
 
166
- 复用模式把独立权责表变量映射为当前流程表单字段。先用 `mapping-read` 取得平台返回的变量项和可用字段结构,在对应项补全 `fieldBrowser` 后整体保存;变量类型必须与表单字段匹配。
192
+ 复用模式把独立权责表变量映射为当前流程表单字段。先用 `mapping-read` 取得平台返回的变量项和可用字段结构,在对应项补全 `fieldBrowser` 后整体保存;变量类型必须与表单字段匹配,明细变量必须选择实际表单的明细字段。
167
193
 
168
194
  > **前置条件:只有「已被分支条件引用」的变量才会出现在映射列表里。**
169
195
  >
@@ -191,7 +217,7 @@ e10-cli workflow auth-resp-flow mapping-read <workflowId>
191
217
  e10-cli workflow auth-resp-flow mapping-save <workflowId> --mappings @mappings.json
192
218
  ```
193
219
 
194
- 映射项保留变量的 `varId`、`varName`、`varType` 和筛选参数,在 `fieldBrowser` 中写入实际字段;变量类型、主表或明细位置应与字段匹配。流程内新建权责表并直接使用表单字段时无需变量映射。
220
+ 映射项保留变量的 `varId`、`varName`、`varType`、主表/明细位置和筛选参数,在 `fieldBrowser` 中写入实际字段;主表变量映射主表字段,明细变量映射明细字段,且变量类型与字段类型保持匹配。条件中的“任一行/所有行”属于权责表条件本身,映射后继续生效。流程内新建权责表并直接使用表单字段时无需变量映射。
195
221
 
196
222
  ## 七、Plan 记录
197
223