ABAP开发基础知识:4) 结构体(Structure)

foxting 2021-09-07 原文

      ABAP中除了简单类型之外,用户还可以在程序中定义结构体类型,将相同性质的字段进行归类,便于整理及操作。结构体不属于数据字典对象,在程序运行时会被作为临时对象创建。

      语法:

       TYPES|DATA:BEGIN OF STRUCTURE,

                           k1[TYPE type]|[LIKE obj]…,

                           k2[TYPE type]|[LIKE obj]…,

                           ……

                           kn[TYPE type]|[LIKE obj]…,

                   END OF STRUCTURE.

       或:  TYPES|DATA STRUCTURE TYPE str_type|LIKE str_dob.

      例如一个职员的信息如下:

      DATA:BEGIN OF USERINFO

               SID TYPE STRING,

               NAME TYPE STRING,

               TEL(20) TYPE C,

       END OF USERINFO.

       这样就定义好一个职员结构,ABAP中可以使用语句<Structure>-<fieldname>进行操作指字的字段(在.ENT或是JAVA中都是用操作符”.”,而ABAP却是用”-“,开始用时真有点习惯,呵)。

       USERINFO-SID =  \’A20013\’.

       USERINFO-NAME = \’KEN\’.

       USERINFO-TEL = \’XXX\’.

       用语句链输出:

       WRITE:USERINFO-SID,USERINFO-NAME,USERINFO-TEL.

       *输出结果:A20013      KEN     XXX

        结构体语法操作灵活,能够直接参考其它类型结构体来新建:

       DATA:EMPLOYEE LIKE USERINFO.

       EMPLOYEE-SID = \’FLY647\’;

       EMPLOYEE-NAME = \’SUPER\’.

       EMPLOYEE-TEL = \’SXXX\’.

       用语句链输出:

       WRITE:EMPLOYEE-SID,EMOLOYEE-NAME,EMPLOYEE-TEL.

      *输出结果:FLY647    SUPER    SXXX

 

        当然还有另外一种定义结构用TYPES关键字,笔者觉得用TYPES定义的更为灵活,就像是定义一个类一样。

        TYPES:BEGIN OF PERSON,

                  nameTYPE STRING,

                  sex(1) TYPE C,

                  age TYPE I,

         END OF PERSON.

         实例化对象:

         DATA p1 TYPE PERSON.

          p1-name = \’Obama\’.

          p1-sex = \’Male\’.

          p1-age = \’50\’.

          用语句链输出:

          WRITE:p1-name,p1-sex,p1-age.

       *输出结果:Obama   Male  50

       这样你可以多定义几个对象,而用DATA定义的结构在内存中只能存在一次,没有TYPES定义的灵活(本人经验有限,如果有不正确的地方欢迎指出)。

        

       接下来是介绍ABAP中结构的继承功能,通过参照某个已存在的结构体来创建一个属性相同的新结构体,并且可以在新建的结构体中按实际需求增加字段。定义结构体继承的具体语句为:INCLUDE STRUCTURE。参照上文中的UISERINFO结构来新建继承新的结构。

        DATA:BEGIN OF STAFFINFO. <此处是.操作符>

                 INCLUDE STRUCTURE USERINFO.

        DATA:BIRTHDAY TYPE D,

                 ADDRESS(50) TYPE C,

        END OF STAFFINFO.

        这样就完成了继承关系。

        STAFFINFO-SID = \’SKY001\’.

        STAFFINFO-NAME = \’SKY\’.

        STAFFINFO-TEL = \’010XXX\’.

        STAFFINFO-BIRTHDAY = \’2012-03-11\’.

        STAFFINFO-ADDRESS = \’BEIJING\’.

        WRITE:STAFFINFO-SID,STAFFINFO-NAME,STAFFINFO-TEL,STAFFINFO-BIRTHDAY,STAFFINFO-ADDRESS.

        *输出结果:SKY001    SKY    010XXX   2012-03-11  BEIJING.

        与变量的定义类似,结构体的初始化通过语句CLEAR来实现.

        总结:

        用DATA关键字定义的结构可以实现继承关系,而TYPES关键字定义的结构则不可以实现,在实际的编码过程中还是按具体要求做取舍。

        (由于本人经验有限,可能有很多遗漏或者错误的地方,也欢迎高手们提出,这也的我成长的来源,THANKS)

    

发表于
2012-03-11 20:43 
KenNgai 
阅读(12967
评论(1
编辑 
收藏 
举报

 

版权声明:本文为foxting原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/foxting/archive/2012/03/11/2390623.html

ABAP开发基础知识:4) 结构体(Structure)的更多相关文章

  1. 结构体

    结构体 1、结构体变量的初始化 例: #include "StdAfx.h" #include<stdi […]...

  2. JAVA SFTP文件上传、下载及批量下载 – KenNgai

    JAVA SFTP文件上传、下载及批量下载 JavaJsch  1.jsch官方API查看地址(附件为需要的j […]...

  3. JAVA SFTP文件上传、下载及批量下载 – KenNgai

    JAVA SFTP文件上传、下载及批量下载 JavaJsch  1.jsch官方API查看地址(附件为需要的j […]...

  4. DIV垂直居中对齐 – KenNgai

    DIV垂直居中对齐 效果图: CSS: #container{ display:table-cell; wid […]...

  5. JAVA SFTP文件上传、下载及批量下载 – KenNgai

    JAVA SFTP文件上传、下载及批量下载 JavaJsch  1.jsch官方API查看地址(附件为需要的j […]...

  6. JAVA SFTP文件上传、下载及批量下载 – KenNgai

    JAVA SFTP文件上传、下载及批量下载 JavaJsch  1.jsch官方API查看地址(附件为需要的j […]...

  7. 如何定义一个自带数据区的结构体:三种数据结构体的比较

    先看如下三个结构体的定义 这三个结构体的前三个成员都相同,前两个成员只是为了充个数,从而让我们定义的struc […]...

  8. ABAP开发基础知识:5) 内表(Internal Table)

    ABAP开发基础知识:5) 内表(Internal Table)     内表与结构体基本类似,它同样是程序运 […]...

随机推荐

  1. Java微信公众平台开发(十二)–微信JSSDK的使用 – g歌德a

    Java微信公众平台开发(十二)–微信JSSDK的使用 在前面的文章中有介绍到我们在微信web开发 […]...

  2. 显卡故障维修实例

     电脑中由显卡引起的硬件故障还是很多的,下面就是我们在实践中所遇到的几例显卡引起的电脑故障,将它写出来,希望对 […]...

  3. web前端零基础要学多久,学习路线是什么?

    大家都知道,如今是一个信息爆炸的时代,是一个互联网的平台。现在基本上各行各业都会涉及到一点web前端的知识。无 […]...

  4. 业务架构、信息架构、技术架构三位一体,互联网营销 – 狼人:-)

    业务架构、信息架构、技术架构三位一体,互联网营销 2011-09-02 20:13  狼人:-)  阅读(22 […]...

  5. 敏捷开发:代码Review

    热情高涨 代码走查作为一种流程形式,起初大家的参与热情非常高涨。 因为,自己可以学习到别人一些巧妙的思想,自己 […]...

  6. 软路由OpenWrt(LEDE)2020.5.10更新 UPnP+NAS+多拨+网盘+DNS优化

    近期更新:2020.05.10更新-基于OpenWrt R2020.5.9版本,源码截止2020.05.10。 […]...

  7. 常见的软件测试方法及汇总

    按测试设计方法分类 黑盒测试(Black Box)   测试内容:黑盒测试是把测试对象看做一个黑盒子,利用黑盒 […]...

  8. linux一键安装mysql脚本

    #!/bin/sh if [ -s /etc/my.cnf ];then rm -rf /etc/my.cnf […]...