您的位置:首页 > 其它

SAP-DYNPRO之面向对象ALV示例

2015-06-12 21:00 302 查看
运行效果:
















步骤:

新建工具条([b]工具条名称:STATUS_BAR):[/b]






子程序调用代码如下:

REPORT ZTEST_SY03.
" 数据定义
INCLUDE ZTEST_SY03_A01.
" 分页
INCLUDE ZTEST_SY03_L01.
" 数据表格
INCLUDE ZTEST_SY03_T01.
" PBO
INCLUDE ZTEST_SY03_O01.
" PAI
INCLUDE ZTEST_SY03_I01.
"子FORM
INCLUDE ZTEST_SY03_F01.

ZTEST_SY03_A01 子程序代码:

TABLES: spfli.
" 结构体
DATA: gs_spfli   TYPE spfli,
gs_sflight TYPE sflight.

DATA: BEGIN OF gs_scarr,
sel TYPE char1.
INCLUDE STRUCTURE scarr.
DATA:
END OF gs_scarr.
" 內表
DATA: gt_spfli   LIKE TABLE OF gs_spfli,
gt_sflight LIKE TABLE OF gs_sflight,
gt_scarr   LIKE TABLE OF gs_scarr.

DATA: g_container1 TYPE scrfname VALUE 'CUS01', " 重新定义本地容器名
g_container2 TYPE scrfname VALUE 'CUS02'. " 重新定义本地容器名

DATA: grid1        TYPE REF TO cl_gui_alv_grid,        " 声明ALV对象
grid2        TYPE REF TO cl_gui_alv_grid.        " 声明ALV对象

DATA: g_custom_container1 TYPE REF TO cl_gui_custom_container," 声明容器对象
g_custom_container2 TYPE REF TO cl_gui_custom_container." 声明容器对象
"查询屏幕
SELECTION-SCREEN BEGIN OF SCREEN 9000 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 10 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_carrid FOR spfli-carrid,
s_connid FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK 10.
SELECTION-SCREEN END OF SCREEN 9000.

START-OF-SELECTION.
PERFORM get_data.
CALL SCREEN 100.
新建屏幕100(在100屏幕上面新建两个子屏幕):



100屏幕逻辑流:

PROCESS BEFORE OUTPUT.
MODULE status_0100.

CALL SUBSCREEN: sub01 INCLUDING sy-repid '9000',
sub02 INCLUDING sy-repid '0200'.

PROCESS AFTER INPUT.
CALL SUBSCREEN sub01.
CALL SUBSCREEN sub02.
MODULE user_command_0100.
屏幕200(在屏幕200上面创建标签):












屏幕201:











屏幕201逻辑流:
PROCESS BEFORE OUTPUT.

MODULE set_alv_display_0201.

PROCESS AFTER INPUT.
屏幕202:











屏幕202逻辑流:
PROCESS BEFORE OUTPUT.

MODULE set_alv_display_0202.

PROCESS AFTER INPUT.
屏幕203:







ZTEST_SY03_L01 子程序代码:
MODULE set_alv_display_0201 OUTPUT.
PERFORM alvshow USING  '1'
g_container1
g_custom_container1
grid1
gt_spfli.

ENDMODULE.

MODULE set_alv_display_0202 OUTPUT.
PERFORM alvshow USING  '2'
g_container2
g_custom_container2
grid2
gt_sflight.
ENDMODULE.


ZTEST_SY03_O01 子程序代码:

MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_BAR'.
ENDMODULE.
ZTEST_SY03_I01 子程序代码:

MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'EXIT'. " 退出
LEAVE PROGRAM.
WHEN 'EXEC'. " 查询数据
CLEAR: gt_spfli[],gt_sflight[],gt_scarr[].
" 重新查询数据
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
FROM spfli
WHERE carrid IN s_carrid
AND   connid IN s_connid.

SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight
WHERE carrid IN s_carrid
AND   connid IN s_connid.

SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_scarr
FROM scarr
WHERE carrid IN s_carrid.

ENDCASE.

ENDMODULE.
ZTEST_SY03_F01 子程序代码:
FORM get_data.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
FROM spfli.

SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight.

SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_scarr
FROM scarr.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  alvshow
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->F_CONTAINER  text
*      -->F_DATA       text
*----------------------------------------------------------------------*
FORM alvshow USING sign        TYPE char1
p_container TYPE scrfname
p_parent    TYPE REF TO cl_gui_custom_container
p_grid      TYPE REF TO cl_gui_alv_grid
p_data      TYPE STANDARD TABLE.

DATA:li_exclude  TYPE STANDARD TABLE OF ui_func.

DATA:  l_layout  TYPE lvc_s_layo."样式
DATA: fieldcat    TYPE lvc_t_fcat.            " ALV显示字段
IF p_grid IS INITIAL.
l_layout-cwidth_opt = 'X'.""列宽自动优化
l_layout-zebra = 'X'.
l_layout-smalltitle = 'X'.

PERFORM get_fieldcat USING    sign
CHANGING fieldcat.

" 实例化容器对象
CREATE OBJECT p_parent
EXPORTING
container_name = p_container.
" 实例化ALV对象
CREATE OBJECT p_grid
EXPORTING
i_parent = p_parent.
"调用ALV显示的方法
CALL METHOD p_grid->set_table_for_first_display
EXPORTING
*       i_structure_name = 'SPFLI'
is_layout        = l_layout
CHANGING
it_outtab        = p_data[]  " ALV显示內表
it_fieldcatalog  = fieldcat[]. " ALV显示字段
ELSE.
CALL METHOD p_grid->refresh_table_display.

ENDIF.
ENDFORM.                    "alvshow

*&---------------------------------------------------------------------*
*&      Form  GET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_SIGN  text
*      <--P_P_FIELDCAT  text
*----------------------------------------------------------------------*
FORM get_fieldcat  USING    p_sign TYPE char1
CHANGING p_fieldcat TYPE STANDARD TABLE.
CASE: p_sign.
WHEN '1'.
PERFORM get_fieldcat_1  CHANGING  p_fieldcat.
WHEN '2'.
PERFORM get_fieldcat_2  CHANGING  p_fieldcat.
WHEN OTHERS.
ENDCASE.

ENDFORM.                    " GET_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  GET_FIELDCAT_1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_PC_FIELDCAT  text
*----------------------------------------------------------------------*
FORM get_fieldcat_1  CHANGING p_pc_fieldcat TYPE STANDARD TABLE.
DATA: fcat TYPE lvc_s_fcat.

DEFINE add_fcat.
clear fcat.
fcat-fieldname     = &1. " 字段名
fcat-coltext       = &2.   " 显示字段文本
append fcat to p_pc_fieldcat.
END-OF-DEFINITION.
add_fcat 'CARRID'     '航线代码'.
add_fcat 'CONNID'     '航班连接Id'.
add_fcat 'COUNTRYFR'  '起飞国家'.
add_fcat 'CITYFROM'   '起飞城市'.
add_fcat 'AIRPFROM'   '起飞机场'.
add_fcat 'COUNTRYTO'  '目标国家'.
add_fcat 'CITYTO'     '目标城市'.
add_fcat 'AIRPTO'     '目标机场'.
add_fcat 'FLTIME'     '航班时间'.
add_fcat 'DEPTIME'    '启程时间'.
add_fcat 'ARRTIME'    '到达时间'.
add_fcat 'DISTANCE'   '距离'.

ENDFORM.                    " GET_FIELDCAT_1

*&---------------------------------------------------------------------*
*&      Form  get_fieldcat_2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PC_FIELDCAT  text
*----------------------------------------------------------------------*
FORM get_fieldcat_2  CHANGING p_pc_fieldcat TYPE STANDARD TABLE.
DATA: fcat TYPE lvc_s_fcat.

DEFINE add_fcat.
clear fcat.
fcat-fieldname     = &1. " 字段名
fcat-coltext       = &2.   " 显示字段文本
append fcat to p_pc_fieldcat.
END-OF-DEFINITION.
add_fcat 'CARRID'     '航线代码'.
add_fcat 'CONNID'     '航班连接Id'.
add_fcat 'FLDATE'  '航班日期'.
add_fcat 'PRICE'   '航空运费'.
add_fcat 'CURRENCY'   '航班的本地货币'.
add_fcat 'PLANETYPE'  '飞机类型'.
add_fcat 'SEATSMAX'     '最大容量'.
add_fcat 'SEATSOCC'     '占据的座位'.

ENDFORM.                    "get_fieldcat_2


注:(1). 向导自动生成代码未列出;

(2). CSDN博客的插入代码功能不支持ABAP语言,故选了JAVA语言替代,关键字无法高亮显示;

(3). 如有疏漏之处,还请不吝赐教!

参考资料:《SAP实用程序开发进阶》,唐嘉、彭功涛、方玉凤 编著,兵器工业出版社;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: