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等:

类型长度范围
X1 byteAny byte values (00 to FF)
C1 character1 to 65535
N (numeric text filed)1 character1 to 65535
D (character-like date)8 characters8 characters
T (character-like time)6 characters6 characters
I4 bytes-2147483648 to 2147483647
F8 bytes2.2250738585072014E-308 to 1.7976931348623157E+308 positive or negative
P8 bytes[-10^(2len -1) +1] to [+10^(2len -1) 1] (where len = fixed length)
STRINGVariableAny alphanumeric characters
XSTRING (byte string)VariableAny byte values (00 to FF)

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

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

1.1数据类型dataTypes

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

类型描述
ACCP记帐周期 YYYYMM 6位 0小数
CHARchar类型的字符串 1 to 65535 简称C
CLNT集团 3位
CUKY货币关键字,被 CURR 字段引用
CURR货币字段,作为 DEC 存储
DF16_DECDecimal Floating Point, 16 Digits, DEC on Database
DF16_RAWDecimal Floating Point, 16 Digits, RAW on Database
DF16_SCLDecimal Floating Point. 16 Digits, with Scale Field
DF34_DECDecimal Floating Point, 34 Digits, DEC on Database
DF34_RAWDecimal Floating Point, 34 Digits, RAW on Database
DF34_SCLDecimal Floating Point, 34 Digits, with Scale Field
DATS日期字段(YYYYMMDD)用8个字符存入
DEC计数器或带有逗号和正负号的数值区
FLTP浮点数,精确到8个字节
INT11 字节整数, 整数 <= 255
INT22 字节整数,仅用于 LCHR 或 LRAW 前的长度字段
INT44 字节整数, 带符号的十进制数
LANG语言代码
LCHR长字节串,要求前面的 INT2 字段
LRAW长字节串,要求前面的 INT2 字段
NUMC只有数字的字符串
PREC一个QUAN 字段的精确
QUAN数量字段,指向带 UNIT 格式的单位字段
RAW不解释的字节排序
RAWSTRINGByte String of Variable Length
SSTRINGShort Character String of Variable Length
STRING可变长度字符串
TIMS时间栏(小时分钟键秒),作为6位字符存储
UNITQUAN 字段单元键
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 .
定义指针定义内表指针(一行),有没有表头都可以,性能比工作区好,不过不能delfield-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 code
i+=1.
endwhile.

4.3 do

do 99 times.
"your code
enddo.

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 code
catch 错误类 into 变量 .
"your code dosomething
catch 错误类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 = :c1
ENDEXEC.

这类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自动修改和新增语句,根据主键是否相同决定新增或者修改注意主键设置避免覆盖
intointo:把结果输入到相应的内表(会覆盖),一般使用结构相同的,如果不同可以使用 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实操,再而整理下项目常用的增强、批导等

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿的hello World

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值