SAP编程中最基本的概念

abap编程的语句(statement)功能和样子上与java语言没什么重大区别,所以很多学习其他语言的程序员看了一些abap语言环境下的report代码后,会认为abap的语法可以直接上手,很容易推测语句的含义和语法的用法。
事实上,我们在学习abap语言的过程中,作为一个严谨的专业人士,我们还是应该看官方资料,将abap编程的基本概念屡清楚。
我们回忆一下java语言环境下的编程,我们使用eclipse编写java源文件的代码,
1.java基本类型(int long string之类的)
2.java内置容器类型(LIST VECTOR之类的)
3.自定义PO(基本类型、内置容器的组合,带有get set方法的PO)
4.DAO 文件(数据库操作基本方法,不带有业务含义的方法)
5.service 文件(带有业务含义的方法)
从上述描述我们知道,编程的过程必须会涉及到:使用基本类型,创建自定义数据类型,声明变量or对象,实例化变量or对象,然后在方法中使用变量和对象。
我们的abap编程百分之一百也会有这个过程。
比如我们看下面一段代码:

TYPES: BEGIN OF ty_tab,
         ebeln   TYPE ekko-ebeln,
         ebelp   TYPE ekpo-ebelp,
         verkf   TYPE ekko-verkf, "
         matnr   TYPE ekpo-matnr, "
         maktx   TYPE makt-maktx, "
         datum   TYPE sy-datum,
         ktmng   TYPE ekpo-ktmng, "
         lifnr   TYPE lfa1-lifnr,
         name1   TYPE lfa1-name1,
         werks   TYPE ekpo-werks, "
       END OF ty_tab.
DATA: gt_tab TYPE TABLE OF ty_tab.
DATA: ls_tab LIKE LINE OF gt_tab.

我们在abap编程过程中常常会写上面的语句,或者经常复制粘贴上面的语句,久而久之就机械的习以为常。
上述语句貌似干了三件事:
1.创建了一个内表吧?TY_TAB,不对好像只是一个结构而已
2.创建了一个内表吧?应该是
3.创建了同内表结构一毛一样的结构吧?用来在代码中临时存一条数据用。
我们往往就这样囫囵过去了。
实际上,上述代码的解释,就是abap编程中,有关于创建类型创建对象的基本功。
这些基本功,不应该通过百度去学习,不应该通过看别人博客,看二道贩子的知识去学习。我们应该直接去看官方资料,解释最基本的基本功。
看哪个官方资料?
这里我就推荐training course和ABAP keyword documentation
我们的abap代码,简单的代码,最终一定会用到内表,比如用内表存储数据,然后用alv显示内表中的数据。
什么是内表?
内表只是中文翻译,不科学而且有歧义,内表的学名叫做【internal table】
内表的本质是什么?
其实不用我来废话,sap又不是我的作品,我在这里矫揉造作装成大师,有必要么?没有必要
直接看abap keyword documentation,自己看,就能看懂
image
我还是解释下
【内表的本质是data object 】就这句话,如果没人告诉你,我只能说非蠢既坏。
abap 编程中最重要的两个概念就是data type 和data object
我们编写代码中创建的内表的本质,就是个对象,面向对象的对象。内表不是类型,内表是对象,生动吧。
那么我们都是学习过面向对象编程的人,我们都知道对象的创建基于类型,自己定义个CLASS然后new一个对象,都是这么搞的。
那么在abap的世界中,我们怎么搞?
abap中的internal table相当于你在java中new出来的对象,那么abap中的class在哪里?泛泛的说,abap中的class就是data type
什么是data type?
这时候就不得不提到BC400了,作为一个abap开发,没看过BC400就是个笑话,还是个不怎么好笑的笑话。
image
在SAP中有三类data type: predefined elemantary type / local data type /global data type
BC402中有一个很好的图
image

elemantary type 就是abap中的基本数据类型
local data type 就是你在具体的某一个abap程序中,最开始用types关键字创建的类型
global data type就是你在编程以前,用SE11在abap dictionary预先创建的structure或者transparent table

看了我复述pa教材的内容,是不是豁然开朗?没有?我给你解释下
我们本文之前的代码,本质上就是先定义了一个local data type,然后用这个data type创建了data object。明白了吧?这就是官方解释。

我们现在提出一个任务:为了执行COLLECT语句(statement)我们要创建一个内表,这个内表必须拥有某几个固定的key,然后对于non-key的numeric字段进行累计。
经过之前的学习,我们必须有这种意识:
创建内表的前提是必须拥有data type,这个data type可以是SE11预先定义的global data type也可以是程序一开始预先定义的local data type
然后我们看需求,要求内表必须拥有key,这是什么意思?
看来我们需要一起去学习内表的基础知识了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值