From 43037e2379d3e716002cb8ff225a8d4751d2b67c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=AE=A9=E5=AE=87?= Date: Mon, 14 Sep 2026 07:30:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20create=20=E5=91=BD=E4=BB=A4=20--package?= =?UTF-8?q?=20=E9=80=8F=E4=BC=A0=E4=BF=AE=E5=A4=8D=E2=80=94=E2=80=94args.p?= =?UTF-8?q?ackage=20=E6=AD=A4=E5=89=8D=E5=85=A8=E5=BA=93=200=20=E5=BC=95?= =?UTF-8?q?=E7=94=A8=EF=BC=8CDDIC=20=E5=AF=B9=E8=B1=A1=E4=B8=80=E5=BE=8B?= =?UTF-8?q?=E9=9D=99=E9=BB=98=E8=90=BD=20$TMP=EF=BC=9B=5Fcreate=5Fddic=20?= =?UTF-8?q?=E8=A1=A5=20package=20=E5=8F=82=E6=95=B0=E4=BC=A0=E9=80=92?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E6=B5=8B=20create=20=E7=9B=B4=E8=90=BD=20ZIN?= =?UTF-8?q?T=20=E5=8C=85=E6=88=90=E5=8A=9F=EF=BC=88B1=20=E8=AF=95=E7=82=B9?= =?UTF-8?q?=20FS-201=20=E5=85=A8=E9=87=8F=20DDIC=20=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E6=AD=A4=E4=BF=AE=E5=A4=8D=E8=90=BD=E5=9C=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/sapcli/client/_ddic.py | 5 +++-- assets/sapcli/commands/crud.py | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/assets/sapcli/client/_ddic.py b/assets/sapcli/client/_ddic.py index 21d4107..55b46d5 100644 --- a/assets/sapcli/client/_ddic.py +++ b/assets/sapcli/client/_ddic.py @@ -341,6 +341,7 @@ class DdicMixin: name: str, definition_body: str, corr_nr: str | None = None, + package: str = "$TMP", ) -> tuple[str, str | None]: config = get_type_config(obj_type) obj_uri = config.format_obj_uri(name.lower()) @@ -350,7 +351,7 @@ class DdicMixin: # 先 POST 集合端点创建对象实体,再 PUT 写入 DDL 定义。 # 之前直接 _put_ddl_source,PUT 到尚未创建的对象 /source/main 返回 405。 obj_name = name.upper() - body = self._build_create_body(obj_type, obj_name, obj_name) + body = self._build_create_body(obj_type, obj_name, obj_name, package) collection_url = config.collection_uri params: dict[str, str] = {} if corr_nr: @@ -375,7 +376,7 @@ class DdicMixin: self._put_ddl_source(src_uri, definition_body, "", corr_nr) else: obj_name = name.upper() - body = self._build_create_body(obj_type, obj_name, obj_name) + body = self._build_create_body(obj_type, obj_name, obj_name, package) collection_url = config.collection_uri params: dict[str, str] = {} if corr_nr: diff --git a/assets/sapcli/commands/crud.py b/assets/sapcli/commands/crud.py index 152befb..efdeb28 100644 --- a/assets/sapcli/commands/crud.py +++ b/assets/sapcli/commands/crud.py @@ -924,7 +924,8 @@ def cmd_create(args: argparse.Namespace, client: ADTClient) -> None: return if obj_type in DDIC_TYPES: - _create_ddic(args, client, obj_type, name, description, corr_nr, definition_file) + package = getattr(args, "package", None) or "$TMP" + _create_ddic(args, client, obj_type, name, description, corr_nr, definition_file, package) return if source_file: @@ -936,8 +937,9 @@ def cmd_create(args: argparse.Namespace, client: ADTClient) -> None: print(f"\n → 正在创建对象...") try: + package = getattr(args, "package", None) or "$TMP" created_uri, created_src_uri = client.create_object( - obj_type, name, description, corr_nr, source + obj_type, name, description, corr_nr, source, package ) except Exception as e: print(f" ✗ 创建失败: {e}") @@ -1016,6 +1018,7 @@ def _create_ddic( description: str, corr_nr: str | None, definition_file: str | None, + package: str = "$TMP", ) -> None: """创建 DDIC 对象(domain/dataelement/table/structure/tabletype)。""" from sapcli.ddic import ( @@ -1043,7 +1046,7 @@ def _create_ddic( lowercase=data.get("lowercase", False), fix_values=data.get("fix_values", []), ) - definition_body = defn.to_xml(name.upper(), description) + definition_body = defn.to_xml(name.upper(), description, package) elif obj_type == "dataelement": defn = DataElementDefinition( datatype=data.get("datatype", "CHAR"), @@ -1051,7 +1054,7 @@ def _create_ddic( decimals=data.get("decimals", 0), domain_name=data.get("domain_name", ""), ) - definition_body = defn.to_xml(name.upper(), description) + definition_body = defn.to_xml(name.upper(), description, package) elif obj_type == "table": fields = [ TableField( @@ -1091,15 +1094,15 @@ def _create_ddic( key_type=data.get("key_type", "#USER_DEFINED"), access_mode=data.get("access_mode", "#STANDARD"), ) - definition_body = defn.to_xml(name.upper(), description) + definition_body = defn.to_xml(name.upper(), description, package) if definition_body is None: if obj_type == "domain": defn = DomainDefinition() - definition_body = defn.to_xml(name.upper(), description) + definition_body = defn.to_xml(name.upper(), description, package) elif obj_type == "dataelement": defn = DataElementDefinition() - definition_body = defn.to_xml(name.upper(), description) + definition_body = defn.to_xml(name.upper(), description, package) elif obj_type == "table": defn = TableDefinition(fields=[ TableField(name="key_field", type_name="char10", not_null=True), @@ -1117,7 +1120,7 @@ def _create_ddic( print(f"\n → 正在创建 DDIC 对象...") try: created_uri, created_src_uri = client.create_ddic_object( - obj_type, name, definition_body, corr_nr + obj_type, name, definition_body, corr_nr, package ) except Exception as e: print(f" ✗ 创建失败: {e}")