"""remote-enable 命令 — 远程启用函数模块(bgRFC/RFC 执行体)。 背景:bgRFC 的执行体必须是远程启用的函数模块(processingType=rfc)。 本命令封装 ADT 的 GET→改 processingType=rfc→PUT→GET 复核闭环, 不负责激活、也不负责 TFDIR.FMODE='R' 的最终确认(后者留给调用方 read-table)。 """ from __future__ import annotations import argparse import logging from sapcli.client import ADTClient from sapcli.exceptions import InvalidNameError, SapCliError logger = logging.getLogger("sapcli.commands.remote_enable") def cmd_remote_enable(args: argparse.Namespace, client: ADTClient) -> None: """远程启用函数模块。""" name: str = args.name corr_nr: str | None = getattr(args, "corr_nr", None) if "/" not in name: print(" ✗ remote-enable 需要'函数组/函数模块'格式,例如: ZGROUP/Z_FUNC") raise InvalidNameError( "remote-enable 需要'函数组/函数模块'格式,例如: ZGROUP/Z_FUNC" ) group, fm = name.split("/", 1) group = group.strip() fm = fm.strip() if not group or not fm: print(" ✗ 函数组名和函数模块名不能为空") raise InvalidNameError("函数组名和函数模块名不能为空") print("=" * 60) print(" SAP ADT 函数模块远程启用(bgRFC/RFC)") print("=" * 60) print(f" 函数组: {group}") print(f" 函数模块: {fm}") if corr_nr: print(f" 传输请求: {corr_nr}") print("\n → 正在远程启用(processingType=rfc)...") ok, msg = client.set_function_remote_enabled(group, fm, corr_nr) if not ok: print(f" ✗ {msg}") raise SapCliError(msg) print(" ✓ 远程启用成功") print(" ✓ 复核回显 processingType=rfc") print() print(" 注意:") print(" - 参数类型只允许 DDIC 对象;类本地类型会 500「针对 RFC 不允许使用类或接口的类型」") print(" - TFDIR.FMODE='R' 的最终确认请用 read-table 复核(见 SKILL.md)") print(" - 此命令只改属性不激活;如需激活再执行 activate")