ABAP学习之旅——多种方式建立模块化功能
在ABAP中。有多种方法能够建立模块化的功能。
以下依次对其种三种进行介绍。
一、 使用子程序(Subroutine)
1. 基本的语法:
FORM subname. …… ENDFORM. 定义子程序的方式
调用的时候使用PERFORM subname.就可以
2. 关于參数的定义
主程序中的子程序能够改变主程序中定义的变量(由于是全局可见的)
有三种參数传递的方法:
①call by value:传递的是一个变量的备份(copy)。对该变量的更改不会影响主程序中变量原始值
用法:在USING声明下,VALUE(f)
②call by value and result:传递的也是一个变量的备份(copy),可是对它的改动会返回给主程序中,而且覆盖原来的值。也就是会改动原来的变量值
用法:在CHANGING声明下,VALUE(f)
③call by reference:传递的是一个变量的引用,也会改变主程序中的变量值
用法:在CHANGING声明下。f
子程序代码演示样例:
TYPES gty_perc TYPE p DECIMALS 2. //这里通过TYPES自己定义一个类型
DATA: gv_int1 TYPE i,
gv_int2 TYPE i,
gv_result TYPE gty_perc.
PERFORM calc_perc
USING
gv_int1
gv_int2
CHANGING
gv_result.
FORM calc_perc
USING
value(pv_act)TYPE i
value(pv_max)TYPE i
CHANGING
value(cv_pc)TYPE gty_perc.
DATAlv_pc TYPE p LENGTH 16 DECIMALS 1.
lv_pc= pv_act * 100 / pv_max.
cv_pc= lv_pc.
ENDFORM.
这里不用定义返回值,由于CHANGING的含义就是对主程序中的值进行改动
什么时候用call by value andresult,什么时候用call by reference?
设定了參数的TYPE之后,假设传进来的參数类型不匹配,会报error
在子程序中也能够定义变量(如上面的lv_pc)。子程序中定义的变量是本地的。仅仅能在当个子程序中使用。比方数值大小的比較。可能须要在子程序中定义一个本地暂时变量用来存放暂时数据。
二、使用function module
创建function module后各个tab的含义
1. Import:这里放的是Import Parameter,是主程序传入function module的參数
2. Export:存放Export Parameter,是从function module中返回的结果
3. Changing:类似于subroutine中的changing,存放须要有functionmodule改变原始值的參数
4. Source code:用于编写function module的源码,来实现函数的逻辑
5. Excepotion:编写异常处理(实际操作中截图)
编写好function module后,能够直接执行改程序进行function module的性能測试。測试界面第一个screen上能够输入Import的数值,点击执行后。第二个screen给出返回值
在主程序中,点击上方的patternbutton。在CALLING FUNCTION输入框中输入想要调用的function module名就可以调用。或者进行拖拽形式的调用。
Function module调用演示样例代码:
CALL FUNCTION ‘ZBC_POWER’
EXPORTING
iv_base = pa_int1
iv_power = pa_int2
IMPORTING
ev_result= gv_result
EXCEPTIONS
POWER_VALUE_TOO_HIGH= 1
OTHERS = 2.
CASE sy-subrc.
WHEN0.
WRITEgv_result.
WHEN1.
WRITE‘Power Value max 4’.
WRITE2.
WRITE‘Unknown Error’.
ENDCASE.
注意:ABAP中sy-subrc为获取的异常代码(标识)
在编写的function module中。对于异常的处理,使用RAISE进行。例如以下source code
IF iv_max = 0.
ev_percentage= 0.
RAISEdivision_by_zero. //这里的division_by_zero是在这钱excepttion的tab内定义的异常
ELSE
*利用代码进行计算
ENDIF.
三、 使用类方法(class)
含义和java中的类同样,也有变量和方法等
Class和function module的差别在于。class能够多重实例化,而function module仅仅是一个方法
Class中能够定义静态方法和实例方法,后者必须实例化class后才干调用
创建class的界面各个tab含义
1. Attributes:创建变量,并定义其变量名、类型、静态/动态、可见性等属性
2. Method:创建方法,设定方法名、静态/动态、可见性等属性
Method下的分分tab:
①parameter:定义相关的參数。这里定义參数的时候,像function module一样,在type中定义它们是import还是export
②exception:异常处理(类似function module中的定义)
Class的调用方法
调用class的method时,能够直接拖拽class->method文件夹下的详细函数到主程序(try/catch也会自己主动生成。去掉凝视就可以)或者能够和function module调用方法一样,点击pattern
演示样例代码:
CALL METHOD
ZBC_COMPUTE=> get_power
EXPORTING
Iv_base = pa_int1
Iv_power = pa_int2
IMPORTING
ev_result = gv_result.
WRITEgv_result.
CATCH power_too_high.
WRITE‘Max Value for Power is 4’.
ENDTRY.
实例化对象的方法:
DATA refertence_name TYPE REF TO class_name.
之后就能够利用这个实例化的变量调用方法:
CALL METHOD reference_name ->method_name.
关于class的创建:定义method时,在method tab下的界面中输入方法名,然后选中创建的方法,进入代码编辑器编写方法的代码(每一个方法都有自己相应的代码编辑页面)
ABAP学习之旅——多种方式建立模块化功能的更多相关文章
- Spring学习总结(一)——Spring实现IoC的多种方式
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
- WCF学习之旅—TCP双工模式(二十一)
WCF学习之旅—请求与答复模式和单向模式(十九) WCF学习之旅—HTTP双工模式(二十) 五.TCP双工模式 上一篇文章中我们学习了HTTP的双工模式,我们今天就学习一下TCP的双工模式. 在一个基 ...
- WCF学习之旅—HTTP双工模式(二十)
WCF学习之旅—请求与答复模式和单向模式(十九) 四.HTTP双工模式 双工模式建立在上文所实现的两种模式的基础之上,实现客户端与服务端相互调用:前面介绍的两种方法只是在客户端调用服务端的方法,然后服 ...
- 我的angularjs源码学习之旅2——依赖注入
依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...
- 我的AngularJS 学习之旅
我的AngularJS 学习之旅 基础篇 1.Angular的 起源 2.比较Web 页面实现的几种方式 3.一些基本术语 4.Angular与其他框架的兼容性 5.总结 6.综合实例 很早之前就 ...
- 180分钟的python学习之旅
最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...
随机推荐
- 输出所有进程和进程ID
#include <windows.h> #include <tlhelp32.h> #include <tchar.h> #include <stdio.h ...
- 01CSS使用方法
CSS使用方法 内联定义 内联定义即是在对象的标记内使用对象的style属性定义适用其的样式表属性. 内部样式表 <style type="text/css"></style> ...
- android 获取application和activity下meta-data中的值
meta-data在AndroidManifest中是以键值对的形式存在的,可以将meta-data放在application根节点下,也可以放在某个activity节点下.因为存放的位置不同,因此获 ...
- 原生j获取元素的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Python3网络爬虫开发实战] 1.2.6-aiohttp的安装
之前介绍的Requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理.其实,这个过程比较耗费资源.如果程序可以在这个等待过程中 ...
- linux性能优化cpu-01性能指标
学习性能优化的第一步,一定要了解性能指标. 性能指标是什么? 当我们看到性能指标时一定先想到“高并发”.“响应快”,这个两个指标也对应着性能优化的两个核心指标—— “吞吐率”和“低延迟”. 这两个指标 ...
- awk,grep,sed文本格式化处理
一.awk取列 [root@web01 ~]# cat /etc/passwd|awk -F ':' '{print $1"\t\t"$7}' ###-F指定分隔符 root /b ...
- pip 打包项目配置库
打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...
- UVa Sculpture(离散化 floodfill)
题意: 给定n个立方体的一个顶点坐标和3边长度, 问这些立方体组成的雕塑的表面积和体积, 坐标都是整数,n最大为50, 最大为500, 边长最大也是500. 分析: 继UVa221后又一道离散 ...
- 60. Spring Boot写后感【从零开始学Spring Boot】
从2016年4月15日到2016年7月20日经历长达3个月的时间,[从零开始学习Spring Boot]系列就要告一段落了.国内的各种资源都比较乱或者是copy 来copy去的,错了也不加以修正下,导 ...