BDC

来源:互联网 发布:海瑟矩阵 编辑:程序博客网 时间:2024/06/11 10:51

*----------------------------------------------------------------------*
*   INCLUDE ZINCL_BDC                                                  *
*----------------------------------------------------------------------*
DATA : _filename LIKE rlgrap-filename ,
       _filetype LIKE rlgrap-filetype VALUE 'DAT'.

DATA : session(1) TYPE c VALUE ' ',
       ctu(1) TYPE c VALUE 'X' ,
       data_key(80),key_len TYPE i VALUE 5.
DATA : group(12) TYPE c,
       ctumode(1) TYPE c .
*ctumode = p_auto.

DATA : user(12) TYPE c VALUE 'TESTING'.
*user = sy-uname.
DATA : cupdate(1) TYPE c VALUE 'L'.
DATA : keep(1) TYPE c,
       e_group(12) TYPE c.
DATA : holddate LIKE sy-datum,
       e_user(12) TYPE c.
*e_user = sy-uname.
*e_user = user.
DATA : e_keep(1) TYPE c VALUE ' '.
DATA : e_hdate LIKE sy-datum.
DATA: nodata VALUE '/'.

DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: e_group_opened.
TABLES: t100.

DATA: smalllog.

*----------------------
*   at selection screen
*----------------------
AT SELECTION-SCREEN.
* group and user must be filled for create session
  IF session = 'X' AND
     group = space OR user = space.
    MESSAGE e613(ms).
  ENDIF.

**---------------
**   open dataset
**---------------
FORM open_dataset USING p_dataset.
  OPEN DATASET p_dataset
               FOR INPUT IN TEXT MODE
               ENCODING DEFAULT.
  IF sy-subrc <> 0.
    WRITE: / text-e00, sy-subrc.
    STOP.
  ENDIF.
ENDFORM.                    "OPEN_DATASET
*----------------
*   close dataset
*----------------
FORM close_dataset USING p_dataset.
  CLOSE DATASET p_dataset.
ENDFORM.                    "close_dataset

*-----------------------------*
*   create batchinput session *
*   (not for call transaction using...)
*-----------------------------*
FORM open_group.
  IF session = 'X'.
    SKIP.
    WRITE: /(20) 'Create group'(i01), group.
    SKIP.
*   open batchinput group
    CALL FUNCTION 'BDC_OPEN_GROUP'
      EXPORTING
        client   = sy-mandt
        group    = group
*        user     = user
        user     = sy-uname
        keep     = keep
        holddate = holddate.
    WRITE: /(30) 'BDC_OPEN_GROUP'(i02),
            (12) 'returncode:'(i05),
                 sy-subrc.
  ENDIF.
ENDFORM.                    "open_group

*-------------------------
*   end batchinput session
*   (call transaction using...: error session)
*-------------------------
FORM close_group.
  IF session = 'X'.
*   close batchinput group
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    WRITE: /(30) 'BDC_CLOSE_GROUP'(i04),
            (12) 'returncode:'(i05),
                 sy-subrc.
  ELSE.
    IF e_group_opened = 'X'.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
      WRITE: /.
      WRITE: /(30) 'Fehlermappe wurde erzeugt'(i06).
    ENDIF.
  ENDIF.
ENDFORM.                    "close_group

*-----------------------------------------------------
*        Start new transaction according to parameters
*-----------------------------------------------------
FORM bdc_transaction USING tcode.
  DATA: l_mstring(480).
  DATA: l_subrc LIKE sy-subrc.
* batch input session
  IF session = 'X'.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        tcode     = tcode
      TABLES
        dynprotab = bdcdata.
    IF smalllog <> 'X'.
      WRITE: / 'BDC_INSERT'(i03),
               tcode,
               'returncode:'(i05),
               sy-subrc,
               'record:',
               sy-index.
    ENDIF.
* call transaction using
  ELSE.
    REFRESH messtab.
    ctumode = p_auto.
    CALL TRANSACTION tcode USING bdcdata
                     MODE   ctumode
                     UPDATE cupdate
                     MESSAGES INTO messtab.
    l_subrc = sy-subrc.
    IF smalllog <> 'X'.
      WRITE: / 'CALL_TRANSACTION',
               tcode,
               'returncode:'(i05),
               l_subrc,
               'record:',
               sy-index.
      LOOP AT messtab.
        SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
                                  AND   arbgb = messtab-msgid
                                  AND   msgnr = messtab-msgnr.
        IF sy-subrc = 0.
          l_mstring = t100-text.
          IF l_mstring CS '&1'.
            REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
          ELSE.
            REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
          ENDIF.
          CONDENSE l_mstring.
          WRITE: / messtab-msgtyp, l_mstring(250).
        ELSE.
          WRITE: / messtab.
        ENDIF.
      ENDLOOP.
      SKIP.
    ENDIF.
** Erzeugen fehlermappe ************************************************
    IF l_subrc <> 0 AND e_group <> space.
      IF e_group_opened = ' '.
        CALL FUNCTION 'BDC_OPEN_GROUP'
          EXPORTING
            client   = sy-mandt
            group    = e_group
*            user     = e_user
            user     = sy-uname
            keep     = e_keep
            holddate = e_hdate.
        e_group_opened = 'X'.
      ENDIF.
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode     = tcode
        TABLES
          dynprotab = bdcdata.
    ENDIF.
  ENDIF.
  REFRESH bdcdata.
ENDFORM.                    "bdc_transaction

*------------------------
*        Start new screen
*------------------------
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "bdc_dynpro

*--------------------
*        Insert field
*--------------------
FORM bdc_field USING fnam fval.
  IF fval <> nodata.
    CLEAR bdcdata.
    bdcdata-fnam = fnam.
    bdcdata-fval = fval.
    APPEND bdcdata.
  ENDIF.
ENDFORM.                    "bdc_field

DEFINE new_scr.
  clear bdcdata.
  bdcdata-program  = &1.
  bdcdata-dynpro   = &2.
  bdcdata-dynbegin = 'X'.
  append bdcdata.
  clear bdcdata.
END-OF-DEFINITION.

DEFINE add_fld.
  bdcdata-fnam  = &1.
  bdcdata-fval  = &2.
  append bdcdata.
END-OF-DEFINITION.
*----------------------
* Form update_from_file
*----------------------
DEFINE update_from_file.
  call function 'WS_UPLOAD'
    exporting
      filename                = &1
      filetype                = 'DAT'
    tables
      data_tab                = &2
    exceptions
      conversion_error        = 1
      file_open_error         = 2
      file_read_error         = 3
      invalid_type            = 4
      invalid_table_width     = 7
      no_batch                = 5
      unknown_error           = 6
      gui_refuse_filetransfer = 8
      customer_error          = 9
      others                  = 10.
END-OF-DEFINITION.

*----------------------
* Form download_to_file
*----------------------
DEFINE down_to_file.
  call function 'DOWNLOAD'
    exporting
      filename                = &1
      filetype                = 'ASC'
      item                    = 'Download to Excel file'
    tables
      data_tab                = &2
    exceptions
      conversion_error        = 1
      file_open_error         = 2
      file_read_error         = 3
      invalid_type            = 4
      no_batch                = 5
      unknown_error           = 6
      invalid_table_width     = 7
      gui_refuse_filetransfer = 8
      customer_error          = 9
      others                  = 10.
END-OF-DEFINITION.
* END of REPORT *

原创粉丝点击