二维码

[BDC] 使用BDC的session编程方式导入数据

Twilight发表于 2015-01-21 14:44Twilight 最后回复于 2015-01-21 14:44 [复制链接] 3621 0

Call Transaction: 顾名思义,就是直接调用BDC进行数据批量导入。
优点:方便快捷,程序处理方便。缺点:日志管理能力差,需自己建透明表来维护数据。
BDC session:这是一种不直接运行,而是将BDC程序生成session,间接运行的一种方法。
优点:通过T-code SM35可以进行运行管理及日志管理,方便查错。缺点:相对方法1来说实现起来比较繁琐。

batch input session:它的理论是通过使用session(SM35)来达到bdc的效果,它是分三步走的:
  • BDC作业的创建BDC_OPEN_GROUP
  • BDC作业的执行BDC_INSERT
  • BDC作业的关闭BDC_CLOSE_GROUP

扩展阅读:使用BDC的CALL TRANSACTION编程方式导入数据

1、程序代码:
  1. *Structure for error message
  2. TYPES : BEGIN OF ty_s_error,
  3.            msg_err(60) TYPE c,
  4.          END OF ty_s_error.

  5. *Input Path
  6. PARAMETERS:
  7.    p_file   TYPE rlgrap-filename.                  " File Path

  8. * Structure Decleration
  9. DATA :
  10.    BEGIN OF fs_field,
  11.      bsart TYPE eban-bsart,             " Document Type.
  12.      matnr TYPE eban-matnr,             " Material Number.
  13.      menge TYPE eban-menge,             " Quantity Requested.
  14.      werks TYPE eban-werks,             " Plant.
  15.   END OF fs_field.

  16. *Internal table decleration
  17. DATA:
  18.     t_field    LIKE TABLE OF fs_field,
  19.     t_bdcdata  LIKE TABLE OF bdcdata.

  20. DATA:
  21.    fs_bdcdata LIKE LINE OF t_bdcdata,   "structure TYPE of bdcdata
  22.     w_str  TYPE string.

  23. * Data decleration
  24. DATA:
  25.    wa_path TYPE string ,
  26.    wa_error TYPE string,
  27.    wa_cnt   TYPE i,
  28.    w_mode    TYPE c,
  29.    wa_cnt1(2) TYPE n,
  30.    it_output TYPE TABLE OF ty_s_error,
  31.    wa_output LIKE LINE OF it_output.

  32. * Opening window for path selection
  33. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  34.   CALL FUNCTION 'F4_FILENAME'
  35.     EXPORTING
  36.       program_name  = syst-cprog
  37.       dynpro_number = syst-dynnr
  38.       field_name    = ' '
  39.     IMPORTING
  40.       file_name     = p_file.

  41.   TYPES:
  42.     fs_struct(4096) TYPE c OCCURS 0 .

  43.   DATA:
  44.     w_struct TYPE fs_struct.

  45. * Uploading excel file.
  46.   CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
  47.     EXPORTING
  48.       i_field_seperator          = 'X'
  49. *   I_LINE_HEADER              =
  50.       i_tab_raw_data             = w_struct
  51.       i_filename                 = p_file
  52.     TABLES
  53.       i_tab_converted_data       = t_field
  54.     EXCEPTIONS
  55.       conversion_failed          = 1
  56.       OTHERS                     = 2
  57.             .
  58.   IF sy-subrc <> 0.
  59.     MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
  60.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  61.   ENDIF.

  62.   PERFORM open_group .
  63.   LOOP AT t_field INTO fs_field.
  64.     REFRESH: t_bdcdata.
  65.     CLEAR  : fs_bdcdata.
  66.     PERFORM populate_bdcdata.
  67.     PERFORM insert_data.
  68.   ENDLOOP.                               " LOOP AT t_f..

  69. * Function to close BDC group.
  70.   PERFORM close_group.

  71. *&---------------------------------------------------------------------*
  72. *&      Form  open_group
  73. *&---------------------------------------------------------------------*
  74. *    Function to open BDC
  75. *----------------------------------------------------------------------*
  76. FORM open_group.
  77.   CALL FUNCTION 'BDC_OPEN_GROUP'
  78. EXPORTING
  79. *     CLIENT                    = SY-MANDT
  80. *     DEST                      = FILLER8
  81.     group                     = 'YH1610'    "定义产生的session名称
  82. *     HOLDDATE                  = FILLER8
  83.     keep                      = 'X'
  84.     user                      = sy-uname
  85. *     RECORD                    = FILLER1
  86. *     PROG                      = SY-CPROG
  87. *     DCPFM                     = '%'
  88. *     DATFM                     = '%'
  89. *   IMPORTING
  90. *     QID                       =
  91. EXCEPTIONS
  92.    client_invalid            = 1
  93.    destination_invalid       = 2
  94.    group_invalid             = 3
  95.    group_is_locked           = 4
  96.    holddate_invalid          = 5
  97.    internal_error            = 6
  98.    queue_error               = 7
  99.    running                   = 8
  100.    system_lock_error         = 9
  101.    user_invalid              = 10
  102.    OTHERS                    = 11
  103.           .
  104.   IF sy-subrc <> 0.
  105.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  106.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  107.   ELSE.
  108.     WRITE :/ 'Group Open' .
  109.   ENDIF.                               " IF sy-subrc <>
  110. ENDFORM.                               " Open_group
  111. *&---------------------------------------------------------------------*
  112. *&      Form  POPULATE_BDCDATA
  113. *&---------------------------------------------------------------------*
  114. *       Function to populate data
  115. *----------------------------------------------------------------------*
  116. FORM populate_bdcdata .

  117.   PERFORM :

  118.    fill_bdc_data USING 'SAPMM06B' '0100' 'X'  ' '  ' ',
  119.    fill_bdc_data USING  ''  ''  ''   'EBAN-BSART' fs_field-bsart,   " Document Type.
  120.    fill_bdc_data USING  ''  ''  ''   'BDC_OKCODE' '/00',            " Enter.

  121.    fill_bdc_data USING 'SAPMM06B'  '0106' 'X' ' ' ' ',
  122.    fill_bdc_data USING  '' '' '' 'EBAN-MATNR(01)'  fs_field-matnr,   " Material Number.
  123.    fill_bdc_data USING  '' '' ''  'EBAN-MENGE(01)' fs_field-menge,   " Quantity Requested.
  124.    fill_bdc_data USING  '' '' ''  'EBAN-WERKS(01)' fs_field-werks,   " Plant.
  125.    fill_bdc_data USING  '' '' ''  'BDC_OKCODE'   '/00',              " Enter.
  126.    fill_bdc_data USING 'SAPMM06B' '0102' 'X' ''  '' ,
  127.    fill_bdc_data USING  '' '' ''  'BDC_OKCODE' '=BU'.                 " Save.

  128. ENDFORM.                               " POPULATE_BDCDATA

  129. *&---------------------------------------------------------------------*
  130. *&      Form  FILL_BDC_DATA
  131. *&---------------------------------------------------------------------*
  132. *       Function to populate data
  133. *----------------------------------------------------------------------*
  134. *      -->VALUE(P_PROGRAM)  Program name
  135. *      -->VALUE(P_DYNPRO)   screen no
  136. *      -->VALUE(P_BEGIN)    screen start
  137. *      -->VALUE(P_FIELD)    field name
  138. *      -->VALUE(P_VALUE)    field value
  139. *----------------------------------------------------------------------*
  140. FORM fill_bdc_data  USING    value(p_program)
  141.                               value(p_dynpro)
  142.                               value(p_begin)
  143.                               value(p_field)
  144.                               value(p_value).

  145.   CLEAR fs_bdcdata.
  146.   IF p_begin = 'X'.
  147. *" Screen Values.
  148.     fs_bdcdata-program = p_program.    " program name
  149.     fs_bdcdata-dynpro  = p_dynpro.     " screen no
  150.     fs_bdcdata-dynbegin   = p_begin.   " screen start
  151.     APPEND fs_bdcdata TO t_bdcdata.
  152.   ELSE.
  153. *" Filed Values.
  154.     CLEAR fs_bdcdata.
  155.     fs_bdcdata-fnam = p_field.         " Field name
  156.     fs_bdcdata-fval = p_value.         " Field value
  157.     CONDENSE fs_bdcdata-fval.
  158.     APPEND fs_bdcdata TO t_bdcdata.

  159.   ENDIF.                               " IF P_BEGIN = 'X'

  160. ENDFORM.                               " FILL_BDC_DATA

  161. *&---------------------------------------------------------------------*
  162. *&      Form  INSERT_DATA
  163. *&---------------------------------------------------------------------*
  164. *       text
  165. *----------------------------------------------------------------------*
  166. FORM insert_data .
  167. *Data decleration
  168.   DATA:
  169.        t_msg TYPE TABLE OF bdcmsgcoll,   " Collecting messages
  170.        w_msg TYPE bdcmsgcoll,
  171.        w_msg1(51).

  172.   CALL FUNCTION 'BDC_INSERT'
  173.    EXPORTING
  174.      tcode                  = 'ME51'
  175. *   POST_LOCAL             = NOVBLOCAL
  176. *   PRINTING               = NOPRINT
  177. *   SIMUBATCH              = ' '
  178. *   CTUPARAMS              = ' '
  179.     TABLES
  180.       dynprotab              = t_bdcdata
  181.    EXCEPTIONS
  182.      internal_error         = 1
  183.      not_open               = 2
  184.      queue_error            = 3
  185.      tcode_invalid          = 4
  186.      printing_invalid       = 5
  187.      posting_invalid        = 6
  188.      OTHERS                 = 7.
  189.   IF sy-subrc <> 0.
  190. *    Error Found
  191.     WRITE : / 'DATA Not INSERTED'.
  192.   ELSE.
  193.     WRITE : / 'DATA INSERTED'.
  194.   ENDIF .                              " IF sy-subr
  195. ENDFORM.                               " INSERT_DATA

  196. *&---------------------------------------------------------------------*
  197. *&      Form  CLOSE_GROUP
  198. *&---------------------------------------------------------------------*
  199. *       Function to close BDC group
  200. *----------------------------------------------------------------------*
  201. FORM close_group .
  202.   CALL FUNCTION 'BDC_CLOSE_GROUP'
  203.     EXCEPTIONS
  204.       not_open    = 1
  205.       queue_error = 2
  206.       OTHERS      = 3.
  207.   IF sy-subrc <> 0.
  208.     MESSAGE 'UNABLE TO CLOSE BDC SESSION !' TYPE 'S' DISPLAY LIKE 'E'.
  209.   ENDIF.                               " IF sy-subrc ..
  210.   WRITE : / 'CLOSED SESSION'.
  211. ENDFORM.                               " CLOSE_GROUP
复制代码

2、执行程序
bdc_session 1.jpg
选择上传数据文件,然后SM35
bdc_session 2.jpg
查看session,选择刚刚用程序上传数据产生的session,点击‘Process’
处理模式:
  • Foreground - Step by step processing will be done by you.
  • Background – All the Processing will be done in Background.
  • Display Error – If there is any error, it will be displayed in log otherwise it is similar to background mode.

选择一种处理模式,点击'process'
bdc_session 3.jpg
如果这个session的状态,是'√'状态表示处理成功,'钟表'状态正在处理
如果有错误,我们可以点击Log,查看处理日志
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表