2012 Aug 08 11:26 AM
Hi Experts,
Screen Flow
Screen 100 input ->screen 200 list of sales order -> screen 300 list of items.
Having problem while clicking back button on screen 300 i will be on Screen 200 and again if i double click another sales order i am getting same items which displayed when i double click sales order for first time.
METHOD handle_double_click.
DATA: w_vbak LIKE LINE OF t_vbak.
* Following checks not a total line
* read selected row from your internal table
READ TABLE t_VBAK INDEX e_row-index INTO W_VBAK.
SELECT * FROM VBAP
INTO TABLE t_VBAP
WHERE VBELN = W_VBAK-VBELN.
CALL SCREEN 300.
ENDMETHOD. "handle_double_click
2012 Aug 08 11:32 AM
Put a break point at READ TABLE t_VBAK INDEX e_row-index INTO W_VBAK.
and check the e_row-index value .I
Clear your work always.
CLEAR : W_VBAK.
and do the refresh of T_VBAP internal table.
METHOD handle_double_click.
DATA: w_vbak LIKE LINE OF t_vbak.
REFRESH : T_VBAP.
CLEAR : W_VBAK.
* Following checks not a total line
* read selected row from your internal table
READ TABLE t_VBAK INDEX e_row-index INTO W_VBAK.
SELECT * FROM VBAP
INTO TABLE t_VBAP
WHERE VBELN = W_VBAK-VBELN.
CALL SCREEN 300.
ENDMETHOD. "handle_double_click
2012 Aug 08 11:28 AM
Hi
Before going back probably you need to release you custom container by method FREE
Max
2012 Aug 08 11:34 AM
2012 Aug 08 11:32 AM
Put a break point at READ TABLE t_VBAK INDEX e_row-index INTO W_VBAK.
and check the e_row-index value .I
Clear your work always.
CLEAR : W_VBAK.
and do the refresh of T_VBAP internal table.
METHOD handle_double_click.
DATA: w_vbak LIKE LINE OF t_vbak.
REFRESH : T_VBAP.
CLEAR : W_VBAK.
* Following checks not a total line
* read selected row from your internal table
READ TABLE t_VBAK INDEX e_row-index INTO W_VBAK.
SELECT * FROM VBAP
INTO TABLE t_VBAP
WHERE VBELN = W_VBAK-VBELN.
CALL SCREEN 300.
ENDMETHOD. "handle_double_click
2012 Aug 08 11:40 AM
Hi Raj,
i had Refresh and clear also but still it is not working. i had set the break point and check it values are changing but it is not impacting on the output.
2012 Aug 08 11:42 AM
2012 Aug 08 11:44 AM
REPORT ZOOP_ABAP_CUSTOM_CONTAINER_SO.
TABLES : VBAK,VBAP.
DATA O_G TYPE REF TO CL_GUI_ALV_GRID.
DATA O_C TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA T_VBAK TYPE TABLE OF VBAK.
DATA T_VBAP TYPE TABLE OF VBAP.
DATA W_LAYOUT TYPE LVC_S_LAYO.
DATA O_G1 TYPE REF TO CL_GUI_ALV_GRID.
DATA O_C1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : W_VBAK LIKE VBAK.
DATA FLAG TYPE C.
CALL SCREEN 100.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER 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. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
METHOD HANDLE_DOUBLE_CLICK.
DATA: W_VBAK LIKE LINE OF T_VBAK.
* Following checks not a total line
CHECK E_ROW-ROWTYPE(1) EQ SPACE.
CLEAR W_VBAK.
REFRESH T_VBAP.
* read selected row from your internal table
READ TABLE T_VBAK INDEX E_ROW-INDEX INTO W_VBAK.
SELECT * FROM VBAP
INTO TABLE T_VBAP
WHERE VBELN = W_VBAK-VBELN.
CALL SCREEN 300.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_event_handler1 IMPLEMENTATION
DATA O_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'EXECUTE'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
IF O_C IS INITIAL.
SET PF-STATUS 'ZASTAS'.
* SET TITLEBAR 'xxx'.
CREATE OBJECT O_C
EXPORTING
* PARENT =
CONTAINER_NAME = 'CNTNR'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
* 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.
IF SY-SUBRC = 0.
CREATE OBJECT O_G
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = O_C
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* 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.
ENDIF.
IF SY-SUBRC = 0.
W_LAYOUT-SEL_MODE = 'D'.
CALL METHOD O_G->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME = 'VBAK'
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
IS_LAYOUT = W_LAYOUT
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = T_VBAK[]
* IT_FIELDCATALOG =
* 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.
ENDIF.
ENDIF.
CREATE OBJECT O_EVENT_HANDLER.
SET HANDLER O_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR O_G.
ENDMODULE. " STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE TO SCREEN 100.
WHEN 'EXECUTE'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*& Module READ_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE READ_DATA OUTPUT.
SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE T_VBAK WHERE KUNNR = VBAK-KUNNR.
*BREAK-POINT.
ENDMODULE. " READ_DATA OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0300 OUTPUT.
IF O_C1 IS INITIAL.
SET PF-STATUS 'ZSAS'.
CREATE OBJECT O_C1
EXPORTING
* PARENT =
CONTAINER_NAME = 'CNTNR1'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
* 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.
IF SY-SUBRC = 0.
CREATE OBJECT O_G1
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = O_C1
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* 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.
ENDIF.
IF SY-SUBRC = 0.
CALL METHOD O_G1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER = 'X'
* I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME = 'VBAP'
* IS_VARIANT =
* I_SAVE = 'A'
* I_DEFAULT = 'X'
* IS_LAYOUT = W_LAYOUT
** IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = T_VBAP[]
* IT_FIELDCATALOG =
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* others = 4
.
CALL METHOD O_G1->FREE.
CALL METHOD O_C1->FREE.
ENDIF.
ENDIF.
ENDMODULE. " STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0300 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
*PERFORM FREE_OB.
CALL SCREEN 200.
LEAVE TO SCREEN 0.
ENDCASE.
*
ENDMODULE. " USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
*& Module READ OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE READ OUTPUT.
*CALL METHOD O_G1->REFRESH_TABLE_DISPLAY
** EXPORTING
** IS_STABLE =
** I_SOFT_REFRESH =
** EXCEPTIONS
** FINISHED = 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.
*break-point.
ENDMODULE. " READ OUTPUT
*&---------------------------------------------------------------------*
*& Form FREE_OB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FREE_OB .
*CALL METHOD O_G1->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.
*CALL METHOD O_C1->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.
2012 Aug 08 11:54 AM
Hi
I can't understand why you "free" the custom container just after to display the ALV in module STATUS_0300.
When you back to screen 200 from 300, the form to free the container is not active, module USER_COMMAND_0300
Max
2012 Aug 08 12:05 PM
the form free which is not active is not working i tried that one also.
2012 Aug 08 1:08 PM
Hi
I think you should delete the call of method FREE in STATUS_0300
MODULE STATUS_0300 OUTPUT.
IF O_C1 IS INITIAL.
SET PF-STATUS 'ZSAS'.
CREATE OBJECT O_C1
EXPORTING
* PARENT =
CONTAINER_NAME = 'CNTNR1'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
* 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.
IF SY-SUBRC = 0.
CREATE OBJECT O_G1
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = O_C1
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* 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.
ENDIF.
IF SY-SUBRC = 0.
CALL METHOD O_G1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER = 'X'
* I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME = 'VBAP'
* IS_VARIANT =
* I_SAVE = 'A'
* I_DEFAULT = 'X'
* IS_LAYOUT = W_LAYOUT
** IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = T_VBAP[]
* IT_FIELDCATALOG =
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* others = 4
.
* CALL METHOD O_G1->FREE. <----------------- Delete this
* CALL METHOD O_C1->FREE. <----------------- Delete this
ENDIF.
ENDIF.
ENDMODULE. " STATUS_0300 OUTPUT
and the form FREE_OB should be
FORM FREE_OB .
IF NOT O_C1 IS INITIAL.
CALL METHOD O_C1->FREE
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
others = 3
CLEAR O_C1.
ENDIF.
You need to clear the custom container in order to create a new one for the new data: you check if it's INITIAL at the begging of module status_0300
MODULE STATUS_0300 OUTPUT.
IF O_C1 IS INITIAL. <---------------------------
Max