2007 Dec 20 10:55 AM
Hello,
I had developed a program which is extracting data from kna1 and vbak table.Now i am facing a problem when iam using a concept called doubleclick.In my first screen data from kna1 table is displayed.Now i want to see respective data from vbak table when i double click one particular custnumber.How can i use concept doubleclick for that.can anybody explain me in detail.
2007 Dec 20 8:00 PM
Hello Priyanka
The sample report ZUS_SDN_TWO_ALV_GRIDS_0 shows how to display sales orders per customer using two ALV grids.
&----
*& Report ZUS_SDN_TWO_ALV_GRIDS_0
*&
&----
*& Description: Display KNA1 in 1st ALV grid,
*& select VBAK data by double-clicking
&----
&----
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*&
*& Flow logic:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
**
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*&
&----
REPORT zus_sdn_two_alv_grids.
DATA:
gd_repid TYPE syrepid,
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo.
DATA:
gs_knb1 TYPE knb1,
gt_header TYPE STANDARD TABLE OF kna1,
gt_position TYPE STANDARD TABLE OF vbak.
----
CLASS lcl_eventhandler DEFINITION
----
*
----
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
md_customer TYPE kunnr READ-ONLY.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
----
CLASS lcl_eventhandler IMPLEMENTATION
----
*
----
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
define local data
DATA:
ls_header LIKE LINE OF gt_header.
CHECK ( sender = go_grid1 ).
READ TABLE gt_header INTO ls_header INDEX e_row-index.
CHECK ( ls_header-kunnr IS NOT INITIAL ).
md_customer = ls_header-kunnr.
Triggers PAI of the dynpro with the specified ok-code
cl_gui_cfw=>set_new_ok_code( 'DETAIL' ). " not 4.6c
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DETAIL'
IMPORTING
RC =
.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM kna1 INTO TABLE gt_header UP TO 500 ROWS.
Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 99999 " full-screen
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 2
columns = 1
NO_AUTODEF_PROGID_DYNNR =
NAME =
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.
Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Set event handler
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNA1'
is_layout = gs_layout
CHANGING
it_outtab = gt_header
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
gs_layout-grid_title = 'Sales Order per Customer'.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAK'
is_layout = gs_layout
CHANGING
it_outtab = gt_position " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
END-OF-SELECTION.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
SET TITLEBAR 'xxx'.
Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
EXPORTING
IS_STABLE =
I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
User has pushed button "Display Details"
WHEN 'DETAIL'.
PERFORM entry_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Form ENTRY_SHOW_DETAILS
&----
text
----
--> p1 text
<-- p2 text
----
FORM entry_show_details .
define local data
DATA:
ld_title TYPE lvc_title.
SELECT * FROM vbak INTO TABLE gt_position
WHERE kunnr = lcl_eventhandler=>md_customer. " Sold-to-party
CONCATENATE 'Sales Order of customer' lcl_eventhandler=>md_customer
INTO ld_title
SEPARATED BY space.
CALL METHOD go_grid2->set_gridtitle
EXPORTING
i_gridtitle = ld_title.
ENDFORM. " ENTRY_SHOW_DETAILS
Regards
Uwe
Hello,
I had developed a program which is extracting data from kna1 and vbak table.Now i am facing a problem when iam using a concept called doubleclick.In my first screen data from kna1 table is displayed.Now i want to see respective data from vbak table when i double click one particular custnumber.How can i use concept doubleclick for that.can anybody explain me in detail.
2007 Dec 20 11:30 AM
Hi Priyanka ,
Check the code below:
&----
*& Report Z_INTERACTIVEREPORT1 *
*& *
&----
*& OBJECTIVE: The objective of this report is to display one basic list
*& from which we can access two secondary lists.The user can move to
*& transaction 'MM02' by clicking on matnr value in the second
*& secondary list. *
&----
REPORT z_interactivereport1 NO STANDARD PAGE HEADING LINE-SIZE 255.
PROVIDE TABLES WORK AREA IN THE APPLICATION SERVER.
TABLES: lfa1,ekko,ekpo,mara.
DESIGN SELECTION SCREEN WITH SELECT-OPTIONS.
SELECT-OPTIONS: vendor FOR lfa1-lifnr.
DEFINE STRUCTURE FOR BASIC LIST.
TYPES: BEGIN OF s_lfa1,
vendor TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
END OF s_lfa1.
DEFINE AN INTERNAL TABLE BASED ON S_KNA1 STRUCTURE.
DATA: it_lfa1 TYPE STANDARD TABLE OF s_lfa1 WITH HEADER LINE WITH
DEFAULT
KEY.
DEFINE STRUCTURE FOR FIRST SECONDARY LIST.
TYPES: BEGIN OF s_ekko,
ebeln TYPE ekko-ebeln,
aedat TYPE ekko-aedat,
END OF s_ekko.
DEFINE AN INTERNAL TABLE BASED ON S_EKKO STRUCTURE.
DATA: it_ekko TYPE STANDARD TABLE OF s_ekko WITH HEADER LINE WITH
DEFAULT KEY.
DEFINE STRUCTURE FOR SECOND SECONDARY LIST.
TYPES: BEGIN OF s_ktab,
ebelp TYPE ekpo-ebelp,
matnr TYPE mara-matnr,
END OF s_ktab.
DEFINE AN INTERNAL TABLE BASED ON S_KTAB STRUCTURE.
DATA: it_ktab TYPE STANDARD TABLE OF s_ktab WITH HEADER LINE WITH
DEFAULT KEY.
DEFINE VARIABLES FOR GET CURSOR LOGIC.
DATA: fname(10), fval(10).
PROVIDE LOGIC TO PASS DEFAULT VALUES TO SELECTION-SCREEN.
INITIALIZATION.
vendor-low = 1000.
vendor-high = 1007.
vendor-sign = 'I'.
vendor-option = 'BT'.
APPEND vendor.
PROVIDE LOGIC REQUIRED FOR BASIC LIST.
START-OF-SELECTION.
SELECT lifnr name1 FROM lfa1 INTO TABLE it_lfa1 WHERE
lifnr IN vendor.
PROCESSING SCREEN LOGIC FOR BASIC LIST.
LOOP AT it_lfa1.
WRITE:/ it_lfa1-vendor HOTSPOT, it_lfa1-name1.
HIDE it_lfa1-vendor.
ENDLOOP.
PROVIDE logic for first secondary list.
AT LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
SELECT ebeln aedat FROM ekko INTO TABLE it_ekko WHERE lifnr =
it_lfa1-vendor.
PROCESSING SCREEN LOGIC FOR first secondary list.
LOOP AT it_ekko.
WRITE:/ it_ekko-ebeln HOTSPOT, it_ekko-aedat.
HIDE it_ekko-ebeln.
ENDLOOP.
PROVIDE LOGIC REQUIRED FOR SECOND SECONDARY LIST.
WHEN 2.
SELECT ekpoebelp maramatnr INTO it_ktab FROM ekpo INNER JOIN mara ON
ekpomatnr = maramatnr.
APPEND it_ktab.
ENDSELECT.
PROCESSING SCREEN LOGIC FOR SECOND SECONDARY LIST.
LOOP AT it_ktab.
WRITE:/ it_ktab-ebelp, it_ktab-matnr HOTSPOT.
HIDE it_ktab-matnr.
ENDLOOP.
PROVIDE LOGIC TO MOVE THE CURSOR FROM REPORT TO TRANSACTION.
WHEN 3.
GET CURSOR FIELD fname VALUE fval.
PROVIDE THE MEMORY ID OF THE FIELD.
SET PARAMETER ID 'MAT' FIELD fval.
PROVIDE LOGIC TO MOVE TO SCREEN.
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
ENDCASE.
PROVIDE THE LOGIC TO MAINTAIN HEADERS.
TOP-OF-PAGE.
WRITE:/ 'VENDOR DETAILS'.
TOP-OF-PAGE DURING LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
WRITE:/ 'First Secondary List'.
WHEN 2.
WRITE:/ 'Second Secondary List'.
ENDCASE.
Kindly Reward Points If You Find The Reply Helpful.
Cheers,
Chaitanya.
2007 Dec 21 9:39 AM
2007 Dec 20 11:34 AM
Hi,
For this you have to create a local class whose definition will look like this...
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
*---Double-click handler
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
ENDCLASS.
And the implementation of this class will look like this...
CLASS lcl_event_receiver IMPLEMENTATION.
*================Handle Double-Click=============
METHOD handle_double_click.
DATA: lv_value TYPE char40.
*---Check for the field on which double-click is made and display
*---corresponding details.
CASE e_column-fieldname.
WHEN 'AUFNR'.
*---Get current cell value which will be work order number.
CLEAR: lv_value.
CALL METHOD v_detgrid->get_current_cell
IMPORTING
e_value = lv_value.
*---Display the work order in transaction IW33
SET PARAMETER ID 'ANR' FIELD lv_value.
CALL TRANSACTION 'IW33' AND SKIP FIRST SCREEN.
ENDCASE.
ENDMETHOD. "handle_double_click
ENDCLASS.
Give me a shot if you need further details...
You may have a look at my sample report ZUS_SDN_THREE_ALV_GRIDS in thread
ALV
Reward points if found helpful...
Cheers,
Chandra Sekhar.
2007 Dec 21 11:04 AM
2007 Dec 20 12:00 PM
hi,
try like this
&----
*& Report ZALV_OOP
*&
&----
*&
*&
&----
REPORT zalv_oop.
----
CLASS lcl_event_handler DEFINITION
----
*
----
CLASS lcl_event_handler DEFINITION .
PUBLIC SECTION .
METHODS:
*--Double-click control
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
PRIVATE SECTION.
ENDCLASS. "lcl_event_handler DEFINITION
----
CLASS lcl_event_handler IMPLEMENTATION
----
*
----
CLASS lcl_event_handler IMPLEMENTATION .
*--Handle Double Click
METHOD handle_double_click .
PERFORM handle_double_click USING e_row e_column es_row_no .
ENDMETHOD . "handle_double_click
ENDCLASS . "lcl_event_handler IMPLEMENTATION
TABLES : mseg.
DATA : BEGIN OF itab OCCURS 0,
mblnr LIKE mseg-mblnr,
matnr LIKE mseg-matnr,
menge LIKE mseg-menge,
END OF itab.
DATA : gr_alvgrid TYPE REF TO cl_gui_alv_grid,
gr_ccontainer TYPE REF TO cl_gui_custom_container,
gt_fcat TYPE lvc_t_fcat,
gs_layo TYPE lvc_s_layo.
DATA gr_event_handler TYPE REF TO lcl_event_handler .
DATA : ok_code LIKE sy-ucomm.
DATA : t_mat LIKE mara-matnr.
SELECTION-SCREEN : BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_mblnr FOR mseg-mblnr.
SELECTION-SCREEN : END OF BLOCK blk1.
START-OF-SELECTION.
SET SCREEN 100.
CREATE OBJECT gr_event_handler .
PERFORM get_data.
PERFORM dis_data.
&----
*& Form get_data
&----
text
----
FORM get_data.
SELECT mblnr matnr menge FROM mseg INTO CORRESPONDING FIELDS OF TABLE itab
WHERE mblnr IN s_mblnr.
ENDFORM. "get_data
&----
*& Form dis_data
&----
text
----
FORM dis_data.
IF gr_alvgrid IS INITIAL.
CREATE OBJECT gr_ccontainer
EXPORTING
container_name = 'CC_ALV'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT gr_alvgrid
EXPORTING
i_parent = gr_ccontainer
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PERFORM create_fcat CHANGING gt_fcat.
PERFORM create_layout CHANGING gs_layo.
CALL METHOD gr_alvgrid->set_table_for_first_display
EXPORTING
I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER =
I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME =
IS_VARIANT =
I_SAVE = 'A'
I_DEFAULT = 'X'
is_layout = gs_layo
IS_PRINT =
IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING =
IT_HYPERLINK =
IT_ALV_GRAPHICS =
IT_EXCEPT_QINFO =
IR_SALV_ADAPTER =
CHANGING
it_outtab = itab[]
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.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SET HANDLER gr_event_handler->handle_double_click FOR gr_alvgrid .
ENDIF.
ENDFORM. "dis_data
&----
*& Form create_fcat
&----
text
----
<--P_GT_FCAT text
----
FORM create_fcat CHANGING pt_fcat TYPE lvc_t_fcat.
DATA : ls_fcat TYPE lvc_s_fcat.
ls_fcat-fieldname = 'MBLNR'.
ls_fcat-coltext = 'Material Doc.'.
APPEND ls_fcat TO pt_fcat.
ls_fcat-fieldname = 'MATNR'.
ls_fcat-coltext = 'Material'.
APPEND ls_fcat TO pt_fcat.
ls_fcat-fieldname = 'MENGE'.
ls_fcat-coltext = 'Quantity'.
APPEND ls_fcat TO pt_fcat.
ENDFORM. " create_fcat
&----
*& Form create_layout
&----
text
----
<--P_GS_LAYO text
----
FORM create_layout CHANGING ps_layo TYPE lvc_s_layo.
ps_layo-zebra = 'X'.
ENDFORM. " create_layout
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ZALV_OOP'.
SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE user_command_0100 INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'BACK' OR 'UP' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Form handle_double_click
&----
text
----
-->I_ROW text
-->I_COLUMN text
-->IS_ROW_NO text
----
FORM handle_double_click USING i_row TYPE lvc_s_row
i_column TYPE lvc_s_col
is_row_no TYPE lvc_s_roid.
READ TABLE itab INDEX is_row_no-row_id .
IF sy-subrc = 0 .
IF i_column = 'MATNR'.
t_mat = itab-matnr.
SET PARAMETER ID 'MAT' FIELD t_mat.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
SET PARAMETER ID 'MAT' FIELD space.
ELSEIF i_column = 'MBLNR'.
CALL TRANSACTION 'MIGO'.
ENDIF .
ENDIF.
ENDFORM . "handle_double_click
reward if useful....
2007 Dec 20 8:00 PM
Hello Priyanka
The sample report ZUS_SDN_TWO_ALV_GRIDS_0 shows how to display sales orders per customer using two ALV grids.
&----
*& Report ZUS_SDN_TWO_ALV_GRIDS_0
*&
&----
*& Description: Display KNA1 in 1st ALV grid,
*& select VBAK data by double-clicking
&----
&----
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*&
*& Flow logic:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
**
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*&
&----
REPORT zus_sdn_two_alv_grids.
DATA:
gd_repid TYPE syrepid,
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo.
DATA:
gs_knb1 TYPE knb1,
gt_header TYPE STANDARD TABLE OF kna1,
gt_position TYPE STANDARD TABLE OF vbak.
----
CLASS lcl_eventhandler DEFINITION
----
*
----
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
md_customer TYPE kunnr READ-ONLY.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
----
CLASS lcl_eventhandler IMPLEMENTATION
----
*
----
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
define local data
DATA:
ls_header LIKE LINE OF gt_header.
CHECK ( sender = go_grid1 ).
READ TABLE gt_header INTO ls_header INDEX e_row-index.
CHECK ( ls_header-kunnr IS NOT INITIAL ).
md_customer = ls_header-kunnr.
Triggers PAI of the dynpro with the specified ok-code
cl_gui_cfw=>set_new_ok_code( 'DETAIL' ). " not 4.6c
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DETAIL'
IMPORTING
RC =
.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM kna1 INTO TABLE gt_header UP TO 500 ROWS.
Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 99999 " full-screen
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 2
columns = 1
NO_AUTODEF_PROGID_DYNNR =
NAME =
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.
Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Set event handler
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNA1'
is_layout = gs_layout
CHANGING
it_outtab = gt_header
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
gs_layout-grid_title = 'Sales Order per Customer'.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAK'
is_layout = gs_layout
CHANGING
it_outtab = gt_position " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
END-OF-SELECTION.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
SET TITLEBAR 'xxx'.
Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
EXPORTING
IS_STABLE =
I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
User has pushed button "Display Details"
WHEN 'DETAIL'.
PERFORM entry_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Form ENTRY_SHOW_DETAILS
&----
text
----
--> p1 text
<-- p2 text
----
FORM entry_show_details .
define local data
DATA:
ld_title TYPE lvc_title.
SELECT * FROM vbak INTO TABLE gt_position
WHERE kunnr = lcl_eventhandler=>md_customer. " Sold-to-party
CONCATENATE 'Sales Order of customer' lcl_eventhandler=>md_customer
INTO ld_title
SEPARATED BY space.
CALL METHOD go_grid2->set_gridtitle
EXPORTING
i_gridtitle = ld_title.
ENDFORM. " ENTRY_SHOW_DETAILS
Regards
Uwe
2007 Dec 21 11:05 AM