ALV Problem - unable to come back to the ALV display
Hi,
In my ALV ,all fields are equipped with hotspot functionality(interactive report ).
Now,at one click,i go to another screen and a general list is displayed there depending upon the CASE.
Problem: When i am clicking at the 'BACK' button,it is taking me to the selection screen.i want to go to the ALV report display only.
It is bit urgent.
WHAT TO DO AND HOW TO ?
did you use leave to screen instead of call screen?
Presuming your subroutine is something like this
*****************
form orderdetails using ucomm like sy-ucomm
selfield type slis_selfield. "#EC CALLED
case ucomm.
when '&IC1'.
check not selfield-value is initial.
set parameter id 'AUN' field selfield-value.
call transaction 'VA03' and skip first screen.
endcase.
endcase.
Best Wishes
Jawahar
Presuming your subroutine is something like this
*****************
form orderdetails using ucomm like sy-ucomm
selfield type slis_selfield. "#EC CALLED
case ucomm.
when '&IC1'.
check not selfield-value is initial.
set parameter id 'AUN' field selfield-value.
call transaction 'VA03' and skip first screen.
endcase.
endcase.
Best Wishes
Jawahar
Thanx Jawahar,
this is okay..i have used it in other reports .but here from ALV i am going to a general list and from there i need to come back to the ALV list display.
there is no SAP transaction calling in my case.
now how to do it ?
use leave to screen 0.
_________________
codeboy
use leave to screen 0.
it is not working yaar.
i am sending u the code part :
FORM WRITE_OUTPUT.
SORT ITAB_ALV BY BRANCH.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = REPNAME
I_STRUCTURE_NAME = 'ITAB_ALV'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDTAB
I_DEFAULT = 'A'
I_SAVE = G_SAVE
IS_VARIANT = G_VARIANT
IT_EVENTS = EVENTS[]
TABLES
T_OUTTAB = ITAB_ALV.
IF SY-SUBRC <> 0.
WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. " WRITE_OUTPUT
---------------------------------------------------------------------------------
FORM USER_COMMAND using f2code like sy-ucomm
rs_selfield type slis_selfield.
ZFLDVAL = RS_SELFIELD-VALUE.
ZFLDNAME = RS_SELFIELD-FIELDNAME.
ZINDEX = RS_SELFIELD-TABINDEX.
READ TABLE ITAB1 INDEX ZINDEX .
CASE ZFLDNAME.
WHEN 'T_USER'.
CASE ZINDEX.
WHEN '0'.
SELECT DISTINCT * FROM ZUSER_INFO
INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG.
APPEND ITAB3.
ENDSELECT.
DELETE ADJACENT DUPLICATES FROM ITAB3 COMPARING BNAME IP_ADDRESS.
PERFORM DETAIL_LIST.
WHEN OTHERS.
SELECT DISTINCT * FROM ZUSER_INFO
INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG
AND BRANCH = ITAB1-BRANCH.
APPEND ITAB3.
ENDSELECT.
DELETE ADJACENT DUPLICATES FROM ITAB3 COMPARING BNAME IP_ADDRESS.
PERFORM DETAIL_LIST.
ENDCASE.
WHEN OTHERS.
CASE ZINDEX.
WHEN '0'.
HR1 = ZFLDNAME+2(2).
SELECT * FROM ZUSER_INFO INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG.
HR2 = ITAB3-SYSTEM_DATE+11(2).
IF HR2 = HR1.
APPEND ITAB3.
ENDIF.
ENDSELECT.
PERFORM DETAIL_LIST.
WHEN OTHERS.
HR1 = ZFLDNAME+2(2).
SELECT * FROM ZUSER_INFO INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG
AND BRANCH = ITAB1-BRANCH.
HR2 = ITAB3-SYSTEM_DATE+11(2).
IF HR2 = HR1.
APPEND ITAB3.
ENDIF.
ENDSELECT.
PERFORM DETAIL_LIST.
ENDCASE.
ENDCASE.
ENDFORM.
I'm presuming you are WRITEing in the details routine. You might want to try the command LEAVE TO LIST-PROCESSING AND RETURN...
Hi all,
I am having the exact same problem and have tried the solutions given here, but to no success. Let me describe my version and see if you can lead me to the solution:
use leave to screen 0.
it is not working yaar.
i am sending u the code part :
FORM WRITE_OUTPUT.
SORT ITAB_ALV BY BRANCH.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = REPNAME
I_STRUCTURE_NAME = 'ITAB_ALV'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDTAB
I_DEFAULT = 'A'
I_SAVE = G_SAVE
IS_VARIANT = G_VARIANT
IT_EVENTS = EVENTS[]
TABLES
T_OUTTAB = ITAB_ALV.
IF SY-SUBRC <> 0.
WRITE: 'SY-SUBRC: ', SY-SUBRC, 'REUSE_ALV_LIST_DISPLAY'.
ENDIF.
ENDFORM. " WRITE_OUTPUT
---------------------------------------------------------------------------------
FORM USER_COMMAND using f2code like sy-ucomm
rs_selfield type slis_selfield.
ZFLDVAL = RS_SELFIELD-VALUE.
ZFLDNAME = RS_SELFIELD-FIELDNAME.
ZINDEX = RS_SELFIELD-TABINDEX.
READ TABLE ITAB1 INDEX ZINDEX .
CASE ZFLDNAME.
WHEN 'T_USER'.
CASE ZINDEX.
WHEN '0'.
SELECT DISTINCT * FROM ZUSER_INFO
INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG.
APPEND ITAB3.
ENDSELECT.
DELETE ADJACENT DUPLICATES FROM ITAB3 COMPARING BNAME IP_ADDRESS.
PERFORM DETAIL_LIST.
WHEN OTHERS.
SELECT DISTINCT * FROM ZUSER_INFO
INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG
AND BRANCH = ITAB1-BRANCH.
APPEND ITAB3.
ENDSELECT.
DELETE ADJACENT DUPLICATES FROM ITAB3 COMPARING BNAME IP_ADDRESS.
PERFORM DETAIL_LIST.
ENDCASE.
WHEN OTHERS.
CASE ZINDEX.
WHEN '0'.
HR1 = ZFLDNAME+2(2).
SELECT * FROM ZUSER_INFO INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG.
HR2 = ITAB3-SYSTEM_DATE+11(2).
IF HR2 = HR1.
APPEND ITAB3.
ENDIF.
ENDSELECT.
PERFORM DETAIL_LIST.
WHEN OTHERS.
HR1 = ZFLDNAME+2(2).
SELECT * FROM ZUSER_INFO INTO CORRESPONDING FIELDS OF ITAB3
WHERE SYSTEM_DATE >= DLOW
AND SYSTEM_DATE <= DHIG
AND BRANCH = ITAB1-BRANCH.
HR2 = ITAB3-SYSTEM_DATE+11(2).
IF HR2 = HR1.
APPEND ITAB3.
ENDIF.
ENDSELECT.
PERFORM DETAIL_LIST.
ENDCASE.
ENDCASE.
ENDFORM.
use LEAVE TO LIST-PROCESSING. After PERFORM WRITE_OUTPUT Statement.
Sorry to say that I have not found the solution. At least, not a nice one. But I did find a workaround:
DO.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting ...parameters...
tables T_OUTTAB = IT_LFA1.
IF NOT KEEP_ALVLIST = 'true'. EXIT. ENDIF.
KEEP_ALVLIST = 'fals'.
ENDDO.
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
KEEP_ALVLIST = 'true'.
...Write-statements...
ENDFORM.
Not nice, but it works. Finally...
_________________
Best regards, Tim van Steenbergen
Use program RLLS2400 as a reference, (be careful it is a report but its first line in the start-of-selection is an import statement - it is used in transaction LS24 warehouse stock). Nonetheless, use it as a model to build, keyword here, EVENTS for the ALV list.
1. Specifically look at where the events are being built:
PERFORM DEFINE_EVENTS USING XEVENT[].
The user command event is built here in the XEVENT table
XEVENT-NAME = USER_COMMAND
XEVENT-FORM = USER_COMMAND
2. Then notice how the ALV list function is called:
Code:
SAV_SY_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SAV_SY_REPID
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND = ' '
IS_LAYOUT = LAYOUT
IT_FIELDCAT = XFIELD
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = VARIANT
IT_EVENTS = XEVENT[]
* IT_EVENT_EXIT =
TABLES
T_OUTTAB = AUSGABETAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
Notice that the events in the XEVENT table are events that were created using the function REUSE_ALV_EVENTS_GET, and you can see which events are being defined if you look at type pool SLIS, look for keyword EVENTS.
This works for me in another custom progam, but I used the program, RLLS2400, as reference. Notice also the IT_EVENTS_EXIT, table for storing standard function codes. This is a very powerful tool!
Note: We are using ver 4.6c.
I hope this information is helpful!
Good Luck!