Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235052
  • 博文数量: 90
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-04 15:21
文章分类

全部博文(90)

文章存档

2010年(7)

2009年(83)

我的朋友

分类:

2009-09-02 16:47:26

  FORM f_job_submit   USING    fp_v_session  TYPE d0100_mapn
                    CHANGING fp_v_jobcount TYPE btcjobcnt
                             fp_v_jobnam   TYPE btcjob.

* Declaration of Local Variable
  DATA:   l_status TYPE char1,
          l_jobnam TYPE btcjob VALUE 'ZLCN_FIN_524'.
* Declaration of Local Constants
  CONSTANTS: l_c_batch(1TYPE c VALUE  'B',           " Value B
             l_c_9999(4)  TYPE n VALUE  '9999'.        " Value 9999

  CLEAR : l_status .
  CONCATENATE l_jobnam sy-uzeit INTO fp_v_jobnam.

* Open Job scheduling for creating background job

  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname          = fp_v_jobnam
    IMPORTING
      jobcount         = fp_v_jobcount
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.

  IF sy-subrc <> 0.
*---Failed to create batch job for parking &
    MESSAGE i070 WITH fp_v_jobnam .

    LEAVE LIST-PROCESSING.
  ENDIF.

* Submit job to program RFBIBL00
  SUBMIT rfbibl00                                        "#EC CI_SUBMIT
                WITH callmode = l_c_batch
                WITH ds_name  = v_pfileu
                WITH max_comm = l_c_9999
                WITH xlog     = c_x
                USER sy-uname

      VIA JOB fp_v_jobnam NUMBER fp_v_jobcount AND RETURN.

  IF sy-subrc <> 0.
*---Job could not be submitted for program RFBIBL00
    MESSAGE i071.

    LEAVE LIST-PROCESSING.
  ENDIF.

* Process the batch job using program RSBDCSUB
  SUBMIT rsbdcsub WITH mappe = fp_v_session              "#EC CI_SUBMIT
                  WITH von   = sy-datum
                  USER sy-uname

     VIA JOB fp_v_jobnam NUMBER fp_v_jobcount AND RETURN.

  IF sy-subrc <> 0.
*---Job could not be processed for program RFBIBL00.
    MESSAGE i072.

    LEAVE LIST-PROCESSING.
  ENDIF.

*
* Close the Job scheduling
  CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
      jobcount             = fp_v_jobcount       " job count
      jobname              = fp_v_jobnam         " job name
      strtimmed            = c_x                 " strimmed
*    IMPORTING
*      job_was_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 sy-subrc <> 0.
*---Job could not close &
    MESSAGE i073 WITH fp_v_jobnam .    "Job could not close &.
    LEAVE LIST-PROCESSING.
  ENDIF.

*  Allow 15 sec to update the table TBTCO table
  WAIT UP TO 15 SECONDS.
  DO.
*  Read the job status.
    CALL FUNCTION 'BDL_READ_JOB_STATUS'
      EXPORTING
        jobname       = fp_v_jobnam
        jobnumber     = fp_v_jobcount
      IMPORTING
        jobstatus     = l_status
      EXCEPTIONS
        job_not_found = 1
        OTHERS        = 2.
* Check the job status whether it is canceled or not.
    IF sy-subrc = 0.
      IF l_status = c_a.
        MESSAGE i074.    "Job is canceled
        LEAVE LIST-PROCESSING.
      ENDIF.
      EXIT.
    ELSEIF sy-subrc = 1.
      WAIT UP TO 3 SECONDS.
    ELSE.
      MESSAGE i074.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDDO.
 
----------------------------------------------------------------------
 
  FORM f_read_job_log_msg   USING    fp_v_jobcount   TYPE btcjobcnt
                                   fp_v_jobnam     TYPE btcjob
                                   fp_v_session    TYPE d0100_mapn
                          CHANGING fp_i_logrep     TYPE ty_t_logrep
                                   fp_v_input_line TYPE int2
                                   fp_v_doc_post   TYPE int2.


* Data declaration of local internal tables
  DATA :  l_i_joblogtbl      TYPE STANDARD TABLE OF tbtc5,
          l_i_lat_ses        TYPE ty_t_lat_ses,
          l_i_temse          TYPE ty_t_temse,
          l_i_session_log    TYPE ty_t_session_log.

* Data declaration of local work areas
  DATA:   l_wa_temse         TYPE ty_temse,
          l_wa_bdclm         TYPE bdclm,
          l_wa_session_log   TYPE ty_session_log,
          l_wa_lat_ses       TYPE ty_lat_ses.
* Data declaration of local Variables
  DATA:   l_temp     TYPE i    VALUE 1,     "Temp variable
          l_status   TYPE char1,
          l_index    TYPE sytabix,
          l_msg_id   TYPE arbgb,
          l_msg_nr   TYPE msgnr,
          l_msg1     TYPE string,
          l_msg2     TYPE string,
          l_msg3     TYPE string,
          l_msg4     TYPE string,
          l_msg      TYPE string,
          l_len(2)   TYPE n.

* Declaration of field symbols
  FIELD-SYMBOLS:  TYPE ty_logrep.

* Declaration of local Constants
  CONSTANTS :
        l_c_auth       TYPE rstsauthch VALUE 'BATCH',
                                                  " Authority check
        l_c_prom       TYPE rstsprom   VALUE 'I',
                                                   " Processing mode
        l_c_rectyp     TYPE rstsrectyp VALUE 'VNL----'"Type
        l_c_msgcls     TYPE char2      VALUE 'FP'" message class
        l_c_msgtyp     TYPE char1      VALUE 'S',  " message type
        l_c_msgno      TYPE char3      VALUE '001'," message number
        l_c_progress   TYPE char1      VALUE 'R',
        l_c_f          TYPE char1      VALUE 'F',
        l_c_s          TYPE char1      VALUE 'S',
        l_c_e          TYPE char1      VALUE 'E',
        l_c_space      TYPE char1      VALUE ' ',
        l_c_msgid_00   TYPE char2      VALUE '00',
        l_c_357        TYPE char3      VALUE '357',
        l_c_00         TYPE char2      VALUE '00'.

*---------Wait until job is cancelled or finished---------------

  DO.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        percentage = 50
        text       = l_c_space.


    CALL FUNCTION 'BP_JOBLOG_READ'
      EXPORTING
        client                = sy-mandt
        jobcount              = fp_v_jobcount
        joblog                = space
        jobname               = fp_v_jobnam
      TABLES
        joblogtbl             = l_i_joblogtbl
      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.
*---Error reading the status of the job &
      MESSAGE i075 WITH fp_v_jobnam.

      LEAVE LIST-PROCESSING.
    ENDIF.

*   Check if the Job has been finished
    READ TABLE l_i_joblogtbl
      WITH KEY msgid = l_c_msgid_00
               msgno = '517'
      TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      EXIT.
    ENDIF.

*   Check if the Job has been cancelled
    READ TABLE l_i_joblogtbl
      WITH KEY msgid = l_c_msgid_00
               msgno = '518'
      TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      EXIT.
    ENDIF.

    REFRESH l_i_joblogtbl.

    WAIT UP TO 5 SECONDS.
  ENDDO.

  DO.
*   Get data for Queue info definition
    SELECT mandant                                      "#EC CI_NOFIRST
           groupid
           qid
           qstate
           credate
           cretime
          INTO TABLE l_i_lat_ses
              FROM apqi
              WHERE mandant = sy-mandt
              AND   groupid = fp_v_session
              AND   credate = sy-datum.

    IF sy-subrc <> 0.
*---"No batch input session exists with name & and date &
      MESSAGE i077 WITH fp_v_session sy-datum.

      LEAVE LIST-PROCESSING.
    ENDIF.

* Get latest session QID
    SORT l_i_lat_ses DESCENDING BY credate cretime.
    DELETE ADJACENT DUPLICATES FROM l_i_lat_ses COMPARING groupid.

    READ TABLE l_i_lat_ses
      WITH KEY qstate = l_c_progress
      TRANSPORTING NO FIELDS.
    IF sy-subrc NE 0.
      EXIT.
    ELSE.
      WAIT UP TO 5 SECONDS.
    ENDIF.

  ENDDO.

  IF NOT l_i_lat_ses[] IS INITIAL.
*   Get TEMSEID of the selected Queue ID
    READ TABLE l_i_lat_ses INTO l_wa_lat_ses INDEX 1.
    IF sy-subrc = 0 .
      SELECT temseid
             credate
             cretime
             INTO TABLE l_i_temse
             FROM apql
             WHERE mandant = sy-mandt
               AND credate = sy-datum
               AND groupid = fp_v_session
               AND qid     = l_wa_lat_ses-qid
               AND creator = sy-uname.                  "#EC CI_NOFIRST

      IF sy-subrc <> 0.
*---TEMSEID not available for the batch input session &
        MESSAGE i078 WITH fp_v_session.

        LEAVE LIST-PROCESSING.
      ELSE.
        SORT l_i_temse BY credate DESCENDING cretime.
        CLEAR l_wa_temse.
      ENDIF.
    ENDIF.
  ENDIF.

  IF NOT l_i_temse IS INITIAL.
    READ TABLE l_i_temse INTO l_wa_temse INDEX 1.
*   Call function module 'RSTS_OPEN_RLC' for
*   Opening TemSe Object To Read Line By Line With Conversion
    IF sy-subrc = 0.
      CALL FUNCTION 'RSTS_OPEN_RLC'
        EXPORTING
          name           = l_wa_temse-temseid
          client         = sy-mandt
          authority      = l_c_auth
          prom           = l_c_prom
          rectyp         = l_c_rectyp
          enqlock        = l_c_e
        EXCEPTIONS
          fb_call_handle = 4
          fb_error       = 8
          fb_rsts_noconv = 12
          fb_rsts_other  = 16
          no_object      = 20
          OTHERS         = 24.
      IF sy-subrc NE 0.
*---Error in opening the temse object &
        MESSAGE i081 WITH l_wa_temse-temseid.

        LEAVE LIST-PROCESSING.
      ENDIF.

*     Call function module 'RSTS_READ' for
*     Reading from TemSe Object
      CALL FUNCTION 'RSTS_READ'
        TABLES
          datatab        = l_i_session_log
        EXCEPTIONS
          fb_call_handle = 4
          fb_error       = 8
          fb_rsts_noconv = 12
          fb_rsts_other  = 16
          OTHERS         = 16.

      IF sy-subrc NE 0.
*---Error in reading the TemSe object
        MESSAGE i079 .

        LEAVE LIST-PROCESSING.
      ENDIF.

*    Call function module 'RSTS_CLOSE' for
*    Closing TemSe Object Again
      CALL FUNCTION 'RSTS_CLOSE'
        EXCEPTIONS
          OTHERS = 4.
      IF sy-subrc NE 0.
*---Error in closing the TemSe object
        MESSAGE i080 .

        LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ENDIF.

  l_temp = 1.
* Find out if there are any sessions in error.
  LOOP AT l_i_session_log INTO l_wa_session_log WHERE
                                   logmessage+73(1) = l_c_e.

    IF l_temp = 1.
      WRITE:/ text-017 COLOR 6 INVERSE ON INTENSIFIED ON CENTERED.
      "Parking of documents not occured: Log report
      CLEAR l_temp .
    ENDIF.

    l_status  = l_c_f.
    l_wa_bdclm = l_wa_session_log.

    l_msg_id = l_wa_bdclm-mid.
    l_msg_nr = l_wa_bdclm-mnr.

    IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
      l_len = l_wa_bdclm-mpar+0(2).
      IF l_len > 0 .
        SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
        l_msg1 = l_wa_bdclm-mpar+0(l_len).
        SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
      ENDIF.
    ENDIF.

    IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
      l_len = l_wa_bdclm-mpar+0(2).
      IF l_len > 0 .
        SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
        l_msg2 = l_wa_bdclm-mpar+0(l_len).
        SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
      ENDIF.
    ENDIF.

    IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
      l_len = l_wa_bdclm-mpar+0(2).
      IF l_len > 0 .
        SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
        l_msg3 = l_wa_bdclm-mpar+0(l_len).
        SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
      ENDIF.
    ENDIF.

    IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
      l_len = l_wa_bdclm-mpar+0(2).
      IF l_len > 0 .
        SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
        l_msg4 = l_wa_bdclm-mpar+0(l_len).
        SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
      ENDIF.
    ENDIF.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = l_msg_id
        lang      = sy-langu
        no        = l_msg_nr
        v1        = l_msg1
        v2        = l_msg2
        v3        = l_msg3
        v4        = l_msg4
      IMPORTING
        msg       = l_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.
    IF sy-subrc = 0.
      WRITE:/2 l_msg.
    ENDIF.
  ENDLOOP.

  l_index = 0.

  IF l_status <> l_c_f.
*--------collect the successful msgs
*    LOOP AT l_i_session_log INTO l_wa_session_log
*                  WHERE logmessage+73(1)  = l_c_msgtyp
*                    AND logmessage+74(2)  = l_c_msgcls
*                    AND logmessage+94(3)  = l_c_msgno.

    LOOP AT l_i_session_log INTO l_wa_session_log.
      IF         (    l_wa_session_log-logmessage+73(1)  = l_c_msgtyp
                  AND l_wa_session_log-logmessage+74(2)  = l_c_msgcls
                  AND l_wa_session_log-logmessage+94(3)  = l_c_msgno )
.

        l_index = l_index + 1.

        l_wa_bdclm = l_wa_session_log.

        l_msg_id = l_wa_bdclm-mid.
        l_msg_nr = l_wa_bdclm-mnr.

        IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
          l_len = l_wa_bdclm-mpar+0(2).
          IF l_len > 0 .
            SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
            l_msg1 = l_wa_bdclm-mpar+0(l_len).
            SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
          ENDIF.
        ENDIF.

        IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
          l_len = l_wa_bdclm-mpar+0(2).
          IF l_len > 0 .
            SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
            l_msg2 = l_wa_bdclm-mpar+0(l_len).
            SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
          ENDIF.
        ENDIF.

        IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
          l_len = l_wa_bdclm-mpar+0(2).
          IF l_len > 0 .
            SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
            l_msg3 = l_wa_bdclm-mpar+0(l_len).
            SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
          ENDIF.
        ENDIF.

        IF STRLEN( l_wa_bdclm-mpar ) NE 0 .
          l_len = l_wa_bdclm-mpar+0(2).
          IF l_len > 0 .
            SHIFT  l_wa_bdclm-mpar BY 2 PLACES.
            l_msg4 = l_wa_bdclm-mpar+0(l_len).
            SHIFT  l_wa_bdclm-mpar BY l_len PLACES.
          ENDIF.
        ENDIF.

        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            id        = l_msg_id
            lang      = sy-langu
            no        = l_msg_nr
            v1        = l_msg1
            v2        = l_msg2
            v3        = l_msg3
            v4        = l_msg4
          IMPORTING
            msg       = l_msg
          EXCEPTIONS
            not_found = 1
            OTHERS    = 2.
        IF sy-subrc = 0.

          READ TABLE fp_i_logrep ASSIGNING  INDEX l_index.
          IF sy-subrc IS INITIAL.
            -belnr = l_msg1.
          ENDIF.
        ENDIF.
        l_status  = l_c_s.
*Shadab Change Begin
      ELSEIF        (   l_wa_session_log-logmessage+73(1)  = l_c_msgtyp
                    AND l_wa_session_log-logmessage+74(2)  = l_c_00
                    AND l_wa_session_log-logmessage+94(3)  = l_c_357 ).

        l_index = l_index + 1.

        READ TABLE fp_i_logrep ASSIGNING  INDEX l_index.
        IF sy-subrc IS INITIAL.
          -belnr = 'Tran Error'.
        ENDIF.


      ENDIF"Shadab Change
*Shadab Change End
    ENDLOOP.
    IF NOT fp_i_logrep IS INITIAL.
      PERFORM f_display_job_log_msg USING fp_i_logrep.
      WRITE:/5  'Statistics:'(022),
            /10 fp_v_input_line, 'input lines'(003),
            /10 fp_v_doc_post, 'document posted'(004).
    ENDIF.
  ENDIF.
ENDFORM.                    " f_read_job_log_msg
阅读(1365) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~