吴让宇
|
c06e350f6d
|
feat: bgRFC/FM 支撑能力 + ADT 后缀剥离与 CLAS 激活修复(B1 配套)
CI / test (3.10) (push) Waiting to run
CI / test (3.11) (push) Waiting to run
CI / test (3.12) (push) Waiting to run
新增能力:
- remote-enable 子命令:设置函数模块处理类型为远程启用(bgRFC/RFC 执行体必需)。
实现要点均按实机验证:PUT fmodule:processingType="rfc"(枚举值仅小写 rfc 有效,
remoteEnabled/remote/RFC 等均 400);lockHandle 走 query 参数(放 header 报
ParameterNotFound);PUT 后 GET 复核回显;DDIC 结构参数才可远程启用(类本地类型
报"针对 RFC 不允许使用类或接口的类型")。
- create --type functiongroup 透传 --package / --corr_nr(此前 package 被静默写成 $TMP,
导致函数组无法归目标包)。
修复:
- activate 请求体补重复引用:ADT CLAS 激活端点对 objectReferences 只有 1 个引用时
返回 HTTP 200 + 空 body 且不执行激活;引用数 ≥2 才真正激活(同对象重复亦可)。
- scanner 剥离 ADT 文件后缀(xxx.clas.abap 解析错误)。
守卫测试:
- tests/unit/test_bgrfc_support.py(17 例):函数组 package 透传、processingType 助手、
remote-enable 命令(含 lockHandle 走 query/小写 rfc/错误透传/复核失配判失败)、
函数 URI 组装不得用组名冒充模块名。
- test_activate.py 增加激活请求体引用数守卫;test_repo_guards.py 增加后缀剥离守卫。
测试:tests/unit 676 + tests/test_sapcli.py 69 = 745 全绿
(PYTHONPATH=assets python -m unittest discover -s tests/unit -t tests)
|
2026-09-15 22:51:35 +08:00 |
|
吴让宇
|
04efa7388a
|
fix(create): $TMP 包不再误弹传输请求选择
cmd_create 在未指定 --corr_nr 时无条件调 _select_transport_request(),
未判目标包 —— $TMP 是本地包(对象不进传输),弹交互是错的,且管道/脚本
调用时 input() 直接 EOFError,报错栈指向传输选择,误导排查方向。
修法:包名规范化后等于 $TMP/TMP 则跳过选择(corr_nr=None)。
实测:create --package '$TMP' 直接成功,TADIR 落 DEVCLASS=$TMP。
|
2026-09-15 00:17:09 +08:00 |
|
吴让宇
|
66ec30fc99
|
fix(ddic): create 命令消费 JSON description(--description 优先→JSON→回退名);upload testclasses XML 包裹通道(S4T 三轮实证);SKILL 错误速查表 +4 条 NW740 实证(ADT 创建不持久化文本/classes 激活空响应/unknown comments/STRG+comptype 陷阱)
|
2026-09-14 10:37:43 +08:00 |
|
吴让宇
|
43037e2379
|
fix: create 命令 --package 透传修复——args.package 此前全库 0 引用,DDIC 对象一律静默落 $TMP;_create_ddic 补 package 参数传递,实测 create 直落 ZINT 包成功(B1 试点 FS-201 全量 DDIC 依赖此修复落地)
|
2026-09-14 07:30:53 +08:00 |
|
吴让宇
|
53ea2d854d
|
fix: list/search quickSearch 参数名修正 + SQL 方言友好报错 + E071 传输请求改 IN
- list_objects: maxrow/name/type 改为 operation=quickSearch/query/maxResults/objectType,
并剥离 NW 7.40/7.50 quickSearch name 里的本地化类型标签(如 "ZCL_FOO (Class)")
- query_table_data: HTTP 400 转抛 SapCliError,说明方言限制(WHERE 仅 IN/LIKE),不再打堆栈
- _query_transport_request: E071 查询 WHERE 改用 IN(...),区分「无」与「无法获取」
|
2026-09-11 01:52:35 +08:00 |
|
吴让宇
|
d0d65db137
|
feat(info): DDIC 类型补全描述与开发包(NW 7.40 ADT 不返回)
NW 7.40 的 */* 响应不含 description/packageRef,info 对 structure/table/tabletype/dataelement/domain 在 ADT 返回值为空时回退查文本表补描述(DD02T/DD40T/DD04T/DD01T)、查 TADIR 补开发包。语言按「登录语言 -> E -> 1 -> 首行」回退;补查异常静默降级不打断输出;TADIR 无行时保持 (未指定)。
|
2026-09-11 01:39:05 +08:00 |
|
吴让宇
|
86519c51d6
|
fix(info): 406 回退值改为 */* —— 原值 application/xml 本身也返回 406
`info` 在 NW 7.40 上对 DDIC 类型恒报「查询失败: HTTP 406」,实测根因:
回退分支把 Accept 从专属媒体类型换成 `application/xml`,而该值在本系统同样返回 406,
等于没回退。真实客户端 `_headers()` 的 Accept 默认值本就是 `*/*`,此处相当于
把可用默认值覆盖成了失效值。
实测(S4T / NW 7.40,structure ZMM_BIP_001_HEADER):
application/vnd.sap.adt.ddic.structures.v1|v2|v3+xml → 406
application/xml → 406
*/* → 200
修后真机验证:`info --name ZMM_BIP_001_HEADER --type structure` 查询成功。
已知限制(非本修复引入):NW 7.40 的 DDIC 端点在 */* 下只返回 blueSource,
不含 description/packageRef,故 structure/tabletype 等类型的「描述/开发包/负责人」
为空。需这些字段时用 read-table 查 DD02T(描述)/ TADIR(开发包)。
(objectproperties 端点在本系统返回 422,不可用。)
测试:
- 新增 test_info_406_fallback_accept_is_wildcard —— 断言回退 Accept 必须为 */*,
且明确排除 application/xml。**必须用 side_effect 在请求发生时快照 headers**:
cmd_info 重试时复用同一个 hdrs dict,直接读 call_args_list[i].kwargs["headers"]
会因别名而全部显示最后一次赋的值,令该断言永远无法成立。
- 三个测试文件的 _make_client() 由 `_headers.return_value={...}`(共享 dict)
改为 side_effect 返回新 dict,与真实实现一致——原写法会让被记录的 headers
全部指向同一对象,使 header 断言失真。
- 反向验证:把回退改回 application/xml → 测试报红 AssertionError('application/xml' != '*/*')。
699 tests OK。
|
2026-09-11 00:53:02 +08:00 |
|
吴让宇
|
e786742bcb
|
chore: 同步至源码 2.5.1 — SKILL.md 改为构建产物 + 工具代码刷新
SKILL.md(唯一来源 = sap-cli/skill-src/SKILL.md.tmpl):
- 本仓 SKILL.md 自此为构建产物,勿手工编辑;手改后再构建会被漂移护栏拦下
- 并入模板独有内容:调用方式节 + 补齐 parser 真实命令(clone/enhancement/
history/unit-test/unlock/transport create,原表只 9 个,实际 31 个)
- 版本号改为 {{VERSION}} 注入(原字面量停在 v2.2.1/v2.3.0,与工具实际版本脱节)
- 修 1 处违反铁律 5 的示例(--path ./src → ./src/TMP/class/)
assets/(工具代码,此前严重过时):
- 9 个文件与源码不一致,scanner.py 尤甚:3818B → 6664B
- 修复前从本仓装出的工具**不支持三层 src 结构**,铁律 5 实际跑不通
- transport.py 反向漂移(分发版多 transport create,源码无)已随源码回迁对齐
VERSION 2.5.1;references/ 三份规则与源码一致(无差异)
|
2026-09-11 00:22:05 +08:00 |
|
WuRangyu
|
02bc2c5165
|
v2.3.0: info 新增开发包/传输请求字段 (纯只读 E071)
- info 输出新增「开发包」(packageRef)、「传输请求」(纯只读查 E071)
- 优雅降级: 无请求/查询失败/非独立传输对象, 不中断 info
- bump 2.2.1 -> 2.3.0
- pack 从源码同步 (含 parser/transport 最新代码)
|
2026-08-06 11:57:36 +08:00 |
|
wurangyu
|
38e99638c5
|
chore: sync skill to v2.2.1
- NW 7.40 E2E-verified compatibility matrix in SKILL.md
- DDIC fixes: include namespace, tabletype exists check, DDIC delete lock Accept
- New commands: clone, enhancement, history, unit-test
- 665 tests, 96% coverage
|
2026-07-10 19:13:46 +08:00 |
|
wurangyu
|
b43d3b11c3
|
feat: sap-cli skill v2.2.0 — upload + syntax-check commands
|
2026-06-13 22:32:32 +08:00 |
|
wurangyu
|
1e39b6da88
|
feat: sap-cli skill v2.1.0 — self-contained distributable package
- assets/: sap-cli source (v2.1.0, 26 commands, 16 object types)
- references/: tool constraints + error handling (self-contained)
- scripts/setup.py: one-click install/config/verify
- SKILL.md: full command reference + dual-platform install guide
- VERSION: 2.1.0
Built from D:/Codespace/sap-cli via scripts/pack_skill.py
|
2026-06-13 20:52:24 +08:00 |
|