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下的界面中输入方法名,然后选中创建的方法,进入代码编辑器编写方法的代码(每一个方法都有自己相应的代码编辑页面)

时间: 2024-10-04 10:37:39

ABAP学习之旅——多种方式建立模块化功能的相关文章

多种方式实现文件下载功能

(1)使用 NSURLConnection 直接方式 (2)使用 NSURLConnection 代理方式 (3)使用 NSURLSession 直接方式 (4)使用 NSURLSession 代理方式 (5)使用 AFNetworking 方式 附加功能: 使用 AFNetworking 中的 AFNetworkReachabilityManager 相关操作来检查网络情况: AFNetworkReachabilityStatusReachableViaWiFi:Wi-Fi 网络下 AFNet

Spring学习总结(一)——Spring实现IoC的多种方式

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了. IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现Io

我的AngularJS 学习之旅

基础篇 1.Angular的 起源 2.比较Web 页面实现的几种方式 3.一些基本术语 4.Angular与其他框架的兼容性 5.总结 6.综合实例 很早之前就听朋友说起AngularJs,但由于各种原因,一直没去研究.最近正好有同事也对这个框架比较感兴趣,大家一起讨论,于是终于“名正言顺”地开始研究了. 本文的目的是记录一下自己这两周的学习点滴,算是学习笔记吧,如果对初学的朋友有一点帮助,那也算是一件好事.嘿嘿 1.Angular的 起源 关于Angular 的起源,可以追溯到2009 年的

180分钟的python学习之旅

最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时间即可,因此也吸引了我不小的兴趣.之前相亲认识过一个姑娘是做绿色环保建筑设计行业的,提过她们的建筑物的建模也是使用Python,虽然被女神给拒绝了,但学习还是势在必行的,加油. 这部分只涉及python比较基础的知识,如复杂的面向对象.多线程.通信等知识会放在之后的深入学习中介绍,因此整个学习过程也

【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) 基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1.  String 字符串传输 a)         上层定义一个native的方法

Git命令学习之旅——日志和穿梭版本号

在总结了git命令的基础之后,接下来我们看一下基础的一些进阶内容:删除撤销命令.日志查看命令等 既然有加入文件的功能,那么相相应的肯定有移除文件的功能,命令例如以下:git rm [文件名称] 在输入命令之后,例如以下图所看到的: 提示已经删除了"c.txt"文件.这个时候再用git status查看一下状态,例如以下图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JB

一、WCF学习之旅-创建第一个服务

WCF基本介绍:http://baike.baidu.com/link?url=TGjLYt3HS4dt4-hIiGRknLy6udRsZ52QxJz9cmRKlR4NXbP9rCZDsKn2fDfGeBEfyQL9XlTMy_aW4Zno3HEkKa WCF有三种通信模式:单向.请求-响应.双工.这些通信模式留待后面再继续学习和讲解. 今天要学习的是创建一个测试的demo,所谓的hello world入门级程序.OK,let's start! 1.创建解决方案和项目 打开vs2015,文件>新

Android热修复学习之旅——HotFix完全解析

在上一篇博客Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于Android dex分包基础之上,简单概述android dex分包的原理就是:就是把多个dex文件塞入到app的classloader之中,但是android dex拆包方案中的类是没有重复的,如果classes.dex和classes1.dex中有重复的类,当classes.dex和classes1

Hasen的linux设备驱动开发学习之旅--异步通知

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:异步通知 * Date:2014-11-05 */ 一.异步通知的概念和作用 阻塞和非阻塞访问.poll()函数提供了较好地解决设备访问的机制,但是如果有了异步通知整套机制就更 加完整了. 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这 一点非常类似于硬件上"中断"的概