如何在屏幕上显示多个alv

本文讲解如何在屏幕上显示多个alv.

实现这样的需求关键是以下几点(举例:在屏幕上显示4个alv):

1.需要定义4个alv control

2.因为有4个alv control,于是就需要定义4个容器装这4个控件

3.为了合理布局这4个容器,就要将这4个容器嵌入另外一个splitter 容器中

4.但是splitter容器又只能置入其他容器中,那么就需要再定义一个容器

总之,需要3层容器和1层控件,总共要定义6个容器和4个控件

5.最里面的容器应该是cl_gui_custom_container类型,基于屏幕容器区域创建该容器

6.再在最底层容器里面嵌入splitter 容器

7.根据splitter容器创建4个镶嵌在其内的alv容器

8.再在alv容器中创建alv控件

9.调用alv的方法现实内表数据

以下是屏幕上显示4个alv的实例:

主程序代码:

TYPE-POOLS: slis, icon.

TABLES: sflight, spfli, scarr, sbook.
*   Define okcode
DATA: ok_code TYPE sy-ucomm.

*   Define objects used in screen
DATA: go_split_container TYPE REF TO cl_gui_splitter_container.
DATA: go_container TYPE REF TO cl_gui_custom_container.
DATA: go_container1 TYPE REF TO cl_gui_container.
DATA: go_container2 TYPE REF TO cl_gui_container.
DATA: go_container3 TYPE REF TO cl_gui_container.
DATA: go_container4 TYPE REF TO cl_gui_container.
DATA: go_alv_control1 TYPE REF TO cl_gui_alv_grid.
DATA: go_alv_control2 TYPE REF TO cl_gui_alv_grid.
DATA: go_alv_control3 TYPE REF TO cl_gui_alv_grid.
DATA: go_alv_control4 TYPE REF TO cl_gui_alv_grid.

*   Define internal tables and structures
DATA: BEGIN OF gs_sflight,
      carrid TYPE sflight-carrid,
      connid TYPE sflight-connid,
      fldate TYPE sflight-fldate,
      price  TYPE sflight-price,
      END   OF gs_sflight.

DATA: BEGIN OF gs_spfli,
      carrid TYPE spfli-carrid,
      connid TYPE spfli-connid,
      cityfrom TYPE spfli-cityfrom,
      cityto TYPE spfli-cityto,
      END   OF gs_spfli.

DATA: BEGIN OF gs_scarr,
      carrid TYPE scarr-carrid,
      carrname TYPE scarr-carrname,
      END   OF gs_scarr.

DATA: BEGIN OF gs_sbook,
      carrid TYPE sbook-carrid,
      connid TYPE sbook-connid,
      bookid TYPE sbook-bookid,
      customid TYPE sbook-customid,
      END   OF gs_sbook.

*   Define alv components
DATA: gs_field_cat1 TYPE lvc_s_fcat.
DATA: gs_field_cat2 TYPE lvc_s_fcat.
DATA: gs_field_cat3 TYPE lvc_s_fcat.
DATA: gs_field_cat4 TYPE lvc_s_fcat.
DATA: gt_field_cat1 TYPE lvc_t_fcat.
DATA: gt_field_cat2 TYPE lvc_t_fcat.
DATA: gt_field_cat3 TYPE lvc_t_fcat.
DATA: gt_field_cat4 TYPE lvc_t_fcat.

*   Define displayed data
DATA: gt_sflight LIKE STANDARD TABLE OF gs_sflight,
      gt_spfli LIKE STANDARD TABLE OF gs_spfli,
      gt_scarr LIKE STANDARD TABLE OF gs_scarr,
      gt_sbook LIKE STANDARD TABLE OF gs_sbook.

START-OF-SELECTION.
  PERFORM sub_retrieve_data.
  PERFORM sub_alv_data.
  CALL SCREEN 9100.
*&---------------------------------------------------------------------*
*&      Form  SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_retrieve_data .

  SELECT
    carrid
    connid
    fldate
    price
    INTO CORRESPONDING FIELDS OF TABLE gt_sflight
    FROM sflight.

  SELECT
    carrid
    connid
    cityfrom
    cityto
    INTO CORRESPONDING FIELDS OF TABLE gt_spfli
    FROM spfli.

  SELECT
    carrid
    carrname
    INTO CORRESPONDING FIELDS OF TABLE gt_scarr
    FROM scarr.

  SELECT
    carrid
    connid
    bookid
    customid
    INTO CORRESPONDING FIELDS OF TABLE gt_sbook
    FROM sbook.
ENDFORM.                    " SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
*&      Form  SUB_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_alv_data .
*   Build field catelog 1
  gs_field_cat1-col_pos = 1.
  gs_field_cat1-fieldname = 'CARRID'.
  gs_field_cat1-scrtext_m = 'airline code'.
  APPEND gs_field_cat1 TO gt_field_cat1.
  gs_field_cat1-col_pos = 2.
  gs_field_cat1-fieldname = 'CONNID'.
  gs_field_cat1-scrtext_m = 'connection number'.
  APPEND gs_field_cat1 TO gt_field_cat1.
  gs_field_cat1-col_pos = 3.
  gs_field_cat1-fieldname = 'FLDATE'.
  gs_field_cat1-scrtext_m = 'flight date'.
  APPEND gs_field_cat1 TO gt_field_cat1.
  gs_field_cat1-col_pos = 4.
  gs_field_cat1-fieldname = 'PRICE'.
  gs_field_cat1-scrtext_m = 'flight price'.
  APPEND gs_field_cat1 TO gt_field_cat1.

*   Build field catelog 2
  gs_field_cat2-col_pos = 1.
  gs_field_cat2-fieldname = 'CARRID'.
  gs_field_cat2-scrtext_m = 'airline code'.
  APPEND gs_field_cat2 TO gt_field_cat2.
  gs_field_cat2-col_pos = 2.
  gs_field_cat2-fieldname = 'CONNID'.
  gs_field_cat2-scrtext_m = 'connection number'.
  APPEND gs_field_cat2 TO gt_field_cat2.
  gs_field_cat2-col_pos = 3.
  gs_field_cat2-fieldname = 'CITYFROM'.
  gs_field_cat2-scrtext_m = 'city from'.
  APPEND gs_field_cat2 TO gt_field_cat2.
  gs_field_cat2-col_pos = 4.
  gs_field_cat2-fieldname = 'CITYTO'.
  gs_field_cat2-scrtext_m = 'city to'.
  APPEND gs_field_cat2 TO gt_field_cat2.

*   Build field catelog 3
  gs_field_cat3-col_pos = 1.
  gs_field_cat3-fieldname = 'CARRID'.
  gs_field_cat3-scrtext_m = 'airline code'.
  APPEND gs_field_cat3 TO gt_field_cat3.
  gs_field_cat3-col_pos = 2.
  gs_field_cat3-fieldname = 'CONNID'.
  gs_field_cat3-scrtext_m = 'connection number'.
  APPEND gs_field_cat3 TO gt_field_cat3.

*   Build field catelog 4
  gs_field_cat4-col_pos = 1.
  gs_field_cat4-fieldname = 'CARRID'.
  gs_field_cat4-scrtext_m = 'airline code'.
  APPEND gs_field_cat4 TO gt_field_cat4.
  gs_field_cat4-col_pos = 2.
  gs_field_cat4-fieldname = 'CONNID'.
  gs_field_cat4-scrtext_m = 'connection number'.
  APPEND gs_field_cat4 TO gt_field_cat4.
  gs_field_cat4-col_pos = 3.
  gs_field_cat4-fieldname = 'BOOKID'.
  gs_field_cat4-scrtext_m = 'book id'.
  APPEND gs_field_cat4 TO gt_field_cat4.
  gs_field_cat4-col_pos = 4.
  gs_field_cat4-fieldname = 'CUSTOMID'.
  gs_field_cat4-scrtext_m = 'custom id'.
  APPEND gs_field_cat4 TO gt_field_cat4.
ENDFORM.                    " SUB_ALV_DATA
*&---------------------------------------------------------------------*
*&      Module  ALV_DISPLAY  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE alv_display OUTPUT.
  IF go_split_container IS INITIAL.

    CREATE OBJECT go_container
      EXPORTING
        container_name = 'GO_CONTAINER'.

    CREATE OBJECT go_split_container
      EXPORTING
        link_dynnr = sy-dynnr
        link_repid = sy-repid
        parent     = go_container
        rows       = 2
        columns    = 2
        name       = 'GO_SPLIT_CONTAINER'.

 

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = go_container1.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       = 1
        column    = 2
      RECEIVING
        container = go_container2.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       = 2
        column    = 1
      RECEIVING
        container = go_container3.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       = 2
        column    = 2
      RECEIVING
        container = go_container4.

    CREATE OBJECT go_alv_control1
      EXPORTING
        i_parent = go_container1.

    CREATE OBJECT go_alv_control2
      EXPORTING
        i_parent = go_container2.

    CREATE OBJECT go_alv_control3
      EXPORTING
        i_parent = go_container3.

    CREATE OBJECT go_alv_control4
      EXPORTING
        i_parent = go_container4.

    CALL METHOD go_alv_control1->set_table_for_first_display
      CHANGING
        it_outtab       = gt_sflight
        it_fieldcatalog = gt_field_cat1.

    CALL METHOD go_alv_control2->set_table_for_first_display
      CHANGING
        it_outtab       = gt_spfli
        it_fieldcatalog = gt_field_cat2.

    CALL METHOD go_alv_control3->set_table_for_first_display
      CHANGING
        it_outtab       = gt_scarr
        it_fieldcatalog = gt_field_cat3.

    CALL METHOD go_alv_control4->set_table_for_first_display
      CHANGING
        it_outtab       = gt_sbook
        it_fieldcatalog = gt_field_cat4.

  ELSE.
    CALL METHOD go_alv_control1->refresh_table_display.
    CALL METHOD go_alv_control2->refresh_table_display.
    CALL METHOD go_alv_control3->refresh_table_display.
    CALL METHOD go_alv_control4->refresh_table_display.
  ENDIF.
ENDMODULE.                 " ALV_DISPLAY  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_9100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9100 OUTPUT.
  SET PF-STATUS 'STATUS9100'.
ENDMODULE.                 " STATUS_9100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9100 INPUT.
  CASE ok_code.
    WHEN 'PBAK'.
      CALL METHOD go_alv_control1->free.
      CALL METHOD go_alv_control2->free.
      CALL METHOD go_alv_control3->free.
      CALL METHOD go_alv_control4->free.
      CALL METHOD go_container1->free.
      CALL METHOD go_container2->free.
      CALL METHOD go_container3->free.
      CALL METHOD go_container4->free.
      CALL METHOD go_split_container->free.
      CALL METHOD go_container->free.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_9100  INPUT

屏幕9100中的代码:

PROCESS BEFORE OUTPUT.
  MODULE status_9100.
  MODULE alv_display.

PROCESS AFTER INPUT.
  MODULE user_command_9100.

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ABAP 中,创建一个子屏幕并在子屏幕中展示 OOALV 可以按照以下步骤进行: 1. 在屏幕集中定义一个子屏幕: - 在 ABAP 事务码 SE51 中创建一个屏幕集。 - 在屏幕集中,创建一个子屏幕(例如,编号为 100)。 - 在子屏幕中添加一个容器控件(例如,名称为 `CONTAINER1`)。 2. 在 ABAP 程序中实例化 OOALV 对象: - 创建一个 ABAP 程序(例如,ZPROGRAM)。 - 在 ABAP 程序中使用 ALV 类(例如,CL_GUI_ALV_GRID)来实例化 OOALV 对象(例如,GR_ALV)。 3. 配置 OOALV 对象的显示属性和数据源: - 设置 OOALV 对象的显示属性,例如列标题、列宽度等。 - 设置 OOALV 对象的数据源,例如内表(INTERNAL TABLE)或函数模块。 4. 在 ABAP 程序中调用子屏幕并传递 OOALV 对象: - 使用屏幕集函数模块 `CALL SCREEN 100` 调用子屏幕。 - 将 OOALV 对象传递给子屏幕的容器控件 `CONTAINER1`。 5. 在子屏幕中处理 OOALV显示和操作: - 在子屏幕的 PBO(Process Before Output)事件中,使用 OOALV 对象的方法 `SET_TABLE_FOR_FIRST_DISPLAY` 来设置 OOALV 的属性和数据源。 - 在子屏幕的 PAI(Process After Input)事件中,处理 OOALV 的用户交互操作。 这是一个大致的步骤,具体的实现可能需要根据你的需求进行调整和扩展。希望这些步骤能帮助你开始在子屏幕中创建和展示 OOALV。如有需要,请提供更多的上下文信息以获取更具体的代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值