SAP有时候会有需求需要在程序里面触发设置JOB,今天介绍两种方法。
第一种:submit的方式,下面有两种方法,submit语句和function
第二种:在SE62中创建相应的event,配置上对应程序对应varaint,然后在程序中触发。
*&---------------------------------------------------------------------*
*& Report ZTESTLIAN2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztestlian_job MESSAGE-ID ys.
PARAMETERS: rd_1 RADIOBUTTON GROUP rd1 DEFAULT 'X',
rd_2 RADIOBUTTON GROUP rd1.
START-OF-SELECTION.
IF rd_1 = 'X'.
PERFORM create_job.
ELSEIF rd_2 = 'X'.
PERFORM raise_event.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CREATE_JOB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_job .
DATA: lv_jobname TYPE tbtcjob-jobname,
lv_jobcount TYPE tbtco-jobcount,
lv_a TYPE char10 VALUE '9'.
lv_jobname = 'Lian_test' && '01'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
* DELANFREP = ' '
* JOBGROUP = ' '
jobname = lv_jobname
* SDLSTRTDT = NO_DATE
* SDLSTRTTM = NO_TIME
jobclass = 'C' "low priority
check_jobclass = 'X'
IMPORTING
jobcount = lv_jobcount
* INFO =
* CHANGING
* RET =
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4 .
IF sy-subrc <> 0.
MESSAGE e000 WITH 'create job error'.
ENDIF.
*********************Directed executed job
SUBMIT ztestlian32 USER sy-uname
VIA JOB lv_jobname NUMBER lv_jobcount
WITH a EQ lv_a
AND RETURN.
********************* executed job by variant
* CALL FUNCTION 'JOB_SUBMIT'
* EXPORTING
* AUTHCKNAM = L_NAME
* JOBCOUNT = G_JOBCOUNT
* JOBNAME = G_JOBNAME
* REPORT = G_REPORT
* VARIANT = G_VARI_DES
* 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.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
* AT_OPMODE = ' '
* AT_OPMODE_PERIODIC = ' '
* CALENDAR_ID = ' '
* EVENT_ID = ' '
* EVENT_PARAM = ' '
* EVENT_PERIODIC = ' '
jobcount = lv_jobcount
jobname = lv_jobname
* 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 =
* INHERIT_RECIPIENT =
* REGISTER_CHILD = ABAP_FALSE
* 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.
message e000 with 'JOB executed failed'.
ENDIF.
ENDFORM. " CREATE_JOB
*&---------------------------------------------------------------------*
*& Form RAISE_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM raise_event.
CALL FUNCTION 'BP_EVENT_RAISE'
EXPORTING
eventid = 'ZLIAN_TEST_EVENT'
* EVENTPARM = ' '
* TARGET_INSTANCE = ' '
* TARGET_MODE = ' '
EXCEPTIONS
BAD_EVENTID = 1
EVENTID_DOES_NOT_EXIST = 2
EVENTID_MISSING = 3
RAISE_FAILED = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE E000 WITH 'Event raise failed!'.
ENDIF.
ENDFORM. " RAISE_EVENT