二维码

[BDC] BDC的Session编程方式批处理上传数据

Twilight发表于 2015-01-21 17:34Twilight 最后回复于 2015-01-21 17:34 [复制链接] 4109 0

扩展阅读基础版:使用BDC的session编程方式导入数据

选择界面
  1. SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text-t00.
  2. PARAMETERS: group(12) DEFAULT 'ZSCMLT',        "group name of session
  3.             user(12)  DEFAULT sy-uname,        "user for session in batch
  4.             once TYPE i DEFAULT 5000,          "每个Session处理的数据条数
  5.             keep AS CHECKBOX DEFAULT 'X',      "' ' = delete session if finished;'X' = keep   session if finished
  6.             smalllog AS CHECKBOX DEFAULT 'X',  "' ' = log all transactions ;'X' = no transaction logging
  7.             autorun AS CHECKBOX."是否自动运行生成的Session
  8. SELECTION-SCREEN END OF BLOCK b0.
复制代码

主要的FORM:
  1. *&---------------------------------------------------------------------*
  2. *&      Form  bdc
  3. *&---------------------------------------------------------------------*
  4. FORM bdc .
  5.   DATA: linenum  LIKE sy-tabix,
  6.         fromnum  LIKE sy-index,
  7.         tonum    LIKE sy-index.
  8.   DATA: n TYPE i ,
  9.         m LIKE sy-tabix.
  10.   DATA: listobject LIKE abaplist OCCURS 0.

  11.   SORT itab BY infnr.
  12.   DESCRIBE TABLE itab LINES linenum.
  13.   n = linenum DIV once.
  14.   n = n + 1.
  15.   DO n TIMES.
  16.     itab_once[] = itab[].
  17.     fromnum = sy-index * once + 1 .
  18.     DELETE itab_once FROM fromnum TO linenum.
  19.     IF sy-index > 1 .
  20.       tonum = fromnum - once - 1 .
  21.       DELETE itab_once FROM 1 TO tonum.
  22.     ENDIF.
  23.     PERFORM bdc_once USING sy-index.
  24.   ENDDO.
  25.   IF autorun = 'X'.
  26.     CONCATENATE group '*' INTO group_all .
  27.     SUBMIT rsbdcsub
  28.       WITH mappe EQ group_all
  29.       WITH z_verarb EQ 'X'
  30.       WITH fehler EQ ' '
  31.       WITH von = sy-datum
  32.       WITH bis = sy-datum
  33.       AND RETURN
  34.       EXPORTING LIST TO MEMORY.
  35.     CALL FUNCTION 'LIST_FROM_MEMORY'
  36.          TABLES
  37.               listobject = listobject
  38.          EXCEPTIONS
  39.               not_found  = 1
  40.               OTHERS     = 2.
  41.     SKIP 2.
  42.     WRITE '后台Job设置情况:'.
  43.     ULINE.
  44.     CALL FUNCTION 'WRITE_LIST'
  45.          TABLES
  46.               listobject = listobject
  47.          EXCEPTIONS
  48.               empty_list = 1
  49.               OTHERS     = 2.
  50.   ENDIF.
  51.   LEAVE TO SCREEN 300.
  52. ENDFORM .
  53. *---------------------------------------------------------------------*
  54. *       FORM bdc_once                                                 *
  55. *---------------------------------------------------------------------*
  56. FORM bdc_once USING index.
  57.   DATA: c(3) ,
  58.         group_tmp(12).
  59.   c = index.
  60.   CONDENSE c .
  61.   CONCATENATE group c INTO group_tmp.
  62. *  PERFORM open_group.
  63.   SKIP.
  64.   WRITE: /(20) 'Create group'(i01), group_tmp.
  65.   SKIP.
  66.   CALL FUNCTION 'BDC_OPEN_GROUP'
  67.        EXPORTING
  68.             client = sy-mandt
  69.             group  = group_tmp
  70.             user   = user
  71.             keep   = keep.
  72.   WRITE: /(30) 'BDC_OPEN_GROUP'(i02),
  73.           (12) 'returncode:'(i05),
  74.                sy-subrc.

  75.   LOOP AT itab_once .
  76.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
  77.          EXPORTING
  78.               input  = itab_once-matnr
  79.          IMPORTING
  80.               output = itab_once-matnr.
  81.     REFRESH bdcdata .
  82.     CLEAR bdcdata .
  83.     PERFORM bdc_dynpro  USING 'SAPMM06I'   '0100'.
  84.     PERFORM bdc_field   USING 'BDC_OKCODE' '/00'.
  85.     PERFORM bdc_field   USING 'EINA-INFNR' itab_once-infnr.
  86.     PERFORM bdc_field   USING 'EINA-LIFNR' itab_once-lifnr.
  87.     PERFORM bdc_field   USING 'EINA-MATNR' itab_once-matnr.
  88.     PERFORM bdc_field   USING 'EINE-EKORG' itab_once-ekorg.
  89.     PERFORM bdc_field   USING 'EINE-WERKS' itab_once-werks.
  90.     CASE itab_once-esokz .
  91.       WHEN '0'.
  92.         PERFORM bdc_field   USING 'RM06I-NORMB' 'X'.
  93.       WHEN '3'.
  94.         PERFORM bdc_field   USING 'RM06I-LOHNB' 'X'.
  95.       WHEN '2'.
  96.         PERFORM bdc_field   USING 'RM06I-KONSI' 'X'.
  97.       WHEN 'P'.
  98.         PERFORM bdc_field   USING 'RM06I-PIPEL' 'X'.
  99.     ENDCASE.
  100.     PERFORM bdc_dynpro  USING 'SAPMM06I'   '0101'.
  101.     PERFORM bdc_field   USING 'BDC_OKCODE' '=EINE'.
  102.     PERFORM bdc_dynpro  USING 'SAPMM06I'   '0102'.
  103.     PERFORM bdc_field   USING 'BDC_OKCODE' '=BU'.
  104.     PERFORM bdc_field   USING 'EINE-APLFZ' itab_once-apsum.

  105.     CALL FUNCTION 'BDC_INSERT'
  106.          EXPORTING
  107.               tcode     = 'ME12'
  108.          TABLES
  109.               dynprotab = bdcdata.
  110.     IF smalllog <> 'X'.
  111.       WRITE: / 'BDC_INSERT'(i03),
  112.                'ME12',
  113.                'returncode:'(i05),
  114.                sy-subrc,
  115.                'RECORD:',
  116.                sy-index.
  117.     ENDIF.
  118.   ENDLOOP.

  119. *  PERFORM close_group.
  120.   CALL FUNCTION 'BDC_CLOSE_GROUP'.
  121.   WRITE: /(30) 'BDC_CLOSE_GROUP'(i04),
  122.           (12) 'returncode:'(i05),
  123.                sy-subrc.
  124. ENDFORM.                    " bdc
  125. *---------------------------------------------------------------------*
  126. *       FORM bdc_field                                               *
  127. *---------------------------------------------------------------------*
  128. FORM bdc_field USING fnam fval.
  129.   CLEAR bdcdata.
  130.   bdcdata-fnam = fnam.
  131.   bdcdata-fval = fval.
  132.   CONDENSE bdcdata-fval.
  133.   APPEND bdcdata.
  134. ENDFORM.
  135. *---------------------------------------------------------------------*
  136. *       FORM BDC_DYNPRO                                               *
  137. *---------------------------------------------------------------------*
  138. FORM bdc_dynpro USING program dynpro.
  139.   CLEAR bdcdata.
  140.   bdcdata-program  = program.
  141.   bdcdata-dynpro   = dynpro.
  142.   bdcdata-dynbegin = 'X'.
  143.   APPEND bdcdata.
  144. ENDFORM.

  145. *&---------------------------------------------------------------------*
  146. *&      Module  STATUS_0300  OUTPUT
  147. *&---------------------------------------------------------------------*
  148. MODULE status_0300 OUTPUT.
  149.   DATA: n TYPE i VALUE 3.
  150.   DATA: len TYPE i .
  151.   LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
  152.   SET PF-STATUS space.
  153.   SUPPRESS Dialog.
  154. ENDMODULE.                 " STATUS_0300  OUTPUT
复制代码
回复

使用道具 举报

快速回帖

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

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