【JOB】使用ABAP來操作JOB:Create,Insert Step以及Release

在ABAP中,我們有時候需要通過ABAP來定義JOB並執行它,也就是說,我們不使用SM36的GUI來創建Job。

自己親身經歷的一個case:我們有一個程序performance“很差”(並不是程序的問題,而是傳遞給其的數據量巨大),也就是說,我們外面有一個程序需要傳遞一個特別”巨大”的XML string流給該程序去解析,然而這個程序耗時也很可觀,在運行時,”貌試”SAP死掉。所以,最後,solution方案就是通過一個ABAP操作Job,當然有數據的傳遞,使用SAP Memory.

一. JOB相關信息

例如,作爲例子,我們需要一個job:去執行ZTEST_JOB_STEP1與ZTEST_JOB_STEP2這兩個ABAP程序。

ZTEST_JOB_STEP1的程序:

REPORT ZTEST_JOB_STEP1.

PARAMETERS: p_user type sy-uname.

write:/ ‘job step 1′.

WRITE:/ ‘Proceed User:’, p_user.

其中效果爲:帶有一個variant供我們後面job用

結果

ZTEST_JOB_STEP2的程序:

REPORT ZTEST_JOB_STEP2 NO STANDARD PAGE HEADING.

write:/ ‘job step 2′.

其中效果爲

二. 使用ABAP操作JOB

我們的JOB-ABAP代碼實現。

*&———————————————————————*
*& Report  ZTEST_ABAP_JOB
*&
*&———————————————————————*
*& test using ABAP to trigger Job and manipulate Job
*&
*&———————————————————————*

REPORT ZTEST_ABAP_JOB.

DATA:
w_jobid type tbtcjob-jobcount,
w_stepnm  type TBTCJOB-STEPCOUNT.

PARAMETERS:
p_job_nm  type tbtcjob-jobname OBLIGATORY,
p_var_st  type raldb-variant.

START-OF-SELECTION.

*1. using JOB_OPEN to open job
clear:w_jobid.
CALL FUNCTION ‘JOB_OPEN’
EXPORTING
*     DELANFREP              = ’ ’
*     JOBGROUP               = ’ ’
JOBNAME                = p_job_nm
*     SDLSTRTDT              = NO_DATE
*     SDLSTRTTM              = NO_TIME
*     JOBCLASS               =
IMPORTING
JOBCOUNT               = w_jobid
*   CHANGING
*     RET                    =
EXCEPTIONS
CANT_CREATE_JOB        = 1
INVALID_JOB_DATA       = 2
JOBNAME_MISSING        = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
write:/ ‘JOB_OPEN faild!’.
else.
write:/ ‘JOB_OPEN Successed!’.
write:/ ‘———–Job Name:’, p_job_nm.
write:/ ‘———–Job Count:’, w_jobid.
ENDIF.

*2. using JOB_SUMMIT to insert step
clear:w_stepnm.
CALL FUNCTION ‘JOB_SUBMIT’
EXPORTING
*     ARCPARAMS                         =
AUTHCKNAM                         = sy-uname
*     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                          = w_jobid
JOBNAME                           = p_job_nm
*     LANGUAGE                          = SY-LANGU
*     PRIPARAMS                         = ’ ’
REPORT = ‘ZTEST_JOB_STEP1′
VARIANT                           = p_var_st
IMPORTING
STEP_NUMBER                       = w_stepnm
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.
write:/ ‘JOB_SUBMIT faild!’.
else.
write:/ ‘JOB_SUBMIT Successed!’.
write:/ ‘———–Step:’, w_stepnm.
ENDIF.
clear:w_stepnm.
CALL FUNCTION ‘JOB_SUBMIT’
EXPORTING
*     ARCPARAMS                         =
AUTHCKNAM                         = sy-uname
*     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                          = w_jobid
JOBNAME                           = p_job_nm
*     LANGUAGE                          = SY-LANGU
*     PRIPARAMS                         = ’ ’
REPORT = ‘ZTEST_JOB_STEP2′
*      VARIANT                           =
IMPORTING
STEP_NUMBER                       = w_stepnm
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.
write:/ ‘JOB_SUBMIT faild!’.
else.
write:/ ‘———–Step:’, w_stepnm.
ENDIF.

*3. using JOB_CLOSE to close job
CALL FUNCTION ‘JOB_CLOSE’
EXPORTING
*     AT_OPMODE                         = ’ ’
*     AT_OPMODE_PERIODIC                = ’ ’
*     CALENDAR_ID                       = ’ ’
*     EVENT_ID                          = ’ ’
*     EVENT_PARAM                       = ’ ’
*     EVENT_PERIODIC                    = ’ ’
JOBCOUNT                          = w_jobid
JOBNAME                           = p_job_nm
*     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                         = ‘X’
*     TARGETSYSTEM                      = ’ ’
*     START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
*     START_ON_WORKDAY_NR               = 0
*     WORKDAY_COUNT_DIRECTION           = 0
*     RECIPIENT_OBJ                     =
*     TARGETSERVER                      = ’ ’
*     DONT_RELEASE                      = ’ ’
*     TARGETGROUP                       = ’ ’
*     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
INVALID_TARGET                    = 8
OTHERS = 9 .
IF SY-SUBRC <> 0.
write:/ ‘JOB_CLOSE faild!’.
else.
write:/ ‘JOB_CLOSE Successed!’.
ENDIF.

說明

JOB_OPEN: 意思爲:declare一個JOB並返回這個job的“內存ID”。

JOB_SUBMIT: 意思爲:insert step for job。注意,這裏需要爲每一個step進行submit(如上面是兩個program).

JOB_Close: 意思爲:Release剛創建的job.然後可以在SM37中查看.

然後,我們執行:

最後結果:

然後,我們去SM37中可以check:

可以再看一下spool:

如其中ZTEST_JOB_STEP1的spool :

而ZTEST_JOB_STEP2的spool :

發佈了12 篇原創文章 · 獲贊 9 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章