SAP学习笔记 - 自定义数据结构

ABAP中可以自己定义数据结构。
- Field String
Field String是一种变量,等价于SAP中DDIC的一种结构,但是是在ABAP中定义的,像结构一样,他有自己的数据结构。
有两种方法可以定义这样的一个数据结构:Data或者Table。
Data方法定义就是列出这个Field String的各个数据及其类型,甚至是值来定义。以下是一个典型的定义:
--------------------------------------------------
1 report ztx0802.
2 data: begin of totals_1,
3 region(7) value 'unknown',
4 debits(15) type p,
5 count type i,
6 end of totals_1,
7 totals_2 like totals_1.
8
9 totals_1-debits = 100.
10 totals_1-count = 10.
11 totals_2-debits = 200.
12
13 write: / totals_1-region, totals_1-debits, totals_1-count,
14 / totals_2-region, totals_2-debits, totals_2-count.
--------------------------------------------------
上面的定义中,在begin of xxx和end of xxx中间的部分就是totals_1的结构定义。
这里需要注意的是,我们定义的是一个实例,这个实例已经可以用来存储数据了,而不是一个模板,需要去初始化出一个实例。
而ABAP最方便的地方就是可以使用like关键字,来声明一个和已经在使用的实例结构一样的另一个实例。
我们同样也可以在一个实例中加上另一个实例。如下:
--------------------------------------------------
2 data: begin of names,
3 name1 like ztxkna1-name1,
4 name2 like ztxkna1-name2,
5 end of names.
6 data: begin of cust_info,
7 number(10) type n,
8 nm like names, "like a field string
9 end of cust_info.
---------------------------------------------------
或者去include一个实例:
---------------------------------------------------
2 data: begin of names,
3 name1 like ztxkna1-name1,
4 name2 like ztxkna1-name2,
5 end of names.
6 data begin of cust_info,
7 include structure names,
8 data: number(10) type n,
9 end of cust_info.
---------------------------------------------------
这里我们来介绍一下使用include和使用like的不同的地方。他们都可以把一个实例加载到另一个实例里面,不同的是,在调用的时候,用include加载的实例里面的各个字段是和父实例平级的,而Like加载的会低一级,如下:
----------------------------------------------------
write /cust_info-nm-name1. ;第一种情况
write /cust_info-name1. ;第二种情况
----------------------------------------------------
注意,调用自己的子字段的时候,不同于其他语言的"."或者"->",ABAP使用"-"。

table来声明一个Field string则是我们第一次总结过的,使用table来连结数据库表,并且声明一个和那个数据库表结构一样的Field String,然后使用一个select...end select语句,就可以遍历其中的数据了。
这里需要注意的是table的可见性,也就是我们如果使用了table关键字来声明,这个Field String不仅可以被自己的过程看到,而且可以被整个程序看到,而且可以被其他程序看到,也就是说table声明的Field String是Globle并且External的。这样,Table声明的Field String会在全局中共享一块内存。

- 自定义类型
这里的类型是模板。而且是只一个字段的类型,如types char2(2) type c.这句话声明了一个叫做char2的类型,其实是一个长度为二的字符,可以存放两个字符。
types也可以使用以下方法定义types t1 like v1.

-自定义结构类型
这里的结构类型就是一个结构的模板。

-自定义类型组(Type Groups)
Type Groups就是在DDIC里面定义的一些类型或者常数的声明。使用type-pool关键字可以调用这些组,并在不同的程序里面共享这些类型和常数。

感谢您关注我的个人博客!
为了您的更好的阅读和留言,建议您注册用户,这样您可以获得更大的权限,以及更方便的留言。
注册只需要一分钟的时间。但是您需要提供您的邮箱。注册后,密码会自动发到您的邮箱,请在第一次登录时修改。
我承诺不会将您的Email泄露给他人,或者发送垃圾邮件。

用户登录

我的微博

feedsky
抓虾
google reader
my yahoo
newsgator
bloglines
鲜果
哪吒
有道
QQ邮箱
九点
帮看