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


  • 相关阅读:
    java 对象的创建
    可重入锁
    guava multimap介绍
    Tomcat运行机制
    GC垃圾收集算法
    GC判断哪些内存需要回收
    JVM类加载器以及双亲委派模型
    深入分析ConcurrentHashMap
    BeanCopier类
    Quartz技术原理
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7145307.html
Copyright © 2020-2023  润新知