博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABAP项目砖家之旅-语法和开发对象篇
阅读量:4091 次
发布时间:2019-05-25

本文共 8745 字,大约阅读时间需要 29 分钟。

ABAP项目砖家之旅-语法和开发对象篇


前言

<font color=#999AAA 上一节总体上介绍了ABAP语言和简单的语法,这一节将按照abap开发的对象来介绍具体的用法和语法等,方便项目快速检索,当然一般初学者会搞一本厚厚的abap语法教程,这里只是提供快速入手的一种方式,希望对你们有用

还有,这个章节实在太长,我只能写个标题,定期整理和更新内容了。这个靠自己整理,我也想复制粘贴啊


一、基本语法

先上个基本语法,登录sapGUI,在命令栏输入SE38

在这里插入图片描述
输入程序名,点击新建,选择本地对象
在这里插入图片描述
在这里插入图片描述
注意:所有abap对象新建后保存,都会弹出下面对话框,测试的时候可以选择本地对象,非测试的程序需要选择类、传输TR等用于传输到测试、生产系统的对象。后面详细介绍,这里暂都用本地对象
在这里插入图片描述

下面在这个程序测试所有语法

(一)断句
1.程序语言跟语文有类似地方,说完一句话肯定需要标点符号断句。abap也是一样,程序是由上往下顺序执行,遇到调用FORM(定义的方法)会调到定义地方,执行完回来当前行继续执行
2.语句断句符号是".",大写的点号。(java等喜欢用分号“;”,abap有点特殊)
3.abap语言区别java,是不分小写的(大小写一样,建立表等都是大写的,小写要特殊设置才能支持)
4.输出代码是:write
5.其他语法常用的双引号的地方,abap一般用单引号:

DATA: L_STR TYPE CHAR10.L_STR = '0010000001'. "JAVA等使用双引号定义string等,sap使用单引号,因为双引号已经有注释的作用

6.注释

(1)abap使用大写左双引号+注释内容:

write '右边文字注释不显示'. "这是注释

(2)行开头定格使用*注释整行:

* write '整行注释,显示不出来'WRITE '可以显示'.

7.简单的去零(前导零)

WRITE '00000000990' NO-ZERO. "去零

8.跳过行:一行-skip ,多行-SKIP INT:

WRITE '1' .SKIP.WRITE '2'.WRITE 'NO SKIP 对比:'.WRITE '1' .WRITE '2'.WRITE 'SKIP 5行对比:'.WRITE '1' .SKIP 5.WRITE '2'.

9.消息显示:

(1)消息类型:
E-错误,错误信息,显示后abap中断
S-成功,显示成功信息,不影响后续代码
W-警告,显示警告信息,往往需要用户点击回车后才会继续执行后续代码
I-信息,显示提示信息,往往需要用户点击回车后才会继续执行后续代码
A-取消,提示后直接取消使用者当前的事务(少用)
X-终止,提示终止文本后终止程序生成abap短缓存(少用)
(1)简单的自定义文本消息:MESSAGE ‘消息自定义文本’ TYPE ‘类型’ ,
(2)显示系统的信息:
se91创建MESSAGE对象:ZMSGTEST1 : 000 姓名由 (姓&)+(字辈&)+(名&)组成

*MESSAGE 消息类型+对象ID WITH '&变量1' '&变量2' ... MESSAGE I000 WITH 'wang' 'lao' '5' .

(3)指定显示模式:MESSAGE ‘文本’ TYPE ‘E’ DISPLAY LIKE ‘I’ . "强行把E类型显示为I类型,后面代码也是会根据E类型影响中断

以上是通用的基础语法,当然语法方面还有字符创处理等代码,熟悉后可以自行找专题资料学习。

二、开发对象及其语法

1.底层数据类型

类似java的string char等,abap有int char等基础数据类型,abap最底层的数据类型类似java有I/C/STRING等:

类型 长度 范围
X 1 byte Any byte values (00 to FF)
C 1 character 1 to 65535
N (numeric text filed) 1 character 1 to 65535
D (character-like date) 8 characters 8 characters
T (character-like time) 6 characters 6 characters
I 4 bytes -2147483648 to 2147483647
F 8 bytes 2.2250738585072014E-308 to 1.7976931348623157E+308 positive or negative
P 8 bytes [-10^(2len -1) +1] to [+10^(2len -1) 1] (where len = fixed length)
STRING Variable Any alphanumeric characters
XSTRING (byte string) Variable Any byte values (00 to FF)

2.数据表、视图、数据元素、数据域、数据类型

事务代码SE11,可以创建和调整

1.1数据类型dataTypes

底层的数据类型按照某些规律如限制长度、组合成结构等就组成abap的数据类型(data types)。这里先介绍SE11基础数据类型:

类型 描述
ACCP 记帐周期 YYYYMM 6位 0小数
CHAR char类型的字符串 1 to 65535 简称C
CLNT 集团 3位
CUKY 货币关键字,被 CURR 字段引用
CURR 货币字段,作为 DEC 存储
DF16_DEC Decimal Floating Point, 16 Digits, DEC on Database
DF16_RAW Decimal Floating Point, 16 Digits, RAW on Database
DF16_SCL Decimal Floating Point. 16 Digits, with Scale Field
DF34_DEC Decimal Floating Point, 34 Digits, DEC on Database
DF34_RAW Decimal Floating Point, 34 Digits, RAW on Database
DF34_SCL Decimal Floating Point, 34 Digits, with Scale Field
DATS 日期字段(YYYYMMDD)用8个字符存入
DEC 计数器或带有逗号和正负号的数值区
FLTP 浮点数,精确到8个字节
INT1 1 字节整数, 整数 <= 255
INT2 2 字节整数,仅用于 LCHR 或 LRAW 前的长度字段
INT4 4 字节整数, 带符号的十进制数
LANG 语言代码
LCHR 长字节串,要求前面的 INT2 字段
LRAW 长字节串,要求前面的 INT2 字段
NUMC 只有数字的字符串
PREC 一个QUAN 字段的精确
QUAN 数量字段,指向带 UNIT 格式的单位字段
RAW 不解释的字节排序
RAWSTRING Byte String of Variable Length
SSTRING Short Character String of Variable Length
STRING 可变长度字符串
TIMS 时间栏(小时分钟键秒),作为6位字符存储
UNIT QUAN 字段单元键
VARC 长字符串,从版本 3.0 起不再支持

1.2数据域dataDomain

SE11-dataDomain-新建

在这里插入图片描述
这里需要注意的是:sign-勾选支持负号,LowerCase-勾选后支持小写否则都是会自动大写
在这里插入图片描述
创建完毕,记得激活(SAP所有开发内容都要激活后才能使用,下同,请务必记住)
在这里插入图片描述

1.3数据元素dataElement

SE11-数据类型-新建:选择dataElement

在这里插入图片描述
选择数据域作为数据元素的元素类型
在这里插入图片描述
填写长短显示的文本,后面激活即可
在这里插入图片描述
有心的朋友可能留意到FurtherCharacteristics tab为什么没介绍,这个是搜索帮助等配置,留到后面

1.4数据表

上面dataElement-dataDomain定义的其实是数据表的列的字段类型,现在可以新建表了(当然也可以使用基础数据类型作为列字段类型建表,不过abap不太建议直接使用基础数据类型,因为很多控件和屏幕可能不会支持,例如tring类型,控件无法显示也无法选择值)

SE11-透明表-新建
在这里插入图片描述
点击Fields tab,添加列字段和数据元素(SAP默认使用数据元素、数据域定义表,但也可以点击 PredefinedType直接使用char等基础数据类型定义表,只是有些sap控件不支持,所以不太鼓励)
在这里插入图片描述
如果是数量、金额等财务数据,还需要填写下面的tab,这里建议可以找类似的财务表字段参考填写,不用问原因了
在这里插入图片描述
点击工具栏的“技术设置”:在这里插入图片描述

在这里插入图片描述

最后还是保存和激活,激活有黄色的警告,一般不用理会,入门后可以建立增强字段这样黄色警告都不会有了。

1.5数据视图

SE11-view-新建,分为四种视图

在这里插入图片描述

数据库视图:跟数据库的视图一样,使用数据表关联建立的视图,只能inner join关联
投影视图:类似上面,使用out join形式关联
维护视图:可以用来维护关联表的视图(一般可以在SE16N直接打开或者在SM30维护)
帮助视图:类似domain里面的域值,建立后数据表的FurtherCharacteristics tab里面维护后,就可以点击打开搜索帮助来选择具体的值(F4/F1)
视图功能相对简单这里不详细说明,帮助视图和维护视图后面会有相关章节说明

2.常量、变量、内表和文本

2.1常量

CONSTANTS 变量名 TYPE abap数据类型 VALUE ‘值’ 。

常量跟变量的区别:常量是一般不打算修改的全局常数,但如果修改一处则所有引用的地方的值都变;变量是引用的地方都可以分别赋值,赋值不同,该一个地方其他已经引用的不会随时改变

2.2变量

DATA <变量名>(长度) TYPE <数据类型> VALUE <默认值>.

TYPE-abap数据类型(前面SE11建立的那些),根据不同对象可以用LIKE(参考),REF TO-类。
另外修饰TYPE LIKE后面可以连接 LINE OF -定义行、工作区 TABLE OF-定义内表。
多个变量可以使用:DATA: <变量名2>(长度) TYPE <数据类型> VALUE <默认值>, <变量名2>(长度) TYPE <数据类型> VALUE <默认值>
清空变量可以使用:CREAL:变量名

2.3内表和结构

内表方面的知识是一个重点,可以作为一个章节一一介绍才能透彻点,大家可以网上找找abap内表详解这类。所以这里只是整理一下项目中内表的常用操作。

操作 描述 代码举例
定义内表 定义内表 1.types:begin of ty_tb,…end of ty_tb . data:lt_tb type table of ty_tb . 2. data:lt_tb type table of 透明表
定义工作区 定义内表的工作区(行),条件是内表必须包含表头 data:wa_tb like line of lt_tb .
定义指针 定义内表指针(一行),有没有表头都可以,性能比工作区好,不过不能del field-symbol: like line of lt_tb
表循环 逐行循环表 loop at lt_tb . .修改、删除等操作和汇总到别的内表等… end loop .
添加行 向内表添加行,或者多行 append wa_tb to lt_tb .append lines of lt_tb1 to lt_tb
修改行 修改内表的行数据 方法一:loop at lt_tb into wa_tb . wa_tb-列 = 值 .modify lt_tb from wa_tb . 方法二:loop at lt_tb ASSIGNING . -列 = 值 ."不用modify,因为直接修改内表的指针
删除行 删除内表的某行 类似修改行,在循环里面使用内表删除工作区行即可:delete lt_tb from wa_tb
内表更新透明表 定义跟透明表结构一样的内表,使用该内表更新透明表相应的行 data:lt_tb type table of mara . lt_tb赋值. modify mara from lt_tb

结构可以简单理解为内表的一行。它只有表头结构+一行数据组成。多用于函数、接口等需要配置固定出入口参数的场景使用。

2.4文本

一般report类abap程序都可以通过菜单:“转到”——“文本元素”——“选择文本”/“清单标题”/文本符号,去定义该程序使用的文本。

在这里插入图片描述

2.4.1 清单标题

在这里插入图片描述

可以使用TEXT-sym来使用,例如使用T01文本,可以使用TEXT-T01。可以作为write、alv的fieldcat的文本

2.4.2 选择文本

主要是定义了select-options、parameters控件,就能自动生成,可以修改成自己需要的文本,可以直接勾选系统生成

在这里插入图片描述

2.4.3 文本符号

write类语法会用到,目前我们多数使用dynpro屏幕或者alv,所以很少用文本符号


3.运算符号

分类 描述 代码/符号
1.比较 大小比较,条件比较 =/EQ-等于, <>/NE-不等于, GT/>-大于,LT/<-小于,GE/>=-大于等于,LE/<=-小于等于
2.运算 数值运算 ±加,-减,*-乘,/-除 mod-求余数 ,**-乘方
3.逻辑 逻辑是否等 AND-且,or-或者,not-非,!-非
4.字符运算 字符类包含等 CO-包含,CN-不包含;CA-任意包含,NA-不包含任意一个;CS-包含整个字符,NS-不包含整个字符;CP-包含字符(可以间隔开),NP-不包含(任意间隔开)

4.循环语法

4.1 loop

loop at ."行数据处理代码endloop.

4.2 while

data i type i.while i <99."your codei+=1.endwhile.

4.3 do

do 99 times."your codeenddo.

5.字符串

字符串相关处理函数整理如下:

1.字符串的包含运算:可以参考 3.运算符号-字符运算
2.字符连接:
CONCATENATE str1 str2 str3 into str4.
str4 = str1 & str2 & str3 & str4 .
3.位置:str+开始位置(位数):data:str(10) type c.str = ‘12345678a’ . write str+0(2) . "12
4.获取长度:strlen( str )
5.分隔:splite str at ‘符号’ into str1 str2
6.查找:find first/last/all occurent of str
7.替换:replace str with ‘’ into str1 length 2.
8.去零:shift str left deleting leading ‘0’.
9.消除间隔:condense str no-graps.
10.转换大小写:TRASLATE str UPPER/LOWER CASE
11.转换类型:CONVERT

6.日期和时间

日期和函数有加减天数、月份、年份等,都有sap标准函数处理。直接给网址吧:http://www.sapjx.com/abap-datetime-function.html

7.异常处理

7.1 被动异常处理

一般使用sy-subrc是否为0来区分异常,如果不为0则进行异常处理

CALL FUNCTION 'DD_DOMVALUES_GET'      EXPORTING        DOMNAME        = 'ZYZZT'        "域名        TEXT           = 'X'        LANGU          = SY-LANGU      IMPORTING        RC             = LV_RETURN      TABLES        DD07V_TAB      = I_DOM_APSTT      EXCEPTIONS        WRONG_TEXTFLAG = 1        OTHERS         = 2.    IF SY-SUBRC <> 0."被动异常处理,按照标准的msg类型抛出      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.    ENDIF.

7.2 try主动捕捉异常处理

try ."your codecatch 错误类 into 变量 ."your code dosomethingcatch 错误类2 into 变量2."your code

可以自己错误类具体有哪些内容,参考高手文章,整理成自己常用的:

https://blog.csdn.net/precipitant/article/details/42295387

8.锁

可以在SE11上面建立表的锁对象。ABAP锁模式分为

在这里插入图片描述
其中比较重要的是:
S锁-共享锁(中文德文翻译不同shared /read lock)——修改时,其他人不能访问(读、写),同一时间不同用户加锁,不能跟其他排他类型叠加
E锁-write lock修改时候,其他人可以查看,但是不能修改。同一时间同一用户可以叠加,二同一事务代码内E/S可以叠加
X锁-写入但不叠加的锁——同一时间不能叠加,同一事务也是只有一次加锁机会
在这里插入图片描述
可以添加关联的表和指定具体需要锁定的字段:如果不指定则锁定整个表,锁定后锁定字段相同的记录(类似主键)
在这里插入图片描述

9.功能模块FUNCTION MODULE

事务码:se37,按照是否标准函数,可以分为BAPI、普通函数,按照是否能远程调用可以分为RFC和非RFC。主要有如下几个tab:

在这里插入图片描述

Import:入口参数,输入供函数调用和运算的变量/结构
在这里插入图片描述
Export:出口参数,用于执行函数后输出的参数/结构
在这里插入图片描述
Changing:执行函数后,改变的值(类似输出)
Tables:内表变量,可以同时作为输入和输出变量(只有这里才能设置内表变量,其他只能设置结构和单个变量)
Exceptions:错误处理变量
Source Code:源代码,这个函数的abap代码

10.类

事务码:SE24,可以定义类,方便在abap代码中实现面向性开发。类似java。因为项目中用的比较多的都是标准类和复制类,用起来有点复杂,篇幅不少这里暂不详细说明

11.SQL

11.1 native sql(本地sql)

使用特殊标记插入本地sql:

data:c1 type mara-matnr value '123'.EXEC SQL PERFORMING lt_tb ."返回表select * from mara where matnr = :c1ENDEXEC.

这类sql一般都是oracle、msssql等标准数据库的sql,没有sap技术优化已经在sap淘汰,用的比较少,十多个join这类语句可以尝试,否则一般使用open sql

11.2 open sql(abap sql)

篇幅较长,这里整理成表格

项目 主要功能点 说明
select 选择语句一般添加具体的字段名,遇到名称跟内表不同可以使用select as改为需要的字段名
insert 插入语句 insert into 透明表 from 行(工作区)
update 更新语句 update 透明表 from 行(工作区)
delete 删除语句 delete 透明表from 行(工作区)
modify 自动修改和新增语句,根据主键是否相同决定新增或者修改 注意主键设置避免覆盖
into into:把结果输入到相应的内表(会覆盖),一般使用结构相同的,如果不同可以使用 into corresponding;append into 新增到内表; 有append不会覆盖,注意是否会重复
from 表名,如果多个表联立查询可以使用as 透明表/视图
for all 联立内表 后面7.5新语法可以直接join内表,可能会替代for all;如果for后面内表为空则会显示所有记录要注意宕机
join联立查询 可以多个表联立查询 注意字段的元素位数是否相同,否则join起来会出问题
where条件 1.range类使用in 2.可以使用=<>等运算符 open sql可以使用字段+开始位置(位数)作为where条件

总结

以上就是今天要讲的内容,里面没提到的后面补充相应的专题。下一步计划是整理下report screen + alv实操,再而整理下项目常用的增强、批导等

你可能感兴趣的文章
无套路、无噱头,只送惊喜!
查看>>
神操作!一行代码搞定一款游戏?厉害了程序员!
查看>>
Python太火了,这招教你3天入门!
查看>>
BAT架构师技术文档:Redis+Nginx+Dubbo精选+面试题+架构师精选视频(免费领)
查看>>
编程知识比拼第十九场丨编程考试
查看>>
编程知识比拼第二十场丨编程考试
查看>>
编程知识比拼第二十一场丨编程考试
查看>>
免费领!AI面试:机器学习+深度学习+计算机视觉(附答案)
查看>>
编程知识比拼第二十二场丨编程考试
查看>>
推荐Python十大经典练手项目,让你的Python技能点全亮!
查看>>
号称简单易学的Python,却在狠狠打击着程序员们!
查看>>
编程知识比拼第二十三场丨编程考试
查看>>
GitHub Star 破万!3w 多人追更,这个 Java 框架你不会还不知道怎么用吧...
查看>>
GitHub Star 破万!3W多人追更,这个 Java 框架你不会还不知道怎么用吧...
查看>>
刷爆技术圈的《知识图谱》终于补货了,最后 968 份,低至 2 折,抢完不补!...
查看>>
谷歌第一编程语言年度榜:没想到这么简单!
查看>>
编程知识比拼第二十四场丨编程考试
查看>>
想学Java的你,来看看这20个实战项目!
查看>>
编程知识比拼第二十五场丨编程考试
查看>>
为什么越厉害的大厂,校招越不看重考试成绩?
查看>>