fix: create 命令 --package 透传修复——args.package 此前全库 0 引用,DDIC 对象一律静默落 $TMP;_create_ddic 补 package 参数传递,实测 create 直落 ZINT 包成功(B1 试点 FS-201 全量 DDIC 依赖此修复落地)

This commit is contained in:
吴让宇
2026-09-14 07:30:53 +08:00
parent f9d08774fd
commit 43037e2379
2 changed files with 14 additions and 10 deletions
+3 -2
View File
@@ -341,6 +341,7 @@ class DdicMixin:
name: str, name: str,
definition_body: str, definition_body: str,
corr_nr: str | None = None, corr_nr: str | None = None,
package: str = "$TMP",
) -> tuple[str, str | None]: ) -> tuple[str, str | None]:
config = get_type_config(obj_type) config = get_type_config(obj_type)
obj_uri = config.format_obj_uri(name.lower()) obj_uri = config.format_obj_uri(name.lower())
@@ -350,7 +351,7 @@ class DdicMixin:
# 先 POST 集合端点创建对象实体,再 PUT 写入 DDL 定义。 # 先 POST 集合端点创建对象实体,再 PUT 写入 DDL 定义。
# 之前直接 _put_ddl_sourcePUT 到尚未创建的对象 /source/main 返回 405。 # 之前直接 _put_ddl_sourcePUT 到尚未创建的对象 /source/main 返回 405。
obj_name = name.upper() 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 collection_url = config.collection_uri
params: dict[str, str] = {} params: dict[str, str] = {}
if corr_nr: if corr_nr:
@@ -375,7 +376,7 @@ class DdicMixin:
self._put_ddl_source(src_uri, definition_body, "", corr_nr) self._put_ddl_source(src_uri, definition_body, "", corr_nr)
else: else:
obj_name = name.upper() 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 collection_url = config.collection_uri
params: dict[str, str] = {} params: dict[str, str] = {}
if corr_nr: if corr_nr:
+11 -8
View File
@@ -924,7 +924,8 @@ def cmd_create(args: argparse.Namespace, client: ADTClient) -> None:
return return
if obj_type in DDIC_TYPES: 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 return
if source_file: if source_file:
@@ -936,8 +937,9 @@ def cmd_create(args: argparse.Namespace, client: ADTClient) -> None:
print(f"\n → 正在创建对象...") print(f"\n → 正在创建对象...")
try: try:
package = getattr(args, "package", None) or "$TMP"
created_uri, created_src_uri = client.create_object( 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: except Exception as e:
print(f" ✗ 创建失败: {e}") print(f" ✗ 创建失败: {e}")
@@ -1016,6 +1018,7 @@ def _create_ddic(
description: str, description: str,
corr_nr: str | None, corr_nr: str | None,
definition_file: str | None, definition_file: str | None,
package: str = "$TMP",
) -> None: ) -> None:
"""创建 DDIC 对象(domain/dataelement/table/structure/tabletype)。""" """创建 DDIC 对象(domain/dataelement/table/structure/tabletype)。"""
from sapcli.ddic import ( from sapcli.ddic import (
@@ -1043,7 +1046,7 @@ def _create_ddic(
lowercase=data.get("lowercase", False), lowercase=data.get("lowercase", False),
fix_values=data.get("fix_values", []), 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": elif obj_type == "dataelement":
defn = DataElementDefinition( defn = DataElementDefinition(
datatype=data.get("datatype", "CHAR"), datatype=data.get("datatype", "CHAR"),
@@ -1051,7 +1054,7 @@ def _create_ddic(
decimals=data.get("decimals", 0), decimals=data.get("decimals", 0),
domain_name=data.get("domain_name", ""), 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": elif obj_type == "table":
fields = [ fields = [
TableField( TableField(
@@ -1091,15 +1094,15 @@ def _create_ddic(
key_type=data.get("key_type", "#USER_DEFINED"), key_type=data.get("key_type", "#USER_DEFINED"),
access_mode=data.get("access_mode", "#STANDARD"), 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 definition_body is None:
if obj_type == "domain": if obj_type == "domain":
defn = DomainDefinition() defn = DomainDefinition()
definition_body = defn.to_xml(name.upper(), description) definition_body = defn.to_xml(name.upper(), description, package)
elif obj_type == "dataelement": elif obj_type == "dataelement":
defn = DataElementDefinition() defn = DataElementDefinition()
definition_body = defn.to_xml(name.upper(), description) definition_body = defn.to_xml(name.upper(), description, package)
elif obj_type == "table": elif obj_type == "table":
defn = TableDefinition(fields=[ defn = TableDefinition(fields=[
TableField(name="key_field", type_name="char10", not_null=True), TableField(name="key_field", type_name="char10", not_null=True),
@@ -1117,7 +1120,7 @@ def _create_ddic(
print(f"\n → 正在创建 DDIC 对象...") print(f"\n → 正在创建 DDIC 对象...")
try: try:
created_uri, created_src_uri = client.create_ddic_object( 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: except Exception as e:
print(f" ✗ 创建失败: {e}") print(f" ✗ 创建失败: {e}")