@abapify/adt-plugin-abapgit (英语)
abapGit格式插件用于ADT——将ABAP对象序列化到Git兼容的XML/ABAP文件.
纯物质化
登记人数 abapgitFormatPlugin 可以生成一个想要的对象树,而不包含
文件系统、 ADT 或 Git 副作用。 明确源组件覆盖
可变的 ADK 源获取器, 而现有的 XSD 后置处理器则继续
生成元数据 :
const { files } = await abapgitFormatPlugin.materialize({
object: adkClass,
objectType: 'CLAS',
packagePath: ['ZROOT', 'ZROOT_FEATURE'],
sources: {
main: selectedMainSource,
definitions: selectedLocalDefinitions,
},
formatOptions: { folderLogic: 'prefix' },
});
路径根植于下面 src/并附有说明
他们的语义作用和源组件身份。 现有文件系统导入
而Git-to-SAP出口API则保持不变.
结构概览
┌─────────────────────────────────────────────────────────────────────┐
│ adt-plugin-abapgit │
├─────────────────────────────────────────────────────────────────────┤
│ XSD Schemas (xsd/) → ts-xsd codegen → TypeScript types │
│ (XML structure definition) (build time) + parser/builder │
├─────────────────────────────────────────────────────────────────────┤
│ Object Handlers (handlers/) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ CLAS │ │ INTF │ │ DEVC │ │ DTEL │ │ DOMA │ │
│ │ handler │ │ handler │ │ handler │ │ handler │ │ handler │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ └──────────┬┴──────────┬┴──────────┬┴──────────┘ │
│ ▼ ▼ ▼ │
│ createHandler (factory) │
│ - Auto-registration │
│ - Default serialize logic │
│ - File naming conventions │
├─────────────────────────────────────────────────────────────────────┤
│ ADK Facade (@abapify/adk) │
│ - AdkClass, AdkInterface, AdkPackage... │
│ - Client-agnostic object model │
│ - Source code retrieval via getSource()/getIncludeSource() │
└─────────────────────────────────────────────────────────────────────┘
关键设计决定
1. XSD Schemas作为真理的单一来源
为什么是XSD?
- XML Schema 定义 (XSD) 是 行业标准 xML 结构验证
- 可用 在我们的工具之外 (例如,
xmllint --schema intf.xsd file.xml(中文(简体) ) - 提供 正式合同 用于 abapGit XML 格式
- 启用 自动验证 cI/CD管道中
# Validate any abapGit XML file against our schema
xmllint --schema xsd/intf.xsd myinterface.intf.xml --noout
2. 安全型XML处理的ts-xsd
为什么?
不同于典型的只产生类型的XML代码工具, ts-xsd 规定:
- 类型脚本 带有完整类型的推论
- XML 解析器 返回输入对象
- XML 构建器 接受已输入对象
- Schema 对象 用于运行时间验证
// Generated from XSD - fully typed parse/build
import { intf } from './schemas/generated';
const data = intf.parse(xmlString); // → AbapGitIntf (typed)
const xml = intf.build(data); // → string (valid XML)
3. ADK作为客户不可知面板
为什么不在插件中执行 ADT 客户端特性 ?
插件 只消耗 aDK 外观 :
- ADK 处理所有 SAP 通信细节
- 插件纯焦点 序列化格式
- 同一插件与任何 ADT 客户端执行配合
- 明确区分所关切的问题
// Plugin receives ADK objects, doesn't care how they were fetched
getSources: (cls) =>
cls.includes.map((inc) => ({
suffix: ABAPGIT_SUFFIX[inc.includeType],
content: cls.getIncludeSource(inc.includeType), // ADK handles this
}));
4. 不触摸文件系统
为什么将文件操作委托给基地类?
对象处理器 只定义映射数字 :
toAbapGit()- ADK数据 — abapGit XML结构getSource()编号 :getSources()- 要创建的源文件
这个 createHandler 工厂把手 :
- 正确命名的文件创建
- XML 大楼,装有适当的信封
- 同步源承诺解析
- 空内容过滤
支持对象类型
| 类型 | 状态 | 处理器 | 页:1 |
|---|---|---|---|
| 分类 | ✅ | clas.ts | 多个包含( 主, 本地端, 本地端, 本地端, 测试类, 宏) |
| 内存 | ✅ | intf.ts | 单一源文件 |
| DEVC 维基百科 | ✅ | devc.ts | 固定文件名 package.devc.xml |
| 电信 | ✅ | dtel.ts | 仅元数据( 无来源) |
| 多米尼克 | ✅ | doma.ts | 自定义固定值的序列化 |
文件结构
src/
├── zcl_example.clas.abap # Main class source
├── zcl_example.clas.locals_def.abap # Local type definitions
├── zcl_example.clas.locals_imp.abap # Local implementations
├── zcl_example.clas.testclasses.abap # Test classes
├── zcl_example.clas.xml # Class metadata
├── zif_example.intf.abap # Interface source
├── zif_example.intf.xml # Interface metadata
├── ztest_dtel.dtel.xml # Data element (no source)
├── ztest_doma.doma.xml # Domain (no source)
└── package.devc.xml # Package definition
发展
大楼
npx nx build adt-plugin-abapgit
测试
npx nx test adt-plugin-abapgit
重新生成Schemas 中
修改 XSD 文件后 :
npx nx codegen adt-plugin-abapgit
捐款
见 捐款额 详细指南:
- 添加新对象类型支持
- XSD 计划公约
- 执行模式
- 测试要求
另见
- abapGit 文档
- @abapify/adt-plugin (中文(简体) ) - 插件接口
- @abapify/adk (英语) - ABAP发展工具包