‎2006 Jan 23 9:54 AM
Hi All,
I have a requirement.
I am creating a report which takes a long time to execute. So I want to give the user an option to execute the program in background after he has executed in foreground.
On clicking on execute, a popup appears with three buttons - continue in foreground, run in background and cancel. If the user selects the second option, the program should run in background.
Is there any command that can be written in the program to execute itself in background?
Also, will any system field be set when you run a program in background?
Thanks in advance,
Susmitha
‎2006 Jan 23 11:02 AM
This is what you can do..
In the program write a perform which will call the FM POPUP_TO_DECIDE
Customise the inputs to display the exact buttons u want.
Based on the button selected submit the report.
if sy-batch = ''.
perform f1.
else.
write 'background'.
endif.
form f1.
data: o1(10) value 'foreground',
o2(10) value 'background'.
data: ans.
CALL FUNCTION 'POPUP_TO_DECIDE'
EXPORTING
DEFAULTOPTION = '1'
textline1 = 'line'
TEXTLINE2 = ' '
TEXTLINE3 = ' '
text_option1 = o1
text_option2 = o2
ICON_TEXT_OPTION1 = ' '
ICON_TEXT_OPTION2 = ' '
titel = 'title'
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = ans
.
if ans = '1'.
write 'foreground'.
elseif ans = '2'.
perform submit_job.
exit.
else.
write 'cancel '.
endif.
endform.
form submit_job.
data: jbcnt like TBTCJOB-JOBCOUNT,
jbname like TBTCJOB-JOBNAME value 'test_job'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
DELANFREP = ' '
JOBGROUP = ' '
jobname = jbname
SDLSTRTDT = NO_DATE
SDLSTRTTM = NO_TIME
JOBCLASS =
IMPORTING
JOBCOUNT = jbcnt
CHANGING
RET =
EXCEPTIONS
CANT_CREATE_JOB = 1
INVALID_JOB_DATA = 2
JOBNAME_MISSING = 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.
data RDD_USERNAME LIKE TBTCO-AUTHCKNAM VALUE 'DDIC'.
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
ARCPARAMS =
authcknam = rdd_username
COMMANDNAME = ' '
OPERATINGSYSTEM = ' '
EXTPGM_NAME = ' '
EXTPGM_PARAM = ' '
EXTPGM_SET_TRACE_ON = ' '
EXTPGM_STDERR_IN_JOBLOG = 'X'
EXTPGM_STDOUT_IN_JOBLOG = 'X'
EXTPGM_SYSTEM = ' '
EXTPGM_RFCDEST = ' '
EXTPGM_WAIT_FOR_TERMINATION = 'X'
jobcount = jbcnt
jobname = jbname
LANGUAGE = SY-LANGU
PRIPARAMS = ' '
REPORT = 'ZTESTQ'
VARIANT = ' '
IMPORTING
STEP_NUMBER =
EXCEPTIONS
BAD_PRIPARAMS = 1
BAD_XPGFLAGS = 2
INVALID_JOBDATA = 3
JOBNAME_MISSING = 4
JOB_NOTEX = 5
JOB_SUBMIT_FAILED = 6
LOCK_FAILED = 7
PROGRAM_MISSING = 8
PROG_ABAP_AND_EXTPG_SET = 9
OTHERS = 10
.
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 FUNCTION 'JOB_CLOSE'
EXPORTING
AT_OPMODE = ' '
AT_OPMODE_PERIODIC = ' '
CALENDAR_ID = ' '
EVENT_ID = ' '
EVENT_PARAM = ' '
EVENT_PERIODIC = ' '
jobcount = jbcnt
jobname = jbname
LASTSTRTDT = NO_DATE
LASTSTRTTM = NO_TIME
PRDDAYS = 0
PRDHOURS = 0
PRDMINS = 0
PRDMONTHS = 0
PRDWEEKS = 0
PREDJOB_CHECKSTAT = ' '
PRED_JOBCOUNT = ' '
PRED_JOBNAME = ' '
SDLSTRTDT = NO_DATE
SDLSTRTTM = NO_TIME
STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS
STRTIMMED = ' '
TARGETSYSTEM = ' '
START_ON_WORKDAY_NOT_BEFORE = SY-DATUM
START_ON_WORKDAY_NR = 0
WORKDAY_COUNT_DIRECTION = 0
RECIPIENT_OBJ =
TARGETSERVER = ' '
DONT_RELEASE = ' '
DIRECT_START =
IMPORTING
JOB_WAS_RELEASED =
CHANGING
RET =
EXCEPTIONS
CANT_START_IMMEDIATE = 1
INVALID_STARTDATE = 2
JOBNAME_MISSING = 3
JOB_CLOSE_FAILED = 4
JOB_NOSTEPS = 5
JOB_NOTEX = 6
LOCK_FAILED = 7
OTHERS = 8
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
‎2006 Jan 23 9:59 AM
‎2006 Jan 23 9:59 AM
Use FM job_open, job_submit, job_close. to do the execution in background.
‎2006 Jan 23 9:59 AM
‎2006 Jan 23 10:01 AM
Hi !
You'll have to write a "wrap around" report that submits your report in a background-task.
Create a simple report and use the command:
submit z.... USER user VIA JOB job NUMBER n.
Please see the online-Help of the submit command for the full details.
Regards
Rainer
Please leave some Reward-Points if that helps you...
‎2006 Jan 23 10:11 AM
‎2006 Jan 23 10:13 AM
When a program runs in back ground the system field SYBATCH is flagged.
‎2006 Jan 23 10:24 AM
Hi Susmitha,
1. Is there any command that can be written in the program to execute itself in background?
a) Using few line of code
b) and 1 If Condition,
we can easily achieve what u want!
2.
Also, will any system field be set when you run a program in background?
Is this required ?
3. Try this code (just copy paste in new program)
It will have 2 radiobuttons, f=foreground, b=background
it will have a list (WRITE STATEMENTS)
it will create Background job
A Form does all the work
Notice the IF Condition
4. REPORT abc.
*----
PARAMETERS : f RADIOBUTTON GROUP g1 ,
b RADIOBUTTON GROUP g1.
*----
START-OF-SELECTION.
*----
Important
IF b = 'X'.
PERFORM dobackground.
LEAVE LIST-PROCESSING.
EXIT.
ENDIF.
*----
WRITE
WRITE 😕 'amit '.
WRITE 😕 'mittal'.
*----
FORM
*----
FORM dobackground.
DATA : jobname LIKE tbtcjob-jobname.
DATA : jobcount LIKE tbtcjob-jobcount.
jobname = 'TTEMP'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = jobname
IMPORTING
jobcount = jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
SUBMIT zam_temp0
VIA JOB jobname NUMBER jobcount AND RETURN.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = jobcount
jobname = jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
ENDFORM. "dobackground
regards,
amit m.
‎2006 Jan 23 10:41 AM
Hi Amit,
Will the values of parameters in selection screen be automatically passed in the job?
‎2006 Jan 23 11:02 AM
This is what you can do..
In the program write a perform which will call the FM POPUP_TO_DECIDE
Customise the inputs to display the exact buttons u want.
Based on the button selected submit the report.
if sy-batch = ''.
perform f1.
else.
write 'background'.
endif.
form f1.
data: o1(10) value 'foreground',
o2(10) value 'background'.
data: ans.
CALL FUNCTION 'POPUP_TO_DECIDE'
EXPORTING
DEFAULTOPTION = '1'
textline1 = 'line'
TEXTLINE2 = ' '
TEXTLINE3 = ' '
text_option1 = o1
text_option2 = o2
ICON_TEXT_OPTION1 = ' '
ICON_TEXT_OPTION2 = ' '
titel = 'title'
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = ans
.
if ans = '1'.
write 'foreground'.
elseif ans = '2'.
perform submit_job.
exit.
else.
write 'cancel '.
endif.
endform.
form submit_job.
data: jbcnt like TBTCJOB-JOBCOUNT,
jbname like TBTCJOB-JOBNAME value 'test_job'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
DELANFREP = ' '
JOBGROUP = ' '
jobname = jbname
SDLSTRTDT = NO_DATE
SDLSTRTTM = NO_TIME
JOBCLASS =
IMPORTING
JOBCOUNT = jbcnt
CHANGING
RET =
EXCEPTIONS
CANT_CREATE_JOB = 1
INVALID_JOB_DATA = 2
JOBNAME_MISSING = 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.
data RDD_USERNAME LIKE TBTCO-AUTHCKNAM VALUE 'DDIC'.
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
ARCPARAMS =
authcknam = rdd_username
COMMANDNAME = ' '
OPERATINGSYSTEM = ' '
EXTPGM_NAME = ' '
EXTPGM_PARAM = ' '
EXTPGM_SET_TRACE_ON = ' '
EXTPGM_STDERR_IN_JOBLOG = 'X'
EXTPGM_STDOUT_IN_JOBLOG = 'X'
EXTPGM_SYSTEM = ' '
EXTPGM_RFCDEST = ' '
EXTPGM_WAIT_FOR_TERMINATION = 'X'
jobcount = jbcnt
jobname = jbname
LANGUAGE = SY-LANGU
PRIPARAMS = ' '
REPORT = 'ZTESTQ'
VARIANT = ' '
IMPORTING
STEP_NUMBER =
EXCEPTIONS
BAD_PRIPARAMS = 1
BAD_XPGFLAGS = 2
INVALID_JOBDATA = 3
JOBNAME_MISSING = 4
JOB_NOTEX = 5
JOB_SUBMIT_FAILED = 6
LOCK_FAILED = 7
PROGRAM_MISSING = 8
PROG_ABAP_AND_EXTPG_SET = 9
OTHERS = 10
.
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 FUNCTION 'JOB_CLOSE'
EXPORTING
AT_OPMODE = ' '
AT_OPMODE_PERIODIC = ' '
CALENDAR_ID = ' '
EVENT_ID = ' '
EVENT_PARAM = ' '
EVENT_PERIODIC = ' '
jobcount = jbcnt
jobname = jbname
LASTSTRTDT = NO_DATE
LASTSTRTTM = NO_TIME
PRDDAYS = 0
PRDHOURS = 0
PRDMINS = 0
PRDMONTHS = 0
PRDWEEKS = 0
PREDJOB_CHECKSTAT = ' '
PRED_JOBCOUNT = ' '
PRED_JOBNAME = ' '
SDLSTRTDT = NO_DATE
SDLSTRTTM = NO_TIME
STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS
STRTIMMED = ' '
TARGETSYSTEM = ' '
START_ON_WORKDAY_NOT_BEFORE = SY-DATUM
START_ON_WORKDAY_NR = 0
WORKDAY_COUNT_DIRECTION = 0
RECIPIENT_OBJ =
TARGETSERVER = ' '
DONT_RELEASE = ' '
DIRECT_START =
IMPORTING
JOB_WAS_RELEASED =
CHANGING
RET =
EXCEPTIONS
CANT_START_IMMEDIATE = 1
INVALID_STARTDATE = 2
JOBNAME_MISSING = 3
JOB_CLOSE_FAILED = 4
JOB_NOSTEPS = 5
JOB_NOTEX = 6
LOCK_FAILED = 7
OTHERS = 8
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
‎2006 Jan 23 11:32 AM
Hi again,
1. U are right, it won't consider the
selected paramters.
2. One warkaround for this,
is we can FIX one Variant name
say, 'BKG'
for this purpose.
3. The backgrouund program,
will always use this Variant name for execution.
4. Hence, using FM, we will
Force the user to save
the selection-parametrers
to this Variant
(Before starting the BG Execution)
5. Ihave modified the code a little.
6.
REPORT abc.
*----
PARAMETERS : f RADIOBUTTON GROUP g1 ,
b RADIOBUTTON GROUP g1.
PARAMETERS : t(35) TYPE c.
*----
START-OF-SELECTION.
write 😕 'BATCH' , sy-batch.
*----
Important
IF b = 'X' and sy-batch = '' .
perform savevariant.
PERFORM dobackground.
LEAVE LIST-PROCESSING.
EXIT.
ENDIF.
*----
WRITE
WRITE 😕 'amit '.
WRITE 😕 'mittal'.
WRITE 😕 t.
*----
FORM
*----
FORM savevariant.
CALL FUNCTION 'RS_VARIANT_SAVE_FROM_SELSCREEN'
EXPORTING
curr_report = sy-repid
user_vari = 'BKG'
VARI_REPORT = 'BKG'
IMPORTING
VARIANT =
FUNCTION =
TABLES
P_SSCR =
P_VARI =
P_VARIVDAT =
P_VARIDYN =
P_VDATDYN =
P_DYNSFIELDS =
P_SCREENS =
EXCEPTIONS
ILLEGAL_VARIANT_NAME = 1
NOT_AUTHORIZED = 2
NO_REPORT = 3
REPORT_NOT_EXISTENT = 4
REPORT_NOT_SUPPLIED = 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.
ENDFORM. "savevariant
*----
FORM
*----
FORM dobackground.
DATA : jobname LIKE tbtcjob-jobname.
DATA : jobcount LIKE tbtcjob-jobcount.
jobname = 'TTEMP'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = jobname
IMPORTING
jobcount = jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
SUBMIT zam_temp0 USING SELECTION-SET 'BKG'
VIA JOB jobname NUMBER jobcount AND RETURN.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = jobcount
jobname = jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
ENDFORM. "dobackground
regards,
amit m.