2006 May 16 4:55 AM
After writing a report, I used this Function Module LIST_TO_ASCI to copy my report to an internal table (DOWNTAB) because Ill use that internal table to download a text file on the server using dataset.
Here is my code:
----
FORM DL_REP_SERVER.
DATA: ABAP_LIST LIKE ABAPLIST OCCURS 1,
MV_FILE2 LIKE RLGRAP-FILENAME.
DATA: BEGIN OF DOWNTAB OCCURS 1,
LINE(150),
END OF DOWNTAB.
CLEAR: MV_FILE2.
MV_FILE2 = J:/Downloads/Report.txt.
CALL FUNCTION 'LIST_TO_ASCI'
EXPORTING
LIST_INDEX = SY-LSIND
TABLES
LISTASCI = DOWNTAB
LISTOBJECT = ABAP_LIST
EXCEPTIONS
LIST_INDEX_INVALID = 1
OTHERS = 2.
OPEN DATASET MV_FILE2 FOR OUTPUT IN TEXT MODE.
IF SY-SUBRC <> 0.
IF SY-SUBRC = 8.
MESSAGE E037 WITH 'File could not be opened'.
ELSE.
MESSAGE E037 WITH 'Error occurs in downloading the file'.
ENDIF.
ENDIF.
LOOP AT DOWNTAB.
TRANSFER DOWNTAB TO MV_FILE2.
ENDLOOP.
CLOSE DATASET MV_FILE2.
ENDFORM. " DL_REP_SERVER
----
My big problem is this, when Im running my program ordinarily (not as background job), Im getting all the pages downloaded correctly but when I run it as background job (using SM36), Im only getting the last page of my report being downloaded. Definitely, I cant debug it because its in background. I cant figure out why. Hope that I stated my problem clearly. Any help would be greatly appreciated. Thanks.
2006 May 16 4:59 AM
You can debug batch jobs by going to 'SM37', type in 'JDBG' in the
command line ( no '/' ), put the cursor on the job and press enter - will
take you to the job in debug mode.
You can do this only after the job has finished execution. This will simulate the exact background scenario with the same selection screen values as used in the job also sy-batch will set to 'X'.
So type in the transaction code 'JDBG' and place your cursor on the job after It has finished. It will take you to a SAP program in debug mode. Step through this program which is about 10 lines, after this your program will be executed in the debug mode.
Steps
1. Create variant called BACKGROUND for program to be debugged.
2. Execute ZDEBUGBG (pgm code below) in background for immediate processing.
3. Execute transaction SM50.
4. Select process that runs ZDEBUGBG.
5. Goto 'Program/Session' 'Program' 'Debugging'.
A se80 debug session will open.
6. Change variable W_EXIT to 'E'.
7. Step thru (F6) until ZWBTEST comes up.
1. Go to Transaction SM66 and find your work porocess.
Select the line work process is on and click on the Debugging button.
If this is a custom program, you can put a wait statement in the code to buy yourself sometime.
2. Go to Transaction SM50. From the tool bar "Program/session"->Program->Debugging.
goto SM37 and from Program menu(not sure.. try other menu's)
-->Catchjob . it will goto the active job in debugging mode.
2006 May 16 4:59 AM
You can debug batch jobs by going to 'SM37', type in 'JDBG' in the
command line ( no '/' ), put the cursor on the job and press enter - will
take you to the job in debug mode.
You can do this only after the job has finished execution. This will simulate the exact background scenario with the same selection screen values as used in the job also sy-batch will set to 'X'.
So type in the transaction code 'JDBG' and place your cursor on the job after It has finished. It will take you to a SAP program in debug mode. Step through this program which is about 10 lines, after this your program will be executed in the debug mode.
Steps
1. Create variant called BACKGROUND for program to be debugged.
2. Execute ZDEBUGBG (pgm code below) in background for immediate processing.
3. Execute transaction SM50.
4. Select process that runs ZDEBUGBG.
5. Goto 'Program/Session' 'Program' 'Debugging'.
A se80 debug session will open.
6. Change variable W_EXIT to 'E'.
7. Step thru (F6) until ZWBTEST comes up.
1. Go to Transaction SM66 and find your work porocess.
Select the line work process is on and click on the Debugging button.
If this is a custom program, you can put a wait statement in the code to buy yourself sometime.
2. Go to Transaction SM50. From the tool bar "Program/session"->Program->Debugging.
goto SM37 and from Program menu(not sure.. try other menu's)
-->Catchjob . it will goto the active job in debugging mode.
2006 May 16 6:14 AM
Hi !
The LIST_TO_ASCII thing is not working correctly in background because the the list-processing in beckground is working not the same as in dialog.
What you can do.
Put the output into an internal table when
sy-batch = 'X'.
Then save the file as usual.
Regards
Rainer
Some points would be nice if that helped a bit.