oops alv interactive
report.
This is the sample alv interactive.
Creare 3 screens
Screen 100.
Create a custom control with name ‘CST1’.
Screen 200.
Create a custom control with name ‘CST2’.
Screen 300.
Create a custom control with name ‘CST3’.
Note : here you can mention
custom container name for all the screens as ‘CST’ also. Because each screen
have separate custom container.
REPORT zrk_oop_alv02.
TYPES : BEGIN OF ty_kna1,
kunnr TYPE
kna1-kunnr,
land1 TYPE
kna1-land1,
name1 TYPE
kna1-name1,
END OF ty_kna1.
DATA : lt_kna1 TYPE TABLE OF ty_kna1,
ls_kna1 TYPE ty_kna1.
TYPES : BEGIN OF ty_vbak,
vbeln TYPE
vbak-vbeln,
erdat TYPE
vbak-erdat,
erzet TYPE
vbak-erzet,
ernam TYPE
vbak-ernam,
cellstyles TYPE
lvc_t_styl,
END OF ty_vbak.
DATA : lt_vbak TYPE TABLE OF ty_vbak,
ls_vbak TYPE ty_vbak.
TYPES : BEGIN OF ty_vbap,
vbeln TYPE
vbap-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE
vbap-matnr,
END OF ty_vbap.
DATA : lt_vbap TYPE TABLE OF ty_vbap,
ls_vbap TYPE ty_vbap.
DATA lv_kunnr TYPE kunnr.
DATA lv_vbeln TYPE vbeln.
DATA ls_styl TYPE lvc_s_styl.
SELECT-OPTIONS so_kunnr FOR lv_kunnr.
DATA : kna1_cont TYPE REF TO cl_gui_custom_container,
kna1_grid TYPE REF TO
cl_gui_alv_grid.
DATA : vbak_cont TYPE REF TO cl_gui_custom_container,
vbak_grid TYPE REF TO
cl_gui_alv_grid.
DATA : vbap_cont TYPE REF TO cl_gui_custom_container,
vbap_grid TYPE REF TO
cl_gui_alv_grid.
DATA : lt_fcat TYPE lvc_t_fcat,
ls_fcat TYPE lvc_s_fcat.
DATA ls_layo TYPE lvc_s_layo.
CLASS lcl_eventreceiver DEFINITION.
PUBLIC SECTION.
METHODS handle_hotspot_click
FOR EVENT hotspot_click OF
cl_gui_alv_grid
IMPORTING
e_row_id.
METHODS handle_button_click
FOR EVENT button_click
OF cl_gui_alv_grid
IMPORTING es_row_no.
METHODS handle_double_click
FOR EVENT double_click
OF cl_gui_alv_grid IMPORTING e_row e_column.
ENDCLASS.
"lcl_eventreceiver DEFINITION
CLASS lcl_eventreceiver IMPLEMENTATION.
METHOD handle_hotspot_click.
CLEAR ls_kna1.
READ TABLE lt_kna1 INTO
ls_kna1
INDEX e_row_id-index
TRANSPORTING kunnr.
IF sy-subrc EQ 0.
CLEAR lv_kunnr.
lv_kunnr = ls_kna1-kunnr.
IF lv_kunnr IS NOT
INITIAL.
* MESSAGE 'kUNNR VALUE
RECEIVED' TYPE 'I'.
PERFORM getsalesorders.
IF lt_vbak[] IS NOT
INITIAL.
CALL SCREEN 200.
ELSE.
MESSAGE 'No sales
orders' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "handle_hotspot_click
METHOD handle_button_click.
READ TABLE lt_vbak INTO
ls_vbak
INDEX es_row_no-row_id
TRANSPORTING vbeln.
IF sy-subrc EQ 0.
CLEAR lv_vbeln.
lv_vbeln = ls_vbak-vbeln.
IF lv_vbeln IS NOT
INITIAL.
PERFORM getsalesitems.
IF lt_vbap[] IS NOT
INITIAL.
CALL SCREEN 300.
ELSE.
MESSAGE 'No sales
items' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "handle_button_click
METHOD handle_double_click.
CASE e_column-fieldname.
WHEN 'MATNR'.
READ TABLE lt_vbap INTO
ls_vbap
INDEX
e_row-index TRANSPORTING matnr.
IF sy-subrc EQ 0.
SET PARAMETER ID 'MAT'
FIELD ls_vbap-matnr.
ENDIF.
CALL TRANSACTION 'MM03'.
WHEN OTHERS.
MESSAGE 'Please click on
material' TYPE 'I'.
ENDCASE.
ENDMETHOD. "handle_double_click
ENDCLASS.
"lcl_eventreceiver IMPLEMENTATION
DATA ob TYPE REF TO lcl_eventreceiver.
INITIALIZATION.
so_kunnr-low = '1000'.
so_kunnr-high = '1020'.
APPEND so_kunnr.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE status_0100 OUTPUT.
IF kna1_cont IS INITIAL.
SET PF-STATUS 'ABC'.
CREATE OBJECT kna1_cont
EXPORTING
container_name = 'CST1'.
CREATE OBJECT kna1_grid
EXPORTING
i_parent = kna1_cont.
PERFORM getcustomers.
IF lt_kna1[] IS NOT INITIAL.
PERFORM fldcatkna1.
PERFORM layoutkna1.
PERFORM registerhandlers.
PERFORM displaykna1.
ENDIF.
ENDIF.
ENDMODULE.
" STATUS_0100 OUTPUT
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
"USER_COMMAND_0100 INPUT
FORM displaykna1 .
CALL METHOD
kna1_grid->set_table_for_first_display
EXPORTING
is_layout = ls_layo
CHANGING
it_outtab = lt_kna1[]
it_fieldcatalog =
lt_fcat[].
ENDFORM.
" displaykna1
FORM fldcatkna1 .
CLEAR ls_fcat.
ls_fcat-fieldname = 'KUNNR'.
ls_fcat-col_pos = 1.
ls_fcat-coltext = 'Customer
No'.
ls_fcat-hotspot = 'X'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LAND1'.
ls_fcat-col_pos = 2.
ls_fcat-coltext = 'Country'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'NAME1'.
ls_fcat-col_pos = 3.
ls_fcat-coltext = 'Customer
Name'.
ls_fcat-outputlen = 20.
APPEND ls_fcat TO lt_fcat.
ENDFORM.
" fldcatkna1
FORM getcustomers .
SELECT kunnr land1 name1 FROM
kna1
INTO TABLE lt_kna1
WHERE kunnr IN so_kunnr.
ENDFORM.
" getcustomers
FORM layoutkna1 .
CLEAR ls_layo.
ls_layo-grid_title = 'CUSTOMER
MASTER DATA'.
ENDFORM.
" layoutkna1
FORM getsalesorders .
SELECT vbeln erdat erzet ernam
FROM vbak
INTO CORRESPONDING FIELDS OF TABLE
lt_vbak
WHERE kunnr =
lv_kunnr.
ENDFORM.
" getsalesorders
MODULE status_0200 OUTPUT.
IF vbak_cont IS INITIAL.
SET PF-STATUS 'XYZ'.
CREATE OBJECT vbak_cont
EXPORTING
container_name = 'CST2'.
CREATE OBJECT vbak_grid
EXPORTING
i_parent = vbak_cont.
PERFORM fldcatvbak.
PERFORM layoutvbak.
PERFORM cellstyles.
PERFORM reghandlers.
PERFORM displayvbak.
ENDIF.
ENDMODULE.
" STATUS_0200 OUTPUT
MODULE user_command_0200 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0200 INPUT
FORM displayvbak .
CALL METHOD
vbak_grid->set_table_for_first_display
EXPORTING
is_layout = ls_layo
CHANGING
it_outtab = lt_vbak[]
it_fieldcatalog =
lt_fcat[].
ENDFORM.
" displayvbak
FORM fldcatvbak .
REFRESH lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'VBELN'.
ls_fcat-col_pos = 1.
ls_fcat-coltext = 'Sales Doc'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ERDAT'.
ls_fcat-col_pos = 2.
ls_fcat-coltext = 'Date'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ERZET'.
ls_fcat-col_pos = 3.
ls_fcat-coltext = 'Time'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ERNAM'.
ls_fcat-col_pos = 4.
ls_fcat-coltext = 'Person'.
APPEND ls_fcat TO lt_fcat.
ENDFORM. " fldcatvbak
FORM layoutvbak .
CLEAR ls_layo.
ls_layo-grid_title = 'SALES
DOCUMENT HEADER DATA'.
ls_layo-stylefname =
'CELLSTYLES'.
ENDFORM.
" layoutvbak
FORM cellstyles .
DATA lv_date TYPE d.
CLEAR ls_vbak.
LOOP AT lt_vbak INTO ls_vbak.
lv_date =
ls_vbak-erdat+0(4).
IF lv_date >= '2000'.
ls_styl-fieldname =
'VBELN'.
ls_styl-style =
cl_gui_alv_grid=>mc_style_button.
INSERT ls_styl INTO TABLE
ls_vbak-cellstyles.
MODIFY lt_vbak FROM
ls_vbak
TRANSPORTING cellstyles.
ENDIF.
CLEAR ls_vbak.
ENDLOOP.
ENDFORM.
" cellstyles
FORM getsalesitems .
SELECT vbeln posnr matnr FROM
vbap
INTO TABLE lt_vbap
WHERE vbeln = lv_vbeln.
ENDFORM. " getsalesitems
MODULE status_0300 OUTPUT.
IF vbap_cont IS INITIAL.
SET PF-STATUS 'PQR'.
CREATE OBJECT vbap_cont
EXPORTING
container_name = 'CST3'.
CREATE OBJECT vbap_grid
EXPORTING
i_parent =
vbap_cont.
PERFORM fldcatvbap.
PERFORM layoutvbap.
PERFORM reg_handlers.
PERFORM displayvbap.
ENDIF.
ENDMODULE.
" STATUS_0300 OUTPUT
MODULE user_command_0300 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0300 INPUT
FORM reghandlers .
create object ob.
set handler
ob->handle_button_click for vbak_grid.
ENDFORM.
" reghandlers
FORM registerhandlers .
CREATE OBJECT ob.
SET HANDLER
ob->handle_hotspot_click FOR kna1_grid.
ENDFORM.
" registerhandlers
FORM fldcatvbap .
REFRESH lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'VBELN'.
ls_fcat-col_pos = 1.
ls_fcat-coltext = 'Sales Doc'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'POSNR'.
ls_fcat-col_pos = 2.
ls_fcat-coltext = 'Item no'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MATNR'.
ls_fcat-col_pos = 3.
ls_fcat-coltext = 'Material'.
APPEND ls_fcat TO lt_fcat.
ENDFORM.
" fldcatvbap
FORM layoutvbap .
CLEAR ls_layo.
ls_layo-grid_title = 'SALES
DOCUMENT ITEM DATA'.
ENDFORM.
" layoutvbap
FORM reg_handlers .
CREATE OBJECT ob.
SET HANDLER ob->handle_double_click
FOR vbap_grid.
ENDFORM.
" reg_handlers
FORM displayvbap .
CALL METHOD
vbap_grid->set_table_for_first_display
EXPORTING
is_layout = ls_layo
CHANGING
it_outtab = lt_vbap[]
it_fieldcatalog =
lt_fcat[].
ENDFORM.
" displayvbap..
No comments:
Post a Comment