weaver-e10-builder 1.6.10 → 1.6.12
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/dist/commands/form-browser-definition.d.ts.map +1 -1
- package/dist/commands/form-browser-definition.js +108 -7
- package/dist/commands/form-browser-definition.js.map +1 -1
- package/dist/commands/form-browser-scope-rules.d.ts +27 -0
- package/dist/commands/form-browser-scope-rules.d.ts.map +1 -0
- package/dist/commands/form-browser-scope-rules.js +141 -0
- package/dist/commands/form-browser-scope-rules.js.map +1 -0
- package/dist/commands/form-browser-scope-tree.d.ts +14 -0
- package/dist/commands/form-browser-scope-tree.d.ts.map +1 -0
- package/dist/commands/form-browser-scope-tree.js +115 -0
- package/dist/commands/form-browser-scope-tree.js.map +1 -0
- package/dist/commands/matrix-maintainer.d.ts +3 -0
- package/dist/commands/matrix-maintainer.d.ts.map +1 -0
- package/dist/commands/matrix-maintainer.js +117 -0
- package/dist/commands/matrix-maintainer.js.map +1 -0
- package/dist/commands/matrix.d.ts.map +1 -1
- package/dist/commands/matrix.js +2 -0
- package/dist/commands/matrix.js.map +1 -1
- package/dist/commands/report-admin.d.ts.map +1 -1
- package/dist/commands/report-admin.js +378 -2
- package/dist/commands/report-admin.js.map +1 -1
- package/dist/commands/report-validate.d.ts.map +1 -1
- package/dist/commands/report-validate.js +1102 -3
- package/dist/commands/report-validate.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +341 -3
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/role.d.ts.map +1 -1
- package/dist/commands/role.js +354 -0
- package/dist/commands/role.js.map +1 -1
- package/dist/commands/special.d.ts.map +1 -1
- package/dist/commands/special.js +67 -31
- package/dist/commands/special.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +1 -121
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-after-submit-comment.d.ts +3 -0
- package/dist/commands/workflow-after-submit-comment.d.ts.map +1 -0
- package/dist/commands/workflow-after-submit-comment.js +56 -0
- package/dist/commands/workflow-after-submit-comment.js.map +1 -0
- package/dist/commands/workflow-layout-components.d.ts +3 -0
- package/dist/commands/workflow-layout-components.d.ts.map +1 -0
- package/dist/commands/workflow-layout-components.js +36 -0
- package/dist/commands/workflow-layout-components.js.map +1 -0
- package/dist/commands/workflow-node-batch.d.ts +3 -0
- package/dist/commands/workflow-node-batch.d.ts.map +1 -0
- package/dist/commands/workflow-node-batch.js +136 -0
- package/dist/commands/workflow-node-batch.js.map +1 -0
- package/dist/commands/workflow-node-opinion.d.ts +3 -0
- package/dist/commands/workflow-node-opinion.d.ts.map +1 -0
- package/dist/commands/workflow-node-opinion.js +51 -0
- package/dist/commands/workflow-node-opinion.js.map +1 -0
- package/dist/commands/workflow-node-reject.js +1 -1
- package/dist/commands/workflow-node-reject.js.map +1 -1
- package/dist/commands/workflow-node.d.ts.map +1 -1
- package/dist/commands/workflow-node.js +4 -3
- package/dist/commands/workflow-node.js.map +1 -1
- package/dist/commands/workflow-setting.d.ts.map +1 -1
- package/dist/commands/workflow-setting.js +2 -67
- package/dist/commands/workflow-setting.js.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/components/send_message.d.ts.map +1 -1
- package/dist/services/actionflow/components/send_message.js +8 -3
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/context_preflight.js +1 -1
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +1 -0
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +107 -31
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +4 -1
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/form-layout-describe.d.ts.map +1 -1
- package/dist/services/form-layout-describe.js +3 -2
- package/dist/services/form-layout-describe.js.map +1 -1
- package/dist/services/form-layout-document.d.ts.map +1 -1
- package/dist/services/form-layout-document.js +2 -1
- package/dist/services/form-layout-document.js.map +1 -1
- package/dist/services/matrix-maintainer.d.ts +27 -0
- package/dist/services/matrix-maintainer.d.ts.map +1 -0
- package/dist/services/matrix-maintainer.js +142 -0
- package/dist/services/matrix-maintainer.js.map +1 -0
- package/dist/services/report/blueprint.d.ts +109 -0
- package/dist/services/report/blueprint.d.ts.map +1 -0
- package/dist/services/report/blueprint.js +322 -0
- package/dist/services/report/blueprint.js.map +1 -0
- package/dist/services/report/build.d.ts.map +1 -1
- package/dist/services/report/build.js +8 -3
- package/dist/services/report/build.js.map +1 -1
- package/dist/services/report/card.d.ts +65 -0
- package/dist/services/report/card.d.ts.map +1 -0
- package/dist/services/report/card.js +151 -0
- package/dist/services/report/card.js.map +1 -0
- package/dist/services/report/copy-health.d.ts +31 -0
- package/dist/services/report/copy-health.d.ts.map +1 -0
- package/dist/services/report/copy-health.js +87 -0
- package/dist/services/report/copy-health.js.map +1 -0
- package/dist/services/report/dataset-heal.d.ts +64 -0
- package/dist/services/report/dataset-heal.d.ts.map +1 -0
- package/dist/services/report/dataset-heal.js +89 -0
- package/dist/services/report/dataset-heal.js.map +1 -0
- package/dist/services/report/dataset-ids.d.ts +70 -0
- package/dist/services/report/dataset-ids.d.ts.map +1 -0
- package/dist/services/report/dataset-ids.js +149 -0
- package/dist/services/report/dataset-ids.js.map +1 -0
- package/dist/services/report/dataset.d.ts.map +1 -1
- package/dist/services/report/dataset.js +3 -1
- package/dist/services/report/dataset.js.map +1 -1
- package/dist/services/report/drill.d.ts +74 -0
- package/dist/services/report/drill.d.ts.map +1 -0
- package/dist/services/report/drill.js +259 -0
- package/dist/services/report/drill.js.map +1 -0
- package/dist/services/report/empty-dataset.d.ts +51 -0
- package/dist/services/report/empty-dataset.d.ts.map +1 -0
- package/dist/services/report/empty-dataset.js +213 -0
- package/dist/services/report/empty-dataset.js.map +1 -0
- package/dist/services/report/field-binding.d.ts +75 -0
- package/dist/services/report/field-binding.d.ts.map +1 -0
- package/dist/services/report/field-binding.js +160 -0
- package/dist/services/report/field-binding.js.map +1 -0
- package/dist/services/report/forms.d.ts +32 -0
- package/dist/services/report/forms.d.ts.map +1 -1
- package/dist/services/report/forms.js +90 -0
- package/dist/services/report/forms.js.map +1 -1
- package/dist/services/report/formula-parent.d.ts +25 -0
- package/dist/services/report/formula-parent.d.ts.map +1 -0
- package/dist/services/report/formula-parent.js +116 -0
- package/dist/services/report/formula-parent.js.map +1 -0
- package/dist/services/report/locate.d.ts +40 -0
- package/dist/services/report/locate.d.ts.map +1 -0
- package/dist/services/report/locate.js +122 -0
- package/dist/services/report/locate.js.map +1 -0
- package/dist/services/report/reports.d.ts +4 -0
- package/dist/services/report/reports.d.ts.map +1 -1
- package/dist/services/report/reports.js +4 -2
- package/dist/services/report/reports.js.map +1 -1
- package/dist/services/report/scene.d.ts +22 -0
- package/dist/services/report/scene.d.ts.map +1 -0
- package/dist/services/report/scene.js +145 -0
- package/dist/services/report/scene.js.map +1 -0
- package/dist/services/report/types.d.ts +28 -0
- package/dist/services/report/types.d.ts.map +1 -1
- package/dist/services/report/verify.d.ts +24 -0
- package/dist/services/report/verify.d.ts.map +1 -1
- package/dist/services/report/verify.js +115 -2
- package/dist/services/report/verify.js.map +1 -1
- package/dist/services/report/workbook.d.ts +12 -1
- package/dist/services/report/workbook.d.ts.map +1 -1
- package/dist/services/report/workbook.js +107 -8
- package/dist/services/report/workbook.js.map +1 -1
- package/dist/services/role-function-permission.d.ts +12 -0
- package/dist/services/role-function-permission.d.ts.map +1 -0
- package/dist/services/role-function-permission.js +46 -0
- package/dist/services/role-function-permission.js.map +1 -0
- package/dist/services/special-layout.d.ts +113 -0
- package/dist/services/special-layout.d.ts.map +1 -0
- package/dist/services/special-layout.js +178 -0
- package/dist/services/special-layout.js.map +1 -0
- package/dist/services/workflow-after-submit-comment.d.ts +20 -0
- package/dist/services/workflow-after-submit-comment.d.ts.map +1 -0
- package/dist/services/workflow-after-submit-comment.js +81 -0
- package/dist/services/workflow-after-submit-comment.js.map +1 -0
- package/dist/services/workflow-base-settings.d.ts +1 -10
- package/dist/services/workflow-base-settings.d.ts.map +1 -1
- package/dist/services/workflow-field-permission-route.d.ts +15 -41
- package/dist/services/workflow-field-permission-route.d.ts.map +1 -1
- package/dist/services/workflow-field-permission-route.js +23 -8
- package/dist/services/workflow-field-permission-route.js.map +1 -1
- package/dist/services/workflow-layout-components.d.ts +52 -0
- package/dist/services/workflow-layout-components.d.ts.map +1 -0
- package/dist/services/workflow-layout-components.js +66 -0
- package/dist/services/workflow-layout-components.js.map +1 -0
- package/dist/services/workflow-layout-draft.d.ts +49 -0
- package/dist/services/workflow-layout-draft.d.ts.map +1 -0
- package/dist/services/workflow-layout-draft.js +98 -0
- package/dist/services/workflow-layout-draft.js.map +1 -0
- package/dist/services/workflow-node-batch-spec.d.ts +122 -0
- package/dist/services/workflow-node-batch-spec.d.ts.map +1 -0
- package/dist/services/workflow-node-batch-spec.js +496 -0
- package/dist/services/workflow-node-batch-spec.js.map +1 -0
- package/dist/services/workflow-node-batch.d.ts +73 -0
- package/dist/services/workflow-node-batch.d.ts.map +1 -0
- package/dist/services/workflow-node-batch.js +328 -0
- package/dist/services/workflow-node-batch.js.map +1 -0
- package/dist/services/workflow-node-opinion-description.d.ts +12 -0
- package/dist/services/workflow-node-opinion-description.d.ts.map +1 -0
- package/dist/services/workflow-node-opinion-description.js +52 -0
- package/dist/services/workflow-node-opinion-description.js.map +1 -0
- package/dist/services/workflow-node-opinion-layout.d.ts +22 -0
- package/dist/services/workflow-node-opinion-layout.d.ts.map +1 -0
- package/dist/services/workflow-node-opinion-layout.js +113 -0
- package/dist/services/workflow-node-opinion-layout.js.map +1 -0
- package/dist/services/workflow-node-opinion-range.d.ts +21 -0
- package/dist/services/workflow-node-opinion-range.d.ts.map +1 -0
- package/dist/services/workflow-node-opinion-range.js +74 -0
- package/dist/services/workflow-node-opinion-range.js.map +1 -0
- package/dist/services/workflow-node-opinion.d.ts +43 -0
- package/dist/services/workflow-node-opinion.d.ts.map +1 -0
- package/dist/services/workflow-node-opinion.js +198 -0
- package/dist/services/workflow-node-opinion.js.map +1 -0
- package/dist/services/workflow-opinion-settings.d.ts +14 -0
- package/dist/services/workflow-opinion-settings.d.ts.map +1 -1
- package/dist/services/workflow-opinion-settings.js +18 -2
- package/dist/services/workflow-opinion-settings.js.map +1 -1
- package/ecodecmd/src/build.js +36 -12
- package/package.json +1 -1
- package/skill-docs/SKILL.md +164 -162
- package/skill-docs/_catalog.md +13 -3
- package/skill-docs/actionflows/references/components/message/SendMessage.md +32 -30
- package/skill-docs/references/coding/guide-page-code.md +95 -0
- package/skill-docs/references/common/guide-plan-template.md +4 -1
- package/skill-docs/references/common/map.md +28 -4
- package/skill-docs/references/common/ref-cli-commands.md +14 -4
- package/skill-docs/references/components/ref-component-common.md +98 -0
- package/skill-docs/references/form/guide-browser-definition.md +2 -219
- package/skill-docs/references/form/guide-browser-scope.md +285 -0
- package/skill-docs/references/form/guide-create-form.md +1 -1
- package/skill-docs/references/hrm/guide-matrix.md +276 -245
- package/skill-docs/references/hrm/guide-role.md +77 -0
- package/skill-docs/references/report/add-dataset-registration-guide.md +44 -22
- package/skill-docs/references/report/advanced-crosstab-tree-guide.md +82 -0
- package/skill-docs/references/report/ai-report-workflow.md +100 -100
- package/skill-docs/references/report/api-auth-headers.md +129 -0
- package/skill-docs/references/report/api-report-build-fast-path.md +274 -275
- package/skill-docs/references/report/app-datasource-lookup-guide.md +230 -230
- package/skill-docs/references/report/branch-scene-guide.md +293 -0
- package/skill-docs/references/report/build-resilience-guide.md +99 -0
- package/skill-docs/references/report/card-report-guide.md +110 -0
- package/skill-docs/references/report/cell-config-echo-guide.md +44 -9
- package/skill-docs/references/report/cell-transform-guide.md +9 -9
- package/skill-docs/references/report/column-split-report-guide.md +96 -0
- package/skill-docs/references/report/condition-format-guide.md +49 -24
- package/skill-docs/references/report/cross-dataset-filter-guide.md +180 -69
- package/skill-docs/references/report/crosstab-raw-workbook-guide.md +265 -0
- package/skill-docs/references/report/dataset-query-filter-guide.md +231 -235
- package/skill-docs/references/report/dataset-sidebar-ops-guide.md +75 -34
- package/skill-docs/references/report/dataset-table-field-contract-guide.md +196 -46
- package/skill-docs/references/report/datasource-metadata-guide.md +128 -119
- package/skill-docs/references/report/datasource-selection-and-parent-filter-guide.md +183 -148
- package/skill-docs/references/report/date-range-query-reference.md +97 -102
- package/skill-docs/references/report/default-header-style-guide.md +8 -8
- package/skill-docs/references/report/designer-blank-prevention-guide.md +8 -8
- package/skill-docs/references/report/dossier-report-guide.md +69 -0
- package/skill-docs/references/report/drilldown-report-guide.md +75 -0
- package/skill-docs/references/report/event-hreflink-guide.md +55 -47
- package/skill-docs/references/report/expansion-block-parent-config-guide.md +208 -0
- package/skill-docs/references/report/failure-cleanup-and-nonblocking-guide.md +183 -0
- package/skill-docs/references/report/field-bind-exact-match-guide.md +208 -208
- package/skill-docs/references/report/financial-stats-report-guide.md +89 -0
- package/skill-docs/references/report/formula-cell-api-guide.md +325 -258
- package/skill-docs/references/report/golden-case-summary-sheet.md +200 -0
- package/skill-docs/references/report/guide-report-build.md +6 -1
- package/skill-docs/references/report/hidden-row-and-header-merge-guide.md +10 -10
- package/skill-docs/references/report/layout-showlocation-freeze-guide.md +39 -10
- package/skill-docs/references/report/multi-report-crosstab-casebook.md +263 -0
- package/skill-docs/references/report/paged-group-report-guide.md +68 -0
- package/skill-docs/references/report/preaggregate-auto-disable-guide.md +24 -13
- package/skill-docs/references/report/query-condition-api-guide.md +174 -125
- package/skill-docs/references/report/ref-report-commands.md +41 -3
- package/skill-docs/references/report/report-baseinfo-defaults-guide.md +117 -117
- package/skill-docs/references/report/report-building-guide.md +52 -52
- package/skill-docs/references/report/report-case-prompts.md +104 -0
- package/skill-docs/references/report/report-config-schema.md +281 -281
- package/skill-docs/references/report/report-create-modes-guide.md +73 -35
- package/skill-docs/references/report/report-data-model.md +131 -131
- package/skill-docs/references/report/report-delivery-contract.md +23 -3
- package/skill-docs/references/report/report-designer-feature-map.md +30 -35
- package/skill-docs/references/report/report-help-guide.md +304 -0
- package/skill-docs/references/report/report-internal-error-guide.md +71 -0
- package/skill-docs/references/report/report-knowledge-base.md +27 -27
- package/skill-docs/references/report/report-lifecycle-api-guide.md +126 -94
- package/skill-docs/references/report/report-list-page-ops-guide.md +54 -8
- package/skill-docs/references/report/report-permission-guide.md +99 -102
- package/skill-docs/references/report/report-requirement-analysis-template.md +93 -29
- package/skill-docs/references/report/report-self-check-guide.md +164 -164
- package/skill-docs/references/report/report-verification-discipline-guide.md +203 -0
- package/skill-docs/references/report/safe-partial-save-guide.md +151 -151
- package/skill-docs/references/report/shard-freeze-report-guide.md +97 -0
- package/skill-docs/references/report/snowflake-id-precision-guide.md +84 -84
- package/skill-docs/references/report/spec-build-schema.md +71 -71
- package/skill-docs/references/report/targeted-fix-guide.md +155 -97
- package/skill-docs/references/report/user-request-scope-only-guide.md +23 -4
- package/skill-docs/references/workflow/guide-after-submit-comment.md +58 -0
- package/skill-docs/references/workflow/guide-layout-components.md +26 -0
- package/skill-docs/references/workflow/guide-node-opinion.md +58 -0
- package/skill-docs/references/workflow/guide-workflow.md +49 -0
- package/skill-docs/references/form/guide-ebuilder-scope.md +0 -82
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# 查询条件 API 写入规范
|
|
2
2
|
|
|
3
3
|
> **适用场景**:通过 `saveQueryItem` / `saveQueryConfig` API 或脚本添加、修复报表查询条件。
|
|
4
|
-
>
|
|
5
|
-
> **代码实现**:`本地工作目录` → `ensure_query_conditions()`;执行 `python 本地工作目录`
|
|
4
|
+
> **金标准报表**:`1304979556231593985`(EBU 经营数据统计)
|
|
6
5
|
> **核心规则**:数据集合选取后,**选择类型未特别指定 SQL 时,一律默认为「条件字段」**。
|
|
7
6
|
|
|
8
7
|
## ⚡ TL;DR — 显示方式(2026-09-11 定案,务必先读 §2.1)
|
|
@@ -43,7 +42,7 @@
|
|
|
43
42
|
|
|
44
43
|
## 二、条件字段标准形态(saveQueryItem)
|
|
45
44
|
|
|
46
|
-
设计器 save
|
|
45
|
+
设计器 save 后回读的金标准结构:
|
|
47
46
|
|
|
48
47
|
| 字段 | 条件字段正确值 |
|
|
49
48
|
|------|----------------|
|
|
@@ -54,7 +53,7 @@
|
|
|
54
53
|
| `sqlOptions` | **`{}`** |
|
|
55
54
|
| `conditions[]` | 仅 `dataSetId` + `fieldId` + `relation` |
|
|
56
55
|
| `fieldOptions` | 必传(含 `selected`、`dataSetField`、`relation`);`getQueryItem` 不持久化,更新时须重带 |
|
|
57
|
-
| `asNameIndex` | **唯一且 > 0**;更新时**必须回传**,否则置 0。`showOrder`(弹窗「排序」)人工配置通常留 **`0`**(= 未设,平台回落按 `asNameIndex` 排)——API 建条件时若自行填 1,2,3… 会在弹窗上留下可见差异(2026-09-14
|
|
56
|
+
| `asNameIndex` | **唯一且 > 0**;更新时**必须回传**,否则置 0。`showOrder`(弹窗「排序」)人工配置通常留 **`0`**(= 未设,平台回落按 `asNameIndex` 排)——API 建条件时若自行填 1,2,3… 会在弹窗上留下可见差异(2026-09-14 验证参照报表 5 条全为 0)。事件超链接传查询值用 `{searchfield` + 三位补零 + `}`(如 `asNameIndex=1` → `{searchfield001}`,区间另加 `_start`/`_end`),见 `event-hreflink-guide.md` |
|
|
58
57
|
| **默认值三件套** | **必填**:`defaultValueType`(`default`=常规 / `custom`=自定义)+ `defaultValue`(当前生效值)+ `type1DefaultValue`(常规那份)/ `type2DefaultValue`(自定义那份);值均为 **JSON 字符串**。**漏写 → 设计器弹窗「默认值类型」= 请选择、默认值区炸开、后续整段行被顶出可视区**(见 §2.1.10) |
|
|
59
58
|
| `fieldId` / `dataSetField` | fieldKey:`{dataSetId}.{sourceId}.{fieldName}` |
|
|
60
59
|
| **`queryType`(显示方式)** | **必填 JSON 数组字符串**,见 §2.1;`'["advance"]'`(高级搜索,默认)或 `'["filter"]'`(筛选),可双选 `'["advance","filter"]'`。**服务端也接受长码字符串 `"advancedSearch"`,但那样设计器 UI 不会勾选** |
|
|
@@ -63,13 +62,13 @@
|
|
|
63
62
|
|
|
64
63
|
```python
|
|
65
64
|
def build_conditions(ds_id, field_id, relation):
|
|
66
|
-
|
|
65
|
+
return [{"dataSetId": ds_id, "fieldId": field_id, "relation": relation}]
|
|
67
66
|
|
|
68
67
|
def build_field_options(ds_id, field_id, relation, item_id=None):
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
row = {"dataSetField": field_id, "relation": relation, "queryItemValue": "输入值"}
|
|
69
|
+
if item_id:
|
|
70
|
+
row["id"] = str(item_id)
|
|
71
|
+
return {"selected": ds_id, ds_id: [row]}
|
|
73
72
|
```
|
|
74
73
|
|
|
75
74
|
API:`POST /api/bs/edc/report/saveQueryItem`
|
|
@@ -118,7 +117,7 @@ await saveQueryItem({ reportId, queryItems: '{}' }); // conditions 缺失 → 50
|
|
|
118
117
|
|
|
119
118
|
### 2.1 显示方式(强制 · 不可不选)
|
|
120
119
|
|
|
121
|
-
> **✅ 终局定案(2026-09-11 ·
|
|
120
|
+
> **✅ 终局定案(2026-09-11 · 以「设计器手工配置的真实条件」为金标准反推)**
|
|
122
121
|
>
|
|
123
122
|
> 条件级「显示方式」的正确落库值是 **JSON 数组字符串**:
|
|
124
123
|
>
|
|
@@ -138,16 +137,16 @@ await saveQueryItem({ reportId, queryItems: '{}' }); // conditions 缺失 → 50
|
|
|
138
137
|
```js
|
|
139
138
|
// ① 读取(initCondition)—— 唯一判定逻辑
|
|
140
139
|
t.queryType = (t.queryType?.indexOf("[") > -1)
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
? JSON.parse(t.queryType || "[]") // 含 "[" → 解析成数组
|
|
141
|
+
: t.queryType || []; // 不含 → 原样保留(普通字符串)
|
|
143
142
|
```
|
|
144
143
|
|
|
145
144
|
```js
|
|
146
145
|
// ② 复选项定义(initConditionFormStore)—— 选项 id 是「短码」
|
|
147
146
|
queryType:{ itemType:"CHECKBOX", required:!0,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
data:[{ id: ze.g.advance, content:"高级搜索" },
|
|
148
|
+
{ id: ze.g.filter, content:"筛选" }],
|
|
149
|
+
otherParams:{ minSelected:1 } }
|
|
151
150
|
```
|
|
152
151
|
|
|
153
152
|
```js
|
|
@@ -157,7 +156,7 @@ function(e){ e.filter="filter"; e.advance="advance" }(i||(i={}))
|
|
|
157
156
|
|
|
158
157
|
```js
|
|
159
158
|
// ④ 新建条件默认值(仅 fieldKey 为空时)
|
|
160
|
-
this.fieldKey || (i.queryType = ["advance"])
|
|
159
|
+
this.fieldKey || (i.queryType = ["advance"]) // ← 注意:默认就是「数组」
|
|
161
160
|
```
|
|
162
161
|
|
|
163
162
|
```js
|
|
@@ -172,9 +171,9 @@ s.append("queryItems", JSON.stringify(r));
|
|
|
172
171
|
1. `CheckboxGroup` 用**严格相等**匹配:表单 value 的每个元素 vs `data[].id`。
|
|
173
172
|
2. 落库 `'["advance"]'` → 解析为 `["advance"]` → 元素 `"advance"` === 选项 id `"advance"` → **勾选 ✅**
|
|
174
173
|
3. 落库 `"advancedSearch"` → 不含 `[` → 保留为字符串 `"advancedSearch"` → 与选项 id 严格不等 → **不勾选 ❌**
|
|
175
|
-
4. **设计器自己写出的就是数组**(见 ④ 默认值、⑥
|
|
174
|
+
4. **设计器自己写出的就是数组**(见 ④ 默认值、⑥ 接口返回);长码 `"advancedSearch"` 只可能由**脚本手写**产生 → 它是**错误值**。
|
|
176
175
|
|
|
177
|
-
#### 2.1.2
|
|
176
|
+
#### 2.1.2 验证证据链(2026-09-11,报表 `1313798296523022337`,应用「进销存管理-共享表」)
|
|
178
177
|
|
|
179
178
|
**A. API 写入实验(`saveQueryItem`,同一条件往返改 4 种值)**
|
|
180
179
|
|
|
@@ -197,15 +196,15 @@ s.append("queryItems", JSON.stringify(r));
|
|
|
197
196
|
|
|
198
197
|
→ 脚本手工写的长码条件**全军覆没**,人工配置的数组条件**正确回显**。把两条长码条件改为 `'["advance"]'` 后,三条**全部回显 ☑ 高级搜索**,闭环验证通过。
|
|
199
198
|
|
|
200
|
-
**C. 设计器真实 `saveQueryItem`
|
|
199
|
+
**C. 设计器真实 `saveQueryItem` 接口返回(人工点击「确定」)**
|
|
201
200
|
|
|
202
201
|
```
|
|
203
202
|
Content-Disposition: form-data; name="queryItems"
|
|
204
203
|
|
|
205
204
|
{"id":"…","sheetId":"…","nameIndex":"0","text":"销售部门","displayType":"browser",
|
|
206
205
|
"showWhere":"","advancedSearchType":"openCondition","queryType":["advance"], … }
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
^^^^^^^^^^^^^^^^^^
|
|
207
|
+
数组(短码),非字符串长码
|
|
209
208
|
```
|
|
210
209
|
|
|
211
210
|
> 设计器上行 payload 里就是 `"queryType":["advance"]`(**数组 + 短码**)—— 这是平台的权威写法。
|
|
@@ -215,7 +214,7 @@ Content-Disposition: form-data; name="queryItems"
|
|
|
215
214
|
> **`POST /api/bs/edc/report/updateQueryType` 不是「只改报表级设置」** —— 它会把入参 `queryType` **全量写进该报表的每一条查询条件**,覆盖刚保存好的数组值。
|
|
216
215
|
> 这是「条件显示方式永远不勾选」的**真正单点根因**,也是历史定位一直抓不到的那个洞。
|
|
217
216
|
|
|
218
|
-
|
|
217
|
+
**验证矩阵**(同一报表连续调用,观察条件级 `queryType`)
|
|
219
218
|
|
|
220
219
|
| 调用 `updateQueryType(queryType=…)` | 三条条件级 `queryType` 变为 | 设计器回显 |
|
|
221
220
|
|---|---|---|
|
|
@@ -227,10 +226,10 @@ Content-Disposition: form-data; name="queryItems"
|
|
|
227
226
|
**为什么历史定位一直失败**
|
|
228
227
|
|
|
229
228
|
```text
|
|
230
|
-
旧 CLI 的 save 流程:
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
人工在页面直接配条件:
|
|
229
|
+
旧 CLI 的 save 流程: saveQueryItem(写 '["advance"]' ✅) → updateQueryType("advancedSearch" ❌)
|
|
230
|
+
↓ 刚写好的数组 ↓ 立刻被批量打回长码
|
|
231
|
+
设计器打开 → 不勾选
|
|
232
|
+
人工在页面直接配条件: 只走 saveQueryItem,不经过 updateQueryType → '["advance"]' 完好 → 正常勾选
|
|
234
233
|
```
|
|
235
234
|
|
|
236
235
|
于是「人工配的能勾、API 写的不能勾」,长期被误判为「平台前端缺陷,客户端不可修」。**实际是 CLI 自己把值写坏了。**
|
|
@@ -278,7 +277,7 @@ Content-Disposition: form-data; name="queryItems"
|
|
|
278
277
|
| 条件级与报表级是两个独立字段,互不影响 | ❌ 错。`updateQueryType` 用 `queryType` **批量覆盖所有条件**(§2.1.3 真正根因) |
|
|
279
278
|
| `updateQueryType` 只改报表级「高级搜索显示形式」 | ❌ 错。它会把入参写进每条条件 → 长码一键摧毁全表回显 |
|
|
280
279
|
|
|
281
|
-
**旧结论怎么来的 / 为什么错**:早期用 JS 合成事件点击条件 tag
|
|
280
|
+
**旧结论怎么来的 / 为什么错**:早期用 JS 合成事件点击条件 tag,实际点到了**左侧字段面板**的「显示方式」(那是字段属性,非条件显示方式),读取勾选态得到假信号;且未把「人工配置的条件」作为金标准对照。**修复方式**:改用 **CDP `Input.dispatchMouseEvent` 真实鼠标事件**点条件 tag,读「编辑查询条件」弹窗,并以人工条件为参照。
|
|
282
281
|
|
|
283
282
|
**真正根因的发现路径**:给 `save` 加「落库后回读自检」时,发现**刚写入的数组被回读成长码** → 隔离实验证明只有 `saveQueryItem` 时数组完好,一旦再调 `updateQueryType` 即被批量覆盖 → 穷举入参证明 `updateQueryType` 是「全表条件 `queryType` 批量写」。**AI 自检回读是抓到它的关键手段**,务必保留。
|
|
284
283
|
|
|
@@ -287,38 +286,67 @@ Content-Disposition: form-data; name="queryItems"
|
|
|
287
286
|
**首选(CLI 一键):**
|
|
288
287
|
|
|
289
288
|
```bash
|
|
290
|
-
e10-cli report query check-echo --report-id <id> --app-id <appId>
|
|
291
|
-
e10-cli report query fix-echo
|
|
289
|
+
e10-cli report query check-echo --report-id <id> --app-id <appId> # 诊断
|
|
290
|
+
e10-cli report query fix-echo --report-id <id> --app-id <appId> # 修正为数组短码
|
|
292
291
|
```
|
|
293
|
-
**修复显示方式(CLI 原生,无需手写脚本):**
|
|
294
292
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
293
|
+
**手动脚本(等价实现,含 `updateQueryType` 数组化):**
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
# 读取 → 把长码条件就地改为数组短码 → 保存 → 再用数组形态对齐报表级(批量)
|
|
297
|
+
import json, copy, sys
|
|
298
|
+
import _eb
|
|
299
|
+
|
|
300
|
+
APP, RID = "<appId>", "<reportId>"
|
|
301
|
+
DROP = {"browserTypeStr","selectOptionsStr","conditionStr","sqlOptionsStr",
|
|
302
|
+
"filterParamStr","handleDefaultValue","updateTime"} # 回显列,服务端不接受
|
|
303
|
+
|
|
304
|
+
def read():
|
|
305
|
+
r = _eb.post("/api/bs/edc/report/getQueryItemNew",
|
|
306
|
+
data={"reportId": RID, "query": "{}"}, app_id=APP)
|
|
307
|
+
return ((r.get("data") or {}).get("list")) or []
|
|
308
|
+
|
|
309
|
+
def save(item):
|
|
310
|
+
it = {k: v for k, v in item.items() if k not in DROP}
|
|
311
|
+
return _eb.post("/api/bs/edc/report/saveQueryItem",
|
|
312
|
+
data={"reportId": RID, "queryItems": json.dumps(it, ensure_ascii=False)},
|
|
313
|
+
app_id=APP)
|
|
314
|
+
|
|
315
|
+
for q in read():
|
|
316
|
+
if not str(q.get("queryType") or "").startswith("["): # 长码/空 → 修正
|
|
317
|
+
it = copy.deepcopy(q)
|
|
318
|
+
it["queryType"] = '["filter"]' if q.get("queryType") == "filter" else '["advance"]'
|
|
319
|
+
print(q["text"], "->", save(it).get("code"))
|
|
320
|
+
|
|
321
|
+
# ⚠️ 关键:若还要对齐报表级高级搜索显示形式,updateQueryType 的 queryType 必须用数组形态,
|
|
322
|
+
# 否则它会把全部条件重新打回长码(§2.1.3)。
|
|
323
|
+
_eb.post("/api/bs/edc/report/updateQueryType",
|
|
324
|
+
data={"reportId": RID, "queryType": '["advance"]', "advancedSearchType": "openCondition"},
|
|
325
|
+
app_id=APP)
|
|
298
326
|
```
|
|
299
327
|
|
|
300
|
-
|
|
328
|
+
**设计器真实保存形态(金标准,从 `saveQueryItem` 接口返回)**
|
|
301
329
|
|
|
302
330
|
```json
|
|
303
331
|
{
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
332
|
+
"id": "…", "sheetId": "<reportId>", "nameIndex": "0",
|
|
333
|
+
"text": "销售部门",
|
|
334
|
+
"displayType": "browser",
|
|
335
|
+
"browserType": [{ "id": "3332180495306215437", "name": "部门", "type": "department",
|
|
336
|
+
"module": "hrm", "groupId": "<groupId>", "tenantKey": "<tenantKey>",
|
|
337
|
+
"dataId": "2005096031068185488", "labelId": "52148",
|
|
338
|
+
"licenseModule": "hrm", "systemDefault": 1, "ebuliderDataBrowser": false, "disable": 0 }],
|
|
339
|
+
"browserTypeStr": "[{\"id\":\"HrmDepartmentComInfo\"}]",
|
|
340
|
+
"showWhere": "",
|
|
341
|
+
"queryType": ["advance"],
|
|
342
|
+
"dateType": "ymd",
|
|
343
|
+
"filterParam": { "optionTile": {}, "isTile": false, "multiple": true, "dataOptions": [],
|
|
344
|
+
"enableOption": false, "required": false, "dateSelectDefaultValue": "",
|
|
345
|
+
"numberSelectDefaultValue": "", "eBuilderForm": "", "titleField": "" },
|
|
346
|
+
"defaultValue": "[[],\"\"]", "handleDefaultValue": "[[],\"\"]",
|
|
347
|
+
"filterType": "default", "fieldOptions": {},
|
|
348
|
+
"conditions": [{ "dataSetId": "…", "fieldId": "…", "relation": "Equals" }],
|
|
349
|
+
"asNameIndex": 1, "showOrder": 1
|
|
322
350
|
}
|
|
323
351
|
```
|
|
324
352
|
|
|
@@ -328,7 +356,7 @@ e10-cli report query verify <reportId> --app-id <appId> --fix # 体检 Q1~Q10 +
|
|
|
328
356
|
|
|
329
357
|
> **事故(2026-09-14)**:在报表 `1314970921403138199` 加 5 条查询条件后,用户质问
|
|
330
358
|
> 「怎么又把查询条件的样式改了,这个之前强调过不能动页面上原有展示格式」。
|
|
331
|
-
> 定位结论:**用户的 payload 里根本没有 `advancedSearchType`**,是 CLI `
|
|
359
|
+
> 定位结论:**用户的 payload 里根本没有 `advancedSearchType`**,是 CLI `e10-cli report query save`
|
|
332
360
|
> 在保存时**无条件注入** `advancedSearchType: 'openCondition'`(=「展开条件」)。
|
|
333
361
|
|
|
334
362
|
**字段语义(源码级)**
|
|
@@ -339,7 +367,7 @@ e10-cli report query verify <reportId> --app-id <appId> --fix # 体检 Q1~Q10 +
|
|
|
339
367
|
| 唯一功能读点 | `SheetServiceImpl`:取**第一条**高级搜索条件的 `advancedSearchType`,`=='openCondition'` → `isOpenCondition=true` |
|
|
340
368
|
| 页面效果 | `isOpenCondition=true` → 报表页查询区**展开铺开**(「展开条件」);否则 → **默认样式**(右上角搜索图标,点击才展开) |
|
|
341
369
|
| 设计器入口 | 报表级「查询设置」弹窗的 **高级搜索显示形式:默认样式 / 展开条件** |
|
|
342
|
-
|
|
|
370
|
+
| 人工条件(金标准) | **该键不存在**(`undefined`),平台不主动写 |
|
|
343
371
|
|
|
344
372
|
**硬规则**
|
|
345
373
|
|
|
@@ -379,7 +407,7 @@ e10-cli report fix query-style --report-id <id> --app-id <appId> --delete-id <it
|
|
|
379
407
|
|
|
380
408
|
**根因**:弹窗的默认值区由 `defaultValueType` 驱动渲染。不写它 → 前端取不到模式 → 每个变体都渲染一遍。
|
|
381
409
|
|
|
382
|
-
|
|
410
|
+
**数据模型(验证参照报表 `1314938962594906121`,人工配置的权威形态)**
|
|
383
411
|
|
|
384
412
|
| 键 | 含义 | 参照「年月」取值 | 参照「部门」取值 | 参照「人员/加班/聘用」取值 |
|
|
385
413
|
|----|------|------------------|------------------|----------------------------|
|
|
@@ -390,7 +418,7 @@ e10-cli report fix query-style --report-id <id> --app-id <appId> --delete-id <it
|
|
|
390
418
|
| `handleDefaultValue` | 平台解析后的实际值(**服务端自己算并回写**) | `["2026-09",""]` | `[[],""]` | `["",""]` |
|
|
391
419
|
|
|
392
420
|
> ⚠️ **全部是 JSON 字符串**(`"[[],\""]"` 这种),不是对象/数组本身。
|
|
393
|
-
> ⚠️ 日期占位符(`{yearmonth:-0}` 等)**不用自己解析**:落库时平台会把 `handleDefaultValue` 回写成 `["2026-09",""]
|
|
421
|
+
> ⚠️ 日期占位符(`{yearmonth:-0}` 等)**不用自己解析**:落库时平台会把 `handleDefaultValue` 回写成 `["2026-09",""]`(验证)。
|
|
394
422
|
> 设计器「新建条件」模板本身带 `defaultValueType:"default"` + `defaultValue:["",""]`,所以**人工配的条件永远不会缺** —— 只有用 API 建条件时才会漏。
|
|
395
423
|
|
|
396
424
|
**修复**
|
|
@@ -401,7 +429,7 @@ e10-cli report fix query-default --report-id <id> --app-id <appId> --apply
|
|
|
401
429
|
|
|
402
430
|
# 点名某条用「自定义」默认值(如 年月默认当月,与参照报表一致)
|
|
403
431
|
e10-cli report fix query-default --report-id <id> --app-id <appId> \
|
|
404
|
-
|
|
432
|
+
--set '年月=custom:["{yearmonth:-0}",""]' --set '部门=default:[[],""]' --apply
|
|
405
433
|
|
|
406
434
|
# 顺带把「排序」对齐为设计器模板值 0
|
|
407
435
|
e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-order 0 --apply
|
|
@@ -438,7 +466,7 @@ e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-
|
|
|
438
466
|
|
|
439
467
|
> **事故**:同报表查询条件「销售部门」绑定字段 `originFieldType=Department`,但设计器关联类型显示为空/默认**人员**。**定案根因:`browserType` 写成了简写 `[{"id":"HrmDepartmentComInfo"}]`,缺少 `name`/`type` 等字段 → 前端无法解析显示名 → 退回默认「人员」标签页。**
|
|
440
468
|
|
|
441
|
-
|
|
469
|
+
**设计器真实形态(金标准)**:`browserType` 是 **全字段富对象数组**,关键字段 `name`(显示名)、`type`(`department`/`employee`)、`module`、`groupId`、`tenantKey`、`dataId`、`labelId`、`id`。**`browserTypeStr` 才是落库判据**(服务端存 `[{"id":"HrmDepartmentComInfo"}]` 形式的字符串)。
|
|
442
470
|
|
|
443
471
|
| 字段 `originFieldType` | `displayType` | `browserTypeStr`(落库) | 设计器关联类型 |
|
|
444
472
|
|------------------------|---------------|--------------------------|----------------|
|
|
@@ -448,13 +476,13 @@ e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-
|
|
|
448
476
|
|
|
449
477
|
**推荐获取富对象的正确姿势(最稳)**:**不要手拼** `browserType` 富对象;用 `saveQueryItem` 时:
|
|
450
478
|
1. `displayType: "browser"` + `browserTypeStr` 写 `[{"id":"HrmDepartmentComInfo"}]`;
|
|
451
|
-
2.
|
|
479
|
+
2. 或在设计器里手动选一次「部门」让前端生成富对象后接口返回复用(本环境已验证:手动选后可正确回显「部门」)。
|
|
452
480
|
|
|
453
481
|
**硬约束**
|
|
454
482
|
|
|
455
483
|
1. `displayType: browser` **禁止** `browserTypeStr: "[]"`;必须按字段 `originFieldType` 写入对应 ComInfo id。
|
|
456
484
|
2. 仅写 `[{"id":...}]` 简写**服务端可接受**(`browserTypeStr` 落库正确),但**前端回显可能为空**;若要求 UI 正确显示,需富对象。
|
|
457
|
-
3. `
|
|
485
|
+
3. `e10-cli report query save` 内置 `applyQueryDisplayType()` 自动补 `browserType`(未显式指定 `displayType` 时);不匹配时输出 **WARN**。
|
|
458
486
|
4. 回读核对:`browserTypeStr` 不得为 `"[]"`(丢了 → 退回「人员」)。
|
|
459
487
|
5. 跳过自动推导用 `--skip-display-type`(仅在确实要手填时)。
|
|
460
488
|
|
|
@@ -463,14 +491,14 @@ e10-cli report fix query-default --report-id <id> --app-id <appId> --all --show-
|
|
|
463
491
|
```javascript
|
|
464
492
|
// 显示方式:条件级落库值 = JSON 数组字符串(前端唯一能回显勾选的形态)
|
|
465
493
|
function resolveQueryType(userHint) {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
494
|
+
const s = String(userHint || '').toLowerCase();
|
|
495
|
+
if (/筛选|filter/.test(s) && !/高级搜索|advanced/.test(s)) return '["filter"]';
|
|
496
|
+
return '["advance"]'; // 默认「高级搜索」· 不可不选
|
|
469
497
|
}
|
|
470
498
|
// 注意:showWhere 一律写 ''(遗留字段)
|
|
471
|
-
//
|
|
472
|
-
//
|
|
473
|
-
//
|
|
499
|
+
// 条件级选项 id 是短码 advance/filter;落库必须是含 "[" 的 JSON 数组字符串,
|
|
500
|
+
// 否则前端首字符判定落空 → 退化为普通字符串 → 严格相等失败 → UI 不勾选(见 §2.1)
|
|
501
|
+
// 报表级 updateQueryType 的 queryType 也须用数组形态(它会批量覆盖所有条件,见 §2.1.3)
|
|
474
502
|
```
|
|
475
503
|
|
|
476
504
|
### 2.1.8 「显示方式没勾选」诊断卡(对接用户质询时用)
|
|
@@ -486,11 +514,10 @@ function resolveQueryType(userHint) {
|
|
|
486
514
|
**判据一行流**
|
|
487
515
|
|
|
488
516
|
```text
|
|
489
|
-
queryType 以 "[" 开头
|
|
490
|
-
queryType 是其它字符串
|
|
517
|
+
queryType 以 "[" 开头 → 数组 → UI 勾选正常 ✅
|
|
518
|
+
queryType 是其它字符串 → 退化 → UI 不勾选 ❌(改写为 '["advance"]')
|
|
491
519
|
```
|
|
492
520
|
|
|
493
|
-
> 来源:前端 bundle 经 CDP `Debugger.getScriptSource` 导出至 `本地工作目录`
|
|
494
521
|
> (`route_DatasetList.js` 179879B / `route_ReportDesigner.js` 702877B / `lib.js` 661658B);
|
|
495
522
|
> UI 回显用 `_q_real2.py`(CDP `Input.dispatchMouseEvent` 真实鼠标点击条件 tag + 读「编辑查询条件」弹窗 checkbox)。
|
|
496
523
|
|
|
@@ -502,21 +529,21 @@ queryType 是其它字符串 → 退化 → UI 不勾选 ❌(改写为 '["adva
|
|
|
502
529
|
```http
|
|
503
530
|
GET /api/bcw/relevanceBrowser/browserBeanSearch?searchValue=<中文分类名>
|
|
504
531
|
Header: ebbusinessid: <appId>
|
|
505
|
-
→ data.data[]
|
|
532
|
+
→ data.data[] 每条 = 13 键富对象
|
|
506
533
|
```
|
|
507
534
|
|
|
508
535
|
> 🔴 **2026-09-14 修正**:旧文档写的 `POST /api/bcw/relevanceBrowser/getBrowserBean` 在**本环境恒返回 `{"code":500,"msg":"接口错误"}`**(前端其实把 `browserBeanSearch` 的响应**本地拦截**了 —— 见 `lib.js` 里 `relationList()` 分支,所以它在页面上看起来"能用")。
|
|
509
536
|
> 可用的是 **GET `browserBeanSearch`**;`searchValue` 必须用**中文分类名**(拼音检索服务端不支持:`bm` / `ry` 返回 0 条),空串只返回档案/工作流等非 HRM 分类。
|
|
510
537
|
> CLI 已内置此回退:`themes/e10-cli report query save` 的 `fetchBrowserBeanSearch()`;`displayType=browser` 且 `browserType` 仅为 `[{id}]` 简写时**自动升级为富对象**。
|
|
511
538
|
|
|
512
|
-
|
|
539
|
+
**验证取值(租户 `tmxislnm9p` / 应用 1178336857624084480)**
|
|
513
540
|
|
|
514
541
|
```http
|
|
515
|
-
GET …/browserBeanSearch?searchValue=部门
|
|
516
|
-
GET …/browserBeanSearch?searchValue=人员
|
|
542
|
+
GET …/browserBeanSearch?searchValue=部门 → 命中 3 条,取 name=部门
|
|
543
|
+
GET …/browserBeanSearch?searchValue=人员 → 命中 3 条,取 name=人员
|
|
517
544
|
```
|
|
518
545
|
|
|
519
|
-
|
|
546
|
+
**「部门」完整富对象(验证取值)**
|
|
520
547
|
|
|
521
548
|
```json
|
|
522
549
|
{"id":"2005096031068185488","tenantKey":"all_teams","deleteType":0,
|
|
@@ -525,7 +552,7 @@ GET …/browserBeanSearch?searchValue=人员 → 命中 3 条,取 name=人员
|
|
|
525
552
|
"name":"部门","module":"hrm","type":"department","groupId":"8574699142778669114"}
|
|
526
553
|
```
|
|
527
554
|
|
|
528
|
-
|
|
555
|
+
**「人员」完整富对象(验证取值)**
|
|
529
556
|
|
|
530
557
|
```json
|
|
531
558
|
{"id":"2005096031068185492","tenantKey":"all_teams","deleteType":0,
|
|
@@ -535,7 +562,7 @@ GET …/browserBeanSearch?searchValue=人员 → 命中 3 条,取 name=人员
|
|
|
535
562
|
```
|
|
536
563
|
|
|
537
564
|
> ⚠️ 两条的 `id` 都是**业务 id**(= `dataId`,部门 …488 / 人员 …492),**不等于** ComInfo 短 id。
|
|
538
|
-
> 因此校验「关联类型对不对」**不能按 id 比**,要按 `name`(人员/部门)或 `type`(resource/department)判 —— 否则会误报"不匹配"(已修 `
|
|
565
|
+
> 因此校验「关联类型对不对」**不能按 id 比**,要按 `name`(人员/部门)或 `type`(resource/department)判 —— 否则会误报"不匹配"(已修 `e10-cli report query save`)。
|
|
539
566
|
> 同一环境里还有近名分类:`部门字段`(…498) / `人员字段`(…502),按 `name` **精确**取,勿用 `indexOf`。
|
|
540
567
|
|
|
541
568
|
**落库判据对照**
|
|
@@ -546,25 +573,25 @@ GET …/browserBeanSearch?searchValue=人员 → 命中 3 条,取 name=人员
|
|
|
546
573
|
| 人员 | `[{"id":"HrmEmployeeComInfo"}]` | 人员 / `resource` |
|
|
547
574
|
| 部门全路径 | `[{"id":"HrmDepartmentAllPathComInfo"}]` | 部门字段 / `departmentDesc` |
|
|
548
575
|
|
|
549
|
-
|
|
576
|
+
**修复存量条件(最小侵入,已验证 HTTP 200)**
|
|
550
577
|
|
|
551
578
|
```python
|
|
552
579
|
# 1) 读取
|
|
553
|
-
q = POST /api/bs/edc/report/getQueryItemNew
|
|
554
|
-
items = q["data"]["list"]
|
|
580
|
+
q = POST /api/bs/edc/report/getQueryItemNew (multipart: reportId + query:'{}')
|
|
581
|
+
items = q["data"]["list"] # ⚠️ 在 data.list,不是 data.queryItems
|
|
555
582
|
# 2) 取富对象
|
|
556
|
-
bean = GET /api/bcw/relevanceBrowser/browserBeanSearch?searchValue=人员
|
|
583
|
+
bean = GET /api/bcw/relevanceBrowser/browserBeanSearch?searchValue=人员 → name=="人员" 那条
|
|
557
584
|
# 3) 替换 + 同步 browserTypeStr + 保存
|
|
558
585
|
item["browserType"] = [bean]
|
|
559
586
|
item["browserTypeStr"] = json.dumps([{"id":"HrmEmployeeComInfo"}], ensure_ascii=False)
|
|
560
|
-
POST /api/bs/edc/report/saveQueryItem
|
|
587
|
+
POST /api/bs/edc/report/saveQueryItem (multipart: reportId + queryItems 单对象JSON)
|
|
561
588
|
```
|
|
562
589
|
|
|
563
590
|
**UI 验证要点**:打开「编辑查询条件」弹窗,查 `.ui-browser-type-search-input` 的 `value`:
|
|
564
591
|
- `""` + 控件容器带 `is-empty` 类 → 关联类型**丢失**
|
|
565
592
|
- `"人员"` / `"部门"` → **正确回显** ✅
|
|
566
593
|
|
|
567
|
-
>
|
|
594
|
+
> 验证:修复前「销售人员」`value=""`(`is-empty`);修复后 `value="人员"` ✅
|
|
568
595
|
|
|
569
596
|
---
|
|
570
597
|
|
|
@@ -579,7 +606,7 @@ POST /api/bs/edc/report/saveQueryItem (multipart: reportId + queryItems 单对
|
|
|
579
606
|
| 3 | `conditions` | **非 null 数组**,至少 1 个 `{dataSetId, fieldId, relation}` |
|
|
580
607
|
| 4 | Header | `ebBusinessId` = 报表所属 **appId**;`eteamsid` + Cookie |
|
|
581
608
|
| 5 | 多条条件 | **多次** POST,每次一条;不要一次塞数组 |
|
|
582
|
-
| 6 |
|
|
609
|
+
| 6 | 对照金标准 | 先 `getQueryItem` 拉已有报表一条,改 `text`/`fieldId` 再 save |
|
|
583
610
|
|
|
584
611
|
**不要**:为排 500 去开浏览器扫页(浪费);先按上表自检。仍 500 时看响应 `msg` 是否权限/报表不存在,再问用户。
|
|
585
612
|
|
|
@@ -588,8 +615,8 @@ POST /api/bs/edc/report/saveQueryItem (multipart: reportId + queryItems 单对
|
|
|
588
615
|
```bash
|
|
589
616
|
# 保存条件(自动默认条件级 queryType='["advance"]',并 updateQueryType)
|
|
590
617
|
e10-cli report query save --report-id <id> --app-id <appId> --item queryItem.json
|
|
591
|
-
e10-cli report query save ... --show-where "筛选"
|
|
592
|
-
e10-cli report query type --report-id <id> --app-id <appId>
|
|
618
|
+
e10-cli report query save ... --show-where "筛选" # 仅用户点名筛选时
|
|
619
|
+
e10-cli report query type --report-id <id> --app-id <appId> # 只对齐报表级显示方式勾选
|
|
593
620
|
e10-cli report query list --report-id <id> --app-id <appId>
|
|
594
621
|
e10-cli report validate query --map-show-where "高级搜索"
|
|
595
622
|
e10-cli report validate query --validate-show-where --file item.json
|
|
@@ -658,15 +685,15 @@ e10-cli report validate query --validate-show-where --file item.json
|
|
|
658
685
|
当判定为下拉(§3.1 优先级 5)或用户要求下拉时:
|
|
659
686
|
|
|
660
687
|
1. 从 `conditions[0].fieldId` 解析三段 fieldKey:`{dataSetId}.{sourceId}.{fieldName}`
|
|
661
|
-
|
|
662
|
-
|
|
688
|
+
- `fieldName` 在报表内多为 `field_{雪花ID}`(绑定 fieldsKey)
|
|
689
|
+
- **取选项时** `fieldName` 参数必须用 **裸雪花 ID**(去掉 `field_` 前缀)
|
|
663
690
|
2. 调用:
|
|
664
691
|
|
|
665
692
|
```
|
|
666
693
|
GET /api/ebuilder/form/ds/options
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
694
|
+
?sourceType=FORM
|
|
695
|
+
&objId={sourceId}
|
|
696
|
+
&fieldName={裸雪花ID} ← 禁止传 field_xxx(会返回空数组)
|
|
670
697
|
```
|
|
671
698
|
|
|
672
699
|
`FORM` 无数据时可再试 `sourceType=LOGIC`。也可用 `ds/fields` 里该字段 `config.options`(`name` + `valueKey`/`value`)作为兜底。
|
|
@@ -682,12 +709,12 @@ GET /api/ebuilder/form/ds/options
|
|
|
682
709
|
```javascript
|
|
683
710
|
// ds/options → saveQueryItem(事故:曾把名称写进 selectKey、ID 写进 selectValue)
|
|
684
711
|
selectOptions = data
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
712
|
+
.filter(o => String(o.archive ?? '0') !== '1')
|
|
713
|
+
.map(o => ({
|
|
714
|
+
selectKey: String(o.id), // 数值 / 选项 ID
|
|
715
|
+
selectValue: o.name, // 名称
|
|
716
|
+
id: String(o.id),
|
|
717
|
+
}));
|
|
691
718
|
```
|
|
692
719
|
|
|
693
720
|
4. `relation` 用 `Equals`;`showWhere` 仍遵守 §2.1。
|
|
@@ -695,32 +722,32 @@ selectOptions = data
|
|
|
695
722
|
|
|
696
723
|
```javascript
|
|
697
724
|
async function fetchSelectOptionsForQuery(sourceId, fieldNameFromKey) {
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
725
|
+
const bare = String(fieldNameFromKey).replace(/^field_/, '');
|
|
726
|
+
const r = await get('/api/ebuilder/form/ds/options', {
|
|
727
|
+
sourceType: 'FORM', objId: sourceId, fieldName: bare,
|
|
728
|
+
});
|
|
729
|
+
if (!r.data?.length) throw new Error(`select options empty for ${bare}`);
|
|
730
|
+
return r.data.filter(o => String(o.archive ?? '0') !== '1')
|
|
731
|
+
.map(o => ({ selectKey: String(o.id), selectValue: o.name, id: String(o.id) }));
|
|
705
732
|
}
|
|
706
733
|
```
|
|
707
734
|
|
|
708
735
|
```javascript
|
|
709
736
|
function inferQueryDisplay(text, fieldMeta) {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
737
|
+
const name = `${text||''} ${fieldMeta?.text||''}`;
|
|
738
|
+
const ft = String(fieldMeta?.fieldType||'').toLowerCase();
|
|
739
|
+
const oft = String(fieldMeta?.originFieldType||'').toLowerCase();
|
|
740
|
+
const fmt = String(fieldMeta?.config?.format || fieldMeta?.format || '');
|
|
741
|
+
if (/年月/.test(name) || fmt === 'yyyy-MM')
|
|
742
|
+
return { displayType: 'date.ym', relation: 'between' };
|
|
743
|
+
if (/年份|^年$|年度/.test(name) || fmt === 'yyyy')
|
|
744
|
+
return { displayType: 'date', relation: 'between' };
|
|
745
|
+
if (/日期|时间|时段|期间/.test(name) ||
|
|
746
|
+
['date','datetime','time','timestamp'].includes(ft) ||
|
|
747
|
+
['date','datetime','time'].includes(oft))
|
|
748
|
+
return { displayType: fmt.startsWith('yyyy-MM-dd') || !fmt ? 'date.ymd' : 'date',
|
|
749
|
+
relation: 'between' };
|
|
750
|
+
return { displayType: 'text', relation: 'Contain' };
|
|
724
751
|
}
|
|
725
752
|
```
|
|
726
753
|
|
|
@@ -728,8 +755,6 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
728
755
|
|
|
729
756
|
## 四、日期区间:快捷选项(21 项)
|
|
730
757
|
|
|
731
|
-
> 明细 catalog 见 `date-range-query-reference.md` · 快照 `outputs/join_date_filterparam.json`
|
|
732
|
-
|
|
733
758
|
设计器手动 save 后的**正确形态**(勿用旧版 15 项数字码 + 9 项 selectOptions):
|
|
734
759
|
|
|
735
760
|
| 字段 | 正确值 |
|
|
@@ -784,6 +809,35 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
784
809
|
2. 默认值 → 填 `{thismonth}`、`{date}` 等(设计器存为 JSON 数组)
|
|
785
810
|
3. 日期区间 + **启用选项** ON → 21 项快捷按钮(§四)
|
|
786
811
|
|
|
812
|
+
### 5.3 跨报表传参:目标条件的默认值(报表跳报表 · 2026-11-03 实测)
|
|
813
|
+
|
|
814
|
+
来源报表把参数拼在钻取地址上:
|
|
815
|
+
|
|
816
|
+
```text
|
|
817
|
+
/sp/edc/report/view/<目标报表>?searchfield002=13261367755986572676
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
目标报表**不会**按参数名自动过滤。要接住它,目标报表的查询条件必须把参数名写进「自定义默认值」:
|
|
821
|
+
|
|
822
|
+
| 键 | 值 |
|
|
823
|
+
|---|---|
|
|
824
|
+
| `defaultValueType` | `"custom"` |
|
|
825
|
+
| `defaultValue` | `'["{searchfield002}",""]'` |
|
|
826
|
+
| `type2DefaultValue` | 同上;`type1DefaultValue` 置空 |
|
|
827
|
+
|
|
828
|
+
设计器「默认值」框里显示成 `(searchfield002)` —— **圆括号只是 UI 渲染,落库必须是花括号**。
|
|
829
|
+
|
|
830
|
+
运行时:
|
|
831
|
+
|
|
832
|
+
- 请求里带同名字段 → `handleDefaultValue` 变成传入值(如 `["江苏EBU一部",""]`),报表按它过滤;
|
|
833
|
+
- 不带 / 传空 → 占位清空成 `["",""]`,直接打开报表不过滤。
|
|
834
|
+
|
|
835
|
+
⚠️ 条件保持「常规 / 空」时,URL 参数会被**静默忽略**:页面能打开、不报错、数据一条不少。这是钻取不过滤最常见的原因。
|
|
836
|
+
|
|
837
|
+
- **参数名以 `{…}` 里的名字为准**,链接的 key 必须与它一致;通常就是条件标识 `searchfield00x`。
|
|
838
|
+
- 日期区间用 `{searchfield001_start}` / `{searchfield001_end}`,URL 参数名同名。
|
|
839
|
+
- 体检:`e10-cli report verify drill <来源报表> --app-id <id>` —— 扫来源链接、读目标条件,缺绑定直接失败并给出修法。
|
|
840
|
+
|
|
787
841
|
---
|
|
788
842
|
|
|
789
843
|
## 六、EBU 报表示例(三条高级搜索 + 数据集行级筛选)
|
|
@@ -803,7 +857,7 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
803
857
|
|
|
804
858
|
## 七、数据集筛选(设计器左侧 · 行级权限)
|
|
805
859
|
|
|
806
|
-
> **完整规范已独立成文**:`dataset-query-filter-guide.md`(func 对照、字段对比、日期 format、AND/OR、EBU
|
|
860
|
+
> **完整规范已独立成文**:`dataset-query-filter-guide.md`(func 对照、字段对比、日期 format、AND/OR、EBU 金标准、验证清单)。
|
|
807
861
|
> 本节仅保留与高级搜索的边界说明。
|
|
808
862
|
|
|
809
863
|
**与高级搜索不同**:设计器左侧数据集右键「筛选条件」走 **`queryInfoSave` / `queryInfoGet`**(`conditionData` + `otherData`),**不是** `saveQueryItem`。
|
|
@@ -821,8 +875,6 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
821
875
|
| 左侧数据集 → 筛选条件 | **`dataset-query-filter-guide.md`** |
|
|
822
876
|
| 单元格自定义筛选 / datasetFilter | `cross-dataset-filter-guide.md` |
|
|
823
877
|
|
|
824
|
-
代码:`本地工作目录` → `ensure_team_dataset_filter()` / `ensure_contract_dataset_filter()`;执行 `python 本地工作目录`。
|
|
825
|
-
|
|
826
878
|
---
|
|
827
879
|
|
|
828
880
|
## 八、验证清单
|
|
@@ -869,7 +921,6 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
869
921
|
|
|
870
922
|
**工具**
|
|
871
923
|
|
|
872
|
-
- [ ] `本地工作目录` 导出快照对比
|
|
873
924
|
- [ ] 设计器刷新:齿轮菜单 21 项、默认值回显、删一条不影响其他条件
|
|
874
925
|
|
|
875
926
|
---
|
|
@@ -886,5 +937,3 @@ function inferQueryDisplay(text, fieldMeta) {
|
|
|
886
937
|
| `report-building-guide.md` §6 | 设计器操作步骤 |
|
|
887
938
|
| `report-config-schema.md` §五 | Schema 摘要 |
|
|
888
939
|
| `SKILL.md` §6.3–§6.4 | Agent 步骤入口 |
|
|
889
|
-
| `outputs/join_date_filterparam.json` | filterParam 参考样本 |
|
|
890
|
-
| `本地工作目录` | 生成/修复实现 |
|