# @abapify/adt-schemas 中文文档

规范地址：https://npmcn.com/package/%40abapify/adt-schemas/

版本：0\.4\.34
npm 元数据更新时间：2026-11-02T23:20:00.607Z
中文译文更新时间：2026-11-06T02:23:03.573Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40abapify/adt-schemas
原文对照：https://npmcn.com/package/%40abapify/adt-schemas/?lang=original
项目主页：https://github.com/abapify/adt-cli/tree/main/packages/adt-schemas#readme
源码仓库：https://github.com/abapify/adt-cli

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：745 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-04-20T21:10:52.565Z
- 最新版本发布：2026-11-02T23:20:00.200Z
- 近 30 天下载量：6464（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：31（近 12 个月 31 个）

## 中文简介

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

## 安装

```sh
npm install @abapify/adt-schemas
```

也可以使用：`pnpm add @abapify/adt-schemas`、`yarn add @abapify/adt-schemas`、`bun add @abapify/adt-schemas`

## README

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

[![version](https://img.shields.io/github/package-json/v/abapify/adt-cli?filename=packages/adt-schemas/package.json)](https://github.com/abapify/adt-cli/pkgs/npm/%40abapify%2Fadt-schemas)

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

## 概览

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

### 关键特性

-   **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中流出,取消了手动类型维护.

## 安装

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

## 快速启动

### 解析 ADT XML

```typescript
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

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

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

### 与 speci 合同一起使用

```typescript
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 },
      },
    ),
};
```

## 可用的外观

### 核心项目

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `adtcore` | `AdtObject` | 核心 ADT 对象类型 |
| `atom` | `LinkType` | 原子种子格式(链接,类别) |
| `abapsource` | `AbapSourceObject` | ABAP 源代码结构 |
| `abapoo` | `AbapOoObject` | ABAP OO 基准类型 |

### 仓库对象

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `classes` | `AbapClass` | ABAP 类元数据 |
| `interfaces` | `AbapInterface` | ABAP 接口元数据 |
| `packagesV1` | `Package` | 软件包/元数据 |

### 运输管理

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `transportfind` | `Abap` | 运输搜索(ABAP XML 格式) |
| `transportmanagmentCreate` | `RootType` | 创造交通运输 |
| `configurations` | `Configurations` | 搜索配置 |
| `configuration` | `Configuration` | 单一配置 |

### ATC (ABAP 测试舱)

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `atc` | `AtcWorklist` | ATC 主计划 |
| `atcworklist` | `AtcWorklist` | ATC 工作清单 |
| `atcresult` | `AtcWorklist` | ATC结果 |
| `checklist` | `CheckMessageList` | 检查信件列表 |
| `quickfixes` | `AtcQuickfixes` | ATC 快补 |

### 调试追踪( R)

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `logpoint` | `AdtLogpoint` | 逻辑点定义 |
| `traces` | `Traces` | 追踪数据 |

### 模板

| 司马 | 类型 | 说明 |
| --- | --- | --- |
| `templatelink` | `LinkType` | 模板链接 |
| `templatelinkExtended` | `TemplateLinksType` | 扩展模板链接 |

## 类型系统

### 预生成接口

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

```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` 定义一次并重新使用:

```typescript
// 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代表,并附有相关的进口:

```typescript
// 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类型分辨率 :

```typescript
// 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/`数字 :

```typescript
// 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 系统

```bash
# 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.  **添加测试方案** (强制性)

### 测试

```bash
# Run all tests
npx nx test adt-schemas

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

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

## 光谱集成

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

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

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

```typescript
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/ts-xsd (英语)](https://npmcn.com/package/%40abapify/ts-xsd)** - 核心 XSD 解析器和类型推论
-   **[光谱](https://npmcn.com/package/%40abapify/speci)** - REST合同图书馆

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

