@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
|
@@ -5,58 +5,53 @@ source_doc: "20-动态领域模型/130-公共服务/240-数据删除服务.md"
|
|
|
5
5
|
last_updated: "2026-03-07"
|
|
6
6
|
status: "approved"
|
|
7
7
|
scene_name: "数据删除服务"
|
|
8
|
-
related_apis: ["DeleteServiceHelper.
|
|
8
|
+
related_apis: ["DeleteServiceHelper.deleteOperate", "OperationServiceHelper.executeOperate"]
|
|
9
9
|
topic: "api/business-data"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# 场景:数据删除服务
|
|
13
13
|
|
|
14
14
|
## 适用情况
|
|
15
|
-
|
|
15
|
+
删除实体数据使用 `DeleteServiceHelper.deleteOperate` 或 `OperationServiceHelper.executeOperate("delete", ...)`,
|
|
16
|
+
执行删除校验与插件。
|
|
17
|
+
|
|
18
|
+
> **DCS 部署:** `DeleteServiceHelper.delete(...)` 绕过删除校验,违反 `CVE-KD-0717-2`;
|
|
19
|
+
> `BusinessDataWriter.delete`、`ORM.delete` 同样受限。通过 DCS 交付的插件不得调用它们,
|
|
20
|
+
> 见 [dcs-code-rules.md](../../../../../../references/dcs-code-rules.md)。
|
|
16
21
|
|
|
17
22
|
## 方法签名
|
|
18
23
|
```java
|
|
19
|
-
//
|
|
20
|
-
|
|
24
|
+
// 调用单据删除操作,执行删除校验及插件
|
|
25
|
+
deleteOperate(String operationKey, String entityName, Object[] pks, OperateOption option) OperationResult
|
|
21
26
|
|
|
22
|
-
//
|
|
27
|
+
// 以下为受限签名,不得用于 DCS 插件(CVE-KD-0717-2)
|
|
28
|
+
delete(IDataEntityType type, Object[] pks) void
|
|
23
29
|
delete(String entityName, QFilter[] qFilters) void
|
|
24
|
-
|
|
25
|
-
// 调用单据删除操作,走删除校验及插件
|
|
26
|
-
deleteOperate(String operationKey, String entityName, Object[] pks, OperateOption option) OperationResult
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
## 代码示例
|
|
30
33
|
`extracted` `needs-verification`
|
|
31
34
|
|
|
32
35
|
```java
|
|
33
|
-
import kd.bos.
|
|
34
|
-
import kd.bos.servicehelper.operation.DeleteServiceHelper;
|
|
35
|
-
|
|
36
|
-
// delete 按主键删除示例
|
|
37
|
-
Object[] ids = new Object[]{formId};
|
|
38
|
-
IDataEntityType type = EntityMetadataCache.getDataEntityType("test_entity");
|
|
39
|
-
DeleteServiceHelper.delete(type, ids);
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
```java
|
|
43
|
-
import kd.bos.context.RequestContext;
|
|
44
|
-
import kd.bos.orm.query.QFilter;
|
|
36
|
+
import kd.bos.dataentity.OperateOption;
|
|
45
37
|
import kd.bos.servicehelper.operation.DeleteServiceHelper;
|
|
46
38
|
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
QFilter q2 = new QFilter("formId", QCP.equals, formId);
|
|
50
|
-
QFilter[] filter = new QFilter[]{q1, q2};
|
|
51
|
-
DeleteServiceHelper.delete("test_entity", filter);
|
|
39
|
+
// deleteOperate 示例(推荐)
|
|
40
|
+
DeleteServiceHelper.deleteOperate("delete", "test_entity", new Object[] { billId }, OperateOption.create());
|
|
52
41
|
```
|
|
53
42
|
|
|
54
43
|
```java
|
|
55
44
|
import kd.bos.dataentity.OperateOption;
|
|
56
|
-
import kd.bos.
|
|
45
|
+
import kd.bos.entity.operate.result.OperationResult;
|
|
46
|
+
import kd.bos.exception.KDBizException;
|
|
47
|
+
import kd.bos.servicehelper.operation.OperationServiceHelper;
|
|
57
48
|
|
|
58
|
-
//
|
|
59
|
-
|
|
49
|
+
// 删除通过操作服务执行,并检查操作结果。
|
|
50
|
+
OperationResult result = OperationServiceHelper.executeOperate("delete", "test_entity",
|
|
51
|
+
new Object[] { billId }, OperateOption.create());
|
|
52
|
+
if (!result.isSuccess()) {
|
|
53
|
+
throw new KDBizException(result.getMessage());
|
|
54
|
+
}
|
|
60
55
|
```
|
|
61
56
|
|
|
62
57
|
## 参数说明
|
|
@@ -70,5 +65,5 @@ DeleteServiceHelper.deleteOperate("delete", "test_entity", new Object[] { billId
|
|
|
70
65
|
| option | OperateOption | 自定义操作参数 |
|
|
71
66
|
|
|
72
67
|
## 注意事项
|
|
73
|
-
- `delete`
|
|
68
|
+
- `delete` 直接删库,不执行删除校验、插件,不删除关联数据,DCS 禁止调用
|
|
74
69
|
- `deleteOperate` 走完整删除流程,业务场景推荐使用
|
|
@@ -12,6 +12,10 @@ related_apis: ["DB.executeBatch", "DB.genLongIds", "DBRoute.of"]
|
|
|
12
12
|
|
|
13
13
|
# 场景:DB 直接批量 SQL 操作
|
|
14
14
|
|
|
15
|
+
> **DCS 部署:** `kd.bos.db.DB` 违反 `CVE-KD-0413`,本页仅供理解平台内部实现,
|
|
16
|
+
> 不得作为 DCS 插件模板。查询使用 `QueryServiceHelper`,写入通过已验证的保存/操作服务,
|
|
17
|
+
> 见 [dcs-code-rules.md](../../../../../../references/dcs-code-rules.md)。
|
|
18
|
+
|
|
15
19
|
## 适用情况
|
|
16
20
|
需要绕过 ORM 框架直接执行批量 SQL 插入或更新时,使用 DB 工具类生成主键并批量执行 SQL,适用于高性能批量写入场景。
|
|
17
21
|
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/ksql/db-direct-access.md
CHANGED
|
@@ -11,6 +11,10 @@ topic: "data-access/ksql"
|
|
|
11
11
|
|
|
12
12
|
# 场景:DB 直接访问
|
|
13
13
|
|
|
14
|
+
> **DCS 部署:** `kd.bos.db.DB` 违反 `CVE-KD-0413`,本页仅供理解平台内部实现,
|
|
15
|
+
> 不得作为 DCS 插件模板。使用 `QueryServiceHelper` / `BusinessDataServiceHelper` 和操作服务,
|
|
16
|
+
> 见 [dcs-code-rules.md](../../../../../../references/dcs-code-rules.md)。
|
|
17
|
+
|
|
14
18
|
## 适用情况
|
|
15
19
|
需要通过 SQL 直接访问数据库时,使用 kd.bos.db.DB 类(基本用法与 JDBC 相似,统一使用 KSQL 语法,通过 DBRoute 路由到具体物理库)。
|
|
16
20
|
|
|
@@ -11,6 +11,11 @@ topic: "data-access/qfilter"
|
|
|
11
11
|
|
|
12
12
|
# 场景:实体对象访问模式
|
|
13
13
|
|
|
14
|
+
> **DCS 部署:** `kd.bos.orm.ORM`、`kd.bos.db.DB` 与 `DeleteServiceHelper.delete`
|
|
15
|
+
> 均受门禁限制(`CVE-KD-2026-0508`、`CVE-KD-0413`、`CVE-KD-0717-2`)。
|
|
16
|
+
> 使用查询/业务数据服务和删除操作,本页保留的 ORM 代码仅供理解内部实现;
|
|
17
|
+
> 见 [dcs-code-rules.md](../../../../../../references/dcs-code-rules.md)。
|
|
18
|
+
|
|
14
19
|
## 适用情况
|
|
15
20
|
通过苍穹 ORM 引擎对实体对象进行增删改查操作,选择合适的帮助类或 ORM 接口。
|
|
16
21
|
|
|
@@ -19,10 +24,10 @@ topic: "data-access/qfilter"
|
|
|
19
24
|
| 场景 | 推荐方式 | 次选 | 说明 |
|
|
20
25
|
| ---- | -------- | ---- | ---- |
|
|
21
26
|
| 保存 | SaveServiceHelper | 无 | 含 save,update |
|
|
22
|
-
| 删除 |
|
|
23
|
-
| 查询(结果为结构化对象) | BusinessDataServiceHelper |
|
|
27
|
+
| 删除 | OperationServiceHelper.executeOperate("delete", ...) | DeleteServiceHelper.deleteOperate | 执行校验/插件,不使用 DeleteServiceHelper.delete |
|
|
28
|
+
| 查询(结果为结构化对象) | BusinessDataServiceHelper | 无 | loadFromCache 带缓存,不在 DCS 插件中调用 ORM |
|
|
24
29
|
| 查询(结果为平铺对象) | QueryServiceHelper | 无 | 拉平对象主要用于列表显示 |
|
|
25
|
-
| 查询(结果为 DataSet) | QueryServiceHelper |
|
|
30
|
+
| 查询(结果为 DataSet) | QueryServiceHelper.queryDataSet | 无 | DCS 禁止 ORM;优先使用公开服务 API |
|
|
26
31
|
|
|
27
32
|
## 代码示例
|
|
28
33
|
`extracted` `needs-verification`
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/qfilter/qfilter-compose.md
CHANGED
|
@@ -5,7 +5,7 @@ source_doc: "060-开发平台/25-数据访问/02-QFilter条件.md"
|
|
|
5
5
|
last_updated: "2026-03-07"
|
|
6
6
|
status: "approved"
|
|
7
7
|
scene_name: "复合条件AND/OR组合"
|
|
8
|
-
related_apis: ["QFilter.and", "QFilter.or", "QFilter.toArray", "
|
|
8
|
+
related_apis: ["QFilter.and", "QFilter.or", "QFilter.toArray", "QueryServiceHelper.query"]
|
|
9
9
|
topic: "data-access/qfilter"
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -48,16 +48,17 @@ QFilter f = (f1.or(f2)).and(f3.or(f4));
|
|
|
48
48
|
|
|
49
49
|
```java
|
|
50
50
|
import kd.bos.orm.query.QFilter;
|
|
51
|
+
import kd.bos.servicehelper.QueryServiceHelper;
|
|
51
52
|
|
|
52
|
-
// QFilter
|
|
53
|
+
// 查询服务接收 QFilter 数组,数组元素自动按 AND 关联。
|
|
53
54
|
QFilter f1 = new QFilter("name", QCP.equals, "tom");
|
|
54
55
|
QFilter f2 = new QFilter("age", QCP.equals, 18);
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
QueryServiceHelper.query("entityName", "id,name", new QFilter[]{f1, f2});
|
|
57
|
+
QueryServiceHelper.query("entityName", "id,name", f1.toArray());
|
|
57
58
|
```
|
|
58
59
|
|
|
59
60
|
## 注意事项
|
|
60
|
-
-
|
|
61
|
+
- `QueryServiceHelper` 接收 QFilter 数组,元素按 AND 关联;DCS 插件不直接使用 ORM
|
|
61
62
|
- 纯 and 条件场景可以不使用 QFilter 链,直接传 QFilter 数组
|
|
62
63
|
- QFilter 链的每个元素仍是 QFilter 对象,可继续与其他 QFilter 链进行 and/or 关联
|
|
63
64
|
- 过滤条件少用 or 条件,特别是跨库字段上用 or 条件(性能影响)
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/after-bind-data-set-visible.md
CHANGED
|
@@ -37,14 +37,18 @@ public void afterBindData(EventObject e)
|
|
|
37
37
|
import java.util.EventObject;
|
|
38
38
|
import kd.bos.algo.DataSet;
|
|
39
39
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
|
40
|
+
import kd.bos.orm.query.QCP;
|
|
41
|
+
import kd.bos.orm.query.QFilter;
|
|
40
42
|
import kd.bos.servicehelper.QueryServiceHelper;
|
|
41
43
|
|
|
42
44
|
public class XxxFormPlugin extends AbstractFormPlugin {
|
|
43
45
|
@Override
|
|
44
46
|
public void afterBindData(EventObject e) {
|
|
45
47
|
super.afterBindData(e);
|
|
48
|
+
// 按实际业务限定查询范围,DCS 禁止无有效过滤条件的全表查询。
|
|
49
|
+
QFilter[] filters = {new QFilter("enable", QCP.equals, "1")};
|
|
46
50
|
try (DataSet periodSet = QueryServiceHelper.queryDataSet(
|
|
47
|
-
"fi.bd.index.period", "bd_period_type", "id",
|
|
51
|
+
"fi.bd.index.period", "bd_period_type", "id", filters, null)) {
|
|
48
52
|
Integer periodCount = Integer.valueOf(periodSet.count("id", false));
|
|
49
53
|
getView().setVisible(Boolean.valueOf(periodCount.intValue() == 0), new String[]{"period1"});
|
|
50
54
|
getView().setVisible(Boolean.valueOf(periodCount.intValue() > 0), new String[]{"period2"});
|
|
@@ -21,8 +21,8 @@ related_apis: ["IFormView.returnDataToParent", "IFormView.close"]
|
|
|
21
21
|
## 涉及的核心对象(必读)
|
|
22
22
|
| 对象 | 用途 | 文档路径 |
|
|
23
23
|
|------|------|---------|
|
|
24
|
-
| IFormView | 回传数据并关闭页面 |
|
|
25
|
-
| IDataModel | 读取分录或字段数据 |
|
|
24
|
+
| IFormView | 回传数据并关闭页面 | knowledge/cosmic/platform/core/view.md |
|
|
25
|
+
| IDataModel | 读取分录或字段数据 | knowledge/cosmic/platform/core/model.md |
|
|
26
26
|
|
|
27
27
|
## 方法签名
|
|
28
28
|
```java
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/closed-call-back-set-value.md
CHANGED
|
@@ -20,8 +20,8 @@ related_apis: ["ClosedCallBackEvent.getReturnData", "ClosedCallBackEvent.getActi
|
|
|
20
20
|
## 涉及的核心对象(必读)
|
|
21
21
|
| 对象 | 用途 | 文档路径 |
|
|
22
22
|
|------|------|---------|
|
|
23
|
-
| IDataModel | 写入返回数据 | platform/
|
|
24
|
-
| IFormView | 触发后续操作 | platform/
|
|
23
|
+
| IDataModel | 写入返回数据 | knowledge/cosmic/platform/core/model.md |
|
|
24
|
+
| IFormView | 触发后续操作 | knowledge/cosmic/platform/core/view.md |
|
|
25
25
|
|
|
26
26
|
## 方法签名
|
|
27
27
|
```java
|
|
@@ -47,7 +47,7 @@ import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
47
47
|
|
|
48
48
|
public class ButtonClickDomo extends AbstractFormPlugin implements ClickListener {
|
|
49
49
|
|
|
50
|
-
private final
|
|
50
|
+
private static final String KEY_BUTTON1 = "buttonap1";
|
|
51
51
|
|
|
52
52
|
@Override
|
|
53
53
|
public void registerListener(EventObject e) {
|
|
@@ -31,26 +31,32 @@ invokeService(String factoryQualifiedPrefix, String appId, String serviceName, S
|
|
|
31
31
|
package kd.ecos_test.ecos_testapp.servicehelper;
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Microservice: one ServiceFactory per application.
|
|
35
|
+
* The directory must follow: kd.{cloudId}.{appId}.servicehelper
|
|
35
36
|
*/
|
|
36
|
-
import java.util.HashMap;
|
|
37
|
-
import java.util.Map;
|
|
38
37
|
import kd.bos.dataentity.TypesContainer;
|
|
39
38
|
import kd.bos.dataentity.resource.ResManager;
|
|
39
|
+
import kd.bos.exception.KDBizException;
|
|
40
40
|
|
|
41
|
-
public class ServiceFactory {
|
|
42
|
-
private static Map<String, String> serviceMap = new HashMap<>();
|
|
41
|
+
public final class ServiceFactory {
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
serviceMap.put("WztTestService", "kd.bos.ecos.service.impl.WztTestServiceImpl");
|
|
43
|
+
private ServiceFactory() {
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
public static Object getService(String serviceName) {
|
|
49
|
-
String className =
|
|
47
|
+
String className = implementationOf(serviceName);
|
|
50
48
|
if (className == null) {
|
|
51
|
-
throw new
|
|
49
|
+
throw new KDBizException(String.format(ResManager.loadKDString("%s对应的服务实现未找到", "ServiceFactory_0", "bos-ecos-mservice"), serviceName));
|
|
52
50
|
}
|
|
53
|
-
|
|
51
|
+
return TypesContainer.getOrRegisterSingletonInstance(className);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 使用 switch,避免 DCS 禁止的静态 Map(CVE-KD-0056)
|
|
55
|
+
private static String implementationOf(String serviceName) {
|
|
56
|
+
if ("WztTestService".equals(serviceName)) {
|
|
57
|
+
return "kd.bos.ecos.service.impl.WztTestServiceImpl";
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
62
|
```
|
|
@@ -78,7 +84,8 @@ public class TestService extends AbstractFormPlugin{
|
|
|
78
84
|
"test",
|
|
79
85
|
content);
|
|
80
86
|
|
|
81
|
-
System.out
|
|
87
|
+
// 向用户展示结果;DCS 禁止使用 System.out/err(CVE-KD-0209-1)
|
|
88
|
+
this.getView().showMessage(result);
|
|
82
89
|
}
|
|
83
90
|
}
|
|
84
91
|
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/dist-lock/dist-lock-basic.md
CHANGED
|
@@ -52,13 +52,10 @@ DLock lock = DLock.create("fi/gl/N20180503-8808", "凭证N20180503-8808");
|
|
|
52
52
|
// 一直等待直到获得锁
|
|
53
53
|
lock.lock();
|
|
54
54
|
try {
|
|
55
|
-
//
|
|
55
|
+
// DLock.getLockInfo(key) 查询单个锁,DLock.getAllLockInfo() 查询所有锁:
|
|
56
56
|
// {key: fi/gl/N20180503-8808, desc: 凭证N20180503-8808, owner: 163388da76b0046, waitingLocks: 0, createTime: 2018-05-08 11:35:50.087}
|
|
57
|
-
System.out
|
|
58
|
-
|
|
59
|
-
// 获取所有锁信息
|
|
60
|
-
// System.out.println(DLock.getAllLockInfo());
|
|
61
|
-
// ...
|
|
57
|
+
// 按需写入平台日志;DCS 禁止使用 System.out(CVE-KD-0209-1)
|
|
58
|
+
// 在此执行持锁期间的业务逻辑
|
|
62
59
|
} finally {
|
|
63
60
|
lock.unlock();
|
|
64
61
|
}
|
|
@@ -11,6 +11,10 @@ topic: "infra/mq"
|
|
|
11
11
|
|
|
12
12
|
# 场景:订阅MQ消息(消费者)
|
|
13
13
|
|
|
14
|
+
> **DCS 部署:** 实现或引用 `kd.bos.mq.MessageConsumer` 违反 `CVE-KD-20260901-4`,
|
|
15
|
+
> RabbitMQ / RocketMQ / Kafka 客户端也受限。交付 DCS 插件时使用已验证的平台调度或事件订阅,
|
|
16
|
+
> 不复制本页消费者实现;本页仅供理解内部机制,见 [dcs-code-rules.md](../../../../../../references/dcs-code-rules.md)。
|
|
17
|
+
|
|
14
18
|
## 适用情况
|
|
15
19
|
|
|
16
20
|
需要接收并处理 MQ 消息时,实现 `MessageConsumer` 接口,在 XML 配置文件中注册队列和消费者,消费完成后通过 `MessageAcker` 进行 ack/deny/discard 确认。
|
|
@@ -47,7 +51,7 @@ public class DemoConsumer implements MessageConsumer {
|
|
|
47
51
|
try {
|
|
48
52
|
//业务处理
|
|
49
53
|
acker.ack(messageId);
|
|
50
|
-
} catch (
|
|
54
|
+
} catch (Exception e) {
|
|
51
55
|
//记录异常日志
|
|
52
56
|
log.error("消费异常",e);
|
|
53
57
|
//是否废弃这条消息,根据具体场景判断
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/async-operation.md
CHANGED
|
@@ -51,7 +51,7 @@ import kd.bos.logging.Log;
|
|
|
51
51
|
import kd.bos.logging.LogFactory;
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* Demonstrates how to switch an operation to async execution
|
|
55
55
|
*/
|
|
56
56
|
public class SwitchAsynSampleOpPlugin extends AbstractOperationServicePlugIn {
|
|
57
57
|
|
|
@@ -81,6 +81,8 @@ public class SwitchAsynSampleOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
81
81
|
|
|
82
82
|
log.info("swithToAsyn");
|
|
83
83
|
|
|
84
|
+
// Notify the operation engine to switch the operation to async execution
|
|
85
|
+
// If the current scenario supports async execution, executing this statement will immediately interrupt the operation,
|
|
84
86
|
// 通知操作引擎,把操作切换为异步执行
|
|
85
87
|
// 如果当前场景支持异步执行操作,执行此语句后,会即时中断操作,由操作引擎另起一个线程,重新执行操作
|
|
86
88
|
// 如果当前场景,不支持异步执行操作,执行此语句时,不会有任何效果,请求被引擎自动忽略,代码继续往后执行
|
|
@@ -119,13 +121,13 @@ public class SwitchAsynSampleOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
/**
|
|
122
|
-
*
|
|
124
|
+
* Pause execution: loop wait, 500ms each time
|
|
123
125
|
*
|
|
124
|
-
* @param cycleTime
|
|
126
|
+
* @param cycleTime Number of cycles, maximum 10
|
|
125
127
|
*/
|
|
126
128
|
private void sleep(int cycleTime) {
|
|
127
129
|
|
|
128
|
-
log.info("sleep: " +
|
|
130
|
+
log.info("sleep: " + (cycleTime * 500) + "ms");
|
|
129
131
|
|
|
130
132
|
int count = 0;
|
|
131
133
|
if (cycleTime < 1 || cycleTime > 10) {
|
|
@@ -143,7 +145,8 @@ public class SwitchAsynSampleOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
143
145
|
count++;
|
|
144
146
|
}
|
|
145
147
|
} catch (InterruptedException e) {
|
|
146
|
-
//
|
|
148
|
+
// 保留线程中断信号,避免吞掉取消请求。
|
|
149
|
+
Thread.currentThread().interrupt();
|
|
147
150
|
}
|
|
148
151
|
}
|
|
149
152
|
}
|
|
@@ -176,7 +179,8 @@ class SwitchAsynValidatorSample extends AbstractValidator {
|
|
|
176
179
|
|
|
177
180
|
}
|
|
178
181
|
} catch (InterruptedException e) {
|
|
179
|
-
//
|
|
182
|
+
// 保留线程中断信号,避免吞掉取消请求。
|
|
183
|
+
Thread.currentThread().interrupt();
|
|
180
184
|
}
|
|
181
185
|
}
|
|
182
186
|
}
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/big-task-async.md
CHANGED
|
@@ -100,7 +100,7 @@ import java.util.Map;
|
|
|
100
100
|
import java.util.HashMap;
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
103
|
+
* Execute business logic
|
|
104
104
|
* @param rc
|
|
105
105
|
* @param params
|
|
106
106
|
* @throws KDException
|
|
@@ -139,8 +139,10 @@ public void execute(RequestContext rc, Map<String, Object> params) throws KDExce
|
|
|
139
139
|
Thread.sleep(500);
|
|
140
140
|
}
|
|
141
141
|
} catch (InterruptedException e) {
|
|
142
|
-
//
|
|
142
|
+
// 保留中断信号并结束任务,不能继续报告成功。
|
|
143
|
+
Thread.currentThread().interrupt();
|
|
143
144
|
log.error(e);
|
|
145
|
+
return;
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
// 任务执行完毕,输出自定义结果,放在data中输出
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/schedule-task.md
CHANGED
|
@@ -53,11 +53,11 @@ import kd.bos.schedule.executor.AbstractTask;
|
|
|
53
53
|
import java.util.Map;
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
56
|
+
* My simulated task
|
|
57
57
|
*
|
|
58
58
|
*/
|
|
59
59
|
public class MyTask extends AbstractTask {
|
|
60
|
-
private static Log log = LogFactory.getLog("kd.bos.schedule.formplugin.tasktest.MyTask");
|
|
60
|
+
private static final Log log = LogFactory.getLog("kd.bos.schedule.formplugin.tasktest.MyTask");
|
|
61
61
|
|
|
62
62
|
@Override
|
|
63
63
|
public void execute(RequestContext context, Map<String, Object> params) throws KDException {
|
|
@@ -68,13 +68,14 @@ public class MyTask extends AbstractTask {
|
|
|
68
68
|
feedbackProgress(i);
|
|
69
69
|
|
|
70
70
|
//暂停100ms
|
|
71
|
+
// DCS 禁止循环内日志,改为循环外记录汇总(CVE-KD-0058-1)
|
|
71
72
|
try {
|
|
72
|
-
//
|
|
73
|
-
log.debug("i:" + i);
|
|
74
|
-
|
|
73
|
+
// 在此执行任务业务逻辑
|
|
75
74
|
Thread.sleep(100);
|
|
76
75
|
} catch (InterruptedException e) {
|
|
77
|
-
|
|
76
|
+
// 恢复中断标志并结束任务(S2142)
|
|
77
|
+
Thread.currentThread().interrupt();
|
|
78
|
+
return;
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
if (i == 0){
|
|
@@ -85,9 +86,10 @@ public class MyTask extends AbstractTask {
|
|
|
85
86
|
//判断是否需要中止,也可以不支持
|
|
86
87
|
if (isStop()){
|
|
87
88
|
stop();
|
|
89
|
+
return;
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
|
-
|
|
92
|
+
log.info("MyTask finished");
|
|
91
93
|
}
|
|
92
94
|
|
|
93
95
|
}
|
package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/operation-interactive.md
CHANGED
|
@@ -66,15 +66,16 @@ import kd.bos.form.MessageBoxResult;
|
|
|
66
66
|
|
|
67
67
|
public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn {
|
|
68
68
|
|
|
69
|
-
private final
|
|
70
|
-
private final
|
|
69
|
+
private static final String INTERACTION_SPONSOR = "kd.bos.plugin.sample.bill.bizoperation.bizcase.ThrowInteractionExceptionOp";
|
|
70
|
+
private static final String KEY_INTEGER_FIELD = "integerfield1";
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* When executing an operation from the list, specify the fields to include in the data package:
|
|
74
|
+
* this plugin needs to use the integer1 field, so the data package must contain this field value
|
|
74
75
|
*/
|
|
75
76
|
@Override
|
|
76
77
|
public void onPreparePropertys(PreparePropertysEventArgs e) {
|
|
77
|
-
e.getFieldKeys().add(
|
|
78
|
+
e.getFieldKeys().add(KEY_INTEGER_FIELD);
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
@Override
|
|
@@ -83,7 +84,7 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
83
84
|
// 找出本批次数据中,最大的整数1字段值
|
|
84
85
|
int maxFieldValue = 0;
|
|
85
86
|
for (ExtendedDataEntity dataEntity : e.getValidExtDataEntities()) {
|
|
86
|
-
int fieldValue = (int)dataEntity.getValue(
|
|
87
|
+
int fieldValue = (int)dataEntity.getValue(KEY_INTEGER_FIELD);
|
|
87
88
|
if (maxFieldValue < fieldValue) {
|
|
88
89
|
maxFieldValue = fieldValue;
|
|
89
90
|
}
|
|
@@ -101,24 +102,20 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
/**
|
|
104
|
-
*
|
|
105
|
+
* Show interaction prompt; return false to cancel subsequent operations
|
|
105
106
|
*/
|
|
106
107
|
private boolean showInteractionMessage() {
|
|
107
108
|
// 判断是否确认后的回调
|
|
108
109
|
String confirmResultString = this.getOption().getVariableValue(OperateOptionConst.INTERACTIONCONFIRMRESULT, "");
|
|
109
110
|
InteractionConfirmResult confirmResult = InteractionConfirmResult.fromJsonString(confirmResultString);
|
|
110
111
|
|
|
112
|
+
// Check whether the interaction confirmation result set contains the result of this interaction;
|
|
113
|
+
// if it does, this is a post-interaction callback, directly judge the returned interaction result;
|
|
111
114
|
// 检查交互确认结果集合中,有没有包含本交互的结果,如果有,说明是交互后的回调处理,直接判断返回的交互结果,不能再显示交互,否则会死循环
|
|
112
|
-
if (confirmResult.getResults().containsKey(
|
|
113
|
-
MessageBoxResult result = MessageBoxResult.valueOf(confirmResult.getResults().get(
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// 用户否定了确认提示,跳出本方法,中止后续操作
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
115
|
+
if (confirmResult.getResults().containsKey(INTERACTION_SPONSOR)) {
|
|
116
|
+
MessageBoxResult result = MessageBoxResult.valueOf(confirmResult.getResults().get(INTERACTION_SPONSOR));
|
|
117
|
+
// 仅确认时继续后续操作,拒绝时返回 false。
|
|
118
|
+
return result == MessageBoxResult.Yes;
|
|
122
119
|
}
|
|
123
120
|
|
|
124
121
|
// 生成一条交互提示
|
|
@@ -132,11 +129,11 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
132
129
|
interactionContext.addOperateInfo(errorInfo);
|
|
133
130
|
|
|
134
131
|
// 抛出一个交互中断,退出当前操作执行代码
|
|
135
|
-
throw new KDInteractionException(
|
|
132
|
+
throw new KDInteractionException(INTERACTION_SPONSOR, interactionContext);
|
|
136
133
|
}
|
|
137
134
|
|
|
138
135
|
/**
|
|
139
|
-
*
|
|
136
|
+
* Show custom interaction UI; return false to cancel subsequent operations
|
|
140
137
|
*/
|
|
141
138
|
private boolean showInteractionForm(BeforeOperationArgs e, int maxFieldValue) {
|
|
142
139
|
|
|
@@ -144,10 +141,12 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
144
141
|
String confirmResultString = this.getOption().getVariableValue(OperateOptionConst.INTERACTIONCONFIRMRESULT, "");
|
|
145
142
|
InteractionConfirmResult confirmResult = InteractionConfirmResult.fromJsonString(confirmResultString);
|
|
146
143
|
|
|
144
|
+
// Check whether the interaction confirmation result set contains the result of this interaction;
|
|
145
|
+
// if it does, this is a post-interaction callback, directly judge the returned interaction result;
|
|
147
146
|
// 检查交互确认结果集合中,有没有包含本交互的结果,如果有,说明是交互后的回调处理,直接判断返回的交互结果,不能再显示交互,否则会死循环
|
|
148
|
-
if (confirmResult.getResults().containsKey(
|
|
147
|
+
if (confirmResult.getResults().containsKey(INTERACTION_SPONSOR)) {
|
|
149
148
|
|
|
150
|
-
String newFieldValue = confirmResult.getResults().get(
|
|
149
|
+
String newFieldValue = confirmResult.getResults().get(INTERACTION_SPONSOR);
|
|
151
150
|
if (StringUtils.isBlank(newFieldValue)) {
|
|
152
151
|
// 在交互界面,用户点击了取消按钮,不需要继续
|
|
153
152
|
return false;
|
|
@@ -155,9 +154,9 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
155
154
|
else {
|
|
156
155
|
for (ExtendedDataEntity dataEntity : e.getValidExtDataEntities()) {
|
|
157
156
|
// 对超过500的数据包,更改为用户指定的新整数值
|
|
158
|
-
int fieldValue = (int)dataEntity.getValue(
|
|
157
|
+
int fieldValue = (int)dataEntity.getValue(KEY_INTEGER_FIELD);
|
|
159
158
|
if (fieldValue >= 500) {
|
|
160
|
-
dataEntity.setValue(
|
|
159
|
+
dataEntity.setValue(KEY_INTEGER_FIELD, Integer.valueOf(newFieldValue));
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
// 用户已经确认,跳出本方法,继续执行操作
|
|
@@ -171,10 +170,10 @@ public class ThrowInteractionExceptionOp extends AbstractOperationServicePlugIn
|
|
|
171
170
|
|
|
172
171
|
// 指定显示的交互界面,以及界面显示参数
|
|
173
172
|
interactionContext.setCustShowFormId("demo_showinteger");
|
|
174
|
-
interactionContext.getCustShowParameter().put(
|
|
173
|
+
interactionContext.getCustShowParameter().put(KEY_INTEGER_FIELD, String.valueOf(maxFieldValue));
|
|
175
174
|
|
|
176
175
|
// 抛出一个交互中断,退出当前操作执行代码
|
|
177
|
-
throw new KDInteractionException(
|
|
176
|
+
throw new KDInteractionException(INTERACTION_SPONSOR, interactionContext);
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
179
|
```
|
|
@@ -190,24 +189,24 @@ import kd.bos.dataentity.utils.StringUtils;
|
|
|
190
189
|
import kd.bos.form.control.Control;
|
|
191
190
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
|
192
191
|
|
|
193
|
-
public class
|
|
192
|
+
public class ThrowInteractionShowIntegerPlugin extends AbstractFormPlugin {
|
|
194
193
|
|
|
195
|
-
private final
|
|
196
|
-
private final
|
|
197
|
-
private final
|
|
194
|
+
private static final String KEY_OK = "btnok";
|
|
195
|
+
private static final String KEY_CANCEL = "btncancel";
|
|
196
|
+
private static final String KEY_INTEGER_FIELD = "integerfield1";
|
|
198
197
|
|
|
199
198
|
@Override
|
|
200
199
|
public void registerListener(EventObject e) {
|
|
201
200
|
super.registerListener(e);
|
|
202
201
|
|
|
203
|
-
this.addClickListeners(KEY_OK,
|
|
202
|
+
this.addClickListeners(KEY_OK, KEY_CANCEL);
|
|
204
203
|
}
|
|
205
204
|
|
|
206
205
|
@Override
|
|
207
206
|
public void afterCreateNewData(EventObject e) {
|
|
208
|
-
Object fieldValue = this.getView().getFormShowParameter().getCustomParam(
|
|
207
|
+
Object fieldValue = this.getView().getFormShowParameter().getCustomParam(KEY_INTEGER_FIELD);
|
|
209
208
|
if (fieldValue != null){
|
|
210
|
-
this.getModel().setValue(
|
|
209
|
+
this.getModel().setValue(KEY_INTEGER_FIELD, fieldValue);
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
212
|
|
|
@@ -216,10 +215,10 @@ public class ThrowInteraction_ShowIntegerPlugin extends AbstractFormPlugin {
|
|
|
216
215
|
super.click(evt);
|
|
217
216
|
Control source = (Control) evt.getSource();
|
|
218
217
|
if (StringUtils.equals(source.getKey(), KEY_OK)) {
|
|
219
|
-
this.getView().returnDataToParent(String.valueOf(this.getModel().getValue(
|
|
218
|
+
this.getView().returnDataToParent(String.valueOf(this.getModel().getValue(KEY_INTEGER_FIELD)));
|
|
220
219
|
this.getView().close();
|
|
221
220
|
}
|
|
222
|
-
else if (StringUtils.equals(source.getKey(),
|
|
221
|
+
else if (StringUtils.equals(source.getKey(), KEY_CANCEL)) {
|
|
223
222
|
this.getView().returnDataToParent(null);
|
|
224
223
|
this.getView().close();
|
|
225
224
|
}
|
|
@@ -228,7 +227,7 @@ public class ThrowInteraction_ShowIntegerPlugin extends AbstractFormPlugin {
|
|
|
228
227
|
```
|
|
229
228
|
|
|
230
229
|
## 注意事项
|
|
231
|
-
- 交互标识(
|
|
230
|
+
- 交互标识(INTERACTION_SPONSOR)必须固定且唯一,足够长以避免和其他插件的交互重复
|
|
232
231
|
- 在抛出交互异常前,必须先检查交互结果,判断是否是交互回调;如果是回调,不能再次抛出,否则会死循环
|
|
233
232
|
- 默认交互模式(不指定自定义界面):系统弹出标准确认框,结果为 Yes 或 No
|
|
234
233
|
- 自定义交互界面:通过 `setCustShowFormId` 指定,通过 `getCustShowParameter().put` 传递参数
|