ABAP 结构

ABAP 结构

🏗️ 结构的基本概念

定义

结构是由存储器中一个接一个存储的任何数据类型的组件组成的数据对象。

结构的特点



graph TB
    A[结构] --> B[组件1]
    A --> C[组件2]
    A --> D[组件3]
    
    B --> B1[数据类型1]
    C --> C1[数据类型2]
    D --> D1[数据类型3]

结构 vs 表

特性 结构
记录数 运行时只有一个记录 可以有很多记录
存储方式 内存中连续存储 数据库中存储
用途 屏幕字段定义、数据操作 数据持久化存储

🎯 结构的用途

1. 屏幕字段绘制

结构对于绘制屏幕字段非常有用,可以将相关的字段组合在一起:



graph LR
    A[客户结构] --> B[基本信息]
    A --> C[联系信息]
    A --> D[地址信息]
    
    B --> B1[姓名]
    B --> B2[出生日期]
    B --> B3[性别]
    
    C --> C1[电话]
    C --> C2[邮箱]
    C --> C3[手机]
    
    D --> D1[街道]
    D --> D2[城市]
    D --> D3[邮编]

2. 数据操作

结构对于操作具有由离散数量的字段定义的一致格式的数据非常有用:

  • 数据传输
  • 函数模块参数
  • 临时数据存储

🛠️ 创建结构

步骤1:启动事务

使用事务 SE11 进入ABAP字典。

步骤2:选择数据类型

在屏幕上点击”数据类型”选项,输入名称”ZSTR_CUSTOMER1”,然后点击创建按钮。

步骤3:选择结构类型

在下一个屏幕中选择”结构”选项,按Enter键,进入”Maintain / Change Structure”向导。

步骤4:输入基本信息

在结构维护屏幕中输入简短说明:

属性 说明 示例
结构名称 结构的唯一标识 ZSTR_CUSTOMER1
短文本 结构的描述 “客户结构”

步骤5:定义组件

输入组件(字段名称)和组件类型(数据元素):

组件命名规则

  • 组件名称按照SAP建议从Z开始
  • 使用有意义的名称
  • 遵循命名规范

组件类型选择

使用已经在数据库表中创建的数据元素:

组件名称 数据元素 说明
ZCUSTOMER ZCUSTNUM 客户编号
ZNAME SCUSTOM-NAME 客户姓名
ZDOB SCUSTOM-DOB 出生日期

步骤6:保存和激活

完成组件定义后,需要执行以下操作:

  1. 保存:保存结构定义
  2. 检查:检查语法和逻辑
  3. 激活:激活结构使其可用

激活过程

  1. 在激活屏幕中,结构”ZSTR_CUSTOMER1”会突出显示
  2. 点击绿色勾号按钮
  3. 状态栏显示”活动”消息

💡 结构的使用场景

1. 数据类型声明

1
2
3
4
5
6
7
* 使用结构定义变量
DATA: customer_structure TYPE zstr_customer1.

* 赋值
customer_structure-zcustomer = '1001'.
customer_structure-zname = '张三'.
customer_structure-zdob = '19900101'.

2. 函数模块接口

1
2
3
4
5
6
7
* 使用结构作为参数
FUNCTION Z_CUSTOMER_UPDATE.
IMPORTING
is_customer TYPE zstr_customer1
EXPORTING
ev_result TYPE char1.
ENDFUNCTION.

3. 屏幕字段定义

1
2
3
* 在屏幕中使用结构
CONTROLS: tc_customer TYPE TABLEVIEW USING SCREEN 0100.
TABLES: zstr_customer1.

🔍 结构的属性

结构组件

属性 描述 示例
组件名称 字段的名称 ZCUSTOMER
数据类型 组件的数据类型 CHAR, NUMC
长度 字段的长度 10, 20
短文本 组件的描述 “客户编号”

激活状态

  • 激活状态:结构已激活并可用
  • 激活日志:显示激活过程中的任何错误或警告

⚠️ 注意事项

1. 命名规范

  • 组件名称建议从Z开始
  • 使用有意义的名称
  • 避免使用保留字

2. 数据元素关联

  • 每个组件必须关联一个数据元素
  • 确保数据元素已激活
  • 组件继承数据元素的属性

3. 激活顺序

  • 先激活数据元素
  • 再激活结构
  • 确保所有引用都已激活