当前位置:首页 > 技术 > 正文内容

ABAP本地类面向对象编程实战:实现数据管理与ALV展示

访客 技术 2026年9月28日 13

业务场景与需求分析

在SAP ABAP开发中,本地类(Local Class)常用于封装特定报表或程序内的业务逻辑,以提高代码的可读性和可维护性。本文将通过一个图书信息管理的实际场景,演示如何定义和实现一个包含私有属性、实例方法以及静态方法的本地类,并结合现代ABAP语法进行对象实例化与调用。

具体需求如下:

  • 定义一个本地类用于管理图书的名称与出版社信息。
  • 在私有区域定义自定义结构体及标准内表,用于存储图书数据。
  • 使用私有实例变量和静态变量分别记录当前对象的图书数量与全局图书总数。
  • 提供公有实例方法用于录入图书数据并以ALV网格形式展示。
  • 提供公有静态方法用于输出全局统计的图书总数。

本地类的定义 (Definition)

在类的定义部分,我们需要划分公有(Public)和私有(Private)区域。公有区域暴露给外部调用的方法,而私有区域则封装数据结构和内部状态。这里我们使用了现代ABAP的内联声明和更简洁的语法结构。

CLASS lcl_book_manager DEFINITION.
  PUBLIC SECTION.
    METHODS:
      add_book
        IMPORTING
          iv_title     TYPE string
          iv_publisher TYPE string,
      display_books.
      
    CLASS-METHODS:
      display_total_count.
      
  PRIVATE SECTION.
    TYPES:
      BEGIN OF ty_book,
        title     TYPE string,
        publisher TYPE string,
      END OF ty_book.
      
    DATA:
      mt_books      TYPE STANDARD TABLE OF ty_book,
      ms_book       TYPE ty_book,
      mv_book_count TYPE i.
      
    CLASS-DATA:
      mv_total_books TYPE i.
ENDCLASS.

本地类的实现 (Implementation)

在实现部分,我们具体编写业务逻辑。录入方法负责将传入的参数赋值给工作区并追加至内表,同时更新计数器。展示方法采用了面向对象的ALV工厂类 CL_SALV_TABLE 来替代传统的函数模块,使代码更加精简。静态方法则使用 CL_DEMO_OUTPUT 来直观地展示统计数据。

CLASS lcl_book_manager IMPLEMENTATION.
  METHOD add_book.
    ms_book-title     = iv_title.
    ms_book-publisher = iv_publisher.
    APPEND ms_book TO mt_books.
    
    " 更新实例计数与静态全局计数
    mv_book_count  = mv_book_count + 1.
    mv_total_books = mv_total_books + 1.
    CLEAR ms_book.
  ENDMETHOD.

  METHOD display_books.
    TRY.
        " 使用现代ALV工厂类生成并展示表格
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table = DATA(lo_alv)
          CHANGING
            t_table      = mt_books ).
        lo_alv->display( ).
      CATCH cx_salv_msg INTO DATA(lx_msg).
        MESSAGE lx_msg->get_text( ) TYPE 'I'.
    ENDTRY.
  ENDMETHOD.

  METHOD display_total_count.
    " 使用Demo Output类展示静态统计数据
    cl_demo_output=>display(
      data = mv_total_books
      text = '当前系统录入的图书总数'
    ).
  ENDMETHOD.
ENDCLASS.

对象实例化与方法调用

在程序的执行入口 START-OF-SELECTION 中,我们将创建类的实例并调用相关方法。ABAP 提供了多种实例化对象的方式,包括传统的 CREATE OBJECT 以及更现代的 NEW 关键字结合隐式类型声明(Inline Declaration)。

START-OF-SELECTION.
  " 1. 使用 NEW 关键字与隐式声明创建对象实例
  DATA(lo_manager) = NEW lcl_book_manager( ).
  
  " 2. 调用实例方法录入数据
  lo_manager->add_book( 
    iv_title     = 'ABAP 面向对象编程实战' 
    iv_publisher = '电子工业出版社' 
  ).
  
  lo_manager->add_book( 
    iv_title     = 'SAP 系统架构与底层原理' 
    iv_publisher = '机械工业出版社' 
  ).

  " 3. 调用实例方法展示ALV数据
  lo_manager->display_books( ).

  " 4. 通过类名直接调用静态方法
  lcl_book_manager=>display_total_count( ).
  
  " 5. 使用 NEW 关键字创建匿名实例并直接调用静态方法
  NEW lcl_book_manager( )->display_total_count( ).
标签: ABAP

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。