1 第一步
新建程序
2 第二步新建屏幕9000
3 第三步点击图示带模板生成
4 命名直接下一步
5 第五步几个屏幕页签填几个
6 本例子定义四个
7 一直下一步直至完成如图示
8 激活屏幕 激活程序
会生成下面代码程序
*&---------------------------------------------------------------------*
*& Report ZTEST_10
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_10.
START-OF-SELECTION.
CALL SCREEN 9000.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TEST'
CONSTANTS: BEGIN OF c_test,
tab1 LIKE sy-ucomm VALUE 'TEST_FC1',
tab2 LIKE sy-ucomm VALUE 'TEST_FC2',
tab3 LIKE sy-ucomm VALUE 'TEST_FC3',
tab4 LIKE sy-ucomm VALUE 'TEST_FC4',
END OF c_test.
*&SPWIZARD: DATA FOR TABSTRIP 'TEST'
CONTROLS: test TYPE TABSTRIP.
DATA: BEGIN OF g_test,
subscreen LIKE sy-dynnr,
prog LIKE sy-repid VALUE 'ZTEST_10',
pressed_tab LIKE sy-ucomm VALUE c_test-tab1,
END OF g_test.
DATA: ok_code LIKE sy-ucomm.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE test_active_tab_set OUTPUT.
test-activetab = g_test-pressed_tab.
CASE g_test-pressed_tab.
WHEN c_test-tab1.
g_test-subscreen = '9001'.
WHEN c_test-tab2.
g_test-subscreen = '9002'.
WHEN c_test-tab3.
g_test-subscreen = '9003'.
WHEN c_test-tab4.
g_test-subscreen = '9004'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE test_active_tab_get INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN c_test-tab1.
g_test-pressed_tab = c_test-tab1.
WHEN c_test-tab2.
g_test-pressed_tab = c_test-tab2.
WHEN c_test-tab3.
g_test-pressed_tab = c_test-tab3.
WHEN c_test-tab4.
g_test-pressed_tab = c_test-tab4.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
对代码定义变量改变一下其位置
如下图所示
*&---------------------------------------------------------------------*
*& Report ZTEST_10
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_10.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TEST'
CONSTANTS: BEGIN OF c_test,
tab1 LIKE sy-ucomm VALUE 'TEST_FC1',
tab2 LIKE sy-ucomm VALUE 'TEST_FC2',
tab3 LIKE sy-ucomm VALUE 'TEST_FC3',
tab4 LIKE sy-ucomm VALUE 'TEST_FC4',
END OF c_test.
*&SPWIZARD: DATA FOR TABSTRIP 'TEST'
CONTROLS: test TYPE TABSTRIP.
DATA: BEGIN OF g_test,
subscreen LIKE sy-dynnr,
prog LIKE sy-repid VALUE 'ZTEST_10',
pressed_tab LIKE sy-ucomm VALUE c_test-tab1,
END OF g_test.
DATA: ok_code LIKE sy-ucomm.
START-OF-SELECTION.
CALL SCREEN 9000.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE test_active_tab_set OUTPUT.
test-activetab = g_test-pressed_tab.
CASE g_test-pressed_tab.
WHEN c_test-tab1.
g_test-subscreen = '9001'.
WHEN c_test-tab2.
g_test-subscreen = '9002'.
WHEN c_test-tab3.
g_test-subscreen = '9003'.
WHEN c_test-tab4.
g_test-subscreen = '9004'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE test_active_tab_get INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN c_test-tab1.
g_test-pressed_tab = c_test-tab1.
WHEN c_test-tab2.
g_test-pressed_tab = c_test-tab2.
WHEN c_test-tab3.
g_test-pressed_tab = c_test-tab3.
WHEN c_test-tab4.
g_test-pressed_tab = c_test-tab4.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
第九步 分别对屏幕 9001 9002 9003 9004 绘制 容器区域并命名
后面ALV创建 需要用到 container_name
生成的屏幕是下图所示
点击图示并点删除
删完后如图示
然后绘制容器区域 点击图示按钮
绘画完成之后如图示 命名 CUST1
屏幕9002 9003 9004 如上依次操作,命名为CUST2 CUST3 CUST4
第十步 对程序进行改造添加自定义逻辑
添加自定义按钮 退出操作
MODULE status_9000 OUTPUT.
SET PF-STATUS 'ZZZZ'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
状态栏如下图
然后在生成的MODULE ztest_09_active_tab_get
添加如下代码
WHEN '&F03' OR '&F15' OR '&F12'.
LEAVE TO SCREEN 0.
11 第十一步 全局ALV变量 table 变量
DATA: gt_sflight TYPE STANDARD TABLE OF sflight.
DATA:go_alv_grid01 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid02 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid03 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid04 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_container01 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container02 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container03 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container04 TYPE REF TO cl_gui_custom_container.
然后对图示module 添加处理逻辑
改造添加的代码如图示
代码如下:
DATA:lv_code TYPE sy-ucomm.
lv_code = ok_code.
CLEAR ok_code.
CASE lv_code.
WHEN c_ztest_09-tab1.
g_ztest_09-pressed_tab = c_ztest_09-tab1.
PERFORM display_alv USING go_alv_grid01 go_alv_container01 'CUST1'.
WHEN c_ztest_09-tab2.
g_ztest_09-pressed_tab = c_ztest_09-tab2.
PERFORM display_alv USING go_alv_grid02 go_alv_container02 'CUST2'.
WHEN c_ztest_09-tab3.
g_ztest_09-pressed_tab = c_ztest_09-tab3.
PERFORM display_alv USING go_alv_grid03 go_alv_container03 'CUST3'.
WHEN c_ztest_09-tab4.
g_ztest_09-pressed_tab = c_ztest_09-tab4.
PERFORM display_alv USING go_alv_grid04 go_alv_container04 'CUST4'.
WHEN '&F03' OR '&F15' OR '&F12'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
Form 代码如下
FORM display_alv USING io_alv_grid TYPE REF TO cl_gui_alv_grid
io_alv_container TYPE REF TO cl_gui_custom_container
iv_container_name TYPE char30.
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
SELECT * UP TO 100 ROWS
INTO CORRESPONDING FIELDS OF TABLE @gt_sflight
FROM sflight.
IF io_alv_container IS INITIAL.
CREATE OBJECT io_alv_container
EXPORTING
container_name = CONV #( iv_container_name )
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
ENDIF.
DATA: lv_isedit TYPE char01,
ls_layout TYPE lvc_s_layo,
ls_variant TYPE disvariant.
IF io_alv_grid IS INITIAL.
CREATE OBJECT io_alv_grid
EXPORTING
i_parent = io_alv_container.
"设置布局和变式
ls_layout-cwidth_opt = 'X'.
ls_layout-zebra = 'X'.
ls_variant-report = sy-repid.
ls_variant-handle = '1'.
"输出alv
CALL METHOD io_alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
i_save = 'A'
is_layout = ls_layout
is_variant = ls_variant
CHANGING
it_outtab = gt_sflight
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD io_alv_grid->set_gridtitle
EXPORTING
i_gridtitle = TEXT-001. " ALV Control: Title bar text
ELSE.
CALL METHOD io_alv_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDIF.
ENDFORM.
然后对屏幕9001 做初始化操作如图
代码如下:
MODULE init_contr OUTPUT.
PERFORM display_alv USING go_alv_grid01 go_alv_container01 'CUST1'.
ENDMODULE.
最后效果如图
最后一步:完整代码如下
REPORT ztest_09.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'ZTEST_09'
CONSTANTS: BEGIN OF c_ztest_09,
tab1 LIKE sy-ucomm VALUE 'ZTEST_09_FC1',
tab2 LIKE sy-ucomm VALUE 'ZTEST_09_FC2',
tab3 LIKE sy-ucomm VALUE 'ZTEST_09_FC3',
tab4 LIKE sy-ucomm VALUE 'ZTEST_09_FC4',
END OF c_ztest_09.
*&SPWIZARD: DATA FOR TABSTRIP 'ZTEST_09'
CONTROLS: ztest_09 TYPE TABSTRIP.
DATA: BEGIN OF g_ztest_09,
subscreen LIKE sy-dynnr,
prog LIKE sy-repid VALUE 'ZTEST_09',
pressed_tab LIKE sy-ucomm VALUE c_ztest_09-tab1,
END OF g_ztest_09.
DATA:ok_code LIKE sy-ucomm.
DATA: gt_sflight TYPE STANDARD TABLE OF sflight.
DATA:go_alv_grid01 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid02 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid03 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid04 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_container01 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container02 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container03 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container04 TYPE REF TO cl_gui_custom_container.
START-OF-SELECTION.
CALL SCREEN 9000.
*&SPWIZARD: OUTPUT MODULE FOR TS 'ZTEST_09'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE ztest_09_active_tab_set OUTPUT.
ztest_09-activetab = g_ztest_09-pressed_tab.
CASE g_ztest_09-pressed_tab.
WHEN c_ztest_09-tab1.
g_ztest_09-subscreen = '9001'.
WHEN c_ztest_09-tab2.
g_ztest_09-subscreen = '9002'.
WHEN c_ztest_09-tab3.
g_ztest_09-subscreen = '9003'.
WHEN c_ztest_09-tab4.
g_ztest_09-subscreen = '9004'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'ZTEST_09'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE ztest_09_active_tab_get INPUT.
DATA:lv_code TYPE sy-ucomm.
lv_code = ok_code.
CLEAR ok_code.
CASE lv_code.
WHEN c_ztest_09-tab1.
g_ztest_09-pressed_tab = c_ztest_09-tab1.
PERFORM display_alv USING go_alv_grid01 go_alv_container01 'CUST1'.
WHEN c_ztest_09-tab2.
g_ztest_09-pressed_tab = c_ztest_09-tab2.
PERFORM display_alv USING go_alv_grid02 go_alv_container02 'CUST2'.
WHEN c_ztest_09-tab3.
g_ztest_09-pressed_tab = c_ztest_09-tab3.
PERFORM display_alv USING go_alv_grid03 go_alv_container03 'CUST3'.
WHEN c_ztest_09-tab4.
g_ztest_09-pressed_tab = c_ztest_09-tab4.
PERFORM display_alv USING go_alv_grid04 go_alv_container04 'CUST4'.
WHEN '&F03' OR '&F15' OR '&F12'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'ZZZZ'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> G_ZTEST_09_PRESSED_TAB
*&---------------------------------------------------------------------*
FORM display_alv USING io_alv_grid TYPE REF TO cl_gui_alv_grid
io_alv_container TYPE REF TO cl_gui_custom_container
iv_container_name TYPE char30.
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
SELECT * UP TO 100 ROWS
INTO CORRESPONDING FIELDS OF TABLE @gt_sflight
FROM sflight.
IF io_alv_container IS INITIAL.
CREATE OBJECT io_alv_container
EXPORTING
container_name = CONV #( iv_container_name )
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
ENDIF.
DATA: lv_isedit TYPE char01,
ls_layout TYPE lvc_s_layo,
ls_variant TYPE disvariant.
IF io_alv_grid IS INITIAL.
CREATE OBJECT io_alv_grid
EXPORTING
i_parent = io_alv_container.
"设置布局和变式
ls_layout-cwidth_opt = 'X'.
ls_layout-zebra = 'X'.
ls_variant-report = sy-repid.
ls_variant-handle = '1'.
"输出alv
CALL METHOD io_alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
i_save = 'A'
is_layout = ls_layout
is_variant = ls_variant
CHANGING
it_outtab = gt_sflight
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD io_alv_grid->set_gridtitle
EXPORTING
i_gridtitle = TEXT-001. " ALV Control: Title bar text
ELSE.
CALL METHOD io_alv_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module INIT_CONTR OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_contr OUTPUT.
PERFORM display_alv USING go_alv_grid01 go_alv_container01 'CUST1'.
ENDMODULE.