接到一个需求,程序去启动一个后台作业,但是这个后台作业要在30分钟后执行。
ABAP的时间戳100个单位是一秒,有区别与其它语言。
DEMO代码如下:
*&---------------------------------------------------------------------*
*& Report ZJAMES021
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZJAMES021.
data lv_olddate like SY-DATUM.
data lv_oldtime like SY-UZEIT.
data lv_oldZONE like SY-ZONLO.
data lv_oldstamp like TZONREF-TSTAMPS.
data lv_newdate like SY-DATUM.
data lv_newtime like SY-UZEIT.
data lv_newstamp like tzonref-tstamps.
lv_olddate = SY-DATUM.
lv_oldtime = SY-UZEIT.
lv_oldZONE = sy-zonlo.
"当前日期转时间戳
PERFORM date_to_timestamp using lv_olddate lv_oldtime lv_oldZONE CHANGING lv_oldstamp.
"时间戳增加
CALL FUNCTION 'TIMESTAMP_DURATION_ADD'
EXPORTING
timestamp_in = lv_oldstamp
timezone = 'UTC'
duration = 30
unit = 'MIN'
IMPORTING
timestamp_out = lv_newstamp.
"时间搓转为日期时间
PERFORM timestamp_to_date using lv_newstamp sy-zonlo CHANGING lv_newdate lv_newtime.
write :/ lv_olddate.
write :/ lv_oldtime.
write :/ lv_newdate.
write :/ lv_newtime.
"延迟启动一个后台作业
DATA :
lv_jobname TYPE tbtcjob-jobname,
lv_jobcount TYPE btcjobcnt.
lv_jobname = 'ZTPD0537_8000OUT'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
JOBNAME = lv_jobname
" SDLSTRTDT = lv_newdate
" SDLSTRTTM = lv_newtime
IMPORTING
jobcount = lv_jobcount
.
IF SY-SUBRC <> 0.
write :/ 'JOB_OPEN error'.
RETURN.
ENDIF.
"调用需要跑JOB的程序
SUBMIT ZPDU0008_DELAY
USER SY-UNAME
VIA JOB lv_jobname NUMBER lv_jobcount AND RETURN.
IF sy-subrc <> 0.
write :/ 'SUBMIT error'.
RETURN.
ENDIF.
CALL FUNCTION 'JOB_CLOSE' "Release 这个Job
EXPORTING
jobcount = lv_jobcount
jobname = lv_jobname
SDLSTRTDT = lv_newdate
sdlstrttm = lv_newtime
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.
write :/ 'JOB_CLOSE error'.
RETURN.
ENDIF.
*&---------------------------------------------------------------------*
*& Form date_to_timestamp
*&---------------------------------------------------------------------*
* 日期+时间+时区 转变为 时间戳
*----------------------------------------------------------------------*
FORM date_to_timestamp USING i_date LIKE sy-datum
i_time LIKE sy-uzeit
i_tzone LIKE tzonref-tzone
CHANGING o_tstamp LIKE tzonref-tstamps .
CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIME ZONE i_tzone.
CASE sy-subrc.
WHEN 8.
MESSAGE e000(oo) WITH '时区错'.
WHEN 12.
MESSAGE e000(oo) WITH '时间戳错误'.
WHEN OTHERS.
ENDCASE.
ENDFORM. "date_to_timestamp
*&---------------------------------------------------------------------*
*& Form TIMESTAMP_TO_DATE
*&---------------------------------------------------------------------*
* 时间戳+时区 转变为 日期和时间
*----------------------------------------------------------------------*
FORM timestamp_to_date USING i_tstamp LIKE tzonref-tstamps
i_tzone LIKE tzonref-tzone
CHANGING o_date LIKE sy-datum
o_time LIKE sy-uzeit.
DATA: w_tzone LIKE tzonref-tzone.
w_tzone = i_tzone.
CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIME o_time.
CASE sy-subrc.
WHEN 8.
MESSAGE e000(oo) WITH '时区错'.
WHEN 12.
MESSAGE e000(oo) WITH '时间戳错误'.
WHEN OTHERS.
ENDCASE.
ENDFORM. "TIMESTAMP_TO_DATE
TIMESTAMP_DURATION_ADD 函数参数的单位说明:
H | H | h | 小时 |
JHR | 年 | 年 | 年 |
MIN | MIN | 分钟 | 分钟 |
MIS | MIS | 微秒 | 微秒 |
MON | MON | 月 | 月 |
MS | MSE | 毫秒 | 毫秒 |
NS | NS | 纳秒 | 纳秒 |
PS | PS | 皮秒 | 皮秒 |
S | S | 秒 | 秒 |
STD | HR | 小时 | 小时 |
TAG | DAY | 天 | 天 |
WCH | WK | 周 | 周 |
如果要给后台作业程序传一个参数怎么做呢:
如果要给后台作业程序传一堆参数怎么做呢?
DATA: SELTAB TYPE TABLE OF RSPARAMS.