@abapify/adt-schemas

中文文档
0.4.34发布于 2026/11/03MITTypeScriptES Module构建来源已验证近 30 天下载 6464

从 SAP XSD 定义生成的 ATT XML 计划

中文使用文档
文档目录32 节
  1. 概览
  2. 关键特性
  3. 建筑要点
  4. 安装
  5. 快速启动
  6. 解析 ADT XML
  7. 构建 ATT XML
  8. 与 speci 合同一起使用
  9. 可用的外观
  10. 核心项目
  11. 仓库对象
  12. 运输管理
  13. ATC (ABAP 测试舱)
  14. 调试追踪( R)
  15. 模板
  16. 类型系统
  17. 预生成接口
  18. 共享类型
  19. 类型等级
  20. Schema 结构
  21. 跨计划类型分辨率
  22. 建筑
  23. 生成管道
  24. 自定义 Schemas( ABAP XML 格式)
  25. 关键点
  26. 发展
  27. 重生Schemas 系统
  28. 添加新外观
  29. 测试
  30. 光谱集成
  31. 相关软件包
  32. 许可证

@abapify/adt-schemas (中文(简体) )

version

类型安全 SAP APT 计划 从官方 XSD 定义中生成 共享类型 财务报告和审定财务报表 最佳树摇摆。 。 。 .

概览

此套件为 SAP APT( ABAP 开发工具) REST API 提供了 TypeScript schemas , 自动生成自 SAP 的官方 XSD schema 定义使用 @ abapify/ts-xsd (英语)。 。 。 .

关键特性

  • 204+ 类型脚本接口 - 预先生成的,没有运行时间推论间接费用
  • 共有类型 - 说吧 AdtObject, (中文(简体) ), LinkType等定义一次
  • 最佳捆绑 - 树能震动,只进口你需要的东西
  • 全类型安全 - XML 解析/构建的编译时间验证
  • 光谱融合 - 直接与REST合同定义有关

建筑要点

XSD Files (SAP Official)
    ↓ ts-xsd codegen
Schema Literals (as const)
    ↓ interface generator
TypeScript Interfaces (204 types)
    ↓ typed() wrapper
Typed Schemas (parse/build)

单一真相来源:所有类型定义都从XSD → TypeScript中流出,取消了手动类型维护.

安装

npm install @abapify/adt-schemas
# or
bun add @abapify/adt-schemas

快速启动

解析 ADT XML

import { classes, type AbapClass } from '@abapify/adt-schemas';

// Parse XML to typed object
const xml = await fetch('/sap/bc/adt/oo/classes/zcl_my_class').then((r) =>
  r.text(),
);
const data = classes.parse(xml);

// Full type safety - TypeScript knows all properties
console.log(data.name); // string
console.log(data.category); // 'generalObjectType' | 'exceptionClass' | ...
console.log(data.include?.[0]); // AbapClassInclude | undefined

构建 ATT XML

import { classes } from '@abapify/adt-schemas';

const xml = classes.build({
  name: 'ZCL_MY_CLASS',
  type: 'CLAS/OC',
  category: 'generalObjectType',
  final: false,
  abstract: false,
});

与 speci 合同一起使用

import { classes, configurations } from '@abapify/adt-schemas';
import { http } from 'speci/rest';

const adtContracts = {
  getClass: (name: string) =>
    http.get(`/sap/bc/adt/oo/classes/${name}`, {
      responses: { 200: classes },
    }),

  getConfigurations: () =>
    http.get(
      '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations',
      {
        responses: { 200: configurations },
      },
    ),
};

可用的外观

核心项目

司马类型说明
adtcoreAdtObject核心 ADT 对象类型
atomLinkType原子种子格式(链接,类别)
abapsourceAbapSourceObjectABAP 源代码结构
abapooAbapOoObjectABAP OO 基准类型

仓库对象

司马类型说明
classesAbapClassABAP 类元数据
interfacesAbapInterfaceABAP 接口元数据
packagesV1Package软件包/元数据

运输管理

司马类型说明
transportfindAbap运输搜索(ABAP XML 格式)
transportmanagmentCreateRootType创造交通运输
configurationsConfigurations搜索配置
configurationConfiguration单一配置

ATC (ABAP 测试舱)

司马类型说明
atcAtcWorklistATC 主计划
atcworklistAtcWorklistATC 工作清单
atcresultAtcWorklistATC结果
checklistCheckMessageList检查信件列表
quickfixesAtcQuickfixesATC 快补

调试追踪( R)

司马类型说明
logpointAdtLogpoint逻辑点定义
tracesTraces追踪数据

模板

司马类型说明
templatelinkLinkType模板链接
templatelinkExtendedTemplateLinksType扩展模板链接

类型系统

预生成接口

所有类型都是作为 TypeScript 接口预生成的,避免运行时间推导间接:

// Import types directly
import type {
  AbapClass,
  AbapInterface,
  AdtObject,
  AdtObjectReference,
  LinkType,
} from '@abapify/adt-schemas';

// Use in your code
function processClass(cls: AbapClass) {
  console.log(cls.name);
  console.log(cls.superClassRef?.name);
  cls.include?.forEach((inc) => console.log(inc.includeType));
}

共享类型

类型在各种计划之间共享- AdtObject 定义一次并重新使用:

// All these extend AdtObject
interface AbapSourceObject extends AdtObject { ... }
interface AbapOoObject extends AbapSourceMainObject { ... }
interface AbapClass extends AbapOoObject { ... }
interface AbapInterface extends AbapOoObject { ... }

类型等级

AdtObject
├── AdtMainObject
│   └── AbapSourceMainObject
│       └── AbapOoObject
│           ├── AbapClass
│           └── AbapInterface
└── AbapSourceObject
    └── AbapClassInclude

Schema 结构

每个计划都是符合W3C的XSD代表,并附有相关的进口:

// Generated schema literal (classes.ts)
export default {
  $xmlns: {
    adtcore: "http://www.sap.com/adt/core",
    abapoo: "http://www.sap.com/adt/oo",
    class: "http://www.sap.com/adt/oo/classes",
  },
  $imports: [adtcore, abapoo, abapsource],  // Linked schemas
  targetNamespace: "http://www.sap.com/adt/oo/classes",
  element: [
    { name: "abapClass", type: "class:AbapClass" },
  ],
  complexType: [
    {
      name: "AbapClass",
      complexContent: {
        extension: {
          base: "abapoo:AbapOoObject",  // Type inheritance
          sequence: { element: [...] },
          attribute: [...],
        }
      }
    }
  ],
} as const;

跨计划类型分辨率

这个 $imports 数组允许交叉schema类型分辨率 :

// classes schema imports adtcore, abapoo, abapsource
// Type "adtcore:AdtObjectReference" resolves to AdtObjectReference interface
// Type "abapoo:AbapOoObject" resolves to AbapOoObject interface

建筑

@abapify/adt-schemas
├── src/
│   ├── index.ts              # Main exports
│   ├── speci.ts              # typed() wrapper factory
│   └── schemas/
│       ├── index.ts          # Re-exports from generated
│       └── generated/
│           ├── index.ts      # Typed schema exports
│           ├── schemas/
│           │   ├── sap/      # SAP official schemas (23 files)
│           │   └── custom/   # Custom schemas (9 files)
│           └── types/
│               └── index.ts  # 204 TypeScript interfaces

生成管道

1. Download XSD     → .xsd/model/*.xsd
2. Parse XSD        → Schema objects (ts-xsd)
3. Generate Literal → schemas/sap/*.ts (as const)
4. Generate Types   → types/index.ts (interfaces)
5. Wrap with typed()→ index.ts (parse/build methods)

自定义 Schemas( ABAP XML 格式)

一些SAP端点返回ABAP XML格式(asx:abap 信封),没有官方XSD. 创建手动计划 src/schemas/generated/schemas/custom/数字 :

// schemas/custom/transportfind.ts
export default {
  $xmlns: { asx: 'http://www.sap.com/abapxml' },
  targetNamespace: 'http://www.sap.com/abapxml',
  element: [{ name: 'abap', type: 'Abap' }],
  complexType: [
    {
      name: 'Abap',
      sequence: {
        element: [{ name: 'values', type: 'Values' }],
      },
      attribute: [{ name: 'version', type: 'xs:string' }],
    },
  ],
  // ... more types
} as const; // CRITICAL: 'as const' required!

关键点

  1. as const - 需要进行类型推断
  2. 无前缀的元素名称 - 使用( I) 'abap'没有 'asx:abap'
  3. 添加到已键入的索引 - 登记在 generated/index.ts

发展

重生Schemas 系统

# Full regeneration pipeline
npx nx run adt-schemas:generate

# Individual steps
npx nx run adt-schemas:download   # Download XSD files
npx nx run adt-schemas:codegen    # Generate schema literals
npx nx run adt-schemas:types      # Generate TypeScript interfaces

添加新外观

  1. 将 XSD 添加到 .xsd/model/sap/ 或创建自定义方案
  2. 更新生成配置
  3. 运行 npx nx run adt-schemas:generate
  4. 添加打入的包装 generated/index.ts
  5. 添加测试方案 (强制性)

测试

# Run all tests
npx nx test adt-schemas

# Run specific test
npx vitest run tests/scenarios.test.ts

每个计划 必须 有真实的SAP XML固定装置的测试方案.

光谱集成

执行 Serializable 用于无缝光谱集成的接口 :

interface Serializable<T> {
  parse(raw: string): T;
  build?(data: T): string;
}

这使得REST合同能够自动进行类型推断:

import { classes } from '@abapify/adt-schemas';

const contract = http.get('/sap/bc/adt/oo/classes/zcl_test', {
  responses: { 200: classes },
});

// Response type is automatically inferred as AbapClass
const response = await client.execute(contract);
console.log(response.data.name); // TypeScript knows this is string

许可证

麻省理工学院

版本与发布记录

@abapify/adt-schemas 共发布 31 个版本,首次发布于 2026/04/21;过去 12 个月发布了 31 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.34latest2026/11/033 天前
0.4.332026/11/023 天前
0.4.322026/11/023 天前
0.4.302026/10/316 天前
0.4.292026/10/306 天前
0.4.282026/10/307 天前

关于 @abapify/adt-schemas 的常见问题

@abapify/adt-schemas 是什么?

从 SAP XSD 定义生成的 ATT XML 计划

如何安装 @abapify/adt-schemas?

在项目目录运行 npm install @abapify/adt-schemas,或使用 pnpm add / yarn add / bun add。

@abapify/adt-schemas 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@abapify/adt-schemas 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@abapify/adt-schemas 可以商用吗?

@abapify/adt-schemas 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@abapify/adt-schemas 的下载量有多少?

根据 npm 官方下载统计,@abapify/adt-schemas 在 2026/10/05 – 2026/11/03 这 30 天内被下载 6,464 次,日均约 215 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@abapify/adt-schemas 还在维护吗?

最新版本 0.4.34 发布于 2026/11/03(3 天前);至今共发布 31 个版本,其中过去 12 个月发布了 31 个;首次发布于 2026/04/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。