SAP中的录屏BDC最贱实践

1 BDC知识介绍

BDC: batch data communication 主要用于把数据大量大批输入到SAP系统,这也就是我们说的录屏.
BDC是模拟屏幕操作(与按键精灵相似),记录相关屏幕出现顺序和处理过程,生产数据录入的格式文件,通过调整数据文件后,再运行BDC产生ABAP程序,最后可能生成的ABAP程序进行修改,得到最终的数据录入代码片断. 最后我将以MM02修改物料描述来进行实战.

2.SM35打开以下界面(要么SHDB)

在这里插入图片描述

3.新建记录

在这里插入图片描述

4.先输记录号,输入相应的程序事物代码,然后录屏

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.Example in the abap.
REPORT z_regex.

DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
 DATA: LV_MODE TYPE C VALUE 'N'.
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

DATA : LV_MATNR LIKE MARA-MATNR VALUE  '301000018'.
DATA: LV_MAKTX  LIKE MAKT-MAKTX  VALUE 'TEST02220518'.
 PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0060'.
            PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                          'RMMG1-MATNR'.
            PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                          '=ENTR'.
            PERFORM BDC_FIELD       USING 'RMMG1-MATNR'
                                           LV_MATNR.
            PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.
            PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                          'MSICHTAUSW-DYTXT(02)'.
            PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                          '=ENTR'.
            PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(02)'
                                           'X'.

            PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4004'.
            PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                          '/00'.
            PERFORM BDC_FIELD       USING 'BDC_SUBSCR'
                                          'SAPLMGMM  '.
            PERFORM BDC_FIELD       USING 'BDC_SUBSCR'
                                          'SAPLMGD1'.
            PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                           'MAKT-MAKTX'.
             PERFORM BDC_FIELD       USING
                                           'MAKT-MAKTX'
                                            LV_MAKTX.
            PERFORM BDC_FIELD       USING 'BDC_SUBSCR'
                                          'SAPLZGRP_MATERIAL' .
            PERFORM BDC_FIELD       USING 'BDC_SUBSCR'
                                          'SAPLZGRP_MATERIAL_OTHERS'.
            PERFORM BDC_FIELD       USING 'BDC_SUBSCR'
                                          'SAPLMGD1'  .

            PERFORM BDC_DYNPRO      USING 'SAPLSPO1' '0300'.
            PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                          'YES'.


            CALL TRANSACTION 'MM02' USING   BDCDATA
                                     MODE   LV_MODE
                                     UPDATE  'S'
                               MESSAGES INTO MESSTAB.  "  更新模式 f1可看
            CLEAR: BDCDATA[].



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.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.                    "BDC_FIEL
6 Summary

MODE 确定批输入的执行模式,有下面几个可选值:

执行模式MODE值(A、N):

MODE值 作用
A 显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。
E 只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。
N 不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 “S”、sy-msgid 为 “00”、sy-msgno 为 “344”、sy-msgv1 为 “SAPMSSY3”、sy-msgv2 为 “0131”。
P 不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。

更新模式UPDATE值(S):

UPDATE值 描述 作用
A 异步更新 被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。
S 同步更新 被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。
L 本地更新 被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。

  READ TABLE messtab INTO lw_bdcdata  WITH KEY msgtyp = 'E'.
    MOVE-CORRESPONDING in_info TO  out_info .
    IF sy-subrc <> 0 .
      COMMIT WORK AND WAIT.
      READ TABLE in_eina INTO ls_et_eina INDEX 1.
      IF NOT ls_et_eina-info_rec IS INITIAL.
        DO 20 TIMES.
          SELECT SINGLE infnr
          FROM eine
          INTO @DATA(lv_infnr)
                WHERE infnr = @ls_et_eina-info_rec
                AND ekorg = @in_info-ekorg
                AND esokz = @in_info-esokz.
          IF sy-subrc = 0.
            EXIT.
          ELSE.
            WAIT UP TO '0.1' SECONDS.
          ENDIF.
        ENDDO.

      ENDIF.
      out_info-code  =  'S' .
      out_info-msg   = '信息记录创建成功'.
    ELSE.
      out_info-code  =  'E' .
      out_info-msg   = '信息记录创建失败'.
    ENDIF.
KBETR要去空格

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值