ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » SAP R/3 » 系统开发及跨应用设置 » 如何创建实用call transaction方法的BDC程序

标题: [笔记] 如何创建实用call transaction方法的BDC程序
离线 amyliu060


来自 beijing
精华贴数 0
个人空间 0
技术积分 18 (60674)
社区积分 0 (1765530)
注册日期 2008-4-29
论坛徽章:0
      
      

发表于 2008-4-29 13:28 
如何创建实用call transaction方法的BDC程序

一. 文件说明
   使用CT方法的BDC转换程序.txt 是源程序(做的是事务码为XK01的供应商数据的创建)。
   zver001.txt  是要上传数据。
二. 程序创建步骤:
     1 对相应功能进行录屏:
        shdb ------>xk01---------> 生成程序(zxk01)和文件(zxk01.txt).
     2.新建一个程序(zbdcxk01)
         (1)声明BDCDASTA:
               DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
               DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
              data    NODATA value '/' .
              TABLES: T100.
              parameters  p_file  like rlgrap-filename .
              at selection-screen on value-request for p_file.
              perform file_find .
         (2) 创建file_find子程序
              FORM file_find .
                       CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
             EXPORTING
                      STATIC    = 'X'
             CHANGING
                      FILE_NAME = p_file .
             ENDFORM.                    " file_find
        (3)声明目标文件的类型,从程序(zxk01)中拷贝以下代码.
             *** Generated data section with specific formatting - DO NOT CHANGE  ***
            data: begin of record occurs 0,
             * data element: LIF16
             LIFNR_001(016),
            * data element: KTOKK
            KTOKK_002(004),
            * data element: NAME1_GP
           NAME1_003(035),
            * data element: SORTL
           SORTL_004(010),
            * data element: LAND1_GP
           LAND1_005(003),
            * data element: SPRAS
            SPRAS_006(002),
           end of record.
       (4) 声明目标文件的结构体:
           data wa_record like record.
       (5)声明源文件的类型,根据业务需求,和数据格式自己做.
            data: begin of it_record occurs 0,
           * data element: LIF16
            LIFNR_001(016),
           * data element: NAME1_GP
            NAME1_003(035),
           * data element: SORTL
            SORTL_004(010),
           end of it_record.
      (6)声明源文件的结构体:
             data wa_it_record like it_record.
      (7)   在start-of-selection .下面调用uploadfile 程序.
               start-of-selection .
               perform uploadfile .
      (8)     创建uploadfile 子程序.
               data filename type string .
                filename = p_file .
              CALL FUNCTION 'GUI_UPLOAD'
             EXPORTING
             FILENAME                      =  filename
            *   FILETYPE                      = 'ASC'
            HAS_FIELD_SEPARATOR           = 'X'
            *   HEADER_LENGTH                 = 0
            *   READ_BY_LINE                  = 'X'
            *   DAT_MODE                      = ' '
            *   CODEPAGE                      = ' '
            *   IGNORE_CERR                   = ABAP_TRUE
            *   REPLACEMENT                   = '#'
            *   CHECK_BOM                     = ' '
            * IMPORTING
            *   FILELENGTH                    =
            *   HEADER                        =
           TABLES
            DATA_TAB                      =  it_record
           * EXCEPTIONS
           *   FILE_OPEN_ERROR               = 1
           *   FILE_READ_ERROR               = 2
           *   NO_BATCH                      = 3
           *   GUI_REFUSE_FILETRANSFER       = 4
           *   INVALID_TYPE                  = 5
           *   NO_AUTHORITY                  = 6
           *   UNKNOWN_ERROR                 = 7
           *   BAD_DATA_FORMAT               = 8
           *   HEADER_NOT_ALLOWED            = 9
           *   SEPARATOR_NOT_ALLOWED         = 10
           *   HEADER_TOO_LONG               = 11
           *   UNKNOWN_DP_ERROR              = 12
           *   ACCESS_DENIED                 = 13
           *   DP_OUT_OF_MEMORY              = 14
           *   DISK_FULL                     = 15
           *   DP_TIMEOUT                    = 16
           *   OTHERS                        = 17
          .
           IF SY-SUBRC <> 0.
           * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
          ENDFORM.                    " uploadfile
       (9)将源文件数据传给目标文件内表,自己写以下代码, record-LIFNR_001 等格式来源于程序(zxk01).
           loop at it_record into wa_it_record .
          record-LIFNR_001 = wa_it_record-lifnr_001 .
          record-KTOKK_002 = '0001'.
          record-NAME1_003 = wa_it_record-name1_003 .
          record-SORTL_004 = wa_it_record-SORTL_004.
          record-LAND1_005 = 'CN'.
          record-SPRAS_006 = 'EN'.
         append record .
         endloop .
     (10)  模拟功能实现步骤,这部分代码可以从程序(zxk01)中拷贝,但是要注意将 record-LIFNR_001改为 wa_record-LIFNR_001.其他类似项也一样             要加wa_,代码如下所示.
         loop at record into wa_record .
        perform bdc_dynpro      using 'SAPMF02K' '0100'.
        perform bdc_field       using 'BDC_CURSOR'
                              'RF02K-KTOKK'.
       perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
       perform bdc_field       using 'RF02K-LIFNR'
                              wa_record-LIFNR_001.
       perform bdc_field       using 'RF02K-KTOKK'
                              wa_record-KTOKK_002.
        perform bdc_dynpro      using 'SAPMF02K' '0110'.
        perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-SPRAS'.
       perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
       perform bdc_field       using 'LFA1-NAME1'
                              wa_record-NAME1_003.
        perform bdc_field       using 'LFA1-SORTL'
                              wa_record-SORTL_004.
        perform bdc_field       using 'LFA1-LAND1'
                              wa_record-LAND1_005.
        perform bdc_field       using 'LFA1-SPRAS'
                              wa_record-SPRAS_006.
       perform bdc_dynpro      using 'SAPMF02K' '0120'.
       perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-KUNNR'.
       perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
       perform bdc_dynpro      using 'SAPMF02K' '0130'.
       perform bdc_field       using 'BDC_CURSOR'
                              'LFBK-BANKS(01)'.
       perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
        perform bdc_dynpro      using 'SAPLSPO1' '0300'.
       perform bdc_field       using 'BDC_OKCODE'
                              '=YES'.
      (11) 创建 bdc_dynpro子程序,可以在程序(zxk01)中拷贝
         FORM BDC_DYNPRO  USING   PROGRAM DYNPRO.
        CLEAR BDCDATA.
        BDCDATA-PROGRAM  = PROGRAM.
        BDCDATA-DYNPRO   = DYNPRO.
        BDCDATA-DYNBEGIN = 'X'.
        APPEND BDCDATA.
        ENDFORM.                    " BDC_DYNPRO
      (12) 创建bdc_field 程序,可以在程序(zxk01)中拷贝
        FORM BDC_FIELD  USING    P_FNAM  P_FVAL.
        IF P_FVAL <> NODATA.
       CLEAR BDCDATA.
       BDCDATA-FNAM = P_FNAM.
       BDCDATA-FVAL = P_FVAL.
       APPEND BDCDATA.
       ENDIF.
      ENDFORM.                    " BDC_FIELD
    (13) 调用CALL TANSACTION方法 将'XK01' 换成相应的事物码即可.
        call transaction 'XK01' USING BDCDATA MODE 'N'
         UPDATE 'S' MESSAGES INTO messtab.
         clear bdcdata.
         refresh bdcdata.
        DATA: L_MSTRING(480).
        DATA: L_SUBRC LIKE SY-SUBRC.
       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.
       endloop .
    (14)整个过程已经结束,检查激活该程序,运行并从中选择需要上传的文件例如:zver001.txt,然后回车就可以完成了.
    注意事项:
           在该程序的书写过程中在以下几处设置断点可以检查出程序中的错误.
           (1)bdcdata
              看里面是否有数据
           (2) append record .
                看里面是否有数据
           (3) loop at it_record into wa_it_record .
                 看里面是否有数据
          (4)bdcdata,record和it_record都有数据那么就看
                 perform bdc_field       using 'RF02K-LIFNR'
                              wa_record-LIFNR_001.
                 是  wa_record-LIFNR_001还是  record-LIFNR_001.


只看该作者    顶部
离线 amyliu060


来自 beijing
精华贴数 0
个人空间 0
技术积分 18 (60674)
社区积分 0 (1765530)
注册日期 2008-4-29
论坛徽章:0
      
      

发表于 2008-4-29 13:31 
刚才BDC程序用到的文件格式:
11079        zhangling        zhang
11071        xiaoshan        xiao


只看该作者    顶部
离线 awarecan
Instructor


精华贴数 0
个人空间 0
技术积分 1702 (981)
社区积分 5 (15282)
注册日期 2003-8-5
论坛徽章:3
授权会员2008北京奥运纪念徽章:击剑生肖徽章2007版:龙   
      

发表于 2008-4-29 14:22 
鼓励一下新人,加油!


__________________
北京ABAP全日班,10/13开课

博彦科技 SAP授权培训伙伴 北京/上海/天津
010-82826580
021-51311836
只看该作者    顶部
离线 tieshou444
忧郁的蓝色


精华贴数 0
个人空间 0
技术积分 1217 (1439)
社区积分 163 (2637)
注册日期 2008-3-5
论坛徽章:4
授权会员ERP板块每日发贴之星2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:跳水  
      

发表于 2008-4-29 22:38 
看这程序太熟悉了,楼主是不是我现在的同学,xiaoshan???


__________________
SAP & ENGLISH
只看该作者    顶部
离线 tieshou444
忧郁的蓝色


精华贴数 0
个人空间 0
技术积分 1217 (1439)
社区积分 163 (2637)
注册日期 2008-3-5
论坛徽章:4
授权会员ERP板块每日发贴之星2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:跳水  
      

发表于 2008-5-1 21:12 
死了都要顶


__________________
SAP & ENGLISH
只看该作者    顶部
离线 sofy124
moneymoneyhome


精华贴数 0
个人空间 0
技术积分 3351 (440)
社区积分 2095 (582)
注册日期 2006-7-25
论坛徽章:19
生肖徽章2007版:羊     
      

发表于 2008-5-3 11:19 


QUOTE:
原帖由 tieshou444 于 2008-5-1 21:12 发表
死了都要顶

不至于吧?哈哈


__________________
MM/WM/ABAP/BASIS
————————————————————
MSN:SOFY9878124@HOTMAIL.COM
加我请说明理由。
只看该作者    顶部
离线 tieshou444
忧郁的蓝色


精华贴数 0
个人空间 0
技术积分 1217 (1439)
社区积分 163 (2637)
注册日期 2008-3-5
论坛徽章:4
授权会员ERP板块每日发贴之星2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:跳水  
      

发表于 2008-5-4 16:46 
死了也不顶了

QUOTE:
原帖由 sofy124 于 2008-5-3 11:19 发表

不至于吧?哈哈




__________________
SAP & ENGLISH
只看该作者    顶部
离线 linxiong1984



精华贴数 0
个人空间 0
技术积分 4 (156036)
社区积分 0 (1769406)
注册日期 2008-5-5
论坛徽章:0
      
      

发表于 2008-5-6 10:34 
可以借鉴的就是好东西啊


只看该作者    顶部
离线 thiefsky123



精华贴数 0
个人空间 0
技术积分 2 (230170)
社区积分 0 (1849793)
注册日期 2008-8-30
论坛徽章:0
      
      

发表于 2008-9-13 18:22 
直接构造bdcdata不是更方便?


只看该作者    顶部
离线 VagrantLee
监督员


来自 广东省东莞市
精华贴数 0
个人空间 0
技术积分 8816 (137)
社区积分 11609 (130)
注册日期 2002-11-18
论坛徽章:74
玉兔每日论坛发贴之星2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球
2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:足球2008北京奥运纪念徽章:跆拳道2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:羽毛球

发表于 2008-9-14 15:43 
Copy回去实验一下~


__________________
很高兴认识从事SAP的朋友....让我们一起学习,共同进步....QQ:1876283(请注明)
欢迎访问我的博客:SAP学习&休闲中心欢迎你
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问