@shundoo-ai/dsh-cosmic 1.0.21 → 1.0.22
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/package.json +1 -1
- package/skills/cosmic-build/LOCAL-PATCHES.md +43 -14
- package/skills/cosmic-build/SKILL.md +24 -9
- package/skills/cosmic-build/examples/java-rules/CosmicReportAggregation.java +26 -17
- package/skills/cosmic-build/examples/java-rules/CosmicReportFilters.java +96 -2
- package/skills/cosmic-build/knowledge/cosmic/arch/security/security_standard.md +4 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/allimport.md +2 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/core/dynamic-object-collection.md +6 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/core/model.md +9 -9
- package/skills/cosmic-build/knowledge/cosmic/platform/core/view.md +5 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/form-plugin.md +8 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/list-plugin.md +5 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/print-plugin-guide.md +1 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/report-plugin.md +269 -57
- package/skills/cosmic-build/knowledge/cosmic/platform/reportlistdata-plugin.md +130 -23
- package/skills/cosmic-build/knowledge/cosmic/platform/reporttreedata-plugin.md +48 -28
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/_index.md +12 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/common/attachment-name-process.md +17 -13
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/common/dynamic-update-field.md +4 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/filter-grid/filter-grid-set-value.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-basedatafield.md +2 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-container-init.md +0 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-popup.md +0 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-value-parse.md +5 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/list-show-form.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/query-field-dynamic.md +0 -7
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/business-data/delete-service.md +24 -29
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/ksql/db-batch.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/ksql/db-direct-access.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/qfilter/entity-object-access.md +8 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/qfilter/qfilter-compose.md +6 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/after-bind-data-set-visible.md +5 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/click-return-data.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/closed-call-back-set-value.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/register-listener.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/set-filter-tab-org.md +3 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/dispatch-service/microservice-dev.md +18 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/dist-lock/dist-lock-basic.md +3 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/mq/mq-subscribe.md +5 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/async-operation.md +10 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/big-task-async.md +4 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/schedule-task.md +9 -7
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/operation-interactive.md +33 -34
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/operation-plugin-events.md +30 -22
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-async-query.md +133 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-batch-query.md +26 -22
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-chart.md +112 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-dataset-assembly.md +200 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-head-filter.md +177 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-hyperlink-drill.md +216 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-list-data-query.md +12 -12
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-merge-column.md +44 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-print-data.md +163 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-row-data-toolbar.md +188 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-subtotal-total.md +139 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-tree-data-query.md +108 -12
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-tree-list.md +181 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/system-service/report-plugin-interface.md +3 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-basedata-cascade-confirm.md +14 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-before-item-validate.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-build-filter.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-multi-level-filter.md +11 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-refresh-node.md +22 -15
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-algo.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-entity-model.md +3 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-exception.md +9 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-orm-access.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-request-context.md +7 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/standards.md +28 -3
- package/skills/cosmic-build/references/compile-guide.md +36 -1
- package/skills/cosmic-build/references/dcs-code-rules.md +180 -0
- package/skills/cosmic-build/references/delivery.md +16 -2
- package/skills/cosmic-build/references/execution-contract.md +15 -3
- package/skills/cosmic-build/references/java-plugin-delivery.md +21 -11
- package/skills/cosmic-build/references/plugin-handoff-input.md +82 -24
- package/skills/cosmic-build/references/plugin-runtime-routing.md +23 -6
- package/skills/cosmic-build/references/report-filter-contract.md +53 -15
- package/skills/cosmic-build/references/sdk-inspection.md +4 -1
- package/skills/cosmic-build/references/type-registry.json +26 -17
- package/skills/cosmic-build/schemas/data-model-authoring.schema.json +1 -1
- package/skills/cosmic-build/scripts/_http_client.py +3 -0
- package/skills/cosmic-build/scripts/compile_plugin_source.py +251 -42
- package/skills/cosmic-build/scripts/configure_list.py +112 -0
- package/skills/cosmic-build/scripts/dcs-rule-catalog.json +799 -0
- package/skills/cosmic-build/scripts/dcs_code_gate.py +1976 -0
- package/skills/cosmic-build/scripts/execution_binding.py +25 -0
- package/skills/cosmic-build/scripts/platform_api_contract.py +352 -7
- package/skills/cosmic-build/scripts/plugin_source_gate.py +9 -1
- package/skills/cosmic-build/scripts/plugin_target_sdk.py +12 -8
- package/skills/cosmic-build/scripts/prepare_plugin_handoff.py +488 -88
- package/skills/cosmic-build/scripts/query_plugin_handoff.py +207 -20
- package/skills/cosmic-build/scripts/register_plugins.py +27 -10
- package/skills/cosmic-build/scripts/render_output_cards.py +57 -20
- package/skills/cosmic-build/scripts/resolve_output_path.py +60 -26
- package/skills/cosmic-build/scripts/run_java_tests.py +162 -0
- package/skills/cosmic-build/scripts/sync_generated_locale_assets.py +28 -0
- package/skills/cosmic-build/scripts/test/fixtures/ReportSdkCheck.java +1 -22
- package/skills/cosmic-build/scripts/test/fixtures/list_column_property_declarations.json +887 -0
- package/skills/cosmic-build/scripts/test/fixtures/operation-entry-field-prepare.java +78 -0
- package/skills/cosmic-build/scripts/test/test_add_field_required_contract.py +12 -0
- package/skills/cosmic-build/scripts/test/test_batch5_drift_governance.py +23 -2
- package/skills/cosmic-build/scripts/test/test_compile_plugin_source.py +287 -4
- package/skills/cosmic-build/scripts/test/test_configure_list_delivery.py +132 -0
- package/skills/cosmic-build/scripts/test/test_cosmic_sdk_examples.py +58 -1
- package/skills/cosmic-build/scripts/test/test_data_model_contract.py +19 -0
- package/skills/cosmic-build/scripts/test/test_dcs_code_gate.py +901 -0
- package/skills/cosmic-build/scripts/test/test_delivery_stage_boundary.py +1 -1
- package/skills/cosmic-build/scripts/test/test_direct_cli_architecture.py +2 -0
- package/skills/cosmic-build/scripts/test/test_http_client.py +6 -0
- package/skills/cosmic-build/scripts/test/test_java_toolchain_feedback.py +206 -0
- package/skills/cosmic-build/scripts/test/test_kd_api.py +21 -0
- package/skills/cosmic-build/scripts/test/test_list_configuration_closure.py +184 -0
- package/skills/cosmic-build/scripts/test/test_mcp_cli.py +139 -2
- package/skills/cosmic-build/scripts/test/test_menu_creation_closure.py +16 -0
- package/skills/cosmic-build/scripts/test/test_modeling_input_recovery.py +55 -1
- package/skills/cosmic-build/scripts/test/test_open_world_cli_catalog.py +1 -1
- package/skills/cosmic-build/scripts/test/test_operation_field_preparation.py +84 -0
- package/skills/cosmic-build/scripts/test/test_platform_api_contract.py +322 -1
- package/skills/cosmic-build/scripts/test/test_plugin_handoff.py +951 -4
- package/skills/cosmic-build/scripts/test/test_plugin_source_gate.py +30 -2
- package/skills/cosmic-build/scripts/test/test_plugin_target_sdk.py +21 -0
- package/skills/cosmic-build/scripts/test/test_property_reroute.py +165 -0
- package/skills/cosmic-build/scripts/test/test_property_schema_first.py +35 -0
- package/skills/cosmic-build/scripts/test/test_query_plugin_handoff.py +221 -0
- package/skills/cosmic-build/scripts/test/test_register_plugins.py +76 -4
- package/skills/cosmic-build/scripts/test/test_render_output_cards.py +75 -3
- package/skills/cosmic-build/scripts/test/test_report_business_contract.py +27 -5
- package/skills/cosmic-build/scripts/test/test_report_doc_contract_sync.py +103 -11
- package/skills/cosmic-build/scripts/test/test_report_plugin_source_gate.py +46 -16
- package/skills/cosmic-build/scripts/test/test_report_properties.py +74 -15
- package/skills/cosmic-build/scripts/test/test_report_query_data_source.py +3 -1
- package/skills/cosmic-build/scripts/test/test_report_sdk_optimization.py +1 -2
- package/skills/cosmic-build/scripts/test/test_test_environment.py +76 -1
- package/skills/cosmic-build/scripts/test_environment.py +67 -1
- package/skills/cosmic-build/skills/cosmic-coding-impl/SKILL.md +52 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/apis/ai_meta.md +16 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/report-write-contracts.json +59 -26
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-domain.json +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/report-write.schema.json +75 -18
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/pdm_auto.py +39 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/pdm_client.py +97 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/verify/SKILL.md +10 -12
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_apps.py +3 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_formactions.py +38 -29
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_listui.py +400 -233
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_metaops.py +87 -45
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_properties.py +42 -15
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_rules.py +135 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/config.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/execution_errors.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/formatters.py +17 -11
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/property_reroute.py +15 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/report_ops.py +1429 -238
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/validators.py +56 -28
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/cosmic_api.py +380 -134
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/field_decorator.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/meta_export.py +12 -11
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/meta_verifier.py +42 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_add_field_placement_closure.py +8 -8
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_configuration_readback.py +94 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_receipt_resume.py +47 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_metadata_unchanged_fail_closed.py +87 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_dym_evidence.py +23 -23
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_entity_integrity.py +279 -4
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_field_guard.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_plugin_contract.py +509 -32
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_readback_derivation.py +178 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_recreate_plan.py +125 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_serve_contract.py +208 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_typed_filters.py +259 -50
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_inventory_perf.py +29 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_write_closure.py +20 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_post_build_recovery.py +18 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_verification_evidence.py +35 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_identity_guard.py +25 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_time_range_rule.py +98 -0
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/domain-model/report-model.md +20 -9
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/report-modeling-guide.md +55 -25
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/property-guides/report-column-properties.md +15 -39
- package/skills/cosmic-build/skills/cosmic-meta-modeling/SKILL.md +19 -17
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/SKILL.md +82 -38
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-batch.md +64 -19
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-plugin.md +32 -20
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-tree.md +78 -31
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/report-artifact-schema.json +2 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-companion-fields.md +3 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-list-configuration.md +2 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_contract.py +3 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_emit.py +27 -4
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/report_validator.py +99 -44
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/test_report_examples.py +31 -4
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/test_report_validator.py +129 -29
- package/skills/cosmic-build/skills/cosmic-meta-modifier/SKILL.md +6 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/validation.md +2 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/SKILL.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/report-op/SKILL.md +104 -25
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/SKILL.md +9 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/verify/usage-guide.md +2 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md +39 -12
- package/skills/cosmic-build/skills/mcp-server/SKILL.md +39 -24
- package/skills/cosmic-build/skills/mcp-server/scripts/mcp_cli.py +20 -6
- package/skills/cosmic-dev-best-practices/SKILL.md +1 -1
- package/skills/cosmic-dev-best-practices/references/README.md +2 -2
- package/skills/cosmic-dev-best-practices/references/basedata-dev-convention.md +2 -2
- package/skills/cosmic-dev-best-practices/references/bill-dev-convention.md +4 -4
- package/skills/cosmic-dev-best-practices/references/design-document-convention.md +2 -2
- package/skills/cosmic-dev-best-practices/references/design-examples/basedata-design-example.md +4 -4
- package/skills/cosmic-dev-best-practices/references/design-examples/bill-design-example.md +13 -13
- package/skills/cosmic-dev-best-practices/references/elements/CustomerField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/README.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/SupplierField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/common-field-property-conventions.md +109 -13
- package/skills/cosmic-dev-best-practices/references/layout-control-convention.md +1 -1
- package/skills/erp-analysis/references/delivery-contract.md +2 -1
- package/skills/erp-analysis/templates/AGENTS.template.md +3 -1
- package/skills/cosmic-build/assets/platform-report-filters/TypedReportFilterFields.java +0 -169
- package/skills/cosmic-build/assets/platform-report-filters/platform.patch +0 -98
- package/skills/cosmic-build/scripts/apply_report_filter_extension.py +0 -39
|
@@ -170,7 +170,7 @@ plugin query() → DataSet column name ← dateIndex ← ReportColumn
|
|
|
170
170
|
| `enabled` | Enabled | 是否启用 |
|
|
171
171
|
| `description` | Description | 描述文本 |
|
|
172
172
|
| `displayname` | DisplayName | 显示名称 |
|
|
173
|
-
| `type` | Type | 插件类型:`0` = Java,`3` =
|
|
173
|
+
| `type` | Type | 插件类型:`0` = Java,`1` = JS,`3` = KingScript |
|
|
174
174
|
| `fpk` | FPK | 开发者门户注册 ID |
|
|
175
175
|
| `bizappid` | BizAppId | 所属应用 |
|
|
176
176
|
|
|
@@ -182,12 +182,12 @@ plugin query() → DataSet column name ← dateIndex ← ReportColumn
|
|
|
182
182
|
|
|
183
183
|
两层使用不同表示方式来标识插件类型:
|
|
184
184
|
|
|
185
|
-
| 层 | Java 插件 |
|
|
185
|
+
| 层 | Java 插件 | JS 插件 | KingScript 插件 |
|
|
186
186
|
|-------|-------------|---------------|-------------------|
|
|
187
|
-
| 平台元数据(设计器 entryentity,数值) | `type=0` | `type=
|
|
187
|
+
| 平台元数据(设计器 entryentity,数值) | `type=0` | `type=1` | `type=3` |
|
|
188
188
|
| Artifact Schema / app-build 抽象层(字符串枚举) | `"Java"` | `"JS"` | `"KingScript"` |
|
|
189
189
|
|
|
190
|
-
> 生成 Artifact JSON 时使用字符串枚举(`"Java"` / `"JS"` / `"KingScript"`)。`cosmic_api.py run`
|
|
190
|
+
> 生成 Artifact JSON 时使用字符串枚举(`"Java"` / `"JS"` / `"KingScript"`)。`cosmic_api.py run` 流水线会将其转换为数值用于平台注册。只有 Java 插件有 Java 源码需要交付,所以只有 Java 类会进入插件契约的 `pluginClasses` 和出卡门禁。
|
|
191
191
|
|
|
192
192
|
### 插件接口
|
|
193
193
|
|
|
@@ -213,18 +213,25 @@ public interface IReportListDataPlugin {
|
|
|
213
213
|
### 只有插件能提供的行为
|
|
214
214
|
|
|
215
215
|
报表行为没有元数据通道 —— Artifact 不接受 `reportBehavior`,也不接受插件 `codeSpec`。每项能力都是
|
|
216
|
-
|
|
216
|
+
某个插件上的一次方法覆写:数据行归取数插件,页面行为归 `reportform` 插件:
|
|
217
217
|
|
|
218
218
|
| 需求 | 插件实现 |
|
|
219
219
|
|-------------|----------------------|
|
|
220
|
-
| 大数据量分批查询 | 覆写 `queryBatchBy(ReportQueryParam)`,再在 `query` 中读取 `queryParam.byBatchInfo().getCurrentBatchRows()` |
|
|
220
|
+
| 大数据量分批查询 | 覆写 `queryBatchBy(ReportQueryParam)`,再在 `query` 中读取 `queryParam.byBatchInfo().getCurrentBatchRows()`;既不读它也不读 `selectedObj` 的分批 `query` 会每批都返回全部行,编译边界会拒绝它(`PLUGIN_SOURCE_BATCH_NOT_NARROWED`) |
|
|
221
221
|
| 导出 | 覆写 `export(...)` / `exportWithSheet(...)` |
|
|
222
|
-
| 左树右表导航 | 另一个 `reporttreelist` 插件,实现 `query(ReportQueryParam, String nodeId)` -> `List<TreeNode
|
|
223
|
-
| 折叠式树形行 | `reportform`:`AbstractReportFormPlugin.setTreeReportList(TreeReportListEvent)` 里调 `setTreeReportList(true)` + `setTreeExpandColId(<列>)`,或在 `beforeQuery` 里调 `ReportQueryParam.setTreeReportList(true)` |
|
|
222
|
+
| 左树右表导航 | 另一个 `reporttreelist` 插件,实现 `query(ReportQueryParam, String nodeId)` -> `List<TreeNode>`,在用户新增「报表树」控件后由 `setReportProperties --target tree` 声明为 `ReportTreeAp.ReportPlugin`(没有任何公共模板预置该控件,`bos_grouprpttpl` 也不例外);行插件用收到的节点 id(`selectedObj`)收窄 |
|
|
223
|
+
| 折叠式树形行 | `reportform`:`AbstractReportFormPlugin.setTreeReportList(TreeReportListEvent)` 里调 `setTreeReportList(true)` + `setTreeExpandColId(<列>)`,或在 `beforeQuery` 里调 `ReportQueryParam.setTreeReportList(true)`;行插件返回 `rowid` / `pid` / `isgroupnode` 列 |
|
|
224
|
+
| 表头过滤与排序 | `reportform`:`setSortAndFilter` 按列开启;`query()` 必须应用 `getTableHeadFilterItems()`,否则表头过滤不起作用 |
|
|
225
|
+
| 小计 / 合计行 | `query()` 把带 `sumlevel` 标记的合计行 union 进来;`reportform` 的 `packageData` 给它们打标签 |
|
|
226
|
+
| 钻取联查 | `reportform`:`hyperLinkClick` 打开单据、列表或另一张报表,对方通过自定义参数拿到取值 |
|
|
224
227
|
| 金额 / 数量 / 基础资料展现 | 在列上声明 `presentation`;编译出的插件契约会给出 `getColumns()` 里该用的确切 `ReportColumnFactory` 调用 |
|
|
225
228
|
| 过滤条件的 `mustInput` / `defaultValue` | 在过滤条件上声明;编译出的插件契约会把它变成 `query()` 需从 `ReportQueryParam.getFilter()` 强制执行的要求 |
|
|
226
229
|
| 必填或默认的过滤取值 | 从 `ReportQueryParam.getFilter()` 读取并强制执行 |
|
|
227
230
|
|
|
231
|
+
两个插件的注册方式不同。取数插件声明在 `reportPlugins` 里,由报表流水线注册。`reportform` 插件在
|
|
232
|
+
Java 交付后由 `register_plugins.py --verify` 注册到报表表单自己的插件列表(`targetType`
|
|
233
|
+
`BILL_FORM`),并以 `location` `BILL_FORM` 回读。
|
|
234
|
+
|
|
228
235
|
---
|
|
229
236
|
|
|
230
237
|
## 六、术语对照表
|
|
@@ -245,8 +252,12 @@ public interface IReportListDataPlugin {
|
|
|
245
252
|
| 分组列 | ReportColumnGroup | 多级表头分组 |
|
|
246
253
|
| 取数插件 | IReportListDataPlugin | 取数插件接口 |
|
|
247
254
|
| 分批查询 | queryBatchBy / IReportBatchQueryInfo | 分批查询机制,只在插件侧 |
|
|
248
|
-
| 左树右表 | AbstractReportTreeDataPlugin |
|
|
255
|
+
| 左树右表 | AbstractReportTreeDataPlugin | 左树导航,是注册在左树自己槽位上的第二个插件 |
|
|
249
256
|
| 树形展开行 | isTreeReportList / setTreeExpandColId | 可折叠行,属于 `reportform` 职责 |
|
|
257
|
+
| 树形行列 | rowid / pid / isgroupnode | 承载可折叠行层级的 DataSet 列 |
|
|
258
|
+
| 表头过滤 | setSortAndFilter / getTableHeadFilterItems | 由 `reportform` 按列开启,由 `query()` 应用 |
|
|
259
|
+
| 小计合计 | sumlevel | `query()` union 进来的合计行的标记列 |
|
|
260
|
+
| 钻取联查 | hyperLinkClick / ReportShowParameter | 从超链接列打开单据、列表或另一张报表 |
|
|
250
261
|
| 过滤条件 | FilterInfo | 运行时过滤容器 |
|
|
251
262
|
| 过滤项 | FilterItemInfo | 单个过滤项 |
|
|
252
263
|
| 查询参数 | ReportQueryParam | 查询参数封装 |
|
package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/report-modeling-guide.md
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
没有这种绑定时,报表建模拆成两次交付,二者必须就一件事达成一致:
|
|
17
17
|
|
|
18
18
|
```
|
|
19
|
-
metadata: reportColumns / reportFilters /
|
|
20
|
-
plugin: query(ReportQueryParam, Object) -> DataSet
|
|
19
|
+
metadata: reportColumns / reportFilters / reportPlugins
|
|
20
|
+
plugin: query(ReportQueryParam, Object) -> DataSet; reportSorts -> defaultSorts (not metadata)
|
|
21
21
|
agreement: DataSet column name == reportColumns[].dateIndex (case-sensitive)
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -26,12 +26,15 @@ agreement: DataSet column name == reportColumns[].dateIndex (case-sensitive)
|
|
|
26
26
|
|
|
27
27
|
| 需求模式 | 插件实现 |
|
|
28
28
|
|---|---|
|
|
29
|
-
| 从单个实体查询字段 | `
|
|
29
|
+
| 从单个实体查询字段 | `QueryServiceHelper.queryDataSet(algo, entityNumber, "a,b,c", filters, orderBy)` —— DCS 禁止 `ORM` / `DB` 访问,见 `{ROOT_DIR}/references/dcs-code-rules.md` |
|
|
30
30
|
| 跨实体关联("关联/join") | `DataSet.join(other).on(left, right).select(...).finish()` |
|
|
31
31
|
| 多来源合并("合并/union") | `DataSet.union(other)` |
|
|
32
32
|
| 汇总("汇总/统计") | `DataSet.groupBy(keys).sum(field)...finish()` |
|
|
33
|
-
|
|
|
34
|
-
|
|
|
33
|
+
| 分组最早/最晚值("最早/最新") | `DataSet.groupBy(keys).min("f", alias)` / `.max("f", alias)` —— 即已验证的 `GroupbyDataSet` 聚合,见 `{ROOT_DIR}/knowledge/cosmic/platform/sdk/sdk-algo.md` |
|
|
34
|
+
| 分组首单/末单整行("首单/末单",且要该单的其他字段) | `DataSet.splitByGroup(keys)` + `topBy(1, {"f desc"})` + `union` —— 仅在需要这些其他字段时使用,因为它会把每个分组物化并排序;只要最早/最晚值时用 `min` / `max` |
|
|
35
|
+
| 去重计数("笔数/去重计数") | `DataSet.groupBy(keys).countDistinct(new String[]{"id"}, alias)`,见 `{ROOT_DIR}/knowledge/cosmic/platform/sdk/sdk-algo.md` |
|
|
36
|
+
| 小计 / 合计行("小计/合计") | 每个合计层级一次 `groupBy`,用 `addField` 加一个 `sumlevel` 标记列(0 明细、1 小计、2 合计),合计行没有值的列用占位补齐,然后 `union`,再按维度列、`sumlevel` 的顺序 `orderBy`,合计行用它专属的排序键排在最后;把 `sumlevel` 声明为隐藏列,`packageData` 才能读到它 —— 见 `{ROOT_DIR}/knowledge/cosmic/platform/scenes/report/report-subtotal-total.md` |
|
|
37
|
+
| 列不同的两个来源("应收+应付") | 两边各自 `select` 成同名、同序的列,缺少的列用 `"0 amount"` 这样的常量补齐,然后 `union`,再重新 `groupBy` —— 见 `{ROOT_DIR}/knowledge/cosmic/platform/scenes/report/report-dataset-assembly.md` |
|
|
35
38
|
| 自定义排序 | `orderBy` 入参,或 `DataSet.orderBy(...)` |
|
|
36
39
|
| 始终生效的固定过滤 | 追加到查询过滤列表的 `QFilter` |
|
|
37
40
|
|
|
@@ -98,17 +101,24 @@ DataSet 关联的类型由 DataSet 决定,所以设计器时代对关联键类
|
|
|
98
101
|
|
|
99
102
|
左树导航:
|
|
100
103
|
|
|
104
|
+
- 没有任何公共模板预置左树(`ReportTreeAp`);`bos_grouprpttpl` 是分组报表(报表分组面板及其分组列表),
|
|
105
|
+
不是左树。只有用户在设计器里给报表新增「报表树」控件后报表才有左树,所以报表由 `bos_rpttpl`
|
|
106
|
+
不带树创建,控件在 `run` 之后再加
|
|
101
107
|
- `reporttreelist` 实现 `query(ReportQueryParam, String nodeId)` 返回 `List<TreeNode>`;首次加载
|
|
102
108
|
时 `nodeId` 为 null,这时要返回根节点列表
|
|
103
|
-
- `
|
|
104
|
-
|
|
109
|
+
- 它在该控件存在之后由 `setReportProperties --target tree` 注册为 `ReportTreeAp.ReportPlugin`,
|
|
110
|
+
即左树自己的槽位,绝不作为第二个 `reportPlugins` 条目 —— 那个槽位是报表列表的取数插件
|
|
111
|
+
- `TreeNode` 的 id 必须唯一,并在多次查询之间保持稳定;叶子节点使用 `setLeaf(true)`
|
|
112
|
+
- 配套的 `reportlist` 插件用拿到的 `selectedObj`(被点击节点的 id)收窄数据行
|
|
105
113
|
|
|
106
114
|
折叠式树形行:
|
|
107
115
|
|
|
108
116
|
- `AbstractReportFormPlugin.setTreeReportList(TreeReportListEvent)` 里调
|
|
109
117
|
`event.setTreeReportList(true)` 与 `event.setTreeExpandColId(<列 key>)`,或在 `beforeQuery` 里调
|
|
110
118
|
`ReportQueryParam.setTreeReportList(true)`
|
|
111
|
-
-
|
|
119
|
+
- `reportlist` 插件以数据行返回层级,每行携带 `rowid`、`pid`(父行的 `rowid`,顶层行为
|
|
120
|
+
`"0"`)与 `isgroupnode`;不要用 `id` / `pid` 代替它们 —— 见
|
|
121
|
+
`{ROOT_DIR}/knowledge/cosmic/platform/scenes/report/report-tree-list.md`
|
|
112
122
|
|
|
113
123
|
---
|
|
114
124
|
|
|
@@ -134,11 +144,11 @@ DataSet 关联的类型由 DataSet 决定,所以设计器时代对关联键类
|
|
|
134
144
|
| 计算值 | `formula` | — |
|
|
135
145
|
| 图片 | `picture` | — |
|
|
136
146
|
|
|
137
|
-
`currencyField` 与
|
|
138
|
-
|
|
139
|
-
`
|
|
140
|
-
|
|
141
|
-
`
|
|
147
|
+
上表 amount/qty/price 只保留业务需求形状,不是当前可写输入。动态 `currencyField` 与
|
|
148
|
+
`measureUnitField` 要求格式化前的 DynamicObject 引用;`fieldType: bigint` 和 `hide: true`
|
|
149
|
+
只得到 Long。`fieldKey` 与 `dateIndex` 相同也不证明物化。`R-presentation-binding` 检查名称,
|
|
150
|
+
`REPORT_PRECISION_REFERENCE_UNVERIFIED` 在平台引用字段、旧标量迁移和批量物化验证前拒绝写入。
|
|
151
|
+
原始/历史契约保留 `precisionSource`;不能删除需求或换成固定精度。
|
|
142
152
|
|
|
143
153
|
不要写 `ReportColumn.setFieldType(ReportColumn.TYPE_AMOUNT)`:只有 `TYPE_BASEDATA` 有经验证的
|
|
144
154
|
用例,而 `ReportColumnFactory.createAmountColumn` / `createQtyColumn` / `createPriceColumn` /
|
|
@@ -162,15 +172,22 @@ DataSet 关联的类型由 DataSet 决定,所以设计器时代对关联键类
|
|
|
162
172
|
|
|
163
173
|
步骤 3: 定义过滤条件
|
|
164
174
|
├─ 识别用户输入条件(组织、日期范围、状态)
|
|
165
|
-
├─
|
|
166
|
-
|
|
175
|
+
├─ 为每个过滤选择控件类(fieldType)及其参数,如 basedataNumber;
|
|
176
|
+
│ 对照表见 {ROOT_DIR}/references/report-filter-contract.md
|
|
177
|
+
├─ 选择 compare:=、in 或 between(in 配多选控件)
|
|
178
|
+
└─ 把 mustInput / defaultValue 记为插件需求(未装补丁的平台会丢弃)
|
|
167
179
|
|
|
168
180
|
步骤 4: 定义默认排序
|
|
169
|
-
|
|
181
|
+
├─ fieldKey 引用叶子列;保留规则顺序与 dateIndex 映射
|
|
182
|
+
├─ 创建前要求一个已启用的 Java 取数插件;禁止静默丢弃 reportSorts
|
|
183
|
+
└─ defaultSorts 是 Java 查询契约,不是 InitField 写入
|
|
170
184
|
|
|
171
185
|
步骤 5: 注册取数插件
|
|
172
186
|
├─ className 全限定;其包名成为运行时契约
|
|
173
|
-
|
|
187
|
+
├─ reportPlugins 只放 reportlist 取数插件,一个条目
|
|
188
|
+
├─ 左树的 reporttreelist 插件不在 Artifact 里:用户新增「报表树」控件后,
|
|
189
|
+
│ 再把它写为 ReportTreeAp.ReportPlugin
|
|
190
|
+
└─ reportform 插件(页面行为)永远不是 reportPlugins 条目
|
|
174
191
|
|
|
175
192
|
步骤 6: 组装 Artifact
|
|
176
193
|
└─ entities、reportColumns、reportFilters、reportSorts、reportPlugins
|
|
@@ -196,10 +213,12 @@ DataSet 关联的类型由 DataSet 决定,所以设计器时代对关联键类
|
|
|
196
213
|
| R-presentation-binding | error | `presentation.currencyField` / `measureUnitField` 必须是某个已声明列的 `fieldKey`,且该列的 `fieldKey` 必须等于 `dateIndex` |
|
|
197
214
|
| R-property-target | error | `reportProperties` 中 `columns` 之外的每个成员都必须是已知目标,且只能携带该目标可写的属性 |
|
|
198
215
|
| R-property-column | error | `reportProperties.columns` 的每个键都必须是已声明的列或分组 `fieldKey`,且属性必须是其宿主能解析的那些 |
|
|
216
|
+
| R-property-tree | error | `reportProperties.tree` 会被拒绝:没有任何公共模板带 `ReportTreeAp`(`bos_grouprpttpl` 是分组报表),本次 run 创建的报表没有左树;用户新增「报表树」控件后,用 `setReportProperties --target tree` 写入 |
|
|
199
217
|
| R-fetch-source | warning | 既没有 `reportPlugins` 也没有 `queryDataSource` 的报表查不出任何数据行 |
|
|
200
|
-
| R-
|
|
201
|
-
| R-filter-unpersisted | warning | `mustInput` / `visible: false` / `defaultValue
|
|
202
|
-
| R-
|
|
218
|
+
| R-plugin-slot | warning | `reportPlugins` 声明了不止一个插件;它是报表列表唯一的取数槽位,左树插件应放在 `ReportTreeAp.ReportPlugin` |
|
|
219
|
+
| R-filter-unpersisted | warning | 未安装类型化过滤补丁的平台不落地 `mustInput` / `visible: false` / `defaultValue`;已编译进插件契约 |
|
|
220
|
+
| R-filter-type-compare | warning | 单值 `fieldType` 却用 `in` 比较,或多选控件却用 `=` 比较,使 `query()` 与用户能选的值不一致 |
|
|
221
|
+
| R-presentation-binding-target | error | 包括隐藏 `bigint` 在内的币别 / 单位标量目标,没有 DynamicObject 引用证据;开放写入前须验证平台迁移与批量物化 |
|
|
203
222
|
|
|
204
223
|
---
|
|
205
224
|
|
|
@@ -213,18 +232,22 @@ DataSet 关联的类型由 DataSet 决定,所以设计器时代对关联键类
|
|
|
213
232
|
{
|
|
214
233
|
"entities": [{ "type": "ReportEntity", "bizName": "so_query_rpt", "displayName": "销售订单查询", "formNumber": "kdtest_so_query_rpt" }],
|
|
215
234
|
"reportColumns": [{ "kind": "column", "fieldKey": "billno", "dateIndex": "billno", "fieldType": "text", "caption": "单据编号" }],
|
|
216
|
-
"reportFilters": [
|
|
235
|
+
"reportFilters": [
|
|
236
|
+
{ "fieldPath": "flt_org", "displayName": "组织", "fieldType": "OrgField", "compare": "=" },
|
|
237
|
+
{ "fieldPath": "bizdate", "displayName": "业务日期", "compare": "between" }
|
|
238
|
+
],
|
|
217
239
|
"reportPlugins": [{ "className": "kd.kdtest.report.SoQueryReportPlugin", "type": "Java" }]
|
|
218
240
|
}
|
|
219
241
|
```
|
|
220
|
-
插件:`
|
|
242
|
+
插件:`QueryServiceHelper.queryDataSet(algo, "sm_saleorder", "billno,...", filters, orderBy)`。
|
|
221
243
|
|
|
222
244
|
**场景 2:多实体关联**
|
|
223
245
|
触发:"关联物料主数据和仓库库存"
|
|
224
246
|
Artifact:只有报表列。插件:
|
|
225
247
|
```java
|
|
226
|
-
|
|
227
|
-
DataSet
|
|
248
|
+
QFilter[] enabled = {new QFilter("enable", QCP.equals, "1")};
|
|
249
|
+
DataSet material = QueryServiceHelper.queryDataSet(algo, "bd_material", "id as mat_id,number as mat_code", enabled, null);
|
|
250
|
+
DataSet stock = QueryServiceHelper.queryDataSet(algo, "im_inventory", "material as mat_id2,qty as inv_qty", filters, null);
|
|
228
251
|
return material.join(stock).on("mat_id", "mat_id2").select("mat_code", "inv_qty").finish();
|
|
229
252
|
```
|
|
230
253
|
|
|
@@ -256,6 +279,13 @@ Artifact:只有报表列。插件:覆写 `queryBatchBy()` 返回分批键,
|
|
|
256
279
|
- [ ] 金额 / 数量 / 基础资料列都声明了 `presentation` 对象
|
|
257
280
|
- [ ] 每个 `currencyField` / `measureUnitField` 绑定都有各自已声明的隐藏列
|
|
258
281
|
- [ ] `mustInput` / `defaultValue` 已声明,由契约带给插件
|
|
259
|
-
- [ ]
|
|
282
|
+
- [ ] 每个选择型或下拉型过滤都声明了 `fieldType` 及该类型的必填参数
|
|
283
|
+
- [ ] 排序 `fieldKey` 引用叶子列,保留规则顺序与 `dateIndex` 映射
|
|
284
|
+
- [ ] `reportSorts` 要求一个已启用的 Java 取数插件;`setReportSorts` 保持阻断
|
|
285
|
+
- [ ] `query()` 消费 `defaultSorts` 和 `defaultSortPolicy`:交互排序优先,仅无交互排序时应用默认值,
|
|
286
|
+
在最终 DataSet 组装后、分页/导出前执行,保留权限并分别测试两种行为,不从元数据宣称运行通过
|
|
260
287
|
- [ ] 插件 className 全限定,注册后保持稳定
|
|
288
|
+
- [ ] `reportPlugins` 只放一个取数插件;左树插件是 `ReportTreeAp.ReportPlugin`,在新增报表树控件后写入,
|
|
289
|
+
绝不是 Artifact 里的 `reportProperties.tree`
|
|
290
|
+
- [ ] 开启了表头过滤的,`query()` 里按 `getTableHeadFilterItems()` 应用表头过滤条件
|
|
261
291
|
- [ ] 插件 DataSet 的列名逐字(含大小写)匹配每个 `dateIndex`
|
package/skills/cosmic-build/skills/cosmic-meta-knowledge/property-guides/report-column-properties.md
CHANGED
|
@@ -158,49 +158,25 @@
|
|
|
158
158
|
|
|
159
159
|
插件契约给出的一律是 `ReportColumnFactory` 那一组,因为它们接受标题,而且每种展现 kind 都对应一个
|
|
160
160
|
签名。`ReportColumn` 上那三个静态方法是不带标题的简写;`createCurrencyColumn` 只存在于那里,也正是
|
|
161
|
-
|
|
161
|
+
运行期构造币别列描述符的办法 —— 元数据没有 `currency` 这种字段类型。这不能迁移已有 BigInt 属性或物化运行行引用。
|
|
162
162
|
|
|
163
163
|
---
|
|
164
164
|
|
|
165
165
|
## 5. 币别与计量单位绑定
|
|
166
166
|
|
|
167
|
-
`presentation.currencyField`
|
|
168
|
-
`
|
|
167
|
+
`presentation.currencyField` 和 `presentation.measureUnitField` 保留动态引用需求,当前在元数据
|
|
168
|
+
写入前以 `REPORT_PRECISION_REFERENCE_UNVERIFIED` 阻断。不能声明隐藏 `bigint` 并将 Long 当作
|
|
169
|
+
引用:`NumberFormatProvider` 读取 DynamicObject,`ReportPropUtil.registerMissingProperty`
|
|
170
|
+
复用已有标量属性。`hide` 或在 `getColumns()` 替换描述符都不会改变该属性。
|
|
169
171
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
有三条证据说明被绑定的名字是列 key、而不是游离的 DataSet 列:
|
|
176
|
-
`ReportColumn.setCurrencyField(String)` 把它的参数记作 *currency field identifier*(币别字段标识);
|
|
177
|
-
`ReportPropUtil.createReportType(DynamicObjectType, List<ReportColumn>)` 是按列清单构建运行期实体的,
|
|
178
|
-
所以一个不在任何列之下抵达的值没有属性可以挂靠;而 `report-model.md` §3.2 记录 `fieldKey` 是前端数据
|
|
179
|
-
索引,也就是说行数据到客户端时是以 `fieldKey` 为键的,从不以 `dateIndex` 为键。
|
|
180
|
-
|
|
181
|
-
`R-presentation-binding` 强制两件事,而第二件正是这件事不必先做实测的原因:
|
|
182
|
-
|
|
183
|
-
- 被绑定的名字是某个已声明列的 `fieldKey`;
|
|
184
|
-
- 该列保持 `fieldKey` == `dateIndex`。两者相等时,无论平台把 `currencyField` 读作列 key 还是读作
|
|
185
|
-
DataSet 列名,这份 Artifact 都成立,两种读法不可能产出不同的元数据。等到这个绑定在真实部署上被
|
|
186
|
-
实测过,第二条可以放宽 —— 其余一切不变。
|
|
172
|
+
`R-presentation-binding` 检查目标的 `fieldKey` 和 `dateIndex`;名称相同不是运行证据。
|
|
173
|
+
当前开放的所有标量目标触发 `R-presentation-binding-target` 错误。`dataSetColumnTypes`
|
|
174
|
+
描述 DataSet 值,不是格式化器引用。原始/历史契约用 `bindsTo` 与 `requiredBy` 保留依赖;
|
|
175
|
+
`precisionSource` 将 `requiredRuntimeValueType` 标记为 DynamicObject、`runtimeVerified` 为 false、
|
|
176
|
+
`rawIdIsReference` 为 false、`metadataWriteBlocked` 为 true。
|
|
187
177
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
- `query()` 必须像返回任何其他列一样返回它。它在 `dataSetColumnTypes` 里被定型为 `Long`,因为承载的是
|
|
191
|
-
被引用记录的 id;它的类型条目会把每个格式化列列在 `requiredBy` 下。把它当 String 读出再放进
|
|
192
|
-
`QFilter`,会在数据库层报 `操作符不存在: bigint = character varying`。
|
|
193
|
-
- 一个隐藏列可以服务任意多个共用同一币别或单位的格式化列。
|
|
194
|
-
|
|
195
|
-
声明出来的这一列是 `bigint`,不是币别类型的属性,因为 `fieldType` 没有 `currency`、列级 `entityId`
|
|
196
|
-
又被拒绝。如果渲染结果没有币别符号,请在 `getColumns()` 里升级这个已存在的列,而不是新增一列:
|
|
197
|
-
|
|
198
|
-
```java
|
|
199
|
-
ReportColumn currency = ReportColumn.createCurrencyColumn("currency_id");
|
|
200
|
-
currency.setDateIndex("currency_id");
|
|
201
|
-
currency.setHide(true);
|
|
202
|
-
nodes.set(index, currency);
|
|
203
|
-
```
|
|
178
|
+
开放契约前须验证单位/币别持久化引用属性、旧标量字段和依赖控件的事务迁移、格式化前批量引用物化,
|
|
179
|
+
以及混合精度、分组、合计、分页和导出。禁止猜转换 API、只包装 id、逐行补查、取消绑定或固定精度降级。
|
|
204
180
|
|
|
205
181
|
---
|
|
206
182
|
|
|
@@ -233,15 +209,15 @@ amountColumn.setStyle(negative);
|
|
|
233
209
|
|
|
234
210
|
| 错误 | 后果 | 修正 |
|
|
235
211
|
|---|---|---|
|
|
236
|
-
| Artifact 里写 `fieldType: "amount"` | 被拒绝:不属于已验证的十种类型 |
|
|
237
|
-
| 列上写 `currencyField` / `scale` / `style` | 在输入归一化阶段被拒绝 |
|
|
212
|
+
| Artifact 里写 `fieldType: "amount"` | 被拒绝:不属于已验证的十种类型 | 保留金额需求;引用能力验证前,`decimal` 加 `presentation.kind = "amount"` 也会被阻断 |
|
|
213
|
+
| 列上写 `currencyField` / `scale` / `style` | 在输入归一化阶段被拒绝 | 支持的要求使用 `presentation`;`getColumns()` 不是未验证动态引用的旁路 |
|
|
238
214
|
| Artifact 里写 `isHide` / `isFreeze` | 被拒绝:那是 Java getter 的名字 | 用 `hide` / `freeze` |
|
|
239
215
|
| `dateIndex` 匹配不到任何 DataSet 列 | 列渲染成空,任何环节都不报错 | 列与 `query()` 必须一起改;元数据无法校验这一点 |
|
|
240
216
|
| `dateIndex` 与 DataSet 列大小写不一致 | 同样是静默的空列 | 匹配是精确且大小写敏感的 |
|
|
241
217
|
| `date` 列按文本返回 | `setvalue fail, name: <column>, Unparseable date` | 返回 `java.util.Date`;访问器取自 `dataSetColumnTypes` |
|
|
242
218
|
| 在 `getColumns()` 里重建列却不调 `setDateIndex` | `fieldKey` 与 `dateIndex` 不同时列渲染成空 | 契约给出的每个 `javaFollowUp` 都要执行 |
|
|
243
219
|
| `getColumns()` 用扁平循环强转 `ReportColumn` | 第一个分组就抛 `ClassCastException`,且分组内列永远命中不到 | 递归进 `ReportColumnGroup.getChildren()` |
|
|
244
|
-
| `presentation.currencyField` 指向的名字不是任何已声明列 | `R-presentation-binding` 拒绝该 Artifact |
|
|
220
|
+
| `presentation.currencyField` 指向的名字不是任何已声明列 | `R-presentation-binding` 拒绝该 Artifact | 验证平台引用字段及批量物化;隐藏 `bigint` 不能修复引用 |
|
|
245
221
|
| 绑定目标列的 `fieldKey` 与 `dateIndex` 不一致 | 同样被拒绝 | 绑定目标上保持两者相等 |
|
|
246
222
|
| 过滤 key 等于某个列的 `fieldKey` | 写入前即被拒绝;设计器会因标识重复而拒绝保存 | 使用独立的 key,例如 `flt_<column>` |
|
|
247
223
|
| 为了加宽一列而重建报表 | 为一次展现调整丢掉表单 id、菜单绑定和权限 | `setReportProperties --target column --element <key> --input '{"Width": "200px"}'` |
|
|
@@ -46,7 +46,7 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
46
46
|
| 公共模板 | `queryPublicTemplates` |
|
|
47
47
|
| 已验证应用的模板 | `queryBizTemplates` |
|
|
48
48
|
| 合并列表 | `getTemplateList` |
|
|
49
|
-
| 准确模板预置字段 | `getEntityFields
|
|
49
|
+
| 准确模板预置字段 | `getEntityFields --formNumber <模板编码>`(不支持 `--compact`) |
|
|
50
50
|
|
|
51
51
|
`MENU_MANAGE` 必须有明确的应用菜单请求;表单创建不会隐式进入本分支。只读取一次
|
|
52
52
|
`{ROOT_DIR}/skills/cosmic-meta-modeling/modules/app-menu/SKILL.md`。紧接新建表单时复用已验证
|
|
@@ -55,7 +55,9 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
55
55
|
## ENTITY_CREATE
|
|
56
56
|
|
|
57
57
|
用户未指定单据/基础资料模板时,省略 `templateKey`,由 emitter 补齐标准模板。
|
|
58
|
-
|
|
58
|
+
用户明确要求单据不继承任何模板时,将 `templateKey` 设为 `blankPage`,并在实时
|
|
59
|
+
BillFormModel 模板清单中验证。空白单据没有预置字段,应按要求建模全部字段。
|
|
60
|
+
不得用 `blankPage` 代替失败的模板查询。
|
|
59
61
|
|
|
60
62
|
用于一个依赖完整的 Bill/Base 请求。本地引用需要同批创建时,可一次 author 多个根实体与分录。
|
|
61
63
|
|
|
@@ -112,12 +114,12 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
112
114
|
按已声明映射补齐平台引用;显式 reference 保持原样并校验。通用 `BasedataField`/`MulBasedataField` 必须声明目标,使用顶层
|
|
113
115
|
`prdRef` 或结构化引用,禁止从泛化名称推断。
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
写入受影响字段前,先与用户解决涉及字段数量、关联关系或存储值的未决业务选择,包括引用目标歧义和
|
|
118
|
+
用户未委托的必需候选值;独立的已确认工作可继续。委托范围内自行决定并记录假设,
|
|
119
|
+
但委托不允许虚构平台身份,发现平台类型也不能代替待决业务决定。省略未请求的可选默认值与提示。
|
|
120
|
+
选择字段使用专题中完整的 `comboOptions` 契约,不额外读取实时 Schema。
|
|
119
121
|
|
|
120
|
-
已从发布契约确定所需 `FieldDataType`
|
|
122
|
+
已从发布契约确定所需 `FieldDataType` 及伴随参数时,跳过字段类型目录。
|
|
121
123
|
布尔复选框的 authoring 类型是 `CheckBoxField`;`CheckBox` 只是界面简称,
|
|
122
124
|
不能作为元数据 `dataType`。
|
|
123
125
|
类型或伴随参数未知时查询目录:
|
|
@@ -126,7 +128,7 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
126
128
|
{python} {ROOT_DIR}/skills/cosmic-meta-modeling/scripts/field_type_registry.py --catalog --compact
|
|
127
129
|
```
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
需要补充已选类型的约束时,用 `--catalog --types <准确类型> ...`,不读取完整目录。模型做语义选择;命令不按关键词替换类型。
|
|
130
132
|
|
|
131
133
|
### 编译与执行
|
|
132
134
|
|
|
@@ -139,6 +141,9 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
139
141
|
只有用户明确给出根表单编码且 authoring 仅含一个根实体时才传 `--root-form-number`,模型生成的
|
|
140
142
|
`bizName` 不使用该参数。多个用户给定编码的根实体应一起 author,各自写入 `logicalName` 并
|
|
141
143
|
省略该参数;一个 manifest 和一次 `runBatch` 会处理全部根实体。
|
|
144
|
+
|
|
145
|
+
`runBatch` 负责创建前的线上目标冲突检查;不要在外层重复查询模板或字段来证明目标不存在。冲突阻断对应目标的创建,不接管、覆盖或删除已有表单;未知写入状态仍按恢复契约对账。
|
|
146
|
+
|
|
142
147
|
明确功能分组必须在初始 batch 完成,不得之后用 `moveForm` 修补。首次 `runBatch` 前,
|
|
143
148
|
按需求中的准确名称通过[功能分组入口](../cosmic-meta-modifier/modules/unit/SKILL.md)解析;
|
|
144
149
|
不存在且已授权创建时,使用准确名称/编码及已绑定 `appRoot` 调用 `addUnit`。省略 `--seq`
|
|
@@ -148,7 +153,7 @@ appMapping.tsv、目录内容、archive、最近使用记录或本地仅有一
|
|
|
148
153
|
直接执行 stdout 返回的 `NEXT_COMMAND` argv;旧版 emitter 才按 `manifest:` 路径组装批次:
|
|
149
154
|
|
|
150
155
|
```text
|
|
151
|
-
{python} {ROOT_DIR}/skills/cosmic-meta-api/scripts/cosmic_api.py runBatch --app-root "{appRoot}" --app-code "{appCode}" --emit-manifest "{manifestPath}" --verify
|
|
156
|
+
{python} {ROOT_DIR}/skills/cosmic-meta-api/scripts/cosmic_api.py --stdout runBatch --compact --app-root "{appRoot}" --app-code "{appCode}" --emit-manifest "{manifestPath}" --verify
|
|
152
157
|
```
|
|
153
158
|
|
|
154
159
|
保留返回的结果文件供 Java 准备使用,其中包含 `resultPath`、完整 `artifactPaths` 和原始验证回执;
|
|
@@ -178,7 +183,7 @@ app-build;默认值、长度、精度、小数位、显隐和其他属性都
|
|
|
178
183
|
|
|
179
184
|
| 类型 | `skills/cosmic-meta-modeling/modules/` 下模块 |
|
|
180
185
|
|---|---|
|
|
181
|
-
| 动态/空白 | `formtemplate/SKILL.md` |
|
|
186
|
+
| 动态/空白 | `formtemplate/SKILL.md`(`DynamicFormModel` 字段用路径 A) |
|
|
182
187
|
| 报表 | `report/SKILL.md` |
|
|
183
188
|
| 参数 | `parameter/SKILL.md` |
|
|
184
189
|
| 卡片 | `widget/SKILL.md` |
|
|
@@ -189,16 +194,13 @@ app-build;默认值、长度、精度、小数位、显隐和其他属性都
|
|
|
189
194
|
| 布局/打印 | `layout/SKILL.md` |
|
|
190
195
|
| 移动 | `mobile/SKILL.md` |
|
|
191
196
|
|
|
192
|
-
|
|
193
|
-
`DynamicFormModel` 字段使用 formtemplate 路径 A。
|
|
197
|
+
使用所选模块声明的 model type 与 CLI。
|
|
194
198
|
|
|
195
199
|
## 元数据完成边界
|
|
196
200
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
还有明确的元数据、Java 或菜单工作时,继续完成后再交付卡片。
|
|
201
|
+
Java 前完成全部明确且元数据可表达的事项:结构、引用/带出、UI、属性/默认值、规则/操作和列表。
|
|
202
|
+
把已验证表单身份交给所属 modifier/UI 命令;不得把元数据事项改称插件工作。
|
|
203
|
+
剩余明确要求的 Java 和菜单工作完成后再交付卡片。
|
|
202
204
|
|
|
203
205
|
只有写后状态未知时才执行 CLI 给出的单次对账命令,确认不存在后才重试。
|
|
204
206
|
`ENTITY_CREATE` 不隐含菜单请求。
|