weaver-work-cli 0.1.24 → 0.1.25
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/README.md +10 -1
- package/dist/core/output.js +53 -1
- package/dist/internal/e10/auth/commands.js +17 -2
- package/dist/internal/e10/auth/crypto.js +52 -12
- package/dist/internal/e10/auth/xiaoe.js +112 -39
- package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
- package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
- package/dist/shortcuts/caizhilian/operations/specs.js +15 -0
- package/dist/shortcuts/workflow/index.js +55 -1
- package/dist/shortcuts/workflow/operations/form.js +1252 -109
- package/dist/shortcuts/workflow/operations/read.js +75 -35
- package/dist/shortcuts/workflow/operations/shared.js +25 -0
- package/dist/shortcuts/workflow/stdout-compact.js +33 -0
- package/docs/caizhilian.md +4 -3
- package/docs/e10-auth.md +8 -1
- package/node_modules/@napi-rs/keyring/LICENSE +21 -0
- package/node_modules/@napi-rs/keyring/README.md +19 -0
- package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
- package/node_modules/@napi-rs/keyring/index.js +514 -0
- package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
- package/node_modules/@napi-rs/keyring/keytar.js +26 -0
- package/node_modules/@napi-rs/keyring/package.json +125 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1149 -0
- package/node_modules/commander/esm.mjs +16 -0
- package/node_modules/commander/index.js +24 -0
- package/node_modules/commander/lib/argument.js +149 -0
- package/node_modules/commander/lib/command.js +2662 -0
- package/node_modules/commander/lib/error.js +39 -0
- package/node_modules/commander/lib/help.js +709 -0
- package/node_modules/commander/lib/option.js +367 -0
- package/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/node_modules/commander/package-support.json +16 -0
- package/node_modules/commander/package.json +82 -0
- package/node_modules/commander/typings/esm.d.mts +3 -0
- package/node_modules/commander/typings/index.d.ts +1045 -0
- package/package.json +5 -1
- package/skills/weaver-e10-builder/SKILL.md +281 -0
- package/skills/weaver-e10-builder/_catalog.md +94 -0
- package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
- package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
- package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
- package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
- package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
- package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
- package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
- package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
- package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
- package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
- package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
- package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
- package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
- package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
- package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
- package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
- package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
- package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
- package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
- package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
- package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
- package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
- package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
- package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
- package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
- package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
- package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
- package/skills/weaver-e10-builder/assets/icons.db +0 -0
- package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
- package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
- package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
- package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
- package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
- package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
- package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
- package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
- package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
- package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
- package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
- package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
- package/skills/weaver-e10-builder/references/common/map.md +153 -0
- package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
- package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
- package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
- package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
- package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
- package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
- package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
- package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
- package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
- package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
- package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
- package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
- package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
- package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
- package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
- package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
- package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
- package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
- package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
- package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
- package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
- package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
- package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
- package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
- package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
- package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
- package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
- package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
- package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
- package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
- package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
- package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
- package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
- package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
- package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
- package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
- package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
- package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
- package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
- package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
- package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
- package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
- package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
- package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
- package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
- package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
- package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
- package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
- package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
- package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
- package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
- package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
- package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
- package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
- package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
- package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
- package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
- package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
- package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
- package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
- package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
- package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
- package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
- package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
- package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
- package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
- package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
- package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
- package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
- package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
- package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
- package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
- package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
- package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
- package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
- package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
- package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
- package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
- package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
- package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
- package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
- package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
- package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
- package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
- package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
- package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
- package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
- package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
- package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
- package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
- package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
- package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
- package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
- package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
- package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +7 -2
- package/skills/weaver-e10-caizhilian/references/files.md +15 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +48 -3
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +99 -1
- package/skills/weaver-e10-shared/SKILL.md +8 -4
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +7 -5
- package/skills/weaver-e10-workflow/SKILL.md +23 -44
- package/skills/weaver-e10-workflow/references/source-manifest.json +27 -22
- package/skills/weaver-e10-workflow/references/workflow-create.md +238 -85
- package/skills/weaver-e10-workflow/references/workflow-edit.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -4
- package/skills/weaver-e10-workflow/references/workflow-query.md +2 -2
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# 设计器 · 数据集侧栏菜单操作(强制)
|
|
2
|
+
|
|
3
|
+
> **入口**:报表设计器左侧数据集标题 `…` 菜单
|
|
4
|
+
> **页面例**:`/sp/edc/report/designer/{reportId}`
|
|
5
|
+
> **CLI**:`e10-cli report dataset rename|agg|sort|replace|delete|check-used|preview`
|
|
6
|
+
> **鉴权**:e10-login 三项头(`api-auth-headers.md`)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 〇、能力总表
|
|
11
|
+
|
|
12
|
+
| # | UI | API | 说明 |
|
|
13
|
+
|---|-----|-----|------|
|
|
14
|
+
| 1 | **自定义名称** | `GET /api/bs/edc/dataset/rename` | 改 `edc_dataset_dev.name` |
|
|
15
|
+
| 2 | **数据聚合** | `POST/GET …/dataset/aggregationSave\|Get` | 数据集级分组+度量;≠ 页面 `dataPreAgg` |
|
|
16
|
+
| 3 | **数据排序** | `POST/GET …/dataset/sortSave\|Get` | 数据集级多字段排序 |
|
|
17
|
+
| 4 | **替换数据集** | `POST /api/bs/edc/dataset/replaceDataset` | JSON:新源 + `fieldMap`;返回新 datasetId |
|
|
18
|
+
| 5 | **移除** | `POST /api/bs/edc/report/delDataset` | `sourceIds`=**datasetId**;被引用则禁删 |
|
|
19
|
+
|
|
20
|
+
同菜单已有完整指南:
|
|
21
|
+
|
|
22
|
+
| UI | 文档 |
|
|
23
|
+
|----|------|
|
|
24
|
+
| 筛选条件 | `dataset-query-filter-guide.md`(`queryInfoSave`) |
|
|
25
|
+
| 数据预览 | `GET /api/bs/edc/dataset/getPreviewData?dataSetId=`(本指南 §六) |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 一、自定义名称
|
|
30
|
+
|
|
31
|
+
```http
|
|
32
|
+
GET /api/bs/edc/dataset/rename?datasetId={id}&name={显示名}&nameLabelId=-1
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
| 参数 | 必填 | 说明 |
|
|
36
|
+
|------|------|------|
|
|
37
|
+
| `datasetId` | ✅ | 侧栏数据集实例 id |
|
|
38
|
+
| `name` | ✅ | 自定义显示名(空名前端拦截) |
|
|
39
|
+
| `nameLabelId` | 建议 | 无多语言传 `-1` |
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
e10-cli report dataset rename --dataset-id <id> --name "轻资产主表" [--name-label-id -1]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 二、数据聚合(侧栏 · 勿与预聚合混淆)
|
|
48
|
+
|
|
49
|
+
### 2.1 接口
|
|
50
|
+
|
|
51
|
+
| 动作 | 方法 | 路径 |
|
|
52
|
+
|------|------|------|
|
|
53
|
+
| 读 | GET | `/api/bs/edc/dataset/aggregationGet?datasetId=` |
|
|
54
|
+
| 写 | POST | `/api/bs/edc/dataset/aggregationSave` form:`datasetId` + `aggreData`(JSON 数组字符串) |
|
|
55
|
+
|
|
56
|
+
写时服务端先删该 dataset 全部聚合行再插入(全量替换)。表:`edc_reportdsaggregate_dev`。
|
|
57
|
+
|
|
58
|
+
### 2.2 `aggreData` 结构
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
[
|
|
62
|
+
{
|
|
63
|
+
"fieldId": "{datasetId}.{tableId}.{fieldName}",
|
|
64
|
+
"countType": "sum",
|
|
65
|
+
"showName": "库存合计",
|
|
66
|
+
"fieldName": "s_sum_field_xxx"
|
|
67
|
+
},
|
|
68
|
+
{ "groupBy": "{datasetId}.{tableId}.{fieldName}" }
|
|
69
|
+
]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
| 行类型 | 关键字段 | 说明 |
|
|
73
|
+
|--------|----------|------|
|
|
74
|
+
| 度量 | `fieldId` + `countType` + `showName` | `countType`:`sum`/`max`/`min`/`avg`/`count` 等;`fieldName` 常为 `s_{countType}_{leaf}` |
|
|
75
|
+
| 维度 | `groupBy` | 完整 fieldKey;无 `countType` |
|
|
76
|
+
|
|
77
|
+
规则(对齐设计器):
|
|
78
|
+
|
|
79
|
+
- 须同时有维度 + 度量,或两者皆空(清空聚合)
|
|
80
|
+
- 保存后 `fieldsAndOriginFields` 可见字段变为「分组字段 + 度量别名」
|
|
81
|
+
|
|
82
|
+
### 2.3 ≠ 页面「数据预聚合」
|
|
83
|
+
|
|
84
|
+
| | 侧栏「数据聚合」 | 页面「解析优化 · 数据预聚合」 |
|
|
85
|
+
|--|------------------|------------------------------|
|
|
86
|
+
| 存储 | `aggregationSave` / `edc_reportdsaggregate_dev` | `sheetConfig.dataPreAgg` |
|
|
87
|
+
| 指南 | **本文 §二** | `preaggregate-auto-disable-guide.md` |
|
|
88
|
+
| CLI | `e10-cli report dataset agg …` | `e10-cli report py preagg` |
|
|
89
|
+
|
|
90
|
+
有侧栏聚合时,引擎侧预聚合路径会被跳过/弱化。
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
e10-cli report dataset agg get --dataset-id <id>
|
|
94
|
+
e10-cli report dataset agg save --dataset-id <id> --file aggre.json
|
|
95
|
+
e10-cli report dataset agg clear --dataset-id <id>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 三、数据排序
|
|
101
|
+
|
|
102
|
+
| 动作 | 方法 | 路径 |
|
|
103
|
+
|------|------|------|
|
|
104
|
+
| 读 | GET | `/api/bs/edc/dataset/sortGet?datasetId=` |
|
|
105
|
+
| 写 | POST | `/api/bs/edc/dataset/sortSave` form:`datasetId` + `sortData` |
|
|
106
|
+
|
|
107
|
+
全量替换;表 `edc_reportdsorderby_dev`。数组下标 = `priority`(越前越优先)。
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
[
|
|
111
|
+
{ "fieldId": "{datasetId}.{tableId}.{name}", "orderType": "asc" },
|
|
112
|
+
{ "fieldId": "{datasetId}.{tableId}.{name2}", "orderType": "desc" }
|
|
113
|
+
]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`orderType`:`asc` / `desc`。清空:提交 `[]` 或无 `fieldId` 的占位被设计器清掉。
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
e10-cli report dataset sort get --dataset-id <id>
|
|
120
|
+
e10-cli report dataset sort save --dataset-id <id> --file sort.json
|
|
121
|
+
e10-cli report dataset sort clear --dataset-id <id>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 四、替换数据集
|
|
127
|
+
|
|
128
|
+
```http
|
|
129
|
+
POST /api/bs/edc/dataset/replaceDataset
|
|
130
|
+
Content-Type: application/json
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"reportId": 1313049481975267329,
|
|
136
|
+
"builtinId": 旧datasetId,
|
|
137
|
+
"name": "新数据源显示名",
|
|
138
|
+
"sourceType": "LOGIC",
|
|
139
|
+
"sourceId": "新表单sourceId",
|
|
140
|
+
"sourceGroup": "weaver-ebuilder-form-service",
|
|
141
|
+
"appid": "<appId>",
|
|
142
|
+
"fieldMap": [
|
|
143
|
+
{
|
|
144
|
+
"builtinField": "旧字段leaf或度量别名",
|
|
145
|
+
"replaceField": "新字段name",
|
|
146
|
+
"replaceFieldName": "新显示名"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
- 返回 `data` = **新 datasetId**(字符串)
|
|
153
|
+
- 服务端:新建数据集 → 映射字段/筛选/聚合/排序/查询引用 → 删除旧 `builtinId`
|
|
154
|
+
- 影响分析(可选):`POST /api/bs/edc/report/getReplaceFields`(`dataSetId`/`sheetId`/`fields`)
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
e10-cli report dataset replace --file replace-body.json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
替换后须用新 id 再 `fieldsAndOriginFields` / 必要时 remap 单元格 `dataSetId`/`fieldKey`。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 五、移除(删除数据集)
|
|
165
|
+
|
|
166
|
+
### 5.1 引用检查
|
|
167
|
+
|
|
168
|
+
```http
|
|
169
|
+
GET /api/bs/edc/dataset/checkDataSetUsed?reportId=&datasetId=
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`data=true` → 设计器禁止移除(字段等仍引用)。Agent 须先 check,为 true 时提示用户先清画布引用。
|
|
173
|
+
|
|
174
|
+
### 5.2 删除
|
|
175
|
+
|
|
176
|
+
```http
|
|
177
|
+
POST /api/bs/edc/report/delDataset
|
|
178
|
+
form: reportId=<报表ID>&sourceIds=<datasetId>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
> **`sourceIds` 参数名历史遗留,实际传的是 datasetId**,不是表单 sourceId。
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
e10-cli report dataset check-used --report-id <rid> --dataset-id <did>
|
|
185
|
+
e10-cli report dataset delete --report-id <rid> --dataset-id <did> [--force]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
无 `--force` 时若 `checkDataSetUsed=true` 则拒绝删除。
|
|
189
|
+
|
|
190
|
+
注册错误重建场景见 `add-dataset-registration-guide.md`(须带正确 `reportId`+`sourceIds=datasetId`)。
|
|
191
|
+
|
|
192
|
+
### 5.3 ⚠️ 侧栏出现「重复数据源分组」的根因与清理(2026-09-11 实证)
|
|
193
|
+
|
|
194
|
+
**症状**:设计器左侧「数据集」下出现 **两个同名分组**,例如 `党员发展` 与 `党员发展(业务模块)`,字段列表完全相同;或分组名缺失 `(业务模块)` 后缀。
|
|
195
|
+
|
|
196
|
+
**根因(两层,须分查)**:
|
|
197
|
+
|
|
198
|
+
| 层 | 现象 | 定位接口 |
|
|
199
|
+
|---|---|---|
|
|
200
|
+
| **① 报表挂载了重复数据集** | `dataset/list` 返回 **2 条同 `sourceId`、同 `name`** 的数据集记录 | `GET /api/bs/edc/dataset/list?hasField=true&reportId=` |
|
|
201
|
+
| **② 画布存在游离单元格** | 某单元格 `dataSetId` 指向第二个数据集,常在**另一张 sheet 或表格远端的孤立格** | 遍历 workbook 全部 sheet 的 `dataTable`,按 `cellType.dataSetId` 统计 |
|
|
202
|
+
|
|
203
|
+
> **关键陷阱**:游离单元格**不一定在 Sheet1**。本例游标藏在 **Sheet2 的 B3**(`sheetIndex:1, x:2, y:1`),只扫 Sheet1 会漏诊。**必须遍历全部 sheet**。
|
|
204
|
+
|
|
205
|
+
**左侧树显示名的权威来源**:`GET /api/bs/edc/dataset/listWithPageReport?hasField=true&reportId=` → 返回**源级**记录(`id` 是 **sourceId 而非 datasetId**),其 `name`/`tableText` 决定分组显示名。
|
|
206
|
+
- 正常:`name = '事项清单(uf_ydsxqd_1)'`(业务模块名 + 物理表名)
|
|
207
|
+
- 异常:`name = '党员发展'`(纯中文名,无后缀)→ 面板显示纯名
|
|
208
|
+
|
|
209
|
+
> **一键体检**:`e10-cli report verify bind <reportId> [appId]` 会直接列出
|
|
210
|
+
> `duplicate_dataset_mount`(同源重复挂载)、`dataset_name_mismatch`(回显名 vs 源级名)、
|
|
211
|
+
> `display_mismatch`(单元格文案 vs 字段真实显示名)三类待确认项。
|
|
212
|
+
>
|
|
213
|
+
> ⚠️ **非物理表表单**(`form/obj/getList` → `isPhysical:false`、`tableType:""`)本身就没有物理表名,
|
|
214
|
+
> 源级名只能是纯中文名(本例报表 `1313789294296735745` 的 14 张表全为此类)——
|
|
215
|
+
> 这**不是**报表脚本能改的,要带后缀需在 eBuilder 侧给表单配置物理表/业务模块。
|
|
216
|
+
|
|
217
|
+
**清理步骤(顺序不可颠倒)**:
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
# 1) 先摘除游标:遍历 workbook 全 sheet,删除/改绑指向重复数据集的单元格
|
|
221
|
+
for sheet_name, sh in wb["sheets"].items():
|
|
222
|
+
dt = (sh.get("data") or {}).get("dataTable") or {}
|
|
223
|
+
for ri in list(dt):
|
|
224
|
+
for ci in list(dt[ri]):
|
|
225
|
+
ct = ((dt[ri][ci].get("style") or {}).get("cellType")) or {}
|
|
226
|
+
if ct.get("dataSetId") == DUP_DS:
|
|
227
|
+
del dt[ri][ci] # 或改绑 KEEP_DS
|
|
228
|
+
|
|
229
|
+
# 2) saveReportDevInfo 落库(提交 workbook,gzip+base64,带 designKey)
|
|
230
|
+
|
|
231
|
+
# 3) 再调用 delDataset 删除重复数据集
|
|
232
|
+
POST /api/bs/edc/report/delDataset form: reportId=<rid>&sourceIds=<dupDatasetId>
|
|
233
|
+
|
|
234
|
+
# 4) 校验
|
|
235
|
+
dataset/list → 只剩 1 条同源数据集
|
|
236
|
+
getReportDevInfo.fields → 无任何字段引用 DUP_DS(注意看 sheetIndex 分布)
|
|
237
|
+
列表/面板 → 顶层分组只剩 1 个
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> **顺序原因**:被引用时 `delDataset` 会被服务端拒绝(引用检查)。必须先清画布再删数据集。
|
|
241
|
+
>
|
|
242
|
+
> **验证要点**:`getReportDevInfo.fields` 按 `(sheetIndex, dataSetId)` 分组统计,确认 `DUP_DS` 计数为 0 —— 只看 Sheet1 会假阳性通过。
|
|
243
|
+
>
|
|
244
|
+
> **`delDataset` 返回 `code:200` 但 `data` 为空是正常的**;探针传 `sourceIds=0` 同样返回 200 且不删任何东西,**不可用返回码判断是否真的删掉了**,必须回读 `dataset/list` 核对。
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 六、数据预览(同菜单)
|
|
249
|
+
|
|
250
|
+
```http
|
|
251
|
+
GET /api/bs/edc/dataset/getPreviewData?dataSetId={id}&isFront=true
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
e10-cli report dataset preview --dataset-id <id>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 七、Agent 检查清单
|
|
261
|
+
|
|
262
|
+
- [ ] 自定义名称走 `rename`,未误改 `sourceName` 当永久显示名唯一手段
|
|
263
|
+
- [ ] 「数据聚合」未写成改 `sheetConfig.dataPreAgg`
|
|
264
|
+
- [ ] 聚合/排序 JSON 用完整 fieldKey;保存后回读 Get
|
|
265
|
+
- [ ] 替换带 `fieldMap`;拿到新 datasetId 再继续
|
|
266
|
+
- [ ] 删除前 `checkDataSetUsed`;`sourceIds`=datasetId
|
|
267
|
+
- [ ] **重复分组定位:先 `dataset/list` 查重复数据集,再遍历「全部 sheet」找游离单元格**(勿只看 Sheet1)
|
|
268
|
+
- [ ] 清理顺序:**先摘游标 → saveReportDevInfo → 再 delDataset**
|
|
269
|
+
- [ ] 删除成功以 **回读 `dataset/list`** 为准,不以返回码为准
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 关联
|
|
274
|
+
|
|
275
|
+
- `dataset-query-filter-guide.md` — 筛选条件
|
|
276
|
+
- `add-dataset-registration-guide.md` — 添加/重建
|
|
277
|
+
- `preaggregate-auto-disable-guide.md` — 页面预聚合
|
|
278
|
+
- `dataset-table-field-contract-guide.md` — 字段落库契约(`tableName` 等)
|
|
279
|
+
- `report-designer-feature-map.md` §六
|
|
280
|
+
- `field-bind-exact-match-guide.md` — 字段绑定
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# 数据集表名与字段映射契约(强制 · 历史回归保护)
|
|
2
|
+
|
|
3
|
+
> **事故(已验证 · 报表 `1313789294296735745`)**
|
|
4
|
+
> 技能包从「手工分步建表」重构为 `build spec`(spec_build 化)后,
|
|
5
|
+
> `e10-cli report build` 的 `fieldCell()` 在生成 `FieldCellType` 时**丢失了 4 个必需字段**:
|
|
6
|
+
>
|
|
7
|
+
> | 丢失字段 | 正确值 | 后果 |
|
|
8
|
+
> |----------|--------|------|
|
|
9
|
+
> | `tableName` | `数据集名(业务模块)` / `数据集名(表单)` | **左侧数据源不显示「模块类型」后缀** |
|
|
10
|
+
> | `fieldId` | 数据集字段雪花 id | 属性面板字段回显不全 |
|
|
11
|
+
> | `fieldName` | 字段技术名 `field_<id>` | 同上 |
|
|
12
|
+
> | `fieldText` | 字段显示名 | 同上 |
|
|
13
|
+
>
|
|
14
|
+
> 证据(同一报表内对照组):
|
|
15
|
+
> - Agent 建的 10 个 Field:`tableName=None`(异常)
|
|
16
|
+
> - 用户在设计器手动绑的 2 个 Field:`tableName='党员发展(业务模块)'`(正确)
|
|
17
|
+
> - 平台原生报表 `772466395278696448`:`tableName='轻资产处理(表单)'`,9/10 非空
|
|
18
|
+
> - 平台原生报表 `799097275701215232`:16/16 非空
|
|
19
|
+
>
|
|
20
|
+
> **根因不是接口、不是服务端** —— 是建表脚本写入的 `cellType` 本身就缺字段。
|
|
21
|
+
> 旧包 `references/data_source_rule.md` §2.2/§2.5 与 `e10-cli report verify bind` 有完整契约,
|
|
22
|
+
> 重构时**未迁移**,导致知识随重构丢失。
|
|
23
|
+
>
|
|
24
|
+
> **⚠️ 2026-09-11 二次实证校正(重要)**:修复该报表时,从设计器实际请求解出真实 workbook,
|
|
25
|
+
> 对照用户手绑字段发现 —— **`fieldId` / `fieldName` / `fieldText` / `dateTimeProp` 在服务端落库的
|
|
26
|
+
> cellType 里同样是缺失的**(用户手绑字段也没有),它们由设计器**运行时装配**,不属落库契约。
|
|
27
|
+
> **真正需要落库、且能对照验证的只有 `tableName` 一项。** 上表把三件套标为「必需」属过度设计,
|
|
28
|
+
> 但**写上去无害**(幂等),建表脚本保留即可;**修复存量报表时只需补 `tableName`**。
|
|
29
|
+
>
|
|
30
|
+
> **⚠️⚠️ 2026-09-11 第三次实证校正(关键 · 推翻上一条因果)**:
|
|
31
|
+
> 上文「`tableName` 缺失 → 左侧数据源不显示模块类型后缀」的**因果链是错的**。
|
|
32
|
+
>
|
|
33
|
+
> 决定性对照(同一环境,平台原生/健康报表):
|
|
34
|
+
>
|
|
35
|
+
> | 报表 | Field 单元格 `tableName` | 左侧面板显示 | 结论 |
|
|
36
|
+
> |---|---|---|---|
|
|
37
|
+
> | `1313798296523022337`(销售单,健康) | **全部 10 个为 `None`** | **完全正常** | `tableName` 与显示名**无关** |
|
|
38
|
+
> | `1313789294296735745`(党员发展,问题) | 10 个 `None` + 1 个有值 | 出现重复分组/缺后缀 | 真实原因见下 |
|
|
39
|
+
>
|
|
40
|
+
> **左侧数据源「分组显示名」的唯一权威来源** = `GET /api/bs/edc/dataset/listWithPageReport?hasField=true&reportId=`
|
|
41
|
+
> 返回的**源级记录**(`id` 即 **sourceId**,非 datasetId)的 `name` / `tableText`:
|
|
42
|
+
>
|
|
43
|
+
> | 状态 | `name` / `tableText` 形态 |
|
|
44
|
+
> |---|---|
|
|
45
|
+
> | 正常 | `事项清单(uf_ydsxqd_1)`、`进销存-销售单(uf_jxcxsd)`(业务模块名 + 物理表名/表单标识) |
|
|
46
|
+
> | 异常 | `党员发展`(纯中文名,无后缀) |
|
|
47
|
+
>
|
|
48
|
+
> **故 `tableName` 的正确落库意义**:它是**单元格级**的字段归属标记(供属性面板/导出识别「这个字段来自哪个源表」),
|
|
49
|
+
> **不是**左侧树的显示名来源。补它有益(属性面板回显更全),但**修不了面板显示名问题**。
|
|
50
|
+
>
|
|
51
|
+
> **面板显示名异常的真实定位路径** → 见 `dataset-sidebar-ops-guide.md` §5.3:
|
|
52
|
+
> ① `dataset/list` 是否挂载了重复数据集;② 遍历**全部 sheet** 找引用重复数据集的游离单元格;③ 源级 `name` 是否带后缀。
|
|
53
|
+
>
|
|
54
|
+
> **校验口径修正**:`tableName` 非空率**不能**作为「面板显示名正确」的判据;
|
|
55
|
+
> 应改用 `dataset/list` 去重 + `listWithPageReport.name` 含后缀 + 全 sheet 无游离 `dataSetId` 三项联合校验。
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 一、`FieldCellType` 必需字段全表
|
|
60
|
+
|
|
61
|
+
服务端从 `workbook.sheets.Sheet1.data.dataTable[行][列].style.cellType`
|
|
62
|
+
反解出 `getReportDevInfo.fields[]`。**cellType 里没有的字段,回读就是 `None`。**
|
|
63
|
+
|
|
64
|
+
| 字段 | 是否必需 | 值 | 说明 |
|
|
65
|
+
|------|----------|-----|------|
|
|
66
|
+
| `typeName` | ✅ | `FieldCellType` | 固定 |
|
|
67
|
+
| `cellType` | ✅ | `Field` | 固定 |
|
|
68
|
+
| `name` | ✅ | `field_<雪花>` | 必须逐字等于 `fieldsKey[].name` |
|
|
69
|
+
| `nameIndex` | ✅ | 底层 FORM sourceId | **不是字段 id** |
|
|
70
|
+
| `text` | ✅ | 字段显示名 | |
|
|
71
|
+
| `dataSetId` | ✅ | 报表内部注册 id | `dataset/list` 的 `id` |
|
|
72
|
+
| **`tableName`** | ○ 建议写 | **`数据集名(业务模块)`** | 单元格级字段归属标记;**非**面板显示名来源(见开头三次校正) |
|
|
73
|
+
| `fieldId` | ○ 建议写 | 字段雪花 id | 落库本不含;设计器运行时装配,写入幂等无害 |
|
|
74
|
+
| `fieldName` | ○ 建议写 | `field_<雪花>` | 同上 |
|
|
75
|
+
| `fieldText` | ○ 建议写 | 字段显示名 | 同上 |
|
|
76
|
+
| `fieldKey` | ✅ | `dataSetId.nameIndex.name` | 三段式 |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 二、`tableName` 后缀由注册契约决定
|
|
81
|
+
|
|
82
|
+
`tableName` = **数据集显示名 + 后缀**,后缀取决于 `addDataset` 的注册类型:
|
|
83
|
+
|
|
84
|
+
| 注册形态 | `sourceType` / `sourceGroup` | 后缀 | 适用 |
|
|
85
|
+
|----------|------------------------------|------|------|
|
|
86
|
+
| **A(默认)** | `LOGIC` + `weaver-ebuilder-form-service` | **`(业务模块)`** | 普通应用表单 |
|
|
87
|
+
| **B(共享表)** | `form` + `<appId>` | **`(表单)`** | `xxx-共享表` 类应用 |
|
|
88
|
+
| **C(数据加工 SQL 视图)** | `ETEAMS` + `sql` | **无后缀**(= `datasetName` 原样) | 数据集来自「数据加工」SQL 视图 |
|
|
89
|
+
|
|
90
|
+
> **形态 C (2026-09-14 · 报表 `1314970921403138199`)**:数据集「考勤汇总报表(优化)」
|
|
91
|
+
> (`sourceType=ETEAMS` / `sourceGroup=sql`)→ 设计器手绑单元格 `tableName` = **`考勤汇总报表(优化)`**,
|
|
92
|
+
> 且 `dataset/fieldsAndOriginFields.fieldsKey[].datasetName` / `tableText` 也都是这个裸名。
|
|
93
|
+
> **判断口径(三条一致即可定值)**:① 设计器里已有手绑单元格 → 用它的 `tableName`;
|
|
94
|
+
> ② 否则用 `fieldsKey[].datasetName`;③ 都没有才按 `dataset/list[].name`。
|
|
95
|
+
|
|
96
|
+
> 与 `add-dataset-registration-guide.md` §一 的两种注册形态一一对应。
|
|
97
|
+
> **禁止**给共享表硬套 `(业务模块)` —— 后缀必须与注册形态一致。
|
|
98
|
+
|
|
99
|
+
**取值优先级**(服务端常不回传,必须脚本兜底):
|
|
100
|
+
|
|
101
|
+
1. `fieldsKey[].tableName`(服务端有则用)
|
|
102
|
+
2. `fieldsKey[].datasetName`
|
|
103
|
+
3. `datasetLabel + datasetSuffix(sourceType)` ← **兜底,保证恒非空**
|
|
104
|
+
|
|
105
|
+
`datasetLabel` 来自 `dataset/list` 的 `name`(即 `addDataset` 的 `sourceName`),
|
|
106
|
+
由 `spec_lib.resolveDataset()` 回传、`fieldsKeyOf()` 注入到每个字段。
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 三、字段三件套取值来源
|
|
111
|
+
|
|
112
|
+
| 字段 | 来源 |
|
|
113
|
+
|------|------|
|
|
114
|
+
| `fieldId` | `fieldsKey[].config.fieldId`(**首选**)→ `fieldsKey[].fieldId` |
|
|
115
|
+
| `fieldName` | `fieldsKey[].name` |
|
|
116
|
+
| `fieldText` | `fieldsKey[].text`(→ `showName` → 列标题) |
|
|
117
|
+
|
|
118
|
+
`fieldsKey[]` 可用键(`fieldsAndOriginFields?isFront=true`):
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
name / text / originName / fieldType / formatType
|
|
122
|
+
dataSetId / nameIndex / tableId / tableText / datasetName
|
|
123
|
+
config{ fieldId, formId, sformId, formName, componentKey, ... }
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 三点五、两接口返回格式对照(**以 `fieldsAndOriginFields` 为准** · 2026-09-11 )
|
|
127
|
+
|
|
128
|
+
同一表单 `sourceId=753880319550169088` 双接口 30/30 逐条比对:
|
|
129
|
+
|
|
130
|
+
| 接口 | 信封(顶层) | 字段元素 | `dataSetId` |
|
|
131
|
+
|------|--------------|----------|-------------|
|
|
132
|
+
| `GET /dataset/fieldsBySource?sourceId=&sourceType=logic&groupId=` | `data` = **裸数组** `[{…}]` | 18 键 | **恒 `"0"`**(未落库) |
|
|
133
|
+
| `GET /dataset/fieldsAndOriginFields?datasetId=&hasField=true&isFront=true&reportId=` | `data` = **对象** `{ fieldsKey:[…], originFieldsKey:[…] }` | 18 键 | **真实 datasetId** |
|
|
134
|
+
|
|
135
|
+
逐键差异统计:**仅 `dataSetId` 30/30 不同**;其余 17 键
|
|
136
|
+
(`name` / `text` / `originName` / `fieldType` / `originFieldType` / `usage` / `config` /
|
|
137
|
+
`formatType` / `showOrder` / `tableId` / `tableText` / `nameIndex` / `datasetName` /
|
|
138
|
+
`originField` / `dsSelectField` / `dsBrowserField` / `deleteType`)**完全一致**。
|
|
139
|
+
|
|
140
|
+
**统一归一化入口**:`spec_lib.normalizeFieldList(payload, { datasetId })`
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
const { fields } = normalizeFieldList(res, { datasetId }); // 冒号:任一接口 → 字段元素数组
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
- 抹平「裸数组 / `{fieldsKey}` 对象 / `{fields}` 对象」三种信封 → 一律返回**字段元素数组**;
|
|
147
|
+
- `datasetId` 传入时**覆盖** `dataSetId`(`fieldsBySource` 恒为 `0`,**直接落库会绑错数据集**);
|
|
148
|
+
- 返回 `{ fields, originFields, shape, dataSetIdInjected }`,`shape ∈ bare-array | fieldsKey-object | fields-array | empty`。
|
|
149
|
+
|
|
150
|
+
> **禁止**把 `fieldsBySource` 的原始 `data`(裸数组)当成 `{fieldsKey}` 取 —— `data.fieldsKey` 会是 `undefined`。
|
|
151
|
+
> **禁止**把 `fieldsBySource` 元素原样写入 `cellType.dataSetId` —— 必须换成**本报表真实 datasetId**。
|
|
152
|
+
> 另:语义上的「返回 data」= 接口的 `json.data`;`json.code === 200` 表示成功。
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 四、落库后强制门禁
|
|
157
|
+
|
|
158
|
+
`build spec` 已在 `getReportDevInfo` 回读阶段自动校验:
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
const fieldCells = fields.filter((f) => f.cellType === 'Field');
|
|
162
|
+
const missingTableName = fieldCells.filter((f) => !f.tableName);
|
|
163
|
+
if (missingTableName.length) {
|
|
164
|
+
console.error(`WARN ${missingTableName.length}/${fieldCells.length} 个 Field 单元格缺 tableName`);
|
|
165
|
+
process.exitCode = 2; // 非零退出,提示需修正
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
输出 JSON 附带:`tableName`(首格值)、`tableNameMissing`(缺失数)。
|
|
170
|
+
|
|
171
|
+
| 检查 | 通过标准 |
|
|
172
|
+
|------|----------|
|
|
173
|
+
| `tableName` 非空率 | **100%**(`tableNameMissing == 0`) |
|
|
174
|
+
| 后缀与注册形态一致 | LOGIC→`(业务模块)`;form→`(表单)` |
|
|
175
|
+
| `fieldId` / `fieldName` / `fieldText` 齐全 | 非空 |
|
|
176
|
+
| `name` ∈ fieldsKey | 见 `field-bind-exact-match-guide.md` |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 四点五、修复存量报表(tableName 缺失)— 最小侵入路径 ✅ 已验证
|
|
181
|
+
|
|
182
|
+
> **场景**:报表已落库,但 `tableName` 缺失(旧脚本产物)。
|
|
183
|
+
> **报表 `1313789294296735745` 修复成功(HTTP 200 + 双向验证通过)。**
|
|
184
|
+
|
|
185
|
+
**关键接口认知(务必先读)**
|
|
186
|
+
|
|
187
|
+
| 接口 | 提交物 | 易错点 |
|
|
188
|
+
|------|--------|--------|
|
|
189
|
+
| `saveReportDevInfo` | **`workbook`**(gzip + base64) | ❌ 用 `fields=<json>` 提交 → **400 Bad Request** |
|
|
190
|
+
| `getReportDevInfo` | 返回 `fields[]` | ⚠️ 只有 `cellType: "Field"/"Const"` **类型标记**,**不含字段绑定明细**;明细只在 workbook 里 |
|
|
191
|
+
|
|
192
|
+
**`saveReportDevInfo` 完整表单(7 字段,multipart)**
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
groupId / appId / reportId / name / nameLabelId / designKey / workbook
|
|
196
|
+
```
|
|
197
|
+
- `designKey` 是**乐观锁**,必须取线上当前值(`getReportDevInfo.data.designKey`),否则拒写
|
|
198
|
+
- `workbook` = `base64(gzip(json.dumps(workbook), mtime=0))`
|
|
199
|
+
|
|
200
|
+
**获取「当前真实 workbook」(唯一可靠来源)**
|
|
201
|
+
|
|
202
|
+
线上 `getReportDevInfo` **拿不到** `dataTable`(其 `workbookProps.sheets` 为空 `{}`)。正确做法:
|
|
203
|
+
|
|
204
|
+
1. CDP 打开设计器:`https://{host}/sp/edc/report/designer/{reportId}`
|
|
205
|
+
2. 派发 **Ctrl+S**(`Input.dispatchKeyEvent`,`modifiers:2`, `key:"s"`)触发一次保存
|
|
206
|
+
3. 从 `Network.requestWillBeSent` 抓 `saveReportDevInfo` 的 `postData`
|
|
207
|
+
4. 按 `name="workbook"\n\n(.*?)\n-{2,}`(**换行是 `\n`,不是 `\r\n`**)提取 → `gzip.decompress(base64.b64decode(...))`
|
|
208
|
+
|
|
209
|
+
**修复步骤**
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
wb = json.loads(解码后的workbook)
|
|
213
|
+
dt = wb["sheets"]["Sheet1"]["data"]["dataTable"] # {row: {col: {"style": {...}, "tag": {...}}}}
|
|
214
|
+
for r in dt:
|
|
215
|
+
for c in dt[r]:
|
|
216
|
+
ct = (dt[r][c].get("style") or {}).get("cellType") or {}
|
|
217
|
+
if ct.get("cellType") != "Field": continue
|
|
218
|
+
if str(ct.get("dataSetId")) == DS_OLD and not ct.get("tableName"):
|
|
219
|
+
newct = {}
|
|
220
|
+
for k, v in ct.items(): # 保持键顺序:插在 dataSetId 之后
|
|
221
|
+
newct[k] = v
|
|
222
|
+
if k == "dataSetId": newct["tableName"] = "党员发展(业务模块)"
|
|
223
|
+
dt[r][c]["style"]["cellType"] = newct
|
|
224
|
+
# 重新编码并提交 saveReportDevInfo
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**验证(双向)**
|
|
228
|
+
|
|
229
|
+
| 检查 | 通过标准 |
|
|
230
|
+
|------|----------|
|
|
231
|
+
| `getReportDevInfo` 回读 | `fields[]` 中带 `tableName` 的数量 = Field 总数 |
|
|
232
|
+
| 设计器实时 workbook | dataTable 内 `Field` 单元格 `tableName` 缺失数 = 0 |
|
|
233
|
+
|
|
234
|
+
> 结果:12/12 带 tableName ✅;设计器实时 workbook 11/11 Field 全齐、0 缺失 ✅
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 四点六、修复存量报表(tableName 缺失)— **免浏览器反向重建** ✅ 已验证(首选)
|
|
239
|
+
|
|
240
|
+
> **场景**:整张报表的 Field 单元格 `tableName` 全为空 → 设计器里单元格/属性面板不回显数据集名;
|
|
241
|
+
> 但**孤例**(某个手绑单元格)是对的。用户会说「参考 XX 单元格的规则才对,调整其他字段」。
|
|
242
|
+
>
|
|
243
|
+
> **报表 `1314970921403138199` 成功(2026-09-14)**:
|
|
244
|
+
> 48 个 Field 中 47 个 `tableName=""`,唯 `AM5`(row4,col38)为 `考勤汇总报表(优化)` → 一键补齐。
|
|
245
|
+
|
|
246
|
+
### 为什么优先走这条路(而不是 §四点五 的 CDP 实际请求)
|
|
247
|
+
|
|
248
|
+
`getReportDevInfo` 的 `workbookProps.sheets` **恒为 `{}`**,拿不到 `dataTable`;
|
|
249
|
+
但它的 **`fields[]` 是服务端对 workbook 的逐单元格回读**,字段足够重建:
|
|
250
|
+
`x/y`、`xCount/yCount`(合并跨度)、`leftX/leftY/topX/topY`(父子格)、`expandType/displayType`、
|
|
251
|
+
`countType`、`style`(整份 style JSON 串)、`name/text/nameIndex/dataSetId/fieldKey/tableName`、`width/height`。
|
|
252
|
+
**→ 不需要浏览器、不需要按键实际请求**。§四点五 的 CDP 路径仅作兜底。
|
|
253
|
+
|
|
254
|
+
### 重建规则(照抄即可)
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
dataTable[x][y] = { style: { ...JSON.parse(fields[].style), cellType }, tag: { fixed:false, formatterType:['common'] } }
|
|
258
|
+
spans = 每个 xCount>1 || yCount>1 的单元格 → { row:x, col:y, rowCount:xCount, colCount:yCount }
|
|
259
|
+
columns[c] = fields[].width(该列任一单元格); rows[r] = fields[].height
|
|
260
|
+
sheet.tag = sheetProps[0] 的 childMerge / showLocation / filterSheet / tableNameSuffix
|
|
261
|
+
+ JSON.parse(columnConfig) + JSON.parse(sheetConfig)
|
|
262
|
+
workbook = { version, __scrollbarShowMax, __excelSheet, workbookConfig:{}, sheets }
|
|
263
|
+
cellType 键序 = 设计器真实键序(见 §一,逐字照排)
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### ⚠️ 四个坑(踩过,必须照做,否则 `{"code":500,"msg":"报表内部错误"}`)
|
|
267
|
+
|
|
268
|
+
| # | 坑 | 正确做法 |
|
|
269
|
+
|---|----|----------|
|
|
270
|
+
| 1 | **`fields[]` 不回传 `typeName`/`allowOverflow`/`editorType`/`groupType`/`isActiveParent`/`arrowType`**,但服务端保存**必须要 `typeName`** | 这 6 个键由脚本**强制兜底**:`typeName='FieldCellType'/'ConstCellType'`、`allowOverflow=true`、`editorType=1`、`groupType=null`;`arrowType` 由 `expandType` 派生(Vertical/Horizontal/None);`isActiveParent` = Field 且 `leftX=-1 && topX=-1 && expandType∈{Vertical,Horizontal}` |
|
|
271
|
+
| 2 | `dateTimeProps` / `highlightDatas` / `allNeedFields` / `fillDtIndex` / `fillShow` / `fillAddLine` / `fillDelLine` / `fillMergeShow` / `fillSelectId` / `fillTextLength` 是**服务端保存时自行派生**的,设计器保存的 workbook 里**没有** | **排除,不得回写**(回写即 500) |
|
|
272
|
+
| 3 | `cellType.formatterType` 设计器保存值是 **`[]`**(不是 `['common']`;`['common']` 在 `tag.formatterType`) | 强制 `formatterType: []` |
|
|
273
|
+
| 4 | `designKey` **每次 GET 都返回新值**(即时令牌,不是静态乐观锁)→ 读后隔久了再存会失败 | 读取 `designKey` 与 `saveReportDevInfo` 必须**紧邻** |
|
|
274
|
+
|
|
275
|
+
两个次要坑:
|
|
276
|
+
- `fields[].width/height` **可能合法为 0**(Excel 隐藏列,如「人员ID」)→ 不能用 `Number(w) || 40` 兜底,会把 0 吞成 40。
|
|
277
|
+
- 合并区覆盖但**无单元格**的列(日期块被合并掉的第 2/3 列)在 `fields[]` 里不存在 → 沿用左侧最近已知列宽,避免列宽塌成默认值。
|
|
278
|
+
|
|
279
|
+
> ⚠️ **与 `safe_report_save.js` 的一处分歧**:该脚本的 `stripWorkbookGridlineKeys()` 会删掉
|
|
280
|
+
> `gridline` / `__gridline`,注释称「存在即 500」。**在本环境(itsm.hongjing-wh.com:5001) 不成立**:
|
|
281
|
+
> 带 `__gridline: 0` 的 workbook 保存返回 200(报表 `1314970921403138199` 连续两次)。
|
|
282
|
+
> 该断言可能只对某站点成立 —— 保留删除动作更安全,但**不要据此判定其他 500 的成因**。
|
|
283
|
+
|
|
284
|
+
### 合并单元格的副作用(重要)
|
|
285
|
+
|
|
286
|
+
提交含合并区全部单元格的 workbook 时,**服务端/设计器会丢掉被合并覆盖的单元格,只留左上角**。
|
|
287
|
+
例:日期带 `(0,45)(0,46)(0,47)` 三格 + span → 回读只剩 `(0,45)`。
|
|
288
|
+
**→ 重建时不要凭空补这些格子**;`fields[]` 里没有就是不该有。
|
|
289
|
+
|
|
290
|
+
### 现成脚本
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# 默认 dry-run(打印计划 + 保真自检,不落库)
|
|
294
|
+
node e10-cli report fix table-name --report-id <rid> [--app-id <aid>] \
|
|
295
|
+
[--table-name "<数据集名>"] [--restore-from <备份workbook.json>]
|
|
296
|
+
# 确认后落库
|
|
297
|
+
node e10-cli report fix table-name --report-id <rid> --apply
|
|
298
|
+
```
|
|
299
|
+
- 自动定值:`--table-name` > `fieldsKey[].datasetName` > `dataset/list[].name`
|
|
300
|
+
- `--restore-from`:把备份 workbook 中「线上已不存在」的单元格补回(例如被误删的手绑单元格)
|
|
301
|
+
- 内置门禁:重建保真度不一致即拒绝保存;保存后快照 diff 非 `tableName` 有差异则退出码 2
|
|
302
|
+
- 保存**必须** `--apply`(整份替换,防误覆盖)
|
|
303
|
+
|
|
304
|
+
### 验收口径(保存前后 fields[] 快照 diff)
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
保存前 fields = A(含孤例),保存后 fields = B
|
|
308
|
+
diff(A,B) 期望:仅 `tableName` 变化(条数 = 缺失数)+ 可选 `(新增)`(补回的手绑单元格)
|
|
309
|
+
其余键(cellType/name/dataSetId/父子格/expandType/displayType/style…)必须 0 差异
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
再跑 `e10-cli report verify all <rid> <appId>`(`ok:true, errors:[]`)+ 渲染回读
|
|
313
|
+
(`view/analysis` → `getJsonStr` → gunzip:`rowCount`/表头纵向合并条数/数据行非空数)确认版面未坏。
|
|
314
|
+
|
|
315
|
+
> ⚠️ **重建会覆盖服务端现状**:`saveReportDevInfo` 是**整份替换**。
|
|
316
|
+
> 若线上存在「`fields[]` 也看不到」的内容(未知键),重建会丢。故保存前**先把重建出的
|
|
317
|
+
> 『原样 workbook』落一份备份**(本脚本 `--restore-from` 亦依赖它补回被误删的手绑单元格)。
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
- ❌ 只在 `fields[]` 回读层「补」tableName —— 必须写入 workbook 的 `cellType`,服务端才会落库
|
|
323
|
+
- ❌ **照抄 `fields[]` 的键集重建 cellType** —— `typeName` 等 6 个键服务端不回传,漏了必 500(见 §四点六 坑 1)
|
|
324
|
+
- ❌ **把服务端派生键回写 cellType**(`dateTimeProps`/`highlightDatas`/`allNeedFields`/`fill*`)—— 必 500(坑 2)
|
|
325
|
+
- ❌ 给共享表(form 契约)写 `(业务模块)` 后缀;给 SQL 视图(ETEAMS/sql)硬加后缀(形态 C 无后缀)
|
|
326
|
+
- ❌ 用 `saveReportDevInfo` 的 `fields[]` 数组下发字段 —— 服务端**只认 workbook**
|
|
327
|
+
- ❌ 重构时把本契约从 references 删除(本事故成因)
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## 六、相关文档
|
|
332
|
+
|
|
333
|
+
| 文档 | 关系 |
|
|
334
|
+
|------|------|
|
|
335
|
+
| `add-dataset-registration-guide.md` | 两种注册形态(决定后缀) |
|
|
336
|
+
| `field-bind-exact-match-guide.md` | `name` 逐字匹配 fieldsKey |
|
|
337
|
+
| `spec-build-schema.md` | `build spec` 声明式用法 |
|
|
338
|
+
| `query-condition-api-guide.md` §2.1.2 | `browserType` 富对象(关联浏览分类元数据接口) |
|
|
339
|
+
| 旧包 `data_source_rule.md` §2.2/§2.5 | 本契约原始出处(已迁回本文件) |
|