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}")