当前位置: 首页 > article >正文

ABAP 快速入门之 Hello World 和 ALV 列表

ABAP 是 SAP 开发的一种编程语言,用于在 SAP 环境中对业务应用程序进行编程。得益于 ABAP 对象增强功能,ABAP 以前只是过程性语言,现在也是一种面向对象语言。

ABAP 750 文档:ABAP Keyword Documentation (sap.com)

Hello World

PROGRAM zhello_world.
START-OF-SELECTION.
    WRITE 'Hello, World!'.

ABAP 不会将值打印到控制台,而是写入一个列表,一旦主逻辑执行完毕,列表就会显示出来。

ABAP 面向对象 Hello World

PROGRAM zhello_world.

CLASS main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS: start.
ENDCLASS.

CLASS main IMPLEMENTATION.
  METHOD start.
    cl_demo_output=>display( 'Hello World!' ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  main=>start( ).

注释

  1. 行注释

同一行中 " 字符之后的任何文本都会被注释掉:

DATA lv_matnr TYPE matnr. " 这里是注释
  1. 块注释

* 字符注释整行。* 字符必须是该行的第一个字符。

* DATA ls_booking TYPE flightb. Nothing on this line will be executed.

控制流语句相关示例

ASSERT

ASSERT 用于您想要绝对确定变量具有特定值的敏感区域。如果 ASSERT 之后的逻辑条件结果为 false,则会抛出无法处理的异常 (ASSERTION_FAILED)。

ASSERT 1 = 1. "No Problem - Program continues

ASSERT 1 = 2. "ERROR

CASE

CASE lv_foo.
  WHEN 1.
    WRITE: / 'lv_foo is 1'.
  WHEN 2.
    WRITE: / 'lv_foo is 2'.
  WHEN 3.
    WRITE: / 'lv_foo is 3'.
  WHEN OTHERS.
    WRITE: / 'lv_foo is something else'.
ENDCASE

CHECK

CHECK 是一个简单的语句,它计算逻辑表达式,如果为假,则退出当前处理块。

METHOD do_something.
  CHECK iv_input IS NOT INITIAL. "Exits method immediately if iv_input is initial

  "The rest of the method is only executed if iv_input is not initial
ENDMETHOD.  

COND/SWITCH

SWITCHCOND 提供了一种特殊形式的条件程序流。与 IFCASE 不同,它们基于表达式而不是执行语句来表示不同的值。这就是为什么它们算作功能性的。

COND

当需要考虑多个条件时,COND 可以完成这项工作。语法相当简单:

COND <type>( 
    WHEN <condition> THEN <value> 
    ... 
    [ ELSE <default> | throw <exception> ]
).

示例:

" Set screen element active depending on radio button
screen-active = COND i(
    WHEN p_radio = abap_true THEN 1
    ELSE 0 " optional, because type 'i' defaults to zero
).

" Check how two operands are related to each other
" COND determines its type from rw_compare
rw_compare = COND #( 
    WHEN op1 < op2 THEN 'LT'
    WHEN op1 = op2 THEN 'EQ'
    WHEN op1 > op2 THEN 'GT' 
).

SWITCH

SWITCH 是一个用于映射值的简洁工具,因为它仅检查相等性,因此在某些情况下比 COND 更短。如果给出了意外的输入,也可能引发异常。语法有点不同:

SWITCH <type>( 
    <variable>
    WHEN <value> THEN <new_value> 
    ... 
    [ ELSE <default> | throw <exception> ]
).

示例:

DATA(lw_language) = SWITCH string(
    sy-langu
    WHEN 'E' THEN 'English'
    WHEN 'D' THEN 'German'
    " ...
    ELSE THROW cx_sy_conversion_unknown_langu( )
).

IF/ELSEIF/ELSE

IF lv_foo = 3.
  WRITE: / 'lv_foo is 3'.
ELSEIF lv_foo = 5.
  WRITE: / 'lv_foo is 5'.
ELSE.
  WRITE: / 'lv_foo is neither 3 nor 5'.
ENDIF.

ABAP GRID List (ALV) 相关示例

创建和显示 ALV

此示例描述了使用 cl_salv_table 类进行最简单的 ALV 创建,没有其他格式选项。附加的格式化选项将包含在 TRY ENDTRY 块之后和 alv->display( ) 方法调用之前。

使用 ABAP 对象方法创建 ALV 的所有后续示例都将使用此示例作为起点。

DATA: t_spfli       TYPE STANDARD TABLE OF spfli,
      alv           TYPE REF TO cl_salv_table,
      error_message TYPE REF TO cx_salv_msg.

" Fill the internal table with example data
SELECT * FROM spfli INTO TABLE t_spfli.

" Fill ALV object with data from the internal table
TRY.
    cl_salv_table=>factory(
      IMPORTING
        r_salv_table = alv
      CHANGING
        t_table      = t_spfli ).
  CATCH cx_salv_msg INTO error_message.
    " error handling
ENDTRY.

" Use the ALV object's display method to show the ALV on the screen
alv->display( ).

启用 ALV 工具栏功能

以下方法调用允许使用许多高级功能,例如排序、过滤和导出数据。

alv->get_functions( )->set_all( ).

在 ALV 中启用每隔一行条纹化

此方法通过为连续行提供交替的背景颜色阴影来提高可读性。

alv->get_display_settings( )->set_striped_pattern( if_salv_c_bool_sap=>true ).

隐藏 ALV 中的列

此示例对 ALV 隐藏 MANDT(客户端)字段。请注意,传递给 get_column( ) 的参数必须大写才能起作用。

alv->get_columns( )->get_column( 'MANDT' )->set_visible( if_salv_c_bool_sap=>false ).

优化 ALV 列宽度

此示例演示如何优化列宽,以便列标题和数据不会被截断。

alv->get_columns( )->set_optimize( ).

重命名 ALV 中的列标题

列文本可能会随着列的水平调整大小而改变。有三种方法可以实现此目的:

  • set_short_text:标题最大长度 10
  • set_medium_text:标题最大长度 20
  • set_long_text:标题最大长度 40

以下示例显示了所有三个的用法。列对象被声明并实例化为对 alv->get_columns( )->get_column( 'DISTID' ) 结果的引用。列名必须全部大写。这样,该方法链接仅在实例化时调用一次,而不是在每次更改列标题时执行。

DATA column TYPE REF TO cl_salv_column.
column = alv->get_columns( )->get_column( 'DISTID' ).

column->set_short_text( 'Dist. Unit' ).
column->set_medium_text( 'Unit of Distance' ).
column->set_long_text( 'Mass Unit of Distance (kms, miles)' ).

设置显示的 ALV 的标题

默认情况下,当显示 ALV 时,顶部的标题只是程序名称。此方法允许用户设置最多 70 个字符的标题。以下示例显示如何设置显示记录数的动态标题。

alv->get_display_settings( )->set_list_header( |Flight Schedule - { lines( t_spfli ) } records| ).

http://www.kler.cn/a/414803.html

相关文章:

  • idea2024加载flowable6.8.1.36遇到的问题-idea启动flowable问题flowable源码启动问题
  • java——spring容器启动流程
  • Jenkins升级到最新版本后无法启动
  • 多目标优化算法——多目标粒子群优化算法(MOPSO)
  • flink学习(6)——自定义source和kafka
  • 带有悬浮窗功能的Android应用
  • 深度学习基本单元结构与输入输出维度解析
  • C语言根据字符串变量获取/设置结构体成员值
  • c++基础开发环境vscode+mingw-w64
  • 【Oracle11g SQL详解】WHERE 子句的条件筛选及常用操作符
  • Seata使用ZooKeeper作为注册中心
  • 【面向对象的程序设计——集合框架】主要接口
  • java charAt()返回数值型 详解
  • python之Flask入门—路由参数
  • 从数据孤岛到数据协同:企业如何构建安全的数据共享生态?
  • php 导出excel 带图片
  • 基于Matlab的图像去噪算法仿真
  • 用 llama.cpp 体验 Meta 的 Llama AI 模型
  • 软件工程头歌实训作业:Junit实训入门篇
  • 一个高效的Java对象映射库Orika
  • SpringBoot 接口加密SM2非对称加密算法 国密算法 公钥加密 私钥解密
  • 使用Alpine镜像作为基础镜像的Dockerfile配置
  • 154. tweenjs相机运动动画
  • sqlmap使用过程中的每个步骤及其相关命令
  • 3D格式转换工具HOOPS Exchange如何保证不同CAD数据准确性和一致性?
  • js:函数