SAP ABAP 程序延迟启动一个后台作业

接到一个需求,程序去启动一个后台作业,但是这个后台作业要在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(ooWITH '时区错'.
    WHEN 12.
      MESSAGE e000(ooWITH '时间戳错误'.
    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.
  DATAw_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(ooWITH '时区错'.
    WHEN 12.
      MESSAGE e000(ooWITH '时间戳错误'.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "TIMESTAMP_TO_DATE

TIMESTAMP_DURATION_ADD 函数参数的单位说明:

HHh小时
JHR年 年 
MINMIN分钟分钟
MISMIS微秒微秒
MONMON月 月 
MSMSE毫秒毫秒
NSNS纳秒纳秒
PSPS皮秒皮秒
SS秒 秒 
STDHR小时小时
TAGDAY天 天 
WCHWK周 周 

如果要给后台作业程序传一个参数怎么做呢:

如果要给后台作业程序传一堆参数怎么做呢?

 

 

DATA: SELTAB TYPE TABLE OF RSPARAMS.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值