weaver-e10-builder 1.5.2 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/org-employee-template.xlsx +0 -0
- package/dist/commands/form-add-detail-table.js +3 -3
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-add-physical-field.d.ts.map +1 -1
- package/dist/commands/form-add-physical-field.js +3 -2
- package/dist/commands/form-add-physical-field.js.map +1 -1
- package/dist/commands/form-data.d.ts.map +1 -1
- package/dist/commands/form-data.js +125 -0
- package/dist/commands/form-data.js.map +1 -1
- package/dist/commands/form-ebuilder-columns.d.ts.map +1 -1
- package/dist/commands/form-ebuilder-columns.js +3 -3
- package/dist/commands/form-ebuilder-columns.js.map +1 -1
- package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
- package/dist/commands/form-ebuilder-scope.js +3 -4
- package/dist/commands/form-ebuilder-scope.js.map +1 -1
- package/dist/commands/form-field-lang.d.ts.map +1 -1
- package/dist/commands/form-field-lang.js +3 -4
- package/dist/commands/form-field-lang.js.map +1 -1
- package/dist/commands/form-field-linkage.d.ts.map +1 -1
- package/dist/commands/form-field-linkage.js +4 -3
- package/dist/commands/form-field-linkage.js.map +1 -1
- package/dist/commands/form-formula-linkage.d.ts.map +1 -1
- package/dist/commands/form-formula-linkage.js +4 -2
- package/dist/commands/form-formula-linkage.js.map +1 -1
- package/dist/commands/form-formula.d.ts.map +1 -1
- package/dist/commands/form-formula.js +5 -5
- package/dist/commands/form-formula.js.map +1 -1
- package/dist/commands/form-layout.d.ts.map +1 -1
- package/dist/commands/form-layout.js +6 -0
- package/dist/commands/form-layout.js.map +1 -1
- package/dist/commands/form-list-click.d.ts.map +1 -1
- package/dist/commands/form-list-click.js +3 -2
- package/dist/commands/form-list-click.js.map +1 -1
- package/dist/commands/form-physical-table.js +3 -3
- package/dist/commands/form-physical-table.js.map +1 -1
- package/dist/commands/form-relate.d.ts.map +1 -1
- package/dist/commands/form-relate.js +3 -2
- package/dist/commands/form-relate.js.map +1 -1
- package/dist/commands/form-validate.d.ts.map +1 -1
- package/dist/commands/form-validate.js +3 -3
- package/dist/commands/form-validate.js.map +1 -1
- package/dist/commands/form-view.d.ts.map +1 -1
- package/dist/commands/form-view.js +2 -0
- package/dist/commands/form-view.js.map +1 -1
- package/dist/commands/form.d.ts +9 -3
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +116 -160
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/menu-permission.d.ts.map +1 -1
- package/dist/commands/menu-permission.js +5 -2
- package/dist/commands/menu-permission.js.map +1 -1
- package/dist/commands/report.d.ts +9 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +18 -2
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/special.d.ts +24 -0
- package/dist/commands/special.d.ts.map +1 -0
- package/dist/commands/special.js +487 -0
- package/dist/commands/special.js.map +1 -0
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +4 -4
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-message.d.ts.map +1 -1
- package/dist/commands/workflow-message.js +1 -2
- package/dist/commands/workflow-message.js.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +54 -12
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/index.d.ts.map +1 -1
- package/dist/services/actionflow/components/index.js +6 -0
- package/dist/services/actionflow/components/index.js.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
- package/dist/services/actionflow/components/multiple_execution.js +73 -13
- package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
- package/dist/services/actionflow/components/output.d.ts.map +1 -1
- package/dist/services/actionflow/components/output.js +144 -5
- package/dist/services/actionflow/components/output.js.map +1 -1
- package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
- package/dist/services/actionflow/components/send_message.js +60 -32
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/components/serverless_action.d.ts +5 -0
- package/dist/services/actionflow/components/serverless_action.d.ts.map +1 -0
- package/dist/services/actionflow/components/serverless_action.js +134 -0
- package/dist/services/actionflow/components/serverless_action.js.map +1 -0
- package/dist/services/actionflow/components/webhook_trigger.d.ts +5 -0
- package/dist/services/actionflow/components/webhook_trigger.d.ts.map +1 -0
- package/dist/services/actionflow/components/webhook_trigger.js +85 -0
- package/dist/services/actionflow/components/webhook_trigger.js.map +1 -0
- package/dist/services/actionflow/context_preflight.d.ts +6 -0
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +247 -7
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/context_provider.d.ts.map +1 -1
- package/dist/services/actionflow/context_provider.js +67 -3
- package/dist/services/actionflow/context_provider.js.map +1 -1
- package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -1
- package/dist/services/actionflow/custom_trigger_context.js +9 -2
- package/dist/services/actionflow/custom_trigger_context.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +2 -0
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +381 -63
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/generation_service.d.ts.map +1 -1
- package/dist/services/actionflow/generation_service.js +9 -0
- package/dist/services/actionflow/generation_service.js.map +1 -1
- package/dist/services/actionflow/param_group_dto.d.ts +5 -0
- package/dist/services/actionflow/param_group_dto.d.ts.map +1 -0
- package/dist/services/actionflow/param_group_dto.js +181 -0
- package/dist/services/actionflow/param_group_dto.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +53 -11
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/readback_verifier.d.ts.map +1 -1
- package/dist/services/actionflow/readback_verifier.js +14 -1
- package/dist/services/actionflow/readback_verifier.js.map +1 -1
- package/dist/services/actionflow/update_service.d.ts.map +1 -1
- package/dist/services/actionflow/update_service.js +14 -8
- package/dist/services/actionflow/update_service.js.map +1 -1
- package/dist/services/actionflow/webhook_source.d.ts +4 -0
- package/dist/services/actionflow/webhook_source.d.ts.map +1 -0
- package/dist/services/actionflow/webhook_source.js +99 -0
- package/dist/services/actionflow/webhook_source.js.map +1 -0
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +1 -0
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/form-create.d.ts +45 -2
- package/dist/services/form-create.d.ts.map +1 -1
- package/dist/services/form-create.js +78 -8
- package/dist/services/form-create.js.map +1 -1
- package/dist/services/form-data-openapi.d.ts +142 -0
- package/dist/services/form-data-openapi.d.ts.map +1 -0
- package/dist/services/form-data-openapi.js +363 -0
- package/dist/services/form-data-openapi.js.map +1 -0
- package/dist/services/form-field-build.d.ts.map +1 -1
- package/dist/services/form-field-build.js +4 -4
- package/dist/services/form-field-build.js.map +1 -1
- package/dist/services/form-field-template.d.ts +71 -0
- package/dist/services/form-field-template.d.ts.map +1 -0
- package/dist/services/form-field-template.js +103 -0
- package/dist/services/form-field-template.js.map +1 -0
- package/dist/services/form-field-validate.d.ts +26 -0
- package/dist/services/form-field-validate.d.ts.map +1 -0
- package/dist/services/form-field-validate.js +121 -0
- package/dist/services/form-field-validate.js.map +1 -0
- package/dist/services/form-id.d.ts +50 -0
- package/dist/services/form-id.d.ts.map +1 -0
- package/dist/services/form-id.js +110 -0
- package/dist/services/form-id.js.map +1 -0
- package/dist/services/form-layout-grid.d.ts +123 -0
- package/dist/services/form-layout-grid.d.ts.map +1 -0
- package/dist/services/form-layout-grid.js +177 -0
- package/dist/services/form-layout-grid.js.map +1 -0
- package/dist/services/form-layout-insert.d.ts +24 -1
- package/dist/services/form-layout-insert.d.ts.map +1 -1
- package/dist/services/form-layout-insert.js +192 -27
- package/dist/services/form-layout-insert.js.map +1 -1
- package/dist/services/form-physical-table.d.ts +1 -1
- package/dist/services/form-physical-table.js +1 -1
- package/dist/services/form-table-view.d.ts.map +1 -1
- package/dist/services/form-table-view.js +2 -11
- package/dist/services/form-table-view.js.map +1 -1
- package/dist/services/form-view.d.ts +2 -0
- package/dist/services/form-view.d.ts.map +1 -1
- package/dist/services/form-view.js +57 -7
- package/dist/services/form-view.js.map +1 -1
- package/dist/services/form-virtual.d.ts.map +1 -1
- package/dist/services/form-virtual.js +6 -1
- package/dist/services/form-virtual.js.map +1 -1
- package/dist/services/special-page.d.ts +85 -0
- package/dist/services/special-page.d.ts.map +1 -0
- package/dist/services/special-page.js +129 -0
- package/dist/services/special-page.js.map +1 -0
- package/dist/services/special-route.d.ts +92 -0
- package/dist/services/special-route.d.ts.map +1 -0
- package/dist/services/special-route.js +93 -0
- package/dist/services/special-route.js.map +1 -0
- package/dist/services/workflow-node-layout.d.ts +13 -1
- package/dist/services/workflow-node-layout.d.ts.map +1 -1
- package/dist/services/workflow-node-layout.js +11 -3
- package/dist/services/workflow-node-layout.js.map +1 -1
- package/package.json +1 -1
- package/skill-docs/SKILL.md +5 -5
- package/skill-docs/actionflows/SKILL.md +5 -4
- package/skill-docs/actionflows/references/components/logic/MultipleExecution.md +38 -38
- package/skill-docs/actionflows/references/components/logic/Output.md +9 -2
- package/skill-docs/actionflows/references/components/message/SendMessage.md +3 -3
- package/skill-docs/actionflows/references/components/serverless/ServerlessAction.md +42 -0
- package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +89 -0
- package/skill-docs/actionflows/references/dynamic_capability_matrix.md +2 -2
- package/skill-docs/references/common/ref-cli-commands.md +3 -1
- package/skill-docs/references/form/guide-form-data.md +30 -0
- package/skill-docs/references/form/guide-form-layout-incremental.md +18 -3
- package/skill-docs/references/form/guide-form-physical-table.md +1 -1
- package/skill-docs/references/form/ref-form-fields.md +1 -1
- package/skill-docs/references/hrm/guide-org-employee.md +32 -1
|
@@ -49,12 +49,12 @@ description: "将业务需求编译为 Weaver ESB 动作流,或读取已有动
|
|
|
49
49
|
2. 只传 `component-describe` 声明的参数;固定值与动态值根据业务需求选择,不能为了动态而动态。
|
|
50
50
|
3. 语义 plan 的节点配置统一放在 `params`:`event.params`、`actions[*].params` 以及条件/循环内部节点的 `params`。`data` 仅属于平台回读/更新 DTO,不能出现在 `generate` 语义计划中;CLI 会在调用任何平台接口前拒绝该结构,并提示具体路径。
|
|
51
51
|
4. 中文 plan 写入当前工作区 `.actionflow-plans/`,以 `planFile` 传给 CLI;不在 Skill 目录写临时文件。CLI 不会自动删除 plan;确认 `valid=true`、`saved=true`、`readBackVerified=true` 后才允许手工清理。
|
|
52
|
-
5. 不把 `Output` 写入 `actions`。需要配置终止状态、提示或页面动作时使用顶层 `finalOutput.params`;平台内部 FormulaBean 由 CLI 生成,只有组件契约明确要求前端原对象时才传原生 DTO。
|
|
52
|
+
5. 不把 `Output` 写入 `actions`。需要配置终止状态、提示或页面动作时使用顶层 `finalOutput.params`;提醒内容使用前端富文本组件对应的 `reminderContent`(`ContestSettingDTO`,动态片段放在 `formulaBeans`),不要使用旧的 `reminderMsgFormula`;平台内部 FormulaBean 由 CLI 生成,只有组件契约明确要求前端原对象时才传原生 DTO。
|
|
53
53
|
5.1. 所有 CLI 生成或继续编译的 FormulaBean,只要包含 `frontId`,允许使用空串;非空时必须使用平台真实字段 ID 的纯数字字符串。`field_<数字>` 仅可在生成时规范化为 `<数字>`。禁止把字段名、paramKey 尾段、临时公式 ID 或其他包含字母/符号的值写入 `frontId`;非空值无法解析为纯数字时必须直接报错。
|
|
54
54
|
6. 定时组件优先使用平台原生频率:`rate=1` 一次、`2` 按小时、`3` 按日、`4` 按周、`5` 按月,并按需提供 `cycle`、`hour`、`day`、`week`、`atWeek`、`atWeekDetail` 或 `lastWeek`;只有明确选择 `rate=6` 时才传 `cornString`。图形化频率必须提供 `startTime`。
|
|
55
55
|
7. 触发器或查询组件未被需求明确限制输出字段时,不传 `queryFields`(或传空数组):CLI 会默认全选,包含“数据ID”。如果需求明确引用某个业务字段,必须从当前租户的实时字段接口/字段选择器获取完整字段对象并保存真实 `id`,不能凭字段名、临时 ID 或只拼 `id/content`。查询节点还必须使用自身真实节点 ID 作为 `dataSource.enquiryId`,否则平台可能静默丢弃业务字段。正式回读必须确认每个声明的 `queryFields` 仍存在;缺失即生成失败,不能仅凭接口 `code=200`、`saved=true` 判定成功。e-builder 数据触发后发送消息且未显式给链接时,CLI 自动补 PC/移动端当前记录详情链接;不手写 `{formId}` / `{dataId}` 的 FormulaBean。查询结果字段动态赋值必须按手工设计器对象编译:普通业务字段使用 `FormField.<查询表单ID>.field_<真实字段ID>`,`config.paramKey` 使用 `<查询表单ID>.field_<真实字段ID>`,`config.fieldInfo.tablePrimaryKey` 为 `FormField`;系统字段按平台真实字段键(例如 `id`)保留。禁止使用 `FormData.<表单ID>[临时位置]...`,也禁止把临时公式 ID 当作 `frontId`。
|
|
56
56
|
8. `ActionEbAdd` 批量新增以 `basisValue` 为明细行上下文:来源于该行的字段都用 `mapping`,编译为“依据值下级”(`switchType:"sub"`),下拉字段也同样处理。只有已核实来源/目标选项 ID 不同且语义需要转换时,才使用 `SWITCH`。关联 e-builder 字段应引用查询结果的 `数据ID`,固定格式为 `{target,kind:"query_result",source:"<EnquiryForm ref>",formId,fieldId:"id",index:0}`;`kind:"enquiry"`、`sourceId` 等旧写法会直接报错,绝不降级为空固定值。
|
|
57
|
-
9. 动态赋值可使用或新建动作流变量、租户常量:已有资源必须用真实 ID;计划新建变量写顶层 `variables[]`,新建常量写 `constantDefinitions[]`,常量分组可传 `groupPk` 或 `groupName`。变量按当前 `applicationId + sceneId` 隔离,常量按分组跨动作流复用。生成时先调用真实接口创建/解析资源,再编译为变量 `type:"7"` 或常量 `type:"5"` FormulaBean;详细格式见 `references/dynamic_resources.md`。消息 `parts`
|
|
57
|
+
9. 动态赋值可使用或新建动作流变量、租户常量:已有资源必须用真实 ID;计划新建变量写顶层 `variables[]`,新建常量写 `constantDefinitions[]`,常量分组可传 `groupPk` 或 `groupName`。变量按当前 `applicationId + sceneId` 隔离,常量按分组跨动作流复用。生成时先调用真实接口创建/解析资源,再编译为变量 `type:"7"` 或常量 `type:"5"` FormulaBean;详细格式见 `references/dynamic_resources.md`。消息 `SendMessage.msgTitlev/msgContentv/picLink/msgPcLink/msgMobileLink` 的 `parts` 支持 `variable`/`constant` 动态片段,并统一保存为 `ContestSettingDTO`。
|
|
58
58
|
9.1. 每个参数先分为“动态公式属性”“动态人员属性”“固定平台资源属性”三类:上下文、系统变量、变量、常量、函数/公式必须保留为 FormulaBean;动态人员必须使用真实人员字段上下文或系统变量,不得把引用里的 `id` 当人员 Browser ID 查询;工作流、文档目录、按钮、规则等平台资源只有在其组件契约明确提供动态引用时才允许动态化。生成前必须记录本次组件/属性的判定,生成后按属性检查回读结果;具体映射和验证状态见 `references/dynamic_capability_matrix.md`。
|
|
59
59
|
10. 自定义事件和内置 MQ 的参数必须按对应平台组件说明提供原生参数对象;`CustomTrigger.customData`、`InnerMQListener.receiveParams`、`InnerMQSend.sendParams` 不能用猜测的字段替代。若验证要求“输入参数里有字段”,必须在生成前提供至少一行真实原生参数;`tables:[]`、`tableList:[]` 或省略 `receiveParams` 只能表示无输入参数,不能作为有参数的占位。`InnerMQListener` 与 `InnerMQSend` 是动作流级互斥组件,同一计划(包括条件/循环嵌套)同时出现时,CLI 在任何平台写接口前直接报错。
|
|
60
60
|
11. 根触发节点的 `event.attr.icon` 必须使用平台真实图标:`CustomTrigger` 为 `Icon-N-Triggerrul`,`InnerMQListener` 为 `Icon-built-in-mq-listening-mcolor`;组件目录里的动作图标不能覆盖根触发器图标。保存后回读必须同时检查触发器图标、已声明输入参数的数量和查询字段,不能仅凭 `valid=true` / `saved=true` 判定配置正确。
|
|
@@ -126,11 +126,11 @@ e10-cli actionflow update '@update-plan.json' --out update-result.json #
|
|
|
126
126
|
|
|
127
127
|
## 触发器边界
|
|
128
128
|
|
|
129
|
-
当前可生成的事件触发器:`ApproveTrigger`(流程事件)、`EventFormData`(e-builder 数据新增/更新/删除/字段变化)、`EventButton`(点击 e-builder 指定按钮)、`DateTrigger`、`TimeBatchTrigger`、`SimpleScheduler`、`CustomTrigger
|
|
129
|
+
当前可生成的事件触发器:`ApproveTrigger`(流程事件)、`EventFormData`(e-builder 数据新增/更新/删除/字段变化)、`EventButton`(点击 e-builder 指定按钮)、`DateTrigger`、`TimeBatchTrigger`、`SimpleScheduler`、`CustomTrigger`(自定义事件)、`InnerMQListener`(内置 MQ 监听)和 `WebHookTrigger`(外部 WebHook 请求)。`EventButton` 必须先用 `e10-cli actionflow form-buttons '{"tableId":"<表单ID>","appId":"<应用ID>"}'` 查询真实按钮,再以 `targetForm`、`buttonType:[{id,name,buttonLocation:"before"|"after"}]` 和可选 `triggerType` 生成;不得用 `EventFormData` 冒充按钮点击。`CustomTrigger`、`InnerMQListener` 和 `WebHookTrigger` 的原生参数要求见 `references/components/trigger/CustomTrigger.md`、`references/components/trigger/InnerMQListener.md`、`references/components/trigger/WebHookTrigger.md`。
|
|
130
130
|
|
|
131
131
|
`CustomTrigger` 的上下文动态赋值使用 `SelectParams` 作为最终上下文根。`paramKey` 只写业务路径,不写 `FormData.`、`ApprovalData.` 或 `SelectParams.` 前缀;主表字段格式为 `主表key.字段key`,明细字段格式为 `主表key.明细表key[].字段key`,主表与明细表必须沿用同一个主表 key。最终公式中的 `value`、`currentParamKey` 和 `allParamKey` 才补 `SelectParams.` 前缀,不能把明细字段写成 `FormData.明细表key[].字段key`。如果动态赋值来源于该触发器生成的 `customData`(`CustSetFormDto`),必须先在 `customData.tableList[]` 定位 `CustFormTableDto`,表维度取表对象 `id`,字段维度再从该表 `fields[]` 定位 `CustFormDetailDto` 并取字段对象 `id`,把这个 ID 设置到关联 FormulaBean.frontId;不得使用目标字段 ID、FormulaBean.id、表/字段名称或 paramKey 尾段。对应 ID 缺失时 frontId 使用空串,非空值必须为纯数字字符串。完整规则见 `references/components/trigger/CustomTrigger.md`。
|
|
132
132
|
|
|
133
|
-
动作 `Http` 用于调用当前租户已配置的 HTTP/HTTPS 接口,参数要求见 `references/components/http/Http.md`;HTTPS 使用同一个 `Http` 组件,不能把协议地址当成新的组件类型。生成前会实时读取并校验“连接器 → 资源 → 接口 → 接口详情”,节点标题按“当前连接器: 当前接口”回填,图标按当前连接器目录回填;不存在、跨租户或归属不一致时拒绝生成,不信任旧环境的 E9 等名称、地址、图标或原生映射。HTTP 请求字段通过 `inputParams` 配置,必须用接口详情真实返回的 `table`/`paramKey`,CLI 写入参数行的 `formulaData`,支持统一的固定值、上下文、系统变量及函数/公式赋值;不能猜参数或直接改写 `request.tables`。动作 `InnerMQSend` 用于向平台内置 MQ 发送消息,参数要求见 `references/components/message/InnerMQSend.md`。`InnerMQListener` 和 `InnerMQSend` 不能放在同一个动作流中;该约束也适用于 `update` 修改后的完整设计。
|
|
133
|
+
动作 `Http` 用于调用当前租户已配置的 HTTP/HTTPS 接口,参数要求见 `references/components/http/Http.md`;HTTPS 使用同一个 `Http` 组件,不能把协议地址当成新的组件类型。生成前会实时读取并校验“连接器 → 资源 → 接口 → 接口详情”,节点标题按“当前连接器: 当前接口”回填,图标按当前连接器目录回填;不存在、跨租户或归属不一致时拒绝生成,不信任旧环境的 E9 等名称、地址、图标或原生映射。HTTP 请求字段通过 `inputParams` 配置,必须用接口详情真实返回的 `table`/`paramKey`,CLI 写入参数行的 `formulaData`,支持统一的固定值、上下文、系统变量及函数/公式赋值;不能猜参数或直接改写 `request.tables`。动作 `serverless/Action` 用于执行二开代码,参数要求见 `references/components/serverless/ServerlessAction.md`;输入和输出必须传前端参数设计器生成的原生 ParamBean 结构。动作 `InnerMQSend` 用于向平台内置 MQ 发送消息,参数要求见 `references/components/message/InnerMQSend.md`。`InnerMQListener` 和 `InnerMQSend` 不能放在同一个动作流中;该约束也适用于 `update` 修改后的完整设计。
|
|
134
134
|
|
|
135
135
|
动作 `DMLExecute` 用于执行自定义 SQL 或存储过程,参数要求见 `references/components/database/DMLExecute.md`。只支持新版数仓结构,`operateType` 固定为 `0`;数据源连接 ID 必须通过 `actionflow datasource-list` 从当前环境取得,SQL 占位符与 `fieldSet` 必须严格对应。含 DML 的生成结果还要检查 `sqlAnalysisOk=true`,因为平台 SQL 分析失败可能不会阻断保存。
|
|
136
136
|
|
|
@@ -152,6 +152,7 @@ e10-cli actionflow update '@update-plan.json' --out update-result.json #
|
|
|
152
152
|
| 人员 | `references/components/personnel/` |
|
|
153
153
|
| 逻辑 | `references/components/logic/` |
|
|
154
154
|
| HTTP/HTTPS 接口 | `references/components/http/` |
|
|
155
|
+
| serverless/Action 二开代码 | `references/components/serverless/` |
|
|
155
156
|
| 消息提醒 | `references/components/message/` |
|
|
156
157
|
| 内置 MQ / 自定义事件 | `references/components/trigger/`、`references/components/message/` |
|
|
157
158
|
| 会议、日程 | `references/components/calendar/` |
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
# 循环(MultipleExecution)
|
|
2
|
-
|
|
3
|
-
循环体通过 `actions` 提供,至少包含一个非 `Output` 动作,当前不支持循环嵌套。
|
|
4
|
-
|
|
5
|
-
## 循环方式
|
|
6
|
-
|
|
7
|
-
| `cycleMode` | 场景 | 必填参数 |
|
|
8
|
-
| --- | --- | --- |
|
|
9
|
-
| `1` | 按指定次数 | `cycleTimes` |
|
|
10
|
-
| `2` | 满足条件时继续 | `condition` |
|
|
11
|
-
| `3` | 按列表逐条遍历 | `detailData` |
|
|
12
|
-
| `4` | 按列表分批遍历 | `batchDetailData`、`batchSizeData` |
|
|
13
|
-
| `5` | 存在下一页时继续 | `pageCycleData`(平台已有变量 FormulaBean) |
|
|
14
|
-
|
|
15
|
-
## 参数规则
|
|
16
|
-
|
|
17
|
-
- `cycleTimes`:固定整数 `1-1000`,或实时上下文的 `context/reference`。动态引用必须使用 `getComponentContext` 返回的完整 `paramKey`;预检会保留来源字段的真实类型、所属组件和参数路径。
|
|
18
|
-
- `detailData` / `batchDetailData`:只能引用真实 List/数组字段(表单明细、多选浏览框或上游动态列表)。不可用普通文本字段伪装为列表。
|
|
19
|
-
- `batchSizeData`:固定整数 `2-1000`。
|
|
20
|
-
- `condition`:使用 ESB `ConditionRule`,与动作流分支复用同一类规则树和 `saveCondition` 持久化;它不是 e-builder 表单动作的 `filterInput/ConditionSet`。左值可使用完整 `paramKey`、字段显示名、`paramName` 或真实字段 ID;编译器会按当前流程实时上下文回填真实 DTO。
|
|
21
|
-
- `pageCycleData`:设计器会创建布尔变量并在循环体首节点写入“是否存在下一页”。当前只接受已存在的原始 `type: "7"` 变量 FormulaBean;尚未自动创建变量及赋值节点时,不生成该模式。
|
|
22
|
-
|
|
23
|
-
## 示例
|
|
24
|
-
|
|
25
|
-
```json
|
|
26
|
-
{
|
|
27
|
-
"type": "MultipleExecution",
|
|
28
|
-
"params": {
|
|
29
|
-
"cycleMode": "3",
|
|
30
|
-
"detailData": {
|
|
31
|
-
"kind": "context",
|
|
32
|
-
"source": "event",
|
|
33
|
-
"paramKey": "<workflowId>.<arrayField>[]"
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
"actions": [{ "type": "SendMessage", "params": { "receiver": { "type": "all" }, "
|
|
37
|
-
}
|
|
38
|
-
```
|
|
1
|
+
# 循环(MultipleExecution)
|
|
2
|
+
|
|
3
|
+
循环体通过 `actions` 提供,至少包含一个非 `Output` 动作,当前不支持循环嵌套。
|
|
4
|
+
|
|
5
|
+
## 循环方式
|
|
6
|
+
|
|
7
|
+
| `cycleMode` | 场景 | 必填参数 |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `1` | 按指定次数 | `cycleTimes` |
|
|
10
|
+
| `2` | 满足条件时继续 | `condition` |
|
|
11
|
+
| `3` | 按列表逐条遍历 | `detailData` |
|
|
12
|
+
| `4` | 按列表分批遍历 | `batchDetailData`、`batchSizeData` |
|
|
13
|
+
| `5` | 存在下一页时继续 | `pageCycleData`(平台已有变量 FormulaBean) |
|
|
14
|
+
|
|
15
|
+
## 参数规则
|
|
16
|
+
|
|
17
|
+
- `cycleTimes`:固定整数 `1-1000`,或实时上下文的 `context/reference`。动态引用必须使用 `getComponentContext` 返回的完整 `paramKey`;预检会保留来源字段的真实类型、所属组件和参数路径。
|
|
18
|
+
- `detailData` / `batchDetailData`:只能引用真实 List/数组字段(表单明细、多选浏览框或上游动态列表)。不可用普通文本字段伪装为列表。
|
|
19
|
+
- `batchSizeData`:固定整数 `2-1000`。
|
|
20
|
+
- `condition`:使用 ESB `ConditionRule`,与动作流分支复用同一类规则树和 `saveCondition` 持久化;它不是 e-builder 表单动作的 `filterInput/ConditionSet`。左值可使用完整 `paramKey`、字段显示名、`paramName` 或真实字段 ID;编译器会按当前流程实时上下文回填真实 DTO。
|
|
21
|
+
- `pageCycleData`:设计器会创建布尔变量并在循环体首节点写入“是否存在下一页”。当前只接受已存在的原始 `type: "7"` 变量 FormulaBean;尚未自动创建变量及赋值节点时,不生成该模式。
|
|
22
|
+
|
|
23
|
+
## 示例
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"type": "MultipleExecution",
|
|
28
|
+
"params": {
|
|
29
|
+
"cycleMode": "3",
|
|
30
|
+
"detailData": {
|
|
31
|
+
"kind": "context",
|
|
32
|
+
"source": "event",
|
|
33
|
+
"paramKey": "<workflowId>.<arrayField>[]"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"actions": [{ "type": "SendMessage", "params": { "receiver": { "type": "all" }, "msgTitlev": "逐条处理", "msgContentv": "..." } }]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
## 不可猜测
|
|
12
12
|
|
|
13
|
-
不要把 `Output` 写入 `actions
|
|
13
|
+
不要把 `Output` 写入 `actions`。提醒内容必须使用前端富文本组件对应的 `ContestSettingDTO`,字段名是 `reminderContent`,不能再使用旧的 `reminderMsgFormula`。`basisValue` 仍支持固定值、上下文、系统变量、变量、常量、查询结果和函数/公式;`jumpUrl` 在前端只允许固定文本。`fixedData`、`customOutputData` 属于平台原生高级输出结构,必须使用真实回读结构,不能猜测。
|
|
14
|
+
|
|
15
|
+
`reminderContent` 支持两种输入:一是前端原生对象 `{id, content, formulaBeans, langSet}`;二是 CLI 语义模板 `{parts:[{type:"text",value:"..."},{type:"context",paramKey:"..."},{type:"system_variable",key:"{date}"},{type:"variable",id:"..."},{type:"constant",id:"..."}]}`。编译器会生成 Base64 内容和 `#{paramN}` 占位符,并将每个动态片段保存为 `formulaBeans[].value`。
|
|
14
16
|
|
|
15
17
|
如果自定义触发动作流需要配置终止参数,在 `finalOutput.params.customParamSetting` 中使用同一套 `CustSetFormDto` 结构,`formType` 改为 `output`,新建时 `customId` 传空字符串,`deleteTableIds` 传空数组,`appId` 由编译器注入当前动作流应用 ID,关联 ID 由后端保存方法生成。终止参数字段的映射关系必须写在 `tableList[].fields[].formulaValue`,对应后端 `CustFormDetailDto.formulaValue`;不能放在字段的 `value`、`mapping` 或其他自定义属性中。
|
|
16
18
|
|
|
@@ -22,7 +24,12 @@
|
|
|
22
24
|
"params": {
|
|
23
25
|
"outputStatus": "0",
|
|
24
26
|
"reminder": "1",
|
|
25
|
-
"
|
|
27
|
+
"reminderContent": {
|
|
28
|
+
"parts": [
|
|
29
|
+
{ "type": "text", "value": "失败:" },
|
|
30
|
+
{ "type": "variable", "id": "<真实变量ID>", "name": "失败提示" }
|
|
31
|
+
]
|
|
32
|
+
},
|
|
26
33
|
"pageAction": "0"
|
|
27
34
|
}
|
|
28
35
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
## 不可猜测
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
提醒标题、提醒内容、推送图片 URL、PC 端链接和移动端链接统一使用前端 `AssignTextarea` 对应的 `ContestSettingDTO`。语义参数名分别为 `msgTitlev`、`msgContentv`、`picLink`、`msgPcLink`、`msgMobileLink`;可以传普通字符串、原生 `{id,content,formulaBeans,langSet}`,或 `parts` 模板。模板会编译成 Base64 内容、`#{paramN}` 占位符和独立 `formulaBeans`,对应手动配置时右侧的形式。**不再使用旧的 `msgTitle`、`msgContent`、`pcLink`、`mobileLink` 字段**。`parts` 的动态项支持 `context`、`system_variable`、`variable`、`constant`、`function`、`formula`、`query_result`,后两者必须按 `references/dynamic_resources.md` 使用真实资源或计划定义。需要拼接上下文时,必须拆成 `parts`,例如:
|
|
14
14
|
|
|
15
15
|
```json
|
|
16
16
|
{
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
}
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
需要动态接收人时传 `receiver: {"type":"context","paramKey":"<真实人员字段paramKey>","label":"<字段名>"}`,不能把人员字段当固定人员 ID,也不能省略 `paramKey`。模板上下文只传 `paramKey` 和 `label`,由 CLI 按消息编辑器的动态片段结构编译,并绑定当前触发节点。对定时批量、按日期字段、表单数据等 e-builder 记录触发器,未显式提供链接时 CLI 自动生成 PC/移动端详情链接:`formId` 为触发表单 ID 固定值,`dataId` 为上游“数据ID”动态上下文。显式 `
|
|
26
|
+
需要动态接收人时传 `receiver: {"type":"context","paramKey":"<真实人员字段paramKey>","label":"<字段名>"}`,不能把人员字段当固定人员 ID,也不能省略 `paramKey`。模板上下文只传 `paramKey` 和 `label`,由 CLI 按消息编辑器的动态片段结构编译,并绑定当前触发节点。对定时批量、按日期字段、表单数据等 e-builder 记录触发器,未显式提供链接时 CLI 自动生成 `msgPcLink` / `msgMobileLink` 的 PC/移动端详情链接:`formId` 为触发表单 ID 固定值,`dataId` 为上游“数据ID”动态上下文。显式 `msgPcLink` / `msgMobileLink` 会覆盖该默认行为。
|
|
27
27
|
|
|
28
28
|
## 最小计划
|
|
29
29
|
|
|
30
|
-
`receiver`、`
|
|
30
|
+
`receiver`、`msgTitlev`、`msgContentv`。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# serverless/Action(`ServerlessAction`)
|
|
2
|
+
|
|
3
|
+
## 何时使用
|
|
4
|
+
|
|
5
|
+
用于执行平台的二开代码。`crossService=1` 时调用远程 serverless/Action 服务;`crossService=0` 时执行本地上传的 Java 类。
|
|
6
|
+
|
|
7
|
+
## 参数
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"actions": [
|
|
12
|
+
{
|
|
13
|
+
"type": "ServerlessAction",
|
|
14
|
+
"params": {
|
|
15
|
+
"codeType": "customAction",
|
|
16
|
+
"crossService": 1,
|
|
17
|
+
"groupId": "ces",
|
|
18
|
+
"serverVersion": "1.1",
|
|
19
|
+
"request": {
|
|
20
|
+
"primaryKey": "",
|
|
21
|
+
"name": "",
|
|
22
|
+
"tableId": "<ParamMappingBean.tableId>",
|
|
23
|
+
"mappingTableId": "<ParamMappingBean.mappingTableId>",
|
|
24
|
+
"tableData": []
|
|
25
|
+
},
|
|
26
|
+
"response": {
|
|
27
|
+
"primaryKey": "",
|
|
28
|
+
"name": "",
|
|
29
|
+
"tableId": "<ParamSettingBean.tableId>",
|
|
30
|
+
"tableData": []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- `codeType` 当前仅支持 `customAction`。
|
|
39
|
+
- `crossService=1` 时必须提供 `groupId`,`serverVersion` 按 provider/consumer 约定填写,可为空;`crossService=0` 时必须提供本地代码完整类路径 `address`。
|
|
40
|
+
- `request` 必须使用前端输入参数配置生成的原生 `ParamMappingBean`;`response` 必须使用前端输出参数配置生成的原生 `ParamSettingBean`。
|
|
41
|
+
- 参数行的 `id`、`parentId`、`paramKey`、`paramType`、`dataType` 和前端高级配置会被保留;缺失的参数表/字段 ID 由 CLI 补齐,不能用语义字符串替代原生结构。
|
|
42
|
+
- 二开动作执行后,可以引用 `Response.entry.<字段>` 上下文;请求参数上下文使用 `Request.entry.<字段>`。
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# WebHook 请求触发(`WebHookTrigger`)
|
|
2
|
+
|
|
3
|
+
`WebHookTrigger` 对应前端 `custom-webhook` 和 Java `WebHookTriggerComponent`。它接收外部 HTTP 请求,按配置的请求参数触发动作流。
|
|
4
|
+
|
|
5
|
+
## 语义计划
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"event": {
|
|
10
|
+
"type": "WebHookTrigger",
|
|
11
|
+
"params": {
|
|
12
|
+
"requestUrl": "https://api.example.com/api/open-esb/server/webhook/trigger/order-created",
|
|
13
|
+
"request": {
|
|
14
|
+
"id": "webhook-request-1",
|
|
15
|
+
"mappingId": "webhook-mapping-1",
|
|
16
|
+
"tables": [
|
|
17
|
+
{
|
|
18
|
+
"name": "Params",
|
|
19
|
+
"primaryKey": "Params",
|
|
20
|
+
"tableId": "params-1",
|
|
21
|
+
"tableData": [
|
|
22
|
+
{
|
|
23
|
+
"id": "request-id",
|
|
24
|
+
"paramKey": "orderId",
|
|
25
|
+
"paramName": "orderId",
|
|
26
|
+
"showName": "订单 ID",
|
|
27
|
+
"paramType": "string",
|
|
28
|
+
"dataType": "attribute",
|
|
29
|
+
"required": true
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "Header",
|
|
35
|
+
"primaryKey": "Header",
|
|
36
|
+
"tableId": "header-1",
|
|
37
|
+
"tableData": []
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "Body",
|
|
41
|
+
"primaryKey": "Body",
|
|
42
|
+
"tableId": "body-1",
|
|
43
|
+
"tableData": []
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"authAppIds": []
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`request` 应按设计器节点数据传入 `id`、可选 `mappingId` 和 `tables`。`tables` 的 `name` 只能是 `Params`、`Header`、`Body`;`primaryKey`、`tableId`、`customData` 等已有平台字段会原样保留,至少一个分组的 `tableData` 需要有字段,字段对象应来自前端参数设置组件。
|
|
54
|
+
|
|
55
|
+
生成时推荐直接传设计器返回的完整 `requestUrl`。如果只有 `requestCode`,编译器也会生成 `/api/open-esb/server/webhook/trigger/<requestCode>` 形式的公开地址;Java 组件保存时使用最后一段作为 code。
|
|
56
|
+
|
|
57
|
+
## 触发上下文
|
|
58
|
+
|
|
59
|
+
Webhook 请求运行时由平台解析为三个上下文分组:`Params`、`Header`、`Body`。动作参数中的上下文引用使用完整路径,例如 `Params.orderId`、`Header.Authorization`、`Body.customer.name`;不要把它们写成 `FormData.*`。
|
|
60
|
+
|
|
61
|
+
生成前 CLI 会使用当前会话调用 `openApplicationBrowser` 完成接口,并把返回的应用归一化为 `{ "id": <应用ID>, "content": "<应用名称>" }` 写入 `authAppIds`。默认使用接口返回的全部应用;如需限定范围,可在语义计划中传 `authAppNames: ["普通应用-wull"]`。认证应用为空时 Java 组件仍可保存,但请求可能无法通过开放平台认证。
|
|
62
|
+
|
|
63
|
+
## 终止节点响应
|
|
64
|
+
|
|
65
|
+
Webhook 触发的终止节点使用 `finalOutput.params.webhookCustomParamSetting`,对应前端 `ParamGroupMappingBean`。必须包含 `Header`、`Body`、`StatusCode` 三个分组,并至少配置一个 Header 或 Body 字段;平台原生的 `id`、`mappingId`、`primaryKey`、`mappingTableId`、`customData` 和 `tableData` 直接保留。
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"finalOutput": {
|
|
70
|
+
"params": {
|
|
71
|
+
"webhookCustomParamSetting": {
|
|
72
|
+
"id": "response-setting-1",
|
|
73
|
+
"mappingId": "response-mapping-1",
|
|
74
|
+
"tables": [
|
|
75
|
+
{ "name": "Header", "tableData": [] },
|
|
76
|
+
{ "name": "StatusCode", "tableData": [] },
|
|
77
|
+
{
|
|
78
|
+
"name": "Body",
|
|
79
|
+
"customData": "{\"dataType\":\"application/json\"}",
|
|
80
|
+
"tableData": [
|
|
81
|
+
{ "id": "response-a", "paramKey": "ab", "paramName": "ab", "paramType": "string", "required": true }
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
| HTTP 请求参数 | `Http.inputParams.formulaData` | 固定值、上下文、系统变量、变量、常量、函数/公式 | 写入接口详情对应参数行的 FormulaBean,不改写接口参数定义 |
|
|
13
13
|
| MQ 发送参数 | `InnerMQSend.queueName`、`inputParams` | 固定值、上下文、系统变量、变量、常量、查询结果、函数/公式 | 保留原生 `sendParams` 参数定义,只向命中的参数行写入 `formulaData` |
|
|
14
14
|
| DML SQL 参数 | `DMLExecute.fieldSet.assign` | 固定值、上下文、系统变量、变量、常量、查询结果、函数/公式 | 按 SQL 占位符生成 FormulaBean 数组,同时保留原生 FormulaBean 兼容入口 |
|
|
15
|
-
| 消息模板 | `SendMessage.
|
|
15
|
+
| 消息模板 | `SendMessage.msgTitlev/msgContentv/picLink/msgPcLink/msgMobileLink` | 上下文、系统变量、变量、常量、函数/公式、查询结果 | 五个消息文本/链接字段统一保存为 `ContestSettingDTO`;正文占位符与独立绑定;接收人上下文仍保留为动态人员 FormulaBean |
|
|
16
16
|
| 消息接收人 | `SendMessage.receiver` | 当前用户、上游人员上下文、固定人员 | 动态人员使用真实上下文 `paramKey`,固定人员使用当前租户 Browser 对象 |
|
|
17
17
|
| 人员参数 | 表单数据动作、流程动作、文档动作、`HrmEmployeeUpdate`、`PersonnelOnboarding`、`AlterPersonStatus`、会议/日程中的人员属性 | 当前用户、上游人员上下文、动作流变量/常量/函数 | 不再强制走固定人员查询;动态引用保持人员 FormulaBean,固定人员仍要求真实 Browser 对象 |
|
|
18
18
|
| 会议和日程运行时字段 | `MeetingCreate` 的标题/密级/人员,`ScheduleCreate` 的标题/时间/内容/其他地点/人员 | 上下文、系统变量、变量、常量、函数/公式 | 普通字段生成对应 FormulaBean;人员使用人员 FormulaBean;会议室、日程类型、关联流程等设计期资源仍保持 Browser 对象 |
|
|
19
19
|
| 流程和文档运行时字段 | 流程实例 ID、标题、意见、公文正文 ID、关联数据 ID、时间、文档/附件 ID、布尔开关等 `formula_or_reference` 属性 | 固定值、上下文、系统变量、变量、常量、查询结果、函数/公式 | 统一经共享公式编译器生成 FormulaBean;固定流程定义、节点、目录 DTO 不在此列 |
|
|
20
20
|
| 循环参数 | `MultipleExecution.cycleTimes`、列表/明细来源 | 上下文、变量、常量、当前循环上下文 | 按循环模式生成对应 `CycleParams`/FormulaBean |
|
|
21
21
|
| 条件右值 | `Condition` | 固定值、上下文、系统变量、变量、常量、函数 | 右值保留为公式树,不把动态字段名转成固定字符串 |
|
|
22
|
-
| 终止节点动态输出 | `finalOutput.params.
|
|
22
|
+
| 终止节点动态输出 | `finalOutput.params.reminderContent`、`basisValue` | 富文本 `ContestSettingDTO`;提醒内容支持文本、上下文、系统变量、变量、常量、查询结果、函数/公式 | 自动补充的 `Output` 节点保留高级设置,无需在 `actions` 中手写终止节点;旧 `reminderMsgFormula` 不再用于新生成 |
|
|
23
23
|
|
|
24
24
|
## 需要按组件协议单独判定
|
|
25
25
|
|
|
@@ -105,7 +105,9 @@
|
|
|
105
105
|
| `e10-cli form layout init <objId> [--style-template <名\|id>] [--view-id <id>] [--read-only] [--required] [--disable-edit] [--single-row]` | 初始化/重建表单布局(initLayout):**换样式模板** + 覆盖字段 readOnly/required/disableEdit/singleRow(不传这些开关则**保留字段已有设置**)。**⚠ 样式模板流式与表格式是两套**,同名不同 id,按表单实际布局类型实时查(传错套会直接报错并列出可用项;**平台对跨套 id 不报错、只会静默忽略,表现为"命令成功但样式没变"**)。缺省:流式=标准版、表格式=表格版。完整模板表见 `form/style-templates.md`。**建表时不能指定样式,只能建完再用本命令换** |
|
|
106
106
|
| `e10-cli form group <objId> <appId> --groups '{"基本信息":["字段名/fieldId",...]}'` | 给**已建好的 eb 表**加字段分组(折叠容器)。建组 saveFieldGroup → 分配 updateFormFieldGroup → initLayout generateCollapse 渲染。`--groups` 可 `@文件`;`--required` 同时设分组内字段必填;同名分组复用不重复建(去重)。建表时一次性带分组用 `form create` 的 fields.json `group` 属性 |
|
|
107
107
|
| `e10-cli form data add <objId> <appId> <json>` | 写入表单数据(`@` 开头为 JSON 文件路径)。JSON key 可用 fieldId 或字段名;Select/RadioBox 值填选项名(自动解析 valueKey)或 valueKey、CheckBox/SelectMultiple 用数组、TextArea 直接值、Employee/Department 用 ID。详见 `form/guide-form-data.md` |
|
|
108
|
-
| `e10-cli form data list <objId> [--page <n>] [--size <n>]` |
|
|
108
|
+
| `e10-cli form data list <objId> [--page <n>] [--size <n>]` | 查询表单数据(**只含主表**)。`--page` 页码(缺省1)、`--size` 每页条数(缺省1000;不传 pageInfo 平台默认卡 10) |
|
|
109
|
+
| `e10-cli form data detail <objId> <appId> <dataId> [--no-detail]` | 读一条数据详情,**默认连明细一起读**(`--no-detail` 只要主表)。要明细用这条,`list` 不返回明细。详见 `form/guide-form-data.md` |
|
|
110
|
+
| `e10-cli form data update <objId> <appId> <dataId> <json> [--detail-mode cover\|append]` | 按数据 ID 修改(`@` 开头为文件路径)。只需写要改的字段;带明细表名即处理明细,缺省 `cover` **整表覆盖**,`append` 只追加 |
|
|
109
111
|
| `e10-cli form data delete <objId> <dataId>` | 删除一条表单数据 |
|
|
110
112
|
|
|
111
113
|
### 表单按钮
|
|
@@ -41,6 +41,36 @@ data.json 格式(`@` 开头为文件路径)。key 可用 **fieldId(长 ID
|
|
|
41
41
|
|
|
42
42
|
> **除非用户明确要求,否则不要往表单写入任何数据。** 表单创建完成后只需确认字段正确即可,不要自动插入测试数据。
|
|
43
43
|
|
|
44
|
+
## 读明细:`detail`
|
|
45
|
+
|
|
46
|
+
`list` 只返回主表。要**连明细一起读**用 `detail`:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
e10-cli form data detail <objId> <appId> <dataId> [--no-detail]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
输出主表字段(按显示名)与各明细表的行。`--no-detail` 表示只要主表。
|
|
53
|
+
|
|
54
|
+
## 改数据:`update`
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
e10-cli form data update <objId> <appId> <dataId> @patch.json [--detail-mode cover|append]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`@patch.json` 的写法和 `add` 一样(key 用字段名),**只需写要改的字段**。带明细表名即处理明细:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{ "金额": 1200, "物料明细": [ { "物料名称": "螺丝", "数量": 100 } ] }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- `--detail-mode cover`(缺省):**整表覆盖**该明细的行 —— 写几行就是几行,原来的行被替换
|
|
67
|
+
- `--detail-mode append`:只追加,原有明细行保留
|
|
68
|
+
|
|
69
|
+
不传明细表名时,明细原样不动。
|
|
70
|
+
|
|
71
|
+
> `add` 走设计器那条保存链(`form/core/saveFormData`,**一次一条、只写主表**);
|
|
72
|
+
> `update` 与 `detail` 走表单数据 OpenAPI。
|
|
73
|
+
|
|
44
74
|
## 删数据
|
|
45
75
|
|
|
46
76
|
```bash
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
明细字段也在同一个平铺数组里,靠 `config.subFormId` 归属;它的 `excel.parent` 指向明细表容器的 `nodeId`,普通字段的 `excel.parent` 是 `ROOT`。
|
|
16
16
|
|
|
17
|
+
**EXCEL 布局还有第三份:网格。** `pageLayouts[].config.workbook.Sheet1.cells` 里每个组件占**一格**,靠 `style.cellType.comId` 认到自己的组件,位置也以格子自己的 `row` / `col` 为准 —— **设计器按网格渲染**。所以 EXCEL 表里「组件的 `config.excel.row` / `col`」和「格子的 `row` / `col`」是同一件事的两份副本,**改一份必须改两份**:只改组件层的话接口会回成功,但设计器里画不出来。
|
|
18
|
+
|
|
19
|
+
FLOW 布局**没有** `config.workbook`(它靠 `config.flow.parent` / `nodes` 排布),这条对它不适用。
|
|
20
|
+
|
|
21
|
+
> 这份同步由 CLI 负责,不用手工做。但**手工在页面上改过布局的老表**如果在 EXCEL 上有字段显示不出来,在设计器里保存一次即可 —— 设计器会按组件重算网格。
|
|
22
|
+
|
|
17
23
|
## 字段属性分两类
|
|
18
24
|
|
|
19
25
|
有些属性**只存在于布局组件里,字段定义没有这个键** —— 只写字段定义等于什么都没做:接口回成功、命令也报成功,表单上一点变化都没有。
|
|
@@ -37,11 +43,20 @@
|
|
|
37
43
|
|
|
38
44
|
**不是自己建的表不要用 `--reinit`。** 字段越多越经不起 —— 真实的一张订单主表有 131 个组件。
|
|
39
45
|
|
|
40
|
-
###
|
|
46
|
+
### 表里还没有这个类型时:用平台给的字段模板
|
|
47
|
+
|
|
48
|
+
新组件的键集(`format`、`earlyDate`、`pointSize`、`switchType` …)各类型都不一样,**按类型名拼一个出来只会猜错,而猜错不报错、只是渲染异常**。所以增量插入一向是**照同类型的现成组件整套抄**。
|
|
49
|
+
|
|
50
|
+
表里没有同类型字段时,模板改从平台取:命令会调 `getFormFieldExist`,拿**平台按这个字段生成的组件模板**(`configPC`)—— 顶层样式键(按类型)与类型专有键平台都给全了,结构尾键从同作用域的现成组件借,位置和身份键由命令自己写。**全程不重建布局。**
|
|
51
|
+
|
|
52
|
+
两点要知道:
|
|
53
|
+
|
|
54
|
+
- 明细表字段拿不到这个接口的模板(它只返回主表与系统字段),但模板是**按类型而不是按作用域**的,此时借主表同类型的那一份。
|
|
55
|
+
- 拿模板只在**真的缺**时才多打一次接口;表里已有同类型字段时,路径与从前一字不差。
|
|
41
56
|
|
|
42
|
-
|
|
57
|
+
### 明细表的字段是横着排的
|
|
43
58
|
|
|
44
|
-
|
|
59
|
+
同一个「加字段」,**主表和明细表落的轴不一样**:主表是一行一个字段(新字段**往下加行**),明细表是一个字段占一列(新字段**往右加列**)。明细表还有自己的一张网格(`workbook` 的键就是 `DetailTable` 组件的 id),明细字段的格子在那张里,不在 `Sheet1`。
|
|
45
60
|
|
|
46
61
|
遇到中止时,两个选择:
|
|
47
62
|
|
|
@@ -137,7 +137,7 @@ body {"module":"ebuilderform","formId":"<formId>","customParam":{...}}
|
|
|
137
137
|
|
|
138
138
|
所以**别指望「字段超 100 之后把老字段挪走」**——至少这条路径不行。能做的只有:**一开始就把新字段建到新表上**。这也解释了设计器的真实用法:先建附属表,后续新增的字段直接落在它上面。
|
|
139
139
|
|
|
140
|
-
**2. 平台会对形状不认的字段回 `200` 但静默不落库。** 在 `batch/save/formField` 那条路上,`DateTime` / `Percent` / `
|
|
140
|
+
**2. 平台会对形状不认的字段回 `200` 但静默不落库。** 在 `batch/save/formField` 那条路上,`DateTime` / `Percent` / `Browser` 三种就是这样——接口回成功,字段根本没建出来。所以 `add-physical-field` **每次写完都回读确认**,「接口回 200」不等于「建上了」。带配置的类型(如 Select 的选项)建完再用对应命令补。
|
|
141
141
|
|
|
142
142
|
## 注意事项
|
|
143
143
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
| 数字 | `Number` | `precision`、`delimiter`、`percent`、`capital` |
|
|
43
43
|
| 金额 | `Money` | `precision`、`delimiter`、`capital` |
|
|
44
44
|
| 开关 | `Switch` | 开关值 |
|
|
45
|
-
| 附件 | `FileComponent`
|
|
45
|
+
| 附件 | `FileComponent` | 附件上传设置(**没有 `Attachment` 这个类型名**) |
|
|
46
46
|
| 图片 | `Image` | 图片上传设置 |
|
|
47
47
|
| 语音 | `AudioRecord` | 语音录制与上传 |
|
|
48
48
|
| 视频 | `VideoRecord` | 视频录制与上传 |
|
|
@@ -20,6 +20,38 @@
|
|
|
20
20
|
| `--error-file <路径>` | 失败数据的保存路径。默认与源文件同目录、同名 + `.错误数据.xlsx` |
|
|
21
21
|
| `--no-error-file` | 不保存失败数据文件(原因仍会打出来) |
|
|
22
22
|
|
|
23
|
+
## 模板怎么填(三处最容易填错)
|
|
24
|
+
|
|
25
|
+
模板第 2 个工作表「模板注意事项说明」里也写了这几条,这里挑出**填错代价最大**的三处:
|
|
26
|
+
|
|
27
|
+
### 1. 「状态(必填)」列只认平台那几个词
|
|
28
|
+
|
|
29
|
+
`试用` / `试用延期` / `正式` / `临时` / `实习` / `离职` / `退休` / `解聘` / `无效`,就这九个 ——
|
|
30
|
+
填其它写法(比如 `1`、`在职`)**整行导入失败**。
|
|
31
|
+
|
|
32
|
+
⚠ 别拿**动作流里「人员状态」**的 `1`(在职)/ `2`(离职)来填这一列,那是另一套取值,两者不通。
|
|
33
|
+
|
|
34
|
+
### 2. 「密码」在第 35 列(AI 列)
|
|
35
|
+
|
|
36
|
+
模板一共 63 列,密码夹在中间那段:
|
|
37
|
+
`AH` 登录名 → **`AI` 密码** → `AJ` 解除账号 → `AK` 安全级别。
|
|
38
|
+
填到隔壁的「安全级别」(第 37 列)**不会报错**,只是那人的密码没设上 —— 属于静默填错。
|
|
39
|
+
|
|
40
|
+
### 3. 有上级/助理的人,拆两批导
|
|
41
|
+
|
|
42
|
+
「上级」「其他上级」「助理」填的是**别人的姓名**,如果那个人也在这张表里,
|
|
43
|
+
**同一批导入可能引用不到**。
|
|
44
|
+
做法:**第一批只导没有任何上级/助理的人**,第二批再导引用他们的那些 ——
|
|
45
|
+
不用改表结构,拆成两个文件依次导即可。
|
|
46
|
+
|
|
47
|
+
- 「上级」列**只填一个人**;要挂多个上级用「其他上级」列,多个之间用 `,` 分隔。
|
|
48
|
+
- 这几列按平台说明,必须是该上级/助理**「重复验证字段」**的值(编号、姓名选其一)。
|
|
49
|
+
|
|
50
|
+
### 别忘了删示例行
|
|
51
|
+
|
|
52
|
+
模板第 2~9 行是 `user001`~`user008` 的**演示数据**(平台自带的),**导入前整行删掉**,
|
|
53
|
+
否则这几行会被当成真人建进组织里。
|
|
54
|
+
|
|
23
55
|
## ⚠ 先 `--dry-run`,再真导
|
|
24
56
|
|
|
25
57
|
批量写组织数据是**外部可见且不好撤销**的操作。导入前先干跑一次:
|
|
@@ -115,7 +147,6 @@ GET /api/file/remotedownload/<fileId>/token/true?authModule=ebatch
|
|
|
115
147
|
然后机构里会多出一个同名分部(父级 = 操作者所在组织),人落在里面。**没有报错、没有警告**,
|
|
116
148
|
`--dry-run` 的预览也看不出来 —— 预览只是把单元格原样回显,**不做任何校验**。
|
|
117
149
|
所以:**分部名必须是机构里已有的名字**,导之前自己核一遍 —— 一次手误就是一条脏组织数据 + 一个错位的人。
|
|
118
|
-
- **模板里的示例行**(`user001`~`user008`)是平台放的演示数据,**导入前务必删掉**,否则会被当成真人建进去。
|
|
119
150
|
- **`importType` 在 ④ 的报文里出现两次**:顶层是空串、真正生效的在 `uploadSet.customObj` 里。
|
|
120
151
|
|
|
121
152
|
## 环境差异
|