ABAP SALV简单实例

前言介绍:SALV是一个用面向对象写出ALV简单报表的类。
好处:
简单快捷,用来做个弹窗,或者作为明细的显示窗口,有很高的便捷性。
限制(缺点):
•列数限制为90。
•列的输出长度限制为128个字符。
•ALV的结构使用户可以在屏幕上操作您的表格。尽管ALV为打印表格提供了几个基本功能,但它并不用于配置缩小的打印布局。
•对于排序和小计,您最多使用九个级别或列。
•对于可聚合列,确保列的内部长度足够大,不仅适用于单个值,也适用于结果。
•输出列是面向列的。只能显示平面结构的表。不能显示嵌套的表和结构。
•使用ALV显示的表格不可用于输入。
•如果将表格用作容器中的网格,则不能使用批处理模式。
•总计和小计的输出由ALV单独处理。您既不能将结果传递给应用程序,也不能以任何方式操纵它们。

一、上实例

DATA:go_alv        TYPE REF TO cl_salv_table.         "ALV Table

DATA BEGIN OF typ_alv .
INCLUDE TYPE makt ."包含自己创建表的所有字段
DATA     del        TYPE      char10. "删除标记
DATA     z        TYPE      i. "

DATA END OF typ_alv .
DATA : gs_makt LIKE typ_alv,     ""alv报表的结构,传一行数据的
       gt_makt LIKE TABLE OF typ_alv. "ALV内表

"事件类的定义
CLASS l_cl_handle_events DEFINITION.
  PUBLIC SECTION.
  "用户操作按钮
    METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table
      IMPORTING e_salv_function.
    "双击事件
    METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
        row "事件触发所在的行号
        column."事件触发所在的列名
ENDCLASS.

"方法实现
CLASS l_cl_handle_events IMPLEMENTATION.
  METHOD on_user_command.
    PERFORM handle_user_command USING e_salv_function.
  ENDMETHOD.

  METHOD on_double_click.
    PERFORM show_cell_info USING row column ."传参,行与列
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

  SELECT *
    FROM makt
    INTO TABLE gt_makt
   UP TO 10 ROWS.

  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = go_alv
        CHANGING
          t_table      = gt_makt ).
    CATCH cx_salv_msg.                                  "#EC NO_HANDLER
  ENDTRY.

  "给此列设置长文本
  go_alv->get_columns( )->get_column( 'DEL' )->set_long_text( '删除' )."需处理的列
  go_alv->get_columns( )->get_column( 'Z' )->set_long_text( '自定义' )."

  "自动列宽
  go_alv->get_columns( )->set_optimize( 'X' ).

  "斑马线
  go_alv->get_display_settings( )->set_striped_pattern( 'X').

* set selection mode 可以行列进行选择
  go_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).


*---标准按钮和自定义状态使用一个就好了。
  "标准按钮
  "go_alv->get_functions( )->set_all( abap_true )."将激活所有的ALV内置通用按钮

  "使用自己定义的9000状态
  go_alv->set_screen_status(
       pfstatus      =  '9000'
       report        =  sy-repid  "'ZLIMF_SALV'   "程序名
       set_functions = go_alv->c_functions_all ).

*  "设置屏幕大小。若是要全屏,那就把这段去掉"
*   IF go_alv IS BOUND.
*        go_alv->set_screen_popup(
*        start_column = 30
*        end_column = 160
*        start_line = 5
*        end_line = 20 ).
*   ENDIF.

  "=====获取事件对象"
  DATA: lr_event TYPE REF TO cl_salv_events_table.
  lr_event = go_alv->get_event( ).

  "=====事件注册"
  DATA: lr_handle_event TYPE REF TO l_cl_handle_events.
  CREATE OBJECT lr_handle_event.
  SET HANDLER lr_handle_event->on_user_command FOR lr_event.
  SET HANDLER lr_handle_event->on_double_click FOR lr_event.

  "显示
  go_alv->display( ).

FORM handle_user_command  USING p_function TYPE salv_de_function.
  CASE p_function.
    WHEN 'ZB'.
     "获取已经选中的行 /DATA(LV_rows) =  go_alv->get_selections( )->get_selected_rows( ).
     READ TABLE LV_rows INTO DATA(ls_row)  INDEX 1."读取选中行表的第一行
     IF sy-subrc = 0.
       "修改 选中第一行的z字段
       MODIFY gt_makt FROM VALUE #( Z  = '6' )   INDEX ls_row  TRANSPORTING Z.
     ENDIF.
     go_alv->refresh( ).
  ENDCASE.
ENDFORM.
FORM show_cell_info USING p_row TYPE i
                          p_column TYPE lvc_fname.
  MESSAGE '行:' && p_row && ',列:' && p_column   TYPE 'I'.
ENDFORM.

实际效果:
在这里插入图片描述
二、简单介绍下功能
1.自动获取gt_makt的feildcat,也可以自定义添加字段,定义内表时候使用数据元素,就可以自动获取了。
2.斑马条纹,自动列宽,选中行或者列,标准预设按钮。
3.双击事件,可以获取点击单元格的行数和列名。
在这里插入图片描述

4.自定义按钮,获取选中行,点击按钮,修改内表数据后,刷新alv。
在这里插入图片描述

5.可以设置ALV长宽,你可以把它作为弹窗或者全屏alv。
设置ALV的大小:
在这里插入图片描述

6.单元格不能编辑,是硬伤。

了解上面这几种功能,你基本上就掌握SALV了。

好了今天的分享到这了,分享使我快乐,我是寒武青锋。
请添加图片描述
参考链接:
1.江正军OO SALV
2.百度sap自定义按钮事件
3.百度sap SALV选择模式

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值