OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV。它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕。

示例展示:

1. 进入实用程序-->显示对象列表:

2.点击创建屏幕9000:

3. 开始画第一个屏幕:

4.画图如下:

部分字段属性:

5. 记得此处输入OK_CODE用于接受屏幕返回值:

6.启用9000 OUTPUT INPUT.

7.双击MODULE STATUS_9000.设置屏幕为A1,激活显示屏幕状态栏,点击创建-->GUI状态:

8.双击MODULE USER_COMMAND_9000.对屏幕状态进行响应:

DATA: ok_code(3).

MODULE USER_COMMAND_9000 INPUT.

DATA lv_ok(3).

lv_ok = ok_code.
  CASE lv_ok.

WHEN 'YES'.
      CALL SCREEN 9001.
    WHEN '&F1'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.

9.制作OO ALV屏幕9001用于装载数据:

10. 设置MODULE STATUS_9001.MODULE USER_COMMAND_9001.如下:

MODULE STATUS_9001 OUTPUT.
  SET PF-STATUS 'A2'.
ENDMODULE.

MODULE USER_COMMAND_9001 INPUT.
  
  lv_ok = ok_code.
  CASE lv_ok.
    WHEN 'YES' OR '&F1'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDMODULE.

11.添加MODULE INIT_ALV.处理OO ALV数据:

12.源代码如下(因此示例只是自己学习所用,代码仍有改进之处):

*&---------------------------------------------------------------------*

*& Report ZTEST004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST004.

*======================================================================*
*  说明书编号       :
*  程序名称         :  ZSDR16
*  程序描述         :
*  功能顾问         : XIONGHN
*  开发顾问         :
*  开始日期         :
*  完成日期         :
*======================================================================*
*                     修改历史.
*----------------------------------------------------------------------*
*
*序号. 修改人         日期             描述
*--- -----------      ----             -----------
*
*

*======================================================================*
*                   Tables used in the program

*TABLES: likp , lips , zsdf04_1.
*======================================================================*

*======================================================================*
*                Type declarations in the program
*======================================================================*
*TYPE-POOLS: SLIS.
TYPES: BEGIN OF ty_alv,
       vkorg TYPE vbak-vkorg,
       tl_netwr TYPE vbap-netwr,
       waerk TYPE vbap-waerk,
       year TYPE char4,
       month TYPE char2,

END OF ty_alv.

TYPES: BEGIN OF ty_vbakpa,
       vkorg TYPE vbak-vkorg,
       erdat TYPE vbak-erdat,
       netwr TYPE vbap-netwr,
       waerk TYPE vbap-waerk,
       END OF ty_vbakpa.

TYPES: BEGIN OF ty_vbakpb,
       vkorg TYPE vbak-vkorg,
       erdat TYPE vbak-erdat,
       netwr TYPE vbap-netwr,
       waerk TYPE vbap-waerk,
       END OF ty_vbakpb.

*======================================================================*
*                Internal Tables used in the program
*======================================================================*

DATA : gt_fcat TYPE TABLE OF lvc_s_fcat,
       gs_fcat TYPE lvc_s_fcat,
       gs_layo TYPE lvc_s_layo.

DATA: go_alva TYPE REF TO cl_gui_alv_grid,
      go_alvb TYPE REF TO cl_gui_alv_grid,
      go_cona TYPE REF TO cl_gui_custom_container,
      go_conb TYPE REF TO cl_gui_custom_container.

DATA: gt_dataa TYPE TABLE OF ty_alv,
      gs_dataa TYPE ty_alv.

DATA: gt_datab TYPE TABLE OF ty_alv,
      gs_datab TYPE ty_alv.

DATA: gt_vbakpa TYPE TABLE OF ty_vbakpa,
      gs_vbakpa TYPE ty_vbakpa.

DATA: gt_vbakpb TYPE TABLE OF ty_vbakpb,
      gs_vbakpb TYPE ty_vbakpb.

DATA: gt_waerka TYPE vbap-waerk,
      gt_waerkb TYPE vbap-waerk.

DATA: gv_vkorga TYPE vbak-vkorg,
      gv_vkorgb TYPE vbak-vkorg,
      gv_yeara TYPE char4,
      gv_yearb TYPE char4,
      gv_montha TYPE char2,
      gv_monthb TYPE char2.

DATA: ok_code(3).

*======================================================================*
*                Data declarations in the program
*======================================================================*

*======================================================================*
*                       CONSTANTS
*======================================================================*

*======================================================================*
*                      Input Selection Screen
*======================================================================*

*======================================================================*
*                          Initialization
*======================================================================*
INITIALIZATION.

*======================================================================*
*                        At Selection Screen
*======================================================================*
AT SELECTION-SCREEN.

*======================================================================*
*                       AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT .

*======================================================================*
*                       AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*

*======================================================================*
*                        Start of Selection
*======================================================================*
START-OF-SELECTION.

CALL SCREEN 9000.

*======================================================================*
*                         End of Selection
*======================================================================*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  GT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GT_DATA .

SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_vbakpa
           FROM vbak
                JOIN vbap ON vbak~vbeln = vbap~vbeln
                WHERE vkorg = gv_vkorga.

SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_vbakpb
           FROM vbak
                JOIN vbap ON vbak~vbeln = vbap~vbeln
                WHERE vbak~vkorg = gv_vkorgb.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HDL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM HDL_DATA .
  CLEAR gt_dataa.
  CLEAR gt_datab.

SELECT DISTINCT vbap~waerk
          FROM vbap
          JOIN vbak ON vbap~vbeln = vbak~vbeln
          INTO gt_waerka WHERE vbak~vkorg = gv_vkorga.

LOOP AT gt_vbakpa INTO gs_vbakpa
        WHERE waerk = gt_waerka
        AND erdat+0(4) = gv_yeara
        AND erdat+4(2) = gv_montha.

gs_dataa-vkorg = gs_vbakpa-vkorg.
        gs_dataa-waerk = gt_waerka.
        gs_dataa-year = gv_yeara.
        gs_dataa-month = gv_montha.

IF sy-subrc = 0.
        gs_dataa-tl_netwr = gs_vbakpa-netwr + gs_dataa-tl_netwr.
    ENDIF.

ENDLOOP.

IF sy-subrc = 0.
  APPEND gs_dataa TO gt_dataa.
  CLEAR gs_dataa.
  CLEAR gs_vbakpa.
  ENDIF.
  ENDSELECT.

SELECT DISTINCT vbap~waerk
          FROM vbap
          JOIN vbak ON vbap~vbeln = vbak~vbeln
          INTO gt_waerkb WHERE vbak~vkorg = gv_vkorgb.

LOOP AT gt_vbakpb INTO gs_vbakpb
        WHERE waerk = gt_waerkb
        AND erdat+0(4) = gv_yearb
        AND erdat+4(2) = gv_monthb.

gs_datab-vkorg = gs_vbakpb-vkorg.
    gs_datab-waerk = gt_waerkb.
    gs_datab-year = gv_yearb.
    gs_datab-month = gv_monthb.

IF sy-subrc = 0.
        gs_datab-tl_netwr = gs_vbakpb-netwr + gs_datab-tl_netwr.
    ENDIF.
  ENDLOOP.

IF sy-subrc = 0.
    APPEND gs_datab TO gt_datab.
    CLEAR gs_datab.
    CLEAR gs_vbakpb.

ENDIF.
  ENDSELECT.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_SHOW .

PERFORM init_layout.
  PERFORM frm_set_fieldset.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  INIT_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT_LAYOUT .
  CLEAR gs_layo.
  gs_layo-cwidth_opt = 'X'.
  gs_layo-zebra = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDSET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_FIELDSET .
  PERFORM frm_init_fieldcat USING 'VKORG' '销售组织' 'X' 10.
  PERFORM frm_init_fieldcat USING 'TL_NETWR' '销售额' space 10.
  PERFORM frm_init_fieldcat USING 'WAERK' '销售币别' space 6.
  PERFORM frm_init_fieldcat USING 'YEAR' '年份' space 6.
  PERFORM frm_init_fieldcat USING 'MONTH' '月份' space 4.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_INIT_FIELDCAT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_0396   text

*      -->P_0397   text

*      -->P_SPACE  text

*      -->P_10     text

*----------------------------------------------------------------------*

FORM FRM_INIT_FIELDCAT  USING    VALUE(p_fieldname) TYPE lvc_fname
                                 
VALUE(p_scrtext) TYPE scrtext_l
                                 
VALUE(p_key) TYPE lvc_key
                                 
VALUE(p_len) TYPE lvc_outlen.
  gs_fcat
-fieldname = p_fieldname.
  gs_fcat
-scrtext_l = p_scrtext.
  gs_fcat
-key = p_key.
  gs_fcat
-outputlen = p_len.
  
APPEND gs_fcat to gt_fcat.
  
CLEAR gs_fcat.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Module  STATUS_9000  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE STATUS_9000 OUTPUT.
  
SET PF-STATUS 'A1'.

*  SET TITLEBAR 'xxx'.

ENDMODULE.

*&---------------------------------------------------------------------*

*&      Module  STATUS_9001  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE STATUS_9001 OUTPUT.
  
SET PF-STATUS 'A2'.

*  SET TITLEBAR 'xxx'.

ENDMODULE.

*&---------------------------------------------------------------------*

*&      Module  INIT_ALV  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE INIT_ALV OUTPUT.
  
CLEAR gt_fcat.
  
PERFORM con_free.

PERFORM gt_data.
   
PERFORM hdl_data.

IF gt_dataa IS INITIAL AND gt_datab IS INITIAL.
     
MESSAGE '没有符合的数据,请重新查询' TYPE 'S' DISPLAY LIKE 'E'.
    
ELSE.
    
PERFORM alv_show.
    
ENDIF.

CREATE OBJECT go_cona
    
EXPORTING
      container_name 
= 'CONA'.

CREATE OBJECT go_alva
    
EXPORTING
      i_parent 
= go_cona.

CALL METHOD go_alva->SET_TABLE_FOR_FIRST_DISPLAY
      
EXPORTING
        IS_LAYOUT                     
= gs_layo
      
CHANGING
        IT_OUTTAB                     
= gt_dataa
        IT_FIELDCATALOG               
= gt_fcat

*        IT_SORT                       =

*        IT_FILTER                     =
      
EXCEPTIONS
        INVALID_PARAMETER_COMBINATION 
= 1
        PROGRAM_ERROR                 
= 2
        TOO_MANY_LINES                
= 3
        
others                        = 4
            
.
    
IF SY-SUBRC <> 0.

*     Implement suitable error handling here
    
ENDIF.

IF go_conb IS INITIAL.

CREATE OBJECT go_conb
    
EXPORTING
      container_name 
= 'CONB'.

CREATE OBJECT go_alvb
    
EXPORTING
      i_parent 
= go_conb.

CALL METHOD go_alvb->SET_TABLE_FOR_FIRST_DISPLAY
      
EXPORTING
        IS_LAYOUT                     
= gs_layo
      
CHANGING
        IT_OUTTAB                     
= gt_datab
        IT_FIELDCATALOG               
= gt_fcat

*        IT_SORT                       =

*        IT_FILTER                     =
      
EXCEPTIONS
        INVALID_PARAMETER_COMBINATION 
= 1
        PROGRAM_ERROR                 
= 2
        TOO_MANY_LINES                
= 3
        
others                        = 4
            
.
    
IF SY-SUBRC <> 0.

*     Implement suitable error handling here
    
ENDIF.

ELSE.

CALL METHOD go_alvb->REFRESH_TABLE_DISPLAY.

ENDIF.

ENDMODULE.

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_9000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE USER_COMMAND_9000 INPUT.

DATA lv_ok(3).

lv_ok

= ok_code.
  
CASE lv_ok.

WHEN 'YES'.
      
CALL SCREEN 9001.
    
WHEN '&F1'.
      
LEAVE TO SCREEN 0.
    
WHEN OTHERS.
  
ENDCASE.

ENDMODULE.

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_9001  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE USER_COMMAND_9001 INPUT.

lv_ok

= ok_code.

*  CLEAR ok_code.
  
CASE lv_ok.
    
WHEN 'YES' OR '&F1'.
      
LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE.

*&---------------------------------------------------------------------*

*&      Form  CON_FREE

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM CON_FREE .

IF go_alva IS NOT INITIAL.
    
CALL METHOD go_alva->FREE
      
EXCEPTIONS
        CNTL_ERROR        
= 1
        CNTL_SYSTEM_ERROR 
= 2
        
others            = 3
            
.
    
IF SY-SUBRC <> 0.
      
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.
    
ELSE.
      
FREE go_alva.
    
ENDIF.

IF go_cona IS NOT INITIAL.
      
CALL METHOD go_cona->free
    
EXCEPTIONS

CNTL_ERROR

= 1

CNTL_SYSTEM_ERROR

= 2

OTHERS = 3.

IF SY-SUBRC NE 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

FREE go_cona.

ENDIF.

ENDIF.

ENDFORM.






简单的OO ALV小示例的更多相关文章

  1. 简单的OO ALV显示ALV及下载

    REPORT OO_ALV. CLASS OO_ALV DEFINITION. PUBLIC SECTION. METHODS:GET_DATA IMPORTING AMOUNT TYPE I,&qu ...

  2. ALV详解:OO ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. 最简单的视音频播放示例7:SDL2播放RGB/YUV

    本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...

  4. UEditor之实现配置简单的图片上传示例

    UEditor之实现配置简单的图片上传示例 原创 2016年06月11日 18:27:31 开心一笑 下班后,阿华到楼下小超市买毛巾,刚买完出来,就遇到同一办公楼里另一家公司的阿菲,之前与她远远的有过 ...

  5. ReactNative新手学习之路06滚动更新ListView数据的小示例

    本节带领大家学习使用ListView 做一个常用的滚动更新数据示例: 知识点: initialListSize={200} 第一次加载多少数据行 onEndReached={this.onEndRea ...

  6. Nginx 简单的负载均衡配置示例(转载)

    原文地址:Nginx 简单的负载均衡配置示例(转载) 作者:水中游于 www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP. 用户访问http://www ...

  7. 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)

    本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...

  8. MVC客户端验证的小示例

    MVC客户端验证的小示例 配置客户端验证的可用性: <configuration> <appSettings>  <add key="ClientValidat ...

  9. python实现简单的循环购物车小功能

    python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...

随机推荐

  1. LaTex 使用特殊章节符号 (§)

    参考: LaTex 使用特殊章节符号 (§) LaTex 使用特殊章节符号 (§) 在.tex文件开头,加上以下内容: \usepackage[utf8]{inputenc} \usepackage{ ...

  2. oracle 11g RAC 的基本操作(一)------启动与关闭

    启动RAC 手工启动按照HAS, cluster, database的顺序启动,具体命令如下: 启动HAS(High Availability Services),必须以root用户 [root@or ...

  3. 开发者中心没有勾选 ipad却需要传宣传图片的解决方法

    1.通过模拟器 运行一个ipad 把ipad的比例调到100% 然后保存图片,如果没有适配ipad会出现上下左右黑色边框,这些不必在意,把保存的图片拖到开发者中心即可,勾选右侧 ,都使用12.9英寸图 ...

  4. linux下的启停脚本

    linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...

  5. Git复习步骤

    1.首先肯定是安装与配置了 首先要下载Git,然后设置用户名/邮箱 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c ...

  6. leecode第二百三十八题(除自身以外数组的乘积)

    class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...

  7. c++中的回调

    一:设置一个函数指针,在需要使用的时候调用 #include <iostream> typedef void (__stdcall *DownloadCallback)(const cha ...

  8. 注入(injector)

    在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入. Java依赖注入设计原则允许我们移除硬编码依赖和 ...

  9. Disable access to Windows Update

    Disable access to Windows Update If this policy setting is enabled, all Windows Update features are ...

  10. 自学Python Day1

          Day1: 强制转换,打印类型.Python2(row input)=Python3 input   input(Python2)不接受强制转换,输入和输出是一致的.加双引号是字符串,不加 ...