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给出返回值

在主程序中,点击上方的pattern按钮,在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下的界面中输入方法名,然后选中创建的方法,进入代码编辑器编写方法的代码(每个方法都有自己对应的代码编辑页面)


你可能感兴趣的:(HTML5,企业级前端框架——SAPUI5,abap,模块化,SAP)