OO模式的ABAP REPORT

首先我们创建本地类lcl_main,并用本地类的公共方法来代替以前ABAP报表的FORM,模式中创建了传统ABAP报表的
三个方法:get_data,process_data,write_data,然后在私有部分创建我们以前的全局变量,常量,并为该类创建
事件以处理无法找到数据等情形,然后定义处理该事件的类,然后就可以在主程序中通过定义对象实现这些类了。
*---------------------------------------------------------------------*
* C.L.A.S.S  lcl_main  D.E.F.I.N.I.T.I.O.N
*---------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
  PUBLIC SECTION.
    METHODS: get_data,
             process_data,
             write_data.
    EVENTS: no_data.

  PRIVATE SECTION.
*----------------------------------
* C.O.N.S.T.A.N.T.S
*----------------------------------
    constants : tno(4)     value 'No',
                tpernr(8)  value 'Pers.No',
                tcname(23) value 'Name',
                ttrfst(5)  value 'Level',
                tbtrtl(6)  value 'Dept',
                tbegda(10) value 'Date',
                tbeguz(7)  value 'Time',
                tawart(4)  value 'Type',
                tatext(23) value 'Description'.

*---------------------------------
* L.O.C.A.L  D.A.T.A.
*---------------------------------
    DATA: nomer type i,
          begin of WA_RESULT,
            pernr type pa0001-pernr,
            cname type pa0002-cname,
            trfst type pa0008-trfst,
            btrtl type pa0001-btrtl,
            begda type pa2001-begda,
            beguz type pa2001-beguz,
            awart type pa2001-awart,
            atext type t554t-atext,
            BEGEN(10),
          end of WA_RESULT,
          begin of wa_pa0001,
             pernr type pa0001-pernr,
             werks type pa0001-werks,
             btrtl type pa0001-btrtl,
             trfst type pa0008-trfst,
          end of wa_pa0001,
          begin of wa_pa0002 ,
             pernr type pa0002-pernr,
             cname type pa0002-cname,
          end of wa_pa0002,
          begin of wa_pa2001 ,
             pernr type pa2001-pernr,
             begda type pa2001-begda,
             endda type pa2001-endda,
             awart type pa2001-awart,
             beguz type P2001-BEGUZ,
             enduz type P2001-ENDUZ,
          end of wa_pa2001,
          wa_t554t   type t554t,
          IT_RESULT  like standard table of WA_RESULT,
          IT_pa0001  like standard table of WA_pa0001,
          IT_pa0002  like standard table of WA_pa0002,
          IT_pa2001  like standard table of WA_pa2001,
          IT_t554t   like standard table of WA_t554t.

ENDCLASS.

 *---------------------------------------------------------------------*
* C.L.A.S.S  lcl_handler  D.E.F.I.N.I.T.I.O.N
*---------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
  PUBLIC SECTION.
    METHODS handle_event FOR EVENT no_data OF lcl_main.
ENDCLASS.

*---------------------------------------------------------------------*
* C.L.A.S.S  lcl_main  I.M.P.L.E.M.E.N.T.A.T.I.O.N
*---------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
*----------------------------------------------*
* METHOD get_data                              *
*----------------------------------------------*
  METHOD get_data.
  ENDMETHOD.

*----------------------------------------------*
* METHOD process_data                          *
*----------------------------------------------*
  METHOD process_data.
  ENDMETHOD.

*----------------------------------------------*
* METHOD write_data                            *
*----------------------------------------------*
  METHOD write_data.
  ENDMETHOD.
ENDCLASS.
*-----------------------------------------------------------------------
* M.A.I.N.  .P.R.O.G.R.A.M.
*-----------------------------------------------------------------------
START-OF-SELECTION.
  DATA: o_main           TYPE REF TO lcl_main,
        o_handler        TYPE REF TO lcl_handler.

  CREATE OBJECT: o_main, o_handler.

  SET HANDLER o_handler->handle_event FOR ALL INSTANCES.
  CALL METHOD o_main->get_data.
  CALL METHOD o_main->process_data.
  CALL METHOD o_main->write_data.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP (Advanced Business Application Programming) OO (Object-Oriented)环境中,单例模式和工厂模式都是常用的软件设计模式。 **1. 单例模式(Singleton Pattern)**: ABAP中的单例模式用于确保一个类只有一个实例存在,并提供全局访问点。这种模式常用于需要共享资源或创建复杂初始化过程的对象。在ABAP中,你可以通过设置私有构造函数并提供一个静态方法返回单例对象来实现。例如: ```abap CLASS lcl_my_singleton DEFINITION. PUBLIC SECTION. TYPE s_SINGLETON = VALUE #( 'INSTANCE' => REF TO cl_my_singleton ). PRIVATE SECTION. DATA: sy_instance TYPE s_SINGLETON. ENDCLASS. CLASS-METHODS get_instance IMPORTING none. ... CLASS-METHODS new RETURNING VALUE(of_type) like sy_instance. ``` 当你通过`get_instance()`获取实例时,如果没有创建过,它会新创建;如果有,就直接返回已有的实例。 **2. 工厂模式(Factory Pattern)**: 这种模式用于隐藏对象的创建细节,并由工厂方法负责生成对象。用户只需要关心如何使用对象,而不需要知道具体如何创建。在ABAP中,可以定义一个抽象工厂类或接口,然后提供具体的工厂类来创建不同类型的产品: ```abap INTERFACE i_factory. METHODS create_product TYPEREF TO cl_my_product. ENDINTERFACE. CLASSES cl_abstract_factory IMPLEMENTATION OF i_factory. ... CLASS lcl_my_product_factory IMPLEMENTATION OF i_factory. METHOD create_product. ... ENDMETHOD. ENDCLASS. ``` 使用时,开发者可以通过`i_factory`接口创建各种产品: ```abap DATA factory TYPE REF TO i_factory. factory->create_product(). " 返回具体产品的实例 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值