• SAP BDC批量导入数据(转)


    Batch Input是一种数据批量输入SAP系统的辅助程序,SAP系统的资料、格式可以通过Batch Input录入SAP系统

    Batch Input的机制是模拟事务处理将数据录入R/3系统

    Batch Input类似SAPCATT,控制性更好,处理能力更强

     1、首先我们需要把需要批导入事务的操作步骤记录下来,可以用T-CODESHDB”来记录。

    COMMAND LINE中输入“SHDB”。

     

    2、进入TRANSACTION RECORDER界面

    3、点“NEW RECORDER”创建一个记录,现在以修改订单为例,键入记录名“ZAMAO”,输入事务代码“VA02”,

    然后“START RECORDING”。

    4、下面的任务就是记录下修改订单的操作步骤。

    5、填入订单号码,按确定

    6、现在来增加一下订单的PO DATE

    7、填入“2006.10.01”,点“保存”。

    8、这样就完成了一个最最简单的BDC录取工作,录完之后会出现系统运行的操作的跟踪,包括程序号,屏幕号,字段名,值等等,下面的任务是根据这些写到程序里面以完成SAP自动跑订单修改的这一动作。

    9、首先必须定义BDC变量:

    * BDC table
    DATA: t_bdc       LIKE bdcdata  OCCURS 0 WITH HEADER LINE,
               t_bdcmsg LIKE bdcmsgcoll  OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF t_log OCCURS 0,
                   information(289) TYPE c,   "
    返回信息
               END OF t_log.
    DATA: v_mode TYPE c VALUE 'N'.

    其中TABLE t_bdc中记录的具体的操作步骤,而TABLE t_bdcmsg是记录系统返回的信息,成功与否都记录到自定义的信息表t_log中。

    先写个记录BDC的函数:

     

    FORM. fm_set_bdc TABLES t_bdc STRUCTURE bdcdata
                                                         USING u_sign TYPE c
    u_par1
    u_par2.

    CLEAR: t_bdc.
    IF u_sign = 'X'.
       t_bdc-program = u_par1.
       t_bdc-dynpro = u_par2.
       t_bdc-dynbegin = u_sign.
    ELSE.
       t_bdc-fnam = u_par1.
       t_bdc-fval = u_par2.
    ENDIF.
    APPEND t_bdc.
    ENDFORM. 

     

    然后写入T_bdc:

     

    PERFORM. fm_set_bdc:
        TABLES t_bdc USING 'X'    'SAPMV45A'     '0102',
        TABLES t_bdc USING ' '    'BDC_OKCODE'  '/00',
        TABLES t_bdc USING ' '    'VBAK-VBELN'   it_display-vbeln,
        TABLES t_bdc USING 'X'   'SAPMV45A'      '4001',
        TABLES t_bdc USING ' ' '   VBKD-BSTDK'   '2006.10.01'.

    因为此处是修改操作,所以要切记写入的只是你修改的数据,千万别把订单本来的数据也写入t_bdc,如果写入则会把需要修改的所有订单都该成举例的订单的数据,而我们需要修改的仅仅是增加一个PO DATE2006.10.01”。

    然后是调用事物代码:

     

    CALL TRANSACTION 'VA42'
               USING t_bdc
               MODE v_mode "Background performance
               UPDATE 'S' "local updata
               MESSAGES INTO t_bdcmsg. "all message table

    v_mode是显示模式:

    A”表示显示每一步操作步骤,

    N”表示不显示步骤,

    E”表示当出现错误的时候显示出错的位置。

    系统信息写入到t_bdc中。

     

    最后是收集系统信息(成功与否,要是失败,失败的原因)并输出到SAP程序屏幕

     

    READ TABLE t_bdcmsg WITH KEY msgtyp = 'S'
                                                        msgid = 'V1'
                                                        msgnr = '311'.         "
    批导入成功的标志,可以自己debugt_bdcmsg中去找.
    IF sy-subrc EQ 0.
         CONCATENATE '
    订单号码:'
                                   it_display-vbeln
                                  ',
    项目号:'
                                  it_display-posnr
                                  '
    修改成功' INTO t_log.
        APPEND t_log.
        CLEAR t_log.
    ELSE.


    LOOP AT t_bdcmsg.
        IF t_bdcmsg-msgtyp = 'E'
            OR t_bdcmsg-msgv1 <> ''
            OR t_bdcmsg-msgv2 <> ''
            OR t_bdcmsg-msgv3 <> ''
            OR t_bdcmsg-msgv4 <> ''.
    MESSAGE ID t_bdcmsg-msgid                   
    “收集错误信息,并写入自定义的表t_log中。
                    TYPE 'S'
                    NUMBER t_bdcmsg-msgnr
                    WITH t_bdcmsg-msgv1
        t_bdcmsg-msgv2
        t_bdcmsg-msgv3
        t_bdcmsg-msgv4
        INTO t_log-information.
    CONCATENATE '
    订单号码:'
                            it_display-vbeln
                           ',
    项目号:'

                           it_display-posnr
                           '
    出错:'
                           t_log-information
    INTO t_log-information.
    APPEND t_log.
    CLEAR t_log.
    ENDIF.
    ENDLOOP.
    ENDIF.

    LOOP AT t_log.                          "显示出错信息

        WRITE:/ t_log-information.

    ENDLOOP.

    到次一个批导入程序基本完成。
  • 相关阅读:
    使用Stream方式处理集合元素
    Consumer方法结合Lambda表达式的应用
    java-遍历字符串的两种方式:1.char charAt(int index);2.char[] toCharArray()
    java-成员变量与局部变量的测试
    java-统计字符串中各字符次数
    java-字符串的遍历和字符串数组的遍历
    java-String类的获取方法(indexOf();substring()等)
    java-模拟登陆练习
    java-String类中的各字符串判断(包括" "和null的区别)
    java-String类的常见面试题
  • 原文地址:https://www.cnblogs.com/levin/p/1540642.html
Copyright © 2020-2023  润新知