目标及说明
目标:
- 了解ABAP的开发过程
- 认识ABAP的开发平台
- 了解ABAP的基本语法
需求说明:
- 执行事务代码后,显示程序初始界面,提示输入姓名、出生日期;
- 输入姓名后,执行,显示信息,包含显示Hello World,输入的姓名、当前日期等;
- 程序的执行类似于其他SAP程序,通过事务代码调用。
开发实践
需求分析:
- 本实践中,输出的内容是根据输入内容变化输出的,需要通过定义的变量存储及输出变化的信息;
- 年龄、半年后的日期,需要根据输入的出生日期、当前日期进行计算;
- 当前日期、竖线、横线可通过系统变量获得。
实践步骤:
No | 步骤 | 说明 | 替代Tcode |
---|---|---|---|
1 | 建立程序 | 通过ABAP开发工作台完成程序开发的一系列工作 | - |
1.1、进入开发工作台并完成一些基本设置 | Se80-工作台 | ||
1.2、开发组织,创建开发请求、开发包用于开发代码的管理和传输 | Se09/Se10-请求、Se21-包 | ||
1.3、创建程序,设置基本属性、文本和标题 | Se38-编辑器 | ||
1.4、编写代码 | Se38-编辑器 | ||
2 | 调试程序 | 对程序进行检查、激活和测试等确保程序正常运行 | Se38-编辑器 |
3 | 发布程序 | 创建事务代码以快速调用程序 | Se93-事务 |
如上内容可以都通过Tcode:SE80完成,也可在不同步骤使用不同的事务代码。
在本实践步骤详细中,则都通过SE80完成。
1、建立程序
1.1、ABAP开发工作台
1)通过事务代码SE80进入ABAP开发工作台后的初始界面如下:
2)在较新版本如EHP7或EHP8,工作台的界面中导航栏显示的内容已可定制,定制方式为通过菜单Utilities(工具)-->Settings(设置),同时还可进行其他工具如ABAP编辑器(代码编辑)、类构建器(面向对象编程)等的设置。在本实践中工作台常规和ABAP编辑器部分设置分别如下:
工作台(常规)只选择了资源库浏览器、资源库信息系统、传输组织器:
ABAP编辑器,设置代码自动缩进及在格式优化(自动编排)时,ABAP关键字为大写,其他为小写:
1.2、开发组织
1)创建开发请求
在导航栏中选择“传输组织器”后,保持下方下拉项为默认选择(下拉项为“用户的所有可修改请求”、用户为自己的账号),下方将显示对应的信息节点,如图1-4所示:
选择最下方的“XXX的可修改请求”节点后,右键创建请求,在弹出如图1-5的窗口中选择类型和描述后点击对勾完成开发请求的创建,结果如图1-6。
1)创建开发包
导航栏中选中“资源库浏览器”后,在下方的下拉框中选择包(开发包Package),并在输入框中输入你自己的开发包名字(以Y或Z开头)如图1-7,输入后回车,将会显示创建包的提示(如图1-8),按提示选择及在如图1-9所示的新窗口中输入各属性后对勾,随后会弹出如图1-10所示的选择工作台请求的界面提示,在此界面中选择上一步骤建立的请求后点击对勾,由此完成开发包的建立。
1.3、创建程序及设置基本信息和文本标题
1)创建程序及设置基本信息
从工作台的导航栏中选择“资源库浏览器”,并保证选择的包为前面步骤创建的开发包,然后在下方窗口中选中开发包节点并右键-->创建-->程序,弹出如图1-11的建立程序的界面,输入程序名称后点击对勾:
显示的设置程序属性如图1-12,需要设置程序的类型和状态,从状态中选择为“K 客户生产程序”,完成后保存,然后将会进入程序的编辑界面如图1-13:
2)设置程序文本标题
通过菜单“转到”-->“文本元素”,设置文本符号(图1-14)、标题(图1-15),以为后续程序代码使用,选择文本则在代码完成后根据代码的变量输入。
1.4、编写代码
返回到ABAP编辑器,根据需求完成代码编写。此程序的需求,其实并不复杂,实现的代码也可以很简单很灵活,而为了考虑程序的可读性、可维护性、可更改性,简单来说是为了让代码看起来更加舒服更容易理解、以后出现变更时能更加简单等,在编写代码时会考虑其结构、注释等,而且SAP的这个ABAP开发工作台功能也非常强大,在代码编辑上也能实现高亮显示、自动缩行、大小写设置等。如下将实现好的代码进行说明:
1)程序说明部分
在程序的最开始,以注释的方式(行的首字母为*),对程序的用途、对应的项目、开发人员、开发日期、程序的变更情况、程序中使用的标题、文本、变量进行说明,以更好的理解程序。
本部分并非必须,同时不同项目不同开发,其风格也各有不同。
*&---------------------------------------------------------------------*
*& Program Name <程序名称> :ZU0101_HELLO_WORLD
*& Purpose <程序用途> :
*& Project Name <项目名称> :
*& Created By <代码编写人> :
*& Create On <创建日期> :
*& Functional Consultant <顾问> :
*& Description <功能描述> :
*----------------------------------------------------------------------*
* Modification Log <程序修改日志>
*Date Programmer Corr. # Description
*
*----------------------------------------------------------------------*
* Program Summary <程序总结>
*& Hello World ! - 第一个ABAP程序 &*
*
*列表标题:
* 我的第一个ABAP程序
*选择文本:
* MYNAME——我的姓名:
* MYBIRTH——我的出生日期:
*程序文本:
* 001——您好,世界!
*使用的系统变量:
* SY-ULINE——横线
* SY-VLINE——竖线
* SY-DATUM——当前日期
*----------------------------------------------------------------------*
2)对象定义
对程序中要使用的对象进行定义,如初始界面中要输入的姓名、出生日期,在程序处理过程中要使用的当前日期、6月后的日期、计算出的年龄,进行定义;同时在写代码时为提高可读性,会通过英文单引号“"”进行注释说明,并还注意代码中的其它各种符号,如“(”“:”“,”“.”,其都是英文字符且在代码中各有含义:
REPORT zu0101_hello_world.
*****对象定义
PARAMETERS: myname(10) TYPE c OBLIGATORY, "定义输入变量存储输入的值
mybirth TYPE d DEFAULT '19900101' OBLIGATORY.
DATA: myage TYPE i, "定义变量存储我的年龄
now TYPE d, "定义变量存储当前日期
date6ms TYPE d. "定义变量存储半年后的日期
3)变量赋值
通过获得系统变量、字符处理、计算、调用函数等,得到各变量的值以进行下一步的程序处理:
*----------------------------------------------------------------------*
*****变量赋值
now = sy-datum. "将当前日期赋值给NOW
myage = now+0(4) - mybirth+0(4). "日期变量+0(2),取得日期中的年份
"并通过年份相减计算年龄并赋值给MYAGE
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' "通过函数计算6个月后的日期
EXPORTING
date = now
days = 0
months = 6
signum = '+'
years = 0
IMPORTING
calc_date = date6ms.
4)数据输出
根据要求,通过Write进行输出,同时在有颜色要求的地方,通过format进行颜色设置。
*****数据输出
WRITE: /5 'Hello World', "WRITE输出数据,/5 换行从第5位开始输出,
"":"将WRITE语句连接至各","号分隔的各语句直到"."结束。
/5 TEXT-001, "根据程序文本输出:你好,世界!
/5(60) sy-uline, "输出长度为60的下划线
/5 '我叫',myname, ',今年', (2) myage, '岁,',
/5 '今天是', now, '!',
/5 '这是我的第一个ABAP程序!'.
FORMAT INVERSE ON COLOR COL_NEGATIVE. "设置输出颜色为红色
WRITE: /5(61) sy-uline,
/5 sy-vline, '今天的努力,必将换来明天的回报!', "输出: | 竖线~文本~竖线 |,
65 sy-vline, "没有用"/"会同一行输出
/5 sy-vline,'我相信:',
65 sy-vline,
/5 sy-vline, '半年后,也就是', date6ms, '后,',
65 sy-vline,
/5 sy-vline, '我将能成为一个合格的ABAPer!',
65 sy-vline,
/5(61) sy-uline.
如上4部分代码按顺序组合在一起,则是此开发实践的完整实现代码,输入后可通过程序美化器自动编排;最后参考1.3步骤的设置程序文本标题,设置输入时的选择文本,如图1-16,由此完成程序的开发:
(续-->2调试与发布)