Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Execute in background

Former Member
0 Likes
1,427

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,318

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.

10 REPLIES 10
Read only

Former Member
0 Likes
1,318

hi,

sy-batch = 'X'. "background job.

regards

vijay

Read only

Former Member
0 Likes
1,318

Use FM job_open, job_submit, job_close. to do the execution in background.

Read only

Former Member
0 Likes
1,318

Read this post for more information :

Read only

Former Member
0 Likes
1,318

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...

Read only

Former Member
0 Likes
1,318

Sy-ucomm should be <b>SJOB</b>

Read only

Former Member
0 Likes
1,318

When a program runs in back ground the system field SYBATCH is flagged.

Read only

Former Member
0 Likes
1,318

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.

Read only

0 Likes
1,318

Hi Amit,

Will the values of parameters in selection screen be automatically passed in the job?

Read only

Former Member
0 Likes
1,319

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.

Read only

Former Member
0 Likes
1,318

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.