Application Development 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: 

ABAP Program to schedule a background job including text file

0 Kudos

Hello,

I have a requirement to create a background job for a pricing change program, wherein we are using a text file to upload data and changing the pricing condition via "CALL TRANSACTION" method . After which I need to create a background job for this.

How to create a background job for a custom program that uses "Text File"

Currently I am using FM - JOB_OPEN/SUBMIT/ CLOSE

It's creating a job, but the data from my text file is not loaded in the job log.

My code is as stated below

***********************************************************************************************

** DECLARACTIONS FOR BACKGROUND JOB
DATA : jobname TYPE tbtcjob-jobname VALUE 'JOB_PRICING_UPLOAD',
jobclass TYPE tbtcjob-jobclass VALUE 'C',
jobcount TYPE tbtcjob-jobcount,
lv_startdate LIKE sy-datum,
lv_starttime LIKE sy-uzeit,
authcknam TYPE tbtcjob-authcknam,
V_VARIANT TYPE rsvar-variant,
lwa_vardesc TYPE varid,
ls_params like pri_params,
LV_RELEASED LIKE BTCH0000-CHAR1,
LV_RETURN TYPE I,
print_parameters TYPE pri_params.

DATA: BEGIN OF gt_varid.
INCLUDE STRUCTURE varid.
DATA: END OF gt_varid.

DATA: BEGIN OF gt_varit OCCURS 2.
INCLUDE STRUCTURE varit.
DATA: END OF gt_varit.

DATA: BEGIN OF gt_rsparams OCCURS 0.
INCLUDE STRUCTURE rsparams.
DATA: END OF gt_rsparams.

authcknam = sy-uname.
lv_startdate = sy-datum.
lv_starttime = sy-uzeit + 300.


CONCATENATE 'ZVK17_' SY-UNAME INTO V_VARIANT.


lwa_vardesc-report = 'ZRSDXAP_PRICING_UPLOAD'.
* fill VARID structure
IF gt_varid IS INITIAL.

gt_varid-mandt = sy-mandt.
gt_varid-report = lwa_vardesc-report.
gt_varid-variant = v_variant.
gt_varid-flag1 = space.
gt_varid-flag2 = space.
gt_varid-transport = space.
gt_varid-environmnt = 'A'. "Variant for batch and online
gt_varid-protected = space.
gt_varid-secu = space.
gt_varid-version = '1'.
gt_varid-ename = sy-uname.
gt_varid-edat = sy-datum.
gt_varid-etime = sy-uzeit.
gt_varid-aename = space.
gt_varid-aedat = space.
gt_varid-aetime = space.
gt_varid-mlangu = sy-langu.

*.fill VARIT structure - Variantentexte; variant texts
gt_varit-mandt = sy-mandt.
gt_varit-langu = sy-langu.
gt_varit-report = lwa_vardesc-report.
gt_varit-variant = V_VARIANT.
gt_varit-vtext = V_VARIANT.
append gt_varit.

ENDIF.
**********************************************************************
* concatenate 'ZPRICING_' 'UPLD' into v_variant.
IF gt_rsparams IS INITIAL.
GT_RSPARAMS-SELNAME = 'P_TEXTF'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_TEXTF.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_OUTF'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_OUTF.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_CHECK'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_CHECK.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_GROUP'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_GROUP.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_VK15'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = ' '.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_VK17'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = 'X'.
APPEND gt_rsparams.
ENDIF.

*call function 'RS_VARIANT_CONTENTS'
* exporting
* report = ZRSDXAP_PRICING_UPLOAD
* variant = ZPRICING_UPLD
** MOVE_OR_WRITE = 'W'
** NO_IMPORT = ' '
** EXECUTE_DIRECT = ' '
** IMPORTING
** SP =
* tables
** L_PARAMS =
** L_PARAMS_NONV =
** L_SELOP =
** L_SELOP_NONV =
* valutab =
** VALUTABL =
** OBJECTS =
** FREE_SELECTIONS_DESC =
** FREE_SELECTIONS_VALUE =
** FREE_SELECTIONS_OBJ =
** EXCEPTIONS
** VARIANT_NON_EXISTENT = 1
** VARIANT_OBSOLETE = 2
** OTHERS = 3
* .
*if sy-subrc <> 0.
** Implement suitable error handling here
*endif.

* Create Variant
CALL FUNCTION 'RS_CREATE_VARIANT'
EXPORTING
curr_report = gt_varid-report
curr_variant = gt_varid-variant
vari_desc = gt_varid
TABLES
vari_contents = gt_rsparams
vari_text = gt_varit
EXCEPTIONS
illegal_report_or_variant = 1
illegal_variantname = 2
not_authorized = 3
not_executed = 4
report_not_existent = 5
report_not_supplied = 6
variant_exists = 7
variant_locked = 8
OTHERS = 9.

IF sy-subrc <> 0.

ENDIF.

CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = JOBNAME
jobclass = JOBCLASS
IMPORTING
jobcount = JOBCOUNT
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.

IF sy-subrc = 0.
*SUBMIT ZRSDXAP_PRICING_UPLOAD TO SAP-SPOOL
* SPOOL PARAMETERS print_parameters WITHOUT SPOOL DYNPRO
* VIA JOB JOBNAME NUMBER JOBCOUNT
* AND RETURN.

CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
authcknam = authcknam
jobcount = jobcount
jobname = jobname
report = lwa_vardesc-report"ZRSDXAP_PRICING_UPLOAD
variant = V_VARIANT
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.

CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = JOBCOUNT
jobname = JOBNAME
STRTIMMED = 'X'
* sdlstrtdt = lv_startdate
* sdlstrttm = lv_starttime
IMPORTING
JOB_WAS_RELEASED = LV_RELEASED
CHANGING
RET = LV_RETURN
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.
IF sy-subrc = 0.

CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
report = gt_varid-report
variant = gt_varid-variant
flag_confirmscreen = 'X'
flag_delallclient = 'X'
EXCEPTIONS
not_authorized = 1
not_executed = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
variant_locked = 6
variant_not_existent = 7
no_corr_insert = 8
variant_protected = 9
OTHERS = 10.
IF sy-subrc <> 0.
ENDIF.

ENDIF.

ENDIF.

ENDIF.

CLEAR: gt_rsparams,gt_varit.

endform.

**************************************************************************************

Please help!

9 REPLIES 9

nmirandaghn
Participant

In order to get help please format your code with the "CODE" button in the toolbar.

Best regards.

Sandra_Rossi
Active Contributor
0 Kudos

Please edit your question, select your code and press the CODE button to make your code correctly colorized/indented, so that it's easier for us to analyze it.

Hello,
I have a requirement to create a background job for a pricing change program, wherein we are using a text file to upload data and changing the pricing condition via "CALL TRANSACTION" method . After which I need to create a background job for this.
How to create a background job for a custom program that uses "Text File"
Currently I am using FM - JOB_OPEN/SUBMIT/ CLOSE
It's creating a job, but the data from my text file is not loaded in the job log.
My code is as stated below
***********************************************************************************************
** DECLARACTIONS FOR BACKGROUND JOB
DATA : jobname TYPE tbtcjob-jobname VALUE 'JOB_PRICING_UPLOAD',
jobclass TYPE tbtcjob-jobclass VALUE 'C',
jobcount TYPE tbtcjob-jobcount,
lv_startdate LIKE sy-datum,
lv_starttime LIKE sy-uzeit,
authcknam TYPE tbtcjob-authcknam,
V_VARIANT TYPE rsvar-variant,
lwa_vardesc TYPE varid,
ls_params like pri_params,
LV_RELEASED LIKE BTCH0000-CHAR1,
LV_RETURN TYPE I,
print_parameters TYPE pri_params.

DATA: BEGIN OF gt_varid.
INCLUDE STRUCTURE varid.
DATA: END OF gt_varid.

DATA: BEGIN OF gt_varit OCCURS 2.
INCLUDE STRUCTURE varit.
DATA: END OF gt_varit.

DATA: BEGIN OF gt_rsparams OCCURS 0.
INCLUDE STRUCTURE rsparams.
DATA: END OF gt_rsparams.
authcknam = sy-uname.
lv_startdate = sy-datum.
lv_starttime = sy-uzeit + 300.


CONCATENATE 'ZVK17_' SY-UNAME INTO V_VARIANT.


lwa_vardesc-report = 'ZRSDXAP_PRICING_UPLOAD'.
* fill VARID structure
IF gt_varid IS INITIAL.

gt_varid-mandt = sy-mandt.
gt_varid-report = lwa_vardesc-report.
gt_varid-variant = v_variant.
gt_varid-flag1 = space.
gt_varid-flag2 = space.
gt_varid-transport = space.
gt_varid-environmnt = 'A'. "Variant for batch and online
gt_varid-protected = space.
gt_varid-secu = space.
gt_varid-version = '1'.
gt_varid-ename = sy-uname.
gt_varid-edat = sy-datum.
gt_varid-etime = sy-uzeit.
gt_varid-aename = space.
gt_varid-aedat = space.
gt_varid-aetime = space.
gt_varid-mlangu = sy-langu.

*.fill VARIT structure - Variantentexte; variant texts
gt_varit-mandt = sy-mandt.
gt_varit-langu = sy-langu.
gt_varit-report = lwa_vardesc-report.
gt_varit-variant = V_VARIANT.
gt_varit-vtext = V_VARIANT.
append gt_varit.

ENDIF.
**********************************************************************
* concatenate 'ZPRICING_' 'UPLD' into v_variant.
IF gt_rsparams IS INITIAL.
GT_RSPARAMS-SELNAME = 'P_TEXTF'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_TEXTF.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_OUTF'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_OUTF.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_CHECK'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_CHECK.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_GROUP'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = P_GROUP.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_VK15'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = ' '.
APPEND gt_rsparams.

GT_RSPARAMS-SELNAME = 'P_VK17'.
GT_RSPARAMS-KIND = 'P'.
GT_RSPARAMS-LOW = 'X'.
APPEND gt_rsparams.
ENDIF.

*call function 'RS_VARIANT_CONTENTS'
* exporting
* report = ZRSDXAP_PRICING_UPLOAD
* variant = ZPRICING_UPLD
** MOVE_OR_WRITE = 'W'
** NO_IMPORT = ' '
** EXECUTE_DIRECT = ' '
** IMPORTING
** SP =
* tables
** L_PARAMS =
** L_PARAMS_NONV =
** L_SELOP =
** L_SELOP_NONV =
* valutab =
** VALUTABL =
** OBJECTS =
** FREE_SELECTIONS_DESC =
** FREE_SELECTIONS_VALUE =
** FREE_SELECTIONS_OBJ =
** EXCEPTIONS
** VARIANT_NON_EXISTENT = 1
** VARIANT_OBSOLETE = 2
** OTHERS = 3
* .
*if sy-subrc <> 0.
** Implement suitable error handling here
*endif.

* Create Variant
CALL FUNCTION 'RS_CREATE_VARIANT'
EXPORTING
curr_report = gt_varid-report
curr_variant = gt_varid-variant
vari_desc = gt_varid
TABLES
vari_contents = gt_rsparams
vari_text = gt_varit
EXCEPTIONS
illegal_report_or_variant = 1
illegal_variantname = 2
not_authorized = 3
not_executed = 4
report_not_existent = 5
report_not_supplied = 6
variant_exists = 7
variant_locked = 8
OTHERS = 9.

IF sy-subrc <> 0.

ENDIF.

CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = JOBNAME
jobclass = JOBCLASS
IMPORTING
jobcount = JOBCOUNT
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.

IF sy-subrc = 0.
*SUBMIT ZRSDXAP_PRICING_UPLOAD TO SAP-SPOOL
* SPOOL PARAMETERS print_parameters WITHOUT SPOOL DYNPRO
* VIA JOB JOBNAME NUMBER JOBCOUNT
* AND RETURN.

CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
authcknam = authcknam
jobcount = jobcount
jobname = jobname
report = lwa_vardesc-report"ZRSDXAP_PRICING_UPLOAD
variant = V_VARIANT
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.

CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = JOBCOUNT
jobname = JOBNAME
STRTIMMED = 'X'
* sdlstrtdt = lv_startdate
* sdlstrttm = lv_starttime
IMPORTING
JOB_WAS_RELEASED = LV_RELEASED
CHANGING
RET = LV_RETURN
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.
IF sy-subrc = 0.

CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
report = gt_varid-report
variant = gt_varid-variant
flag_confirmscreen = 'X'
flag_delallclient = 'X'
EXCEPTIONS
not_authorized = 1
not_executed = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
variant_locked = 6
variant_not_existent = 7
no_corr_insert = 8
variant_protected = 9
OTHERS = 10.
IF sy-subrc <> 0.
ENDIF.

ENDIF.

ENDIF.

ENDIF.

CLEAR: gt_rsparams,gt_varit.

endform.
**************************************************************************************

Sandra_Rossi
Active Contributor
0 Kudos

Thanks for applying the CODE formatting (note also that you may just edit your question, no need to post a new comment).

Sandra_Rossi
Active Contributor
0 Kudos

How are you sure that the error is due to the program which launches the job, and not in the program executed in the job?

A program running in a background job cannot read a file which is located on the user's laptop, to avoid issues if the laptop is switched off. The file must be loaded on the application server for instance, and the job may then process it.

when you execute abap in background, server can only access its own resources, you can

save the file in the application server

or

save the file in a z table and read later

or

ftp read the file <- this i recommend

former_member1716
Active Contributor

m_gupte,

You cannot run a program in background that uses data from the file, the data from the file will not be stored anywhere locally.

Recommend you to first save the file in application server (AL11) and then read the file from there using OPEN DATASET and CLOSE DATASET syntaxes.

Have a selection screen where in you can mention the file path of AL11, just process the data by picking the file from there.

Regards!

matt
Active Contributor

Two things - why are you using OCCURS? This has been an obsolete form for decades. It's also bad programming.

Second - why are you not using SUBMIT? It would be simpler. Then you don't need to create a variant, just something like:

SUBMIT ZRSDXAP_PRICING_UPLOAD TO SAP-SPOOL
  SPOOL PARAMETERS print_parameters WITHOUT SPOOL DYNPRO
  VIA JOB JOBNAME NUMBER JOBCOUNT
  WITH P_TEXTF = PTEXTF
  WITH P_OUTF = POUTF
...
  AND RETURN.

Or if you must use a variant that persists, then the addition USING SELECTION-SET variant does the job.

matt
Active Contributor

I'm guessing P_TEXTF is a filepath and filename - as others suggested, if this is on the presentation server, then it's not going to work, since in background there is no connected presentation server.

However, the correct solution in my book is

  1. Remove the hideous tables with header lines
  2. Use the SUBMIT statement rather than JOB SUBMIT and creating a variant.
  3. Get your variable naming convention sorted out - you've got a mixture of non-prefixed variables (which is right if they're not global), L prefix which signifies local variables and G prefix with signifies global variables.
  4. Read the file before the submit. Write it out to the application server (or into a database table)
  5. Change ZRSDXAP_PRICING_UPLOAD so that it read the file from the application server or database table.