weaver-e10-builder 1.6.9 → 1.6.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/commands/form-data.d.ts.map +1 -1
  2. package/dist/commands/form-data.js +4 -1
  3. package/dist/commands/form-data.js.map +1 -1
  4. package/dist/commands/report-admin.d.ts.map +1 -1
  5. package/dist/commands/report-admin.js +378 -2
  6. package/dist/commands/report-admin.js.map +1 -1
  7. package/dist/commands/report-validate.d.ts.map +1 -1
  8. package/dist/commands/report-validate.js +1066 -3
  9. package/dist/commands/report-validate.js.map +1 -1
  10. package/dist/commands/report.d.ts.map +1 -1
  11. package/dist/commands/report.js +341 -3
  12. package/dist/commands/report.js.map +1 -1
  13. package/dist/commands/workflow-after-submit-comment.d.ts +3 -0
  14. package/dist/commands/workflow-after-submit-comment.d.ts.map +1 -0
  15. package/dist/commands/workflow-after-submit-comment.js +56 -0
  16. package/dist/commands/workflow-after-submit-comment.js.map +1 -0
  17. package/dist/commands/workflow-setting.d.ts.map +1 -1
  18. package/dist/commands/workflow-setting.js +2 -67
  19. package/dist/commands/workflow-setting.js.map +1 -1
  20. package/dist/services/action-detail.d.ts.map +1 -1
  21. package/dist/services/action-detail.js +1 -17
  22. package/dist/services/action-detail.js.map +1 -1
  23. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  24. package/dist/services/actionflow/components/action_eb_update_compiler.js +6 -2
  25. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  26. package/dist/services/actionflow/components/custom_trigger.js +1 -1
  27. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  28. package/dist/services/actionflow/components/dml_execute.js +1 -1
  29. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  30. package/dist/services/actionflow/components/document_actions.js +1 -2
  31. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  32. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  33. package/dist/services/actionflow/components/eb_get_data_by_id.js +2 -2
  34. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  35. package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
  36. package/dist/services/actionflow/components/form_data_builder.js +18 -10
  37. package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
  38. package/dist/services/actionflow/components/hrm_actions.js +0 -1
  39. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  40. package/dist/services/actionflow/components/webhook_trigger.js +3 -3
  41. package/dist/services/actionflow/components/webhook_trigger.js.map +1 -1
  42. package/dist/services/actionflow/components/workflow_actions.js +3 -2
  43. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  44. package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
  45. package/dist/services/actionflow/filter_rules.js +15 -13
  46. package/dist/services/actionflow/filter_rules.js.map +1 -1
  47. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  48. package/dist/services/actionflow/form_source.js +59 -11
  49. package/dist/services/actionflow/form_source.js.map +1 -1
  50. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  51. package/dist/services/actionflow/formula_service.js +4 -1
  52. package/dist/services/actionflow/formula_service.js.map +1 -1
  53. package/dist/services/actionflow/option_field_types.d.ts +5 -0
  54. package/dist/services/actionflow/option_field_types.d.ts.map +1 -0
  55. package/dist/services/actionflow/option_field_types.js +20 -0
  56. package/dist/services/actionflow/option_field_types.js.map +1 -0
  57. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  58. package/dist/services/actionflow/param_group_dto.js +7 -3
  59. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  60. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  61. package/dist/services/actionflow/preflight_service.js +42 -18
  62. package/dist/services/actionflow/preflight_service.js.map +1 -1
  63. package/dist/services/actionflow/webhook_source.d.ts.map +1 -1
  64. package/dist/services/actionflow/webhook_source.js +9 -4
  65. package/dist/services/actionflow/webhook_source.js.map +1 -1
  66. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  67. package/dist/services/actionflow/workflow_compiler.js +11 -8
  68. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  69. package/dist/services/report/blueprint.d.ts +109 -0
  70. package/dist/services/report/blueprint.d.ts.map +1 -0
  71. package/dist/services/report/blueprint.js +322 -0
  72. package/dist/services/report/blueprint.js.map +1 -0
  73. package/dist/services/report/build.d.ts.map +1 -1
  74. package/dist/services/report/build.js +8 -3
  75. package/dist/services/report/build.js.map +1 -1
  76. package/dist/services/report/card.d.ts +65 -0
  77. package/dist/services/report/card.d.ts.map +1 -0
  78. package/dist/services/report/card.js +151 -0
  79. package/dist/services/report/card.js.map +1 -0
  80. package/dist/services/report/copy-health.d.ts +31 -0
  81. package/dist/services/report/copy-health.d.ts.map +1 -0
  82. package/dist/services/report/copy-health.js +87 -0
  83. package/dist/services/report/copy-health.js.map +1 -0
  84. package/dist/services/report/dataset-heal.d.ts +64 -0
  85. package/dist/services/report/dataset-heal.d.ts.map +1 -0
  86. package/dist/services/report/dataset-heal.js +89 -0
  87. package/dist/services/report/dataset-heal.js.map +1 -0
  88. package/dist/services/report/dataset-ids.d.ts +70 -0
  89. package/dist/services/report/dataset-ids.d.ts.map +1 -0
  90. package/dist/services/report/dataset-ids.js +149 -0
  91. package/dist/services/report/dataset-ids.js.map +1 -0
  92. package/dist/services/report/dataset.d.ts.map +1 -1
  93. package/dist/services/report/dataset.js +3 -1
  94. package/dist/services/report/dataset.js.map +1 -1
  95. package/dist/services/report/empty-dataset.d.ts +51 -0
  96. package/dist/services/report/empty-dataset.d.ts.map +1 -0
  97. package/dist/services/report/empty-dataset.js +213 -0
  98. package/dist/services/report/empty-dataset.js.map +1 -0
  99. package/dist/services/report/field-binding.d.ts +75 -0
  100. package/dist/services/report/field-binding.d.ts.map +1 -0
  101. package/dist/services/report/field-binding.js +160 -0
  102. package/dist/services/report/field-binding.js.map +1 -0
  103. package/dist/services/report/forms.d.ts +32 -0
  104. package/dist/services/report/forms.d.ts.map +1 -1
  105. package/dist/services/report/forms.js +90 -0
  106. package/dist/services/report/forms.js.map +1 -1
  107. package/dist/services/report/formula-parent.d.ts +25 -0
  108. package/dist/services/report/formula-parent.d.ts.map +1 -0
  109. package/dist/services/report/formula-parent.js +116 -0
  110. package/dist/services/report/formula-parent.js.map +1 -0
  111. package/dist/services/report/locate.d.ts +40 -0
  112. package/dist/services/report/locate.d.ts.map +1 -0
  113. package/dist/services/report/locate.js +122 -0
  114. package/dist/services/report/locate.js.map +1 -0
  115. package/dist/services/report/reports.d.ts +4 -0
  116. package/dist/services/report/reports.d.ts.map +1 -1
  117. package/dist/services/report/reports.js +4 -2
  118. package/dist/services/report/reports.js.map +1 -1
  119. package/dist/services/report/scene.d.ts +22 -0
  120. package/dist/services/report/scene.d.ts.map +1 -0
  121. package/dist/services/report/scene.js +145 -0
  122. package/dist/services/report/scene.js.map +1 -0
  123. package/dist/services/report/types.d.ts +28 -0
  124. package/dist/services/report/types.d.ts.map +1 -1
  125. package/dist/services/report/verify.d.ts +24 -0
  126. package/dist/services/report/verify.d.ts.map +1 -1
  127. package/dist/services/report/verify.js +115 -2
  128. package/dist/services/report/verify.js.map +1 -1
  129. package/dist/services/report/workbook.d.ts +12 -1
  130. package/dist/services/report/workbook.d.ts.map +1 -1
  131. package/dist/services/report/workbook.js +107 -8
  132. package/dist/services/report/workbook.js.map +1 -1
  133. package/dist/services/workflow-after-submit-comment.d.ts +20 -0
  134. package/dist/services/workflow-after-submit-comment.d.ts.map +1 -0
  135. package/dist/services/workflow-after-submit-comment.js +81 -0
  136. package/dist/services/workflow-after-submit-comment.js.map +1 -0
  137. package/ecodecmd/src/build.js +36 -12
  138. package/package.json +1 -1
  139. package/skill-docs/SKILL.md +4 -4
  140. package/skill-docs/_catalog.md +10 -1
  141. package/skill-docs/actionflows/SKILL.md +1 -0
  142. package/skill-docs/actionflows/references/components/ebuilder/EnquiryForm.md +2 -2
  143. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +2 -0
  144. package/skill-docs/actionflows/references/components/trigger/WebHookTrigger.md +19 -1
  145. package/skill-docs/references/coding/guide-form-crud.md +2 -0
  146. package/skill-docs/references/coding/guide-page-code.md +108 -0
  147. package/skill-docs/references/components/ref-component-common.md +98 -0
  148. package/skill-docs/references/report/add-dataset-registration-guide.md +44 -22
  149. package/skill-docs/references/report/advanced-crosstab-tree-guide.md +82 -0
  150. package/skill-docs/references/report/ai-report-workflow.md +100 -100
  151. package/skill-docs/references/report/api-auth-headers.md +129 -0
  152. package/skill-docs/references/report/api-report-build-fast-path.md +274 -275
  153. package/skill-docs/references/report/app-datasource-lookup-guide.md +230 -230
  154. package/skill-docs/references/report/branch-scene-guide.md +293 -0
  155. package/skill-docs/references/report/build-resilience-guide.md +99 -0
  156. package/skill-docs/references/report/card-report-guide.md +110 -0
  157. package/skill-docs/references/report/cell-config-echo-guide.md +44 -9
  158. package/skill-docs/references/report/cell-transform-guide.md +9 -9
  159. package/skill-docs/references/report/column-split-report-guide.md +96 -0
  160. package/skill-docs/references/report/condition-format-guide.md +49 -24
  161. package/skill-docs/references/report/cross-dataset-filter-guide.md +180 -69
  162. package/skill-docs/references/report/crosstab-raw-workbook-guide.md +265 -0
  163. package/skill-docs/references/report/dataset-query-filter-guide.md +231 -235
  164. package/skill-docs/references/report/dataset-sidebar-ops-guide.md +75 -34
  165. package/skill-docs/references/report/dataset-table-field-contract-guide.md +196 -46
  166. package/skill-docs/references/report/datasource-metadata-guide.md +128 -119
  167. package/skill-docs/references/report/datasource-selection-and-parent-filter-guide.md +183 -148
  168. package/skill-docs/references/report/date-range-query-reference.md +97 -102
  169. package/skill-docs/references/report/default-header-style-guide.md +8 -8
  170. package/skill-docs/references/report/designer-blank-prevention-guide.md +8 -8
  171. package/skill-docs/references/report/dossier-report-guide.md +69 -0
  172. package/skill-docs/references/report/drilldown-report-guide.md +59 -0
  173. package/skill-docs/references/report/event-hreflink-guide.md +53 -47
  174. package/skill-docs/references/report/expansion-block-parent-config-guide.md +208 -0
  175. package/skill-docs/references/report/failure-cleanup-and-nonblocking-guide.md +183 -0
  176. package/skill-docs/references/report/field-bind-exact-match-guide.md +208 -208
  177. package/skill-docs/references/report/financial-stats-report-guide.md +89 -0
  178. package/skill-docs/references/report/formula-cell-api-guide.md +325 -258
  179. package/skill-docs/references/report/golden-case-summary-sheet.md +200 -0
  180. package/skill-docs/references/report/guide-report-build.md +6 -1
  181. package/skill-docs/references/report/hidden-row-and-header-merge-guide.md +10 -10
  182. package/skill-docs/references/report/layout-showlocation-freeze-guide.md +39 -10
  183. package/skill-docs/references/report/multi-report-crosstab-casebook.md +263 -0
  184. package/skill-docs/references/report/paged-group-report-guide.md +68 -0
  185. package/skill-docs/references/report/preaggregate-auto-disable-guide.md +24 -13
  186. package/skill-docs/references/report/query-condition-api-guide.md +145 -125
  187. package/skill-docs/references/report/ref-report-commands.md +41 -3
  188. package/skill-docs/references/report/report-baseinfo-defaults-guide.md +117 -117
  189. package/skill-docs/references/report/report-building-guide.md +52 -52
  190. package/skill-docs/references/report/report-case-prompts.md +104 -0
  191. package/skill-docs/references/report/report-config-schema.md +281 -281
  192. package/skill-docs/references/report/report-create-modes-guide.md +73 -35
  193. package/skill-docs/references/report/report-data-model.md +131 -131
  194. package/skill-docs/references/report/report-delivery-contract.md +23 -3
  195. package/skill-docs/references/report/report-designer-feature-map.md +30 -35
  196. package/skill-docs/references/report/report-help-guide.md +304 -0
  197. package/skill-docs/references/report/report-internal-error-guide.md +71 -0
  198. package/skill-docs/references/report/report-knowledge-base.md +27 -27
  199. package/skill-docs/references/report/report-lifecycle-api-guide.md +126 -94
  200. package/skill-docs/references/report/report-list-page-ops-guide.md +54 -8
  201. package/skill-docs/references/report/report-permission-guide.md +99 -102
  202. package/skill-docs/references/report/report-requirement-analysis-template.md +93 -29
  203. package/skill-docs/references/report/report-self-check-guide.md +164 -164
  204. package/skill-docs/references/report/report-verification-discipline-guide.md +203 -0
  205. package/skill-docs/references/report/safe-partial-save-guide.md +151 -151
  206. package/skill-docs/references/report/shard-freeze-report-guide.md +97 -0
  207. package/skill-docs/references/report/snowflake-id-precision-guide.md +84 -84
  208. package/skill-docs/references/report/spec-build-schema.md +71 -71
  209. package/skill-docs/references/report/targeted-fix-guide.md +155 -97
  210. package/skill-docs/references/report/user-request-scope-only-guide.md +23 -4
  211. package/skill-docs/references/workflow/guide-after-submit-comment.md +58 -0
  212. package/skill-docs/references/workflow/guide-workflow.md +6 -0
@@ -1,235 +1,231 @@
1
- # 数据集筛选(queryInfoSave)API 写入规范
2
-
3
- > **适用场景**:设计器左侧「数据集 → 筛选条件」、行级数据权限、整表预过滤。
4
- > **参考报表**:`1304979556231593985`(EBU 经营数据统计)
5
- > **代码实现**:`本地工作目录` → `build_*_dataset_query_filter()` / `ensure_*_dataset_filter()`
6
- > **执行**:`python 本地工作目录`
7
-
8
- ---
9
-
10
- ## 一、三种「筛选」机制(必区分)
11
-
12
- | 机制 | 设计器入口 | API | 持久化形态 | 典型用途 |
13
- |------|-----------|-----|-----------|----------|
14
- | **高级搜索** | 页面 → 查询设置 | `saveQueryItem` / `getQueryItem` | QueryItem JSON | 用户运行时输入筛选 |
15
- | **数据集筛选** | 左侧数据集 → 筛选条件 | **`queryInfoSave` / `queryInfoGet`** | `conditionData` + `otherData` | 行级权限、整表预过滤 |
16
- | **单元格/实例筛选** | 单元格自定义筛选 / 多数据集副本 | `saveReportWithCacheConfig` → `datasetFilter` / `customFilterField` | filterList + fieldKey | 列级差异化汇总 |
17
-
18
- **Agent 硬约束**
19
-
20
- - 用户说「左侧数据集筛选」「行级权限」「数据集过滤条件」→ **只用 `queryInfoSave`**,禁止写 `saveQueryItem`。
21
- - 用户说「高级搜索」「查询条件」→ **`saveQueryItem`**,禁止写 `queryInfoSave`。
22
- - 用户说「自定义筛选」「核算机构不包含」且针对**某一列/某一数据集实例**→ `datasetFilter` / `customFilterField`(见 `cross-dataset-filter-guide.md`)。
23
-
24
- ---
25
-
26
- ## 二、API
27
-
28
- | 操作 | 方法 | 参数 |
29
- |------|------|------|
30
- | 保存 | `POST /api/bs/edc/dataset/queryInfoSave` | `datasetId`, `filterData`(conditionData JSON 字符串), `otherData`(JSON 字符串) |
31
- | 读取 | `GET /api/bs/edc/dataset/queryInfoGet` | `datasetId` |
32
-
33
- 回读路径:`data.conditionData`、`data.otherData`(均为 JSON 字符串,需二次 `json.loads`)。
34
-
35
- ---
36
-
37
- ## 三、conditionData 顶层结构
38
-
39
- ```json
40
- {
41
- "key": "<毫秒时间戳>",
42
- "relationship": "1",
43
- "isParent": true,
44
- "isNewFilter": true,
45
- "parentNode": "",
46
- "datas": [ /* 条件节点数组 */ ],
47
- "version": 1
48
- }
49
- ```
50
-
51
- | 字段 | 值 | 说明 |
52
- |------|-----|------|
53
- | `relationship` | **`"1"`** | 且(AND) |
54
- | `relationship` | **`"0"`** | 或(OR) |
55
- | `otherData.rootStr` | 人类可读表达式 | 设计器展示用,须与 datas 语义一致 |
56
- | `otherData.filterIsNull` | **`true`** | **变量值为空时不参与条件过滤**(平台 `QueryFilterBiz.analysisConfigFilter`);与设计器「空值不筛」对齐,写入变量条件时**必须**为 `true` |
57
- | `otherData.rootStr` | 人类可读表达式 | 设计器展示用,须与 datas 语义一致 |
58
- | `otherData.version` | `1` | 与手动 save 对齐 |
59
-
60
- ### 5.4 自定义变量(如 `{cs}`)
61
-
62
- | 场景 | func | value | otherData |
63
- |------|------|-------|-----------|
64
- | 创建者等于自定义变量 cs | `eq` | `{cs}` | **`filterIsNull: true`** |
65
- | 固定字面量(如资产名称=办公用品) | `eq` | `办公用品` | 同上(整组筛选共用 otherData) |
66
-
67
- > 变量名写在花括号内,与运行时请求参数 / 页面入参键一致。`filterIsNull=true` 时,`{cs}` 解析为空则**整条条件跳过**,不会误筛成「等于空」。
68
-
69
- ---
70
-
71
- ## 四、单条条件节点(datas[])
72
-
73
- ```json
74
- {
75
- "type": "condition",
76
- "fieldName": "field_1299789221321891852",
77
- "fieldType": "String",
78
- "compType": "Text",
79
- "text": "产品类型",
80
- "objId": "<sourceId>",
81
- "conditions": {
82
- "func": "nempty",
83
- "value": "",
84
- "type": "",
85
- "text": "",
86
- "isEsb": false
87
- },
88
- "formInfo": { "fieldId": "<字段 id>" },
89
- "config": { "fieldId": "<字段 id>" }
90
- }
91
- ```
92
-
93
- `conditions` 三要素:**func** + **value** + **type**(字段对比时为 `"formField"`)。
94
-
95
- ---
96
-
97
- ## 五、需求语义 → func / value 对照表
98
-
99
- ### 5.1 字面量条件(type 为空)
100
-
101
- | 设计器 / 需求描述 | func | value 示例 | 备注 |
102
- |------------------|------|-----------|------|
103
- | 不为空 | **`nempty`** | `""` | 保存用 `nempty`,勿写 `isNotNull` |
104
- | 为空 | **`empty`** | `""` | |
105
- | 等于 | **`eq`** | 固定值或 `{lastname}` | 人员当前登录见 §5.3 |
106
- | 不等于(固定文本) | **`notEq`** | `"新签合同"` | 与字段对比的 `neq` 不同 |
107
- | 包含 | `like` / `contains` | 文本 | |
108
- | 不包含 | `uncontains` | 文本 | datasetFilter 常用 |
109
- | 开头包含 | **`startWith`** | `{thisyear}` | 按年份前缀筛 datetime / yyyy-MM |
110
- | 结尾包含 | `endWith` | 文本 | |
111
- | 介于 | **`between`** | `["{thisyear}",""]` | 完整日期区间;**不**适用于 yyyy-MM 等于当前月 |
112
-
113
- ### 5.2 字段对比(type = `"formField"`)
114
-
115
- 左字段为当前节点 `fieldName`;右字段写在 `value.compareFormField`(目标字段完整 `originField` + `showName` + `changeTrigger`)。
116
-
117
- | 设计器 / 需求描述 | func | value 结构 |
118
- |------------------|------|-----------|
119
- | **不属于**(字段 A 不属于字段 B) | **`unaggregate`** | `{ "compareFormField": <字段B originField> }` |
120
- | **不等于**(字段 A ≠ 字段 B) | **`neq`** | `{ "compareFormField": <字段B originField> }` |
121
-
122
- ```python
123
- def _build_compare_form_field(origin_field):
124
- field = dict(origin_field or {})
125
- field["showName"] = field.get("name") or field.get("showName") or ""
126
- field["changeTrigger"] = field.get("changeTrigger") or "1"
127
- return field
128
- ```
129
-
130
- **常见错误**
131
-
132
- | 错误写法 | 正确理解 |
133
- |----------|----------|
134
- | `notEq` + 字符串 `"核算机构"` | 排除产品类型**枚举值**为「核算机构」,不是字段对比 |
135
- | `unaggregate` 用于「不等于」 | 「不等于」用 **`neq`**;「不属于」用 **`unaggregate`** |
136
- | `isNotNull` 写入 queryInfoSave | 平台归一化为 **`nempty`** |
137
-
138
- ### 5.3 系统参数(dataset 筛选已验证)
139
-
140
- | 场景 | func | value |
141
- |------|------|-------|
142
- | 当前用户姓名 | `eq` | `{lastname}` |
143
- | 当前登录人员 ID | **`eq`** | `{userid}`(设计器显示「等于」,勿用 `in`) |
144
- | 当前年月(format=`yyyy-MM`) | `eq` | **`{year}-{month}`** |
145
- | 今年(yyyy-MM / datetime 前缀) | `startWith` | **`{thisyear}`** |
146
- | 今年(高级搜索日期区间) | `between` | `["{thisyear}",""]` | 仅 saveQueryItem,非左侧 dataset |
147
-
148
- **无效占位符**:`{username}`、`{today}`、`{currmonth}`。
149
-
150
- ---
151
-
152
- ## 六、日期字段 format 与写法
153
-
154
- | 字段 format | 需求 | 推荐写法 | 勿用 |
155
- |-------------|------|----------|------|
156
- | `yyyy-MM` | 当前年月 | `eq` + `{year}-{month}` | `between` + `{thismonth}` |
157
- | `yyyy-MM` | 今年 | `startWith` + `{thisyear}` | `between`(完整日期语义) |
158
- | `yyyy-MM-dd` / `yyyy-MM-dd HH:mm:ss` | 今年 | `startWith` + `{thisyear}` | — |
159
- | 高级搜索日期区间 | 本月 | — | 见 `query-condition-api-guide.md` §五 |
160
-
161
- ---
162
-
163
- ## 七、EBU 参考示例
164
-
165
- 报表 `1304979556231593985`
166
-
167
- ### 7.1 EBU团队 · AND(`relationship: "1"`)
168
-
169
- 数据集 `1304979556231593994`
170
-
171
- | 字段 | func | value |
172
- |------|------|-------|
173
- | 负责人姓名 | `eq` | `{lastname}` |
174
- | 创建者 | **`eq`** | `{userid}` |
175
-
176
- rootStr:`( 负责人姓名 等于 '{lastname}' ) AND ( 创建者 等于 '{userid}' )`
177
-
178
- ### 7.2 直销合同业绩表 · OR(`relationship: "0"`)
179
-
180
- 数据集 `1304979560546713602`
181
-
182
- | 字段 | func | type | value |
183
- |------|------|------|-------|
184
- | 核算机构 | **`neq`** | **`formField`** | compareFormField → 合同种类 |
185
- | 创建时间 | **`startWith`** | — | `{thisyear}` |
186
-
187
- rootStr:`(( 核算机构 不等于合同种类 ) 或 ( 创建时间 开头包含 '{thisyear}' ))`
188
-
189
- ### 7.3 其他可用写法(按需)
190
-
191
- | 场景 | func | value |
192
- |------|------|-------|
193
- | 产品类型 不属于 核算机构 | `unaggregate` + formField | compareFormField → 核算机构 |
194
- | 合同业绩年月 = 当前年月 | `eq` | `{year}-{month}` |
195
-
196
- ---
197
-
198
- ## 八、写入与验证流程
199
-
200
- 1. `fieldsAndOriginFields` / `get_fields` 取字段 **originField**(字段对比右侧必填)。
201
- 2. 组装 `conditionData` + `otherData`(含 `rootStr`)。
202
- 3. `POST queryInfoSave`。
203
- 4. **`GET queryInfoGet` 回读**,核对:
204
- - [ ] `relationship` 与 AND/OR 一致
205
- - [ ] 每条 `conditions.func` / `conditions.type` / `conditions.value`
206
- - [ ] 字段对比:`value.compareFormField.name` 为右字段 fieldName
207
- - [ ] `otherData.rootStr` 与设计器一致
208
- 5. 设计器刷新左侧数据集 → 筛选条件,确认操作项与默认值回显。
209
-
210
- **禁止**:未回读 `queryInfoGet` 即声称配置正确(手动 save 与脚本形态可能不同)。
211
-
212
- ---
213
-
214
- ## 九、与 queryInfoSave 无关的筛选
215
-
216
- 以下场景**不要**使用本章 API:
217
-
218
- | 需求 | 文档 |
219
- |------|------|
220
- | 报表顶部高级搜索 | `query-condition-api-guide.md` §二–§六 |
221
- | 单元格 customFilterField | `cross-dataset-filter-guide.md` §三 |
222
- | 多数据集实例 datasetFilter | `cross-dataset-filter-guide.md` §3.4 |
223
- | 左父格 subordination / leftFilterField | `cross-dataset-filter-guide.md` §二 |
224
-
225
- ---
226
-
227
- ## 十、相关文件
228
-
229
- | 文件 | 用途 |
230
- |------|------|
231
- | `本地工作目录` | `_dataset_filter_condition_node`、`_dataset_filter_form_field_compare_node`、`build_*_dataset_query_filter` |
232
- | `本地工作目录` | 一键写入高级搜索 + 数据集筛选 |
233
- | `query-condition-api-guide.md` | saveQueryItem 高级搜索(与本文互补) |
234
- | `cross-dataset-filter-guide.md` | datasetFilter / customFilterField / fieldKey |
235
- | `report-knowledge-base.md` | FuncType 枚举摘要 |
1
+ # 数据集筛选(queryInfoSave)API 写入规范
2
+
3
+ > **适用场景**:设计器左侧「数据集 → 筛选条件」、行级数据权限、整表预过滤。
4
+ > **金标准报表**:`1304979556231593985`(EBU 经营数据统计)
5
+
6
+ ---
7
+
8
+ ## 一、三种「筛选」机制(必区分)
9
+
10
+ | 机制 | 设计器入口 | API | 持久化形态 | 典型用途 |
11
+ |------|-----------|-----|-----------|----------|
12
+ | **高级搜索** | 页面 → 查询设置 | `saveQueryItem` / `getQueryItem` | QueryItem JSON | 用户运行时输入筛选 |
13
+ | **数据集筛选** | 左侧数据集 → 筛选条件 | **`queryInfoSave` / `queryInfoGet`** | `conditionData` + `otherData` | 行级权限、整表预过滤 |
14
+ | **单元格/实例筛选** | 单元格自定义筛选 / 多数据集副本 | `saveReportWithCacheConfig` → `datasetFilter` / `customFilterField` | filterList + fieldKey | 列级差异化汇总 |
15
+
16
+ **Agent 硬约束**
17
+
18
+ - 用户说「左侧数据集筛选」「行级权限」「数据集过滤条件」→ **只用 `queryInfoSave`**,禁止写 `saveQueryItem`。
19
+ - 用户说「高级搜索」「查询条件」→ **`saveQueryItem`**,禁止写 `queryInfoSave`。
20
+ - 用户说「自定义筛选」「核算机构不包含」且针对**某一列/某一数据集实例**→ `datasetFilter` / `customFilterField`(见 `cross-dataset-filter-guide.md`)。
21
+
22
+ ---
23
+
24
+ ## 二、API
25
+
26
+ | 操作 | 方法 | 参数 |
27
+ |------|------|------|
28
+ | 保存 | `POST /api/bs/edc/dataset/queryInfoSave` | `datasetId`, `filterData`(conditionData JSON 字符串), `otherData`(JSON 字符串) |
29
+ | 读取 | `GET /api/bs/edc/dataset/queryInfoGet` | `datasetId` |
30
+
31
+ 回读路径:`data.conditionData`、`data.otherData`(均为 JSON 字符串,需二次 `json.loads`)。
32
+
33
+ ---
34
+
35
+ ## 三、conditionData 顶层结构
36
+
37
+ ```json
38
+ {
39
+ "key": "<毫秒时间戳>",
40
+ "relationship": "1",
41
+ "isParent": true,
42
+ "isNewFilter": true,
43
+ "parentNode": "",
44
+ "datas": [ /* 条件节点数组 */ ],
45
+ "version": 1
46
+ }
47
+ ```
48
+
49
+ | 字段 | 值 | 说明 |
50
+ |------|-----|------|
51
+ | `relationship` | **`"1"`** | 且(AND) |
52
+ | `relationship` | **`"0"`** | 或(OR) |
53
+ | `otherData.rootStr` | 人类可读表达式 | 设计器展示用,须与 datas 语义一致 |
54
+ | `otherData.filterIsNull` | **`true`** | **变量值为空时不参与条件过滤**(平台 `QueryFilterBiz.analysisConfigFilter`);与设计器「空值不筛」对齐,写入变量条件时**必须**为 `true` |
55
+ | `otherData.rootStr` | 人类可读表达式 | 设计器展示用,须与 datas 语义一致 |
56
+ | `otherData.version` | `1` | 与手动 save 对齐 |
57
+
58
+ ### 5.4 自定义变量(如 `{cs}`)
59
+
60
+ | 场景 | func | value | otherData |
61
+ |------|------|-------|-----------|
62
+ | 创建者等于自定义变量 cs | `eq` | `{cs}` | **`filterIsNull: true`** |
63
+ | 固定字面量(如资产名称=办公用品) | `eq` | `办公用品` | 同上(整组筛选共用 otherData) |
64
+
65
+ > 变量名写在花括号内,与运行时请求参数 / 页面入参键一致。`filterIsNull=true` 时,`{cs}` 解析为空则**整条条件跳过**,不会误筛成「等于空」。
66
+
67
+ ---
68
+
69
+ ## 四、单条条件节点(datas[])
70
+
71
+ ```json
72
+ {
73
+ "type": "condition",
74
+ "fieldName": "field_1299789221321891852",
75
+ "fieldType": "String",
76
+ "compType": "Text",
77
+ "text": "产品类型",
78
+ "objId": "<sourceId>",
79
+ "conditions": {
80
+ "func": "nempty",
81
+ "value": "",
82
+ "type": "",
83
+ "text": "",
84
+ "isEsb": false
85
+ },
86
+ "formInfo": { "fieldId": "<字段 id>" },
87
+ "config": { "fieldId": "<字段 id>" }
88
+ }
89
+ ```
90
+
91
+ `conditions` 三要素:**func** + **value** + **type**(字段对比时为 `"formField"`)。
92
+
93
+ ---
94
+
95
+ ## 五、需求语义 → func / value 对照表
96
+
97
+ ### 5.1 字面量条件(type 为空)
98
+
99
+ | 设计器 / 需求描述 | func | value 示例 | 备注 |
100
+ |------------------|------|-----------|------|
101
+ | 不为空 | **`nempty`** | `""` | 保存用 `nempty`,勿写 `isNotNull` |
102
+ | 为空 | **`empty`** | `""` | |
103
+ | 等于 | **`eq`** | 固定值或 `{lastname}` | 人员当前登录见 §5.3 |
104
+ | 不等于(固定文本) | **`notEq`** | `"新签合同"` | 与字段对比的 `neq` 不同 |
105
+ | 包含 | `like` / `contains` | 文本 | |
106
+ | 不包含 | `uncontains` | 文本 | datasetFilter 常用 |
107
+ | 开头包含 | **`startWith`** | `{thisyear}` | 按年份前缀筛 datetime / yyyy-MM |
108
+ | 结尾包含 | `endWith` | 文本 | |
109
+ | 介于 | **`between`** | `["{thisyear}",""]` | 完整日期区间;**不**适用于 yyyy-MM 等于当前月 |
110
+
111
+ ### 5.2 字段对比(type = `"formField"`)
112
+
113
+ 左字段为当前节点 `fieldName`;右字段写在 `value.compareFormField`(目标字段完整 `originField` + `showName` + `changeTrigger`)。
114
+
115
+ | 设计器 / 需求描述 | func | value 结构 |
116
+ |------------------|------|-----------|
117
+ | **不属于**(字段 A 不属于字段 B) | **`unaggregate`** | `{ "compareFormField": <字段B originField> }` |
118
+ | **不等于**(字段 A ≠ 字段 B) | **`neq`** | `{ "compareFormField": <字段B originField> }` |
119
+
120
+ ```python
121
+ def _build_compare_form_field(origin_field):
122
+ field = dict(origin_field or {})
123
+ field["showName"] = field.get("name") or field.get("showName") or ""
124
+ field["changeTrigger"] = field.get("changeTrigger") or "1"
125
+ return field
126
+ ```
127
+
128
+ **常见错误**
129
+
130
+ | 错误写法 | 正确理解 |
131
+ |----------|----------|
132
+ | `notEq` + 字符串 `"核算机构"` | 排除产品类型**枚举值**为「核算机构」,不是字段对比 |
133
+ | `unaggregate` 用于「不等于」 | 「不等于」用 **`neq`**;「不属于」用 **`unaggregate`** |
134
+ | `isNotNull` 写入 queryInfoSave | 平台归一化为 **`nempty`** |
135
+
136
+ ### 5.3 系统参数(dataset 筛选已验证)
137
+
138
+ | 场景 | func | value |
139
+ |------|------|-------|
140
+ | 当前用户姓名 | `eq` | `{lastname}` |
141
+ | 当前登录人员 ID | **`eq`** | `{userid}`(设计器显示「等于」,勿用 `in`) |
142
+ | 当前年月(format=`yyyy-MM`) | `eq` | **`{year}-{month}`** |
143
+ | 今年(yyyy-MM / datetime 前缀) | `startWith` | **`{thisyear}`** |
144
+ | 今年(高级搜索日期区间) | `between` | `["{thisyear}",""]` | 仅 saveQueryItem,非左侧 dataset |
145
+
146
+ **无效占位符**:`{username}`、`{today}`、`{currmonth}`。
147
+
148
+ ---
149
+
150
+ ## 六、日期字段 format 与写法
151
+
152
+ | 字段 format | 需求 | 推荐写法 | 勿用 |
153
+ |-------------|------|----------|------|
154
+ | `yyyy-MM` | 当前年月 | `eq` + `{year}-{month}` | `between` + `{thismonth}` |
155
+ | `yyyy-MM` | 今年 | `startWith` + `{thisyear}` | `between`(完整日期语义) |
156
+ | `yyyy-MM-dd` / `yyyy-MM-dd HH:mm:ss` | 今年 | `startWith` + `{thisyear}` | — |
157
+ | 高级搜索日期区间 | 本月 | — | 见 `query-condition-api-guide.md` §五 |
158
+
159
+ ---
160
+
161
+ ## 七、EBU 金标准示例
162
+
163
+ 报表 `1304979556231593985`
164
+
165
+ ### 7.1 EBU团队 · AND(`relationship: "1"`)
166
+
167
+ 数据集 `1304979556231593994`
168
+
169
+ | 字段 | func | value |
170
+ |------|------|-------|
171
+ | 负责人姓名 | `eq` | `{lastname}` |
172
+ | 创建者 | **`eq`** | `{userid}` |
173
+
174
+ rootStr:`( 负责人姓名 等于 '{lastname}' ) AND ( 创建者 等于 '{userid}' )`
175
+
176
+ ### 7.2 直销合同业绩表 · OR(`relationship: "0"`)
177
+
178
+ 数据集 `1304979560546713602`
179
+
180
+ | 字段 | func | type | value |
181
+ |------|------|------|-------|
182
+ | 核算机构 | **`neq`** | **`formField`** | compareFormField → 合同种类 |
183
+ | 创建时间 | **`startWith`** | — | `{thisyear}` |
184
+
185
+ rootStr:`(( 核算机构 不等于合同种类 ) 或 ( 创建时间 开头包含 '{thisyear}' ))`
186
+
187
+ ### 7.3 历史验证过的其他写法(按需)
188
+
189
+ | 场景 | func | value |
190
+ |------|------|-------|
191
+ | 产品类型 不属于 核算机构 | `unaggregate` + formField | compareFormField → 核算机构 |
192
+ | 合同业绩年月 = 当前年月 | `eq` | `{year}-{month}` |
193
+
194
+ ---
195
+
196
+ ## 八、写入与验证流程
197
+
198
+ 1. `fieldsAndOriginFields` / `get_fields` 取字段 **originField**(字段对比右侧必填)。
199
+ 2. 组装 `conditionData` + `otherData`(含 `rootStr`)。
200
+ 3. `POST queryInfoSave`。
201
+ 4. **`GET queryInfoGet` 回读**,核对:
202
+ - [ ] `relationship` 与 AND/OR 一致
203
+ - [ ] 每条 `conditions.func` / `conditions.type` / `conditions.value`
204
+ - [ ] 字段对比:`value.compareFormField.name` 为右字段 fieldName
205
+ - [ ] `otherData.rootStr` 与设计器一致
206
+ 5. 设计器刷新左侧数据集 → 筛选条件,确认操作项与默认值回显。
207
+
208
+ **禁止**:未回读 `queryInfoGet` 即声称配置正确(手动 save 与脚本形态可能不同)。
209
+
210
+ ---
211
+
212
+ ## 九、与 queryInfoSave 无关的筛选
213
+
214
+ 以下场景**不要**使用本章 API:
215
+
216
+ | 需求 | 文档 |
217
+ |------|------|
218
+ | 报表顶部高级搜索 | `query-condition-api-guide.md` §二–§六 |
219
+ | 单元格 customFilterField | `cross-dataset-filter-guide.md` §三 |
220
+ | 多数据集实例 datasetFilter | `cross-dataset-filter-guide.md` §3.4 |
221
+ | 左父格 subordination / leftFilterField | `cross-dataset-filter-guide.md` §二 |
222
+
223
+ ---
224
+
225
+ ## 十、相关文件
226
+
227
+ | 文件 | 用途 |
228
+ |------|------|
229
+ | `query-condition-api-guide.md` | saveQueryItem 高级搜索(与本文互补) |
230
+ | `cross-dataset-filter-guide.md` | datasetFilter / customFilterField / fieldKey |
231
+ | `report-knowledge-base.md` | FuncType 枚举摘要 |