ABAP 在程序中啟動后台JOB


DATA: lv_job_name         LIKE tbtco-jobname,     "作業名
  lv_job_nr           LIKE tbtco-jobcount,          "作業號
  lv_job_released     TYPE c,
  lv_job_start_sofort TYPE c,
  lv_print_parameters TYPE pri_params. 

  DATA:lt_rspar  TYPE TABLE OF rsparams,
       lw_line LIKE LINE OF lt_rspar.
  "如果是要傳給PARAMETER  根據需求設置屏幕參數
  lw_line-selname = 'P_MONAT'.
  lw_line-kind    = 'P'.
  lw_line-sign    = 'I'.
  lw_line-option  = 'EQ'.
  lw_line-low     = p_monat.
  APPEND lw_line TO lt_rspar.
  "傳值給 SELECT-OPTION
  lw_line-selname = 'S_WERKS'.
  lw_line-kind    = 'S'.
  lw_line-sign    = 'I'.
  lw_line-option  = 'EQ'.
  lw_line-low     = '1000'.
  APPEND lw_line TO lt_rspar.
  APPEND lw_line TO lt_rspar.

  "JOB 名稱
  lv_job_name = job_name .
  "打開JOB 通過JOB name 獲得JOB號
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname          = lv_job_name
    IMPORTING
      jobcount         = lv_job_nr
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.
  IF syst-subrc = 0.

    "調用需要跑JOB的程序
    SUBMIT (lv_job_name)
        WITH SELECTION-TABLE  lt_rspar 
        USER syst-uname          " mandatory
       VIA JOB lv_job_name NUMBER lv_job_nr AND RETURN.

    "運行結束  關閉JOB
    IF sy-subrc = 0.
      CALL FUNCTION 'JOB_CLOSE'
        EXPORTING
          jobcount             = lv_job_nr
          jobname              = lv_job_name
          strtimmed            = 'X'
        IMPORTING
          job_was_released     = lv_job_released
        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 syst-subrc <> 0.
        MESSAGE '關閉后台作業出錯' TYPE 'I'.
      ELSE.
        MESSAGE '后台JOB開始運行' TYPE 'I'.
      ENDIF.
    ENDIF.
  ENDIF.


附:
JOB相關系統表:TBTC*
JOB的狀態: 可以使用系統函數查看  BDL_READ_JOB_STATUS  或者是自己去表 TBTCO 中查找根據STATUS 字段判斷是否完成  F 就是結束 A 出錯終止  R 是運行中
JOB運行時間:TBTCO中有開始日期,開始時間和結束日期結束時間 兩者直接相減就得出JOB運行的時間
JOB日志查看:系統中的日志好像是沒有存放在系統表而是文件中,可以通過函數 BP_JOBLOG_READ 獲取,傳入JOB名和JOB編號就可以獲得日志信息。
 "獲取失敗日志
  DATA:lt_log TYPE TABLE OF tbtc5 WITH HEADER LINE.
    CALL FUNCTION 'BP_JOBLOG_READ'
      EXPORTING
        client                = sy-mandt
        jobcount              = lw_job-jobcount
        jobname               = lw_job-jobname
      TABLES
        joblogtbl             = lt_log
      EXCEPTIONS
        cant_read_joblog      = 1
        jobcount_missing      = 2
        joblog_does_not_exist = 3
        joblog_is_empty       = 4
        joblog_name_missing   = 5
        jobname_missing       = 6
        job_does_not_exist    = 7
        OTHERS                = 8.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM