ABAP BDC 的使用,两种使用方式(Call transaction,BATCH INPUT SESSION)

BDC基本流程

一  、定义一个BDC程序的基本流程

1. BDC录制,记录屏幕操作

2.产生相关的程序及数据格式文件

3.利用程序将相关单据信息读取到内表,并对内表的数据进行调整逻辑处理(数据检查或数据转换)

4.调用BDC录制程序导入数据

5.输出消息列表(基本操作对象:MESSTAB(TYPE BDCMSGCOLL))

二 、主要事务代码 : -SHDB(录屏)  -SM35(查看会话)

三、BDC两种实现方式 

"BDC数据定义
DATA: GV_MESSAGES  TYPE C LENGTH 200,
      BDCDATA      TYPE TABLE OF BDCDATA WITH HEADER LINE,
      GS_OPTION    TYPE CTU_PARAMS ,
      MESSTAB      TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.

1.CALL TRANSACTION

*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM APPEND_BDCDATA .
  DATA LV_MESSAGES  TYPE C LENGTH 200.
  LOOP AT GX_01 INTO GS_01 .
    CLEAR: BDCDATA , BDCDATA[],MESSTAB,MESSTAB[].
    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0060'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'RMMG1-MATNR'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' '=ENTR'.
    PERFORM APPEND_FIELDS USING 'RMMG1-MATNR' GS_01-MATNR.

    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0070'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE'  '=ENTR'.
    PERFORM APPEND_FIELDS USING 'MSICHTAUSW-KZSEL(01)' 'X'.

    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '4004'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' 'BU'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MARA-MATKL'.
    PERFORM APPEND_FIELDS USING 'MAKT-MAKTX'  GS_01-MAKTX.
    PERFORM APPEND_FIELDS USING 'MARA-BRGEW'  GS_01-BRGEW.
    PERFORM APPEND_FIELDS USING 'MARA-NTGEW'  GS_01-NTGEW.
    PERFORM APPEND_FIELDS USING 'MARA-GEWEI'  GS_01-GEWEI.

    CLEAR GS_OPTION.
    GS_OPTION-DISMODE ='A'.
    GS_OPTION-UPDMODE ='S'.
    CALL TRANSACTION  'MM02' USING BDCDATA "使用内表调用
                             OPTIONS FROM GS_OPTION " CTU_PARAMS
*                             UPDATE 'S' " 更新模式 s a
*                             MODE 'N'    "显示模式 A:前台,N:后台
                             MESSAGES INTO MESSTAB .
    READ TABLE MESSTAB WITH  KEY MSGID = 'M3'
                                      MSGNR = '801'.
    IF SY-SUBRC = 0 .
      WRITE:/ '物料' , GS_01-MATNR ,'修改成功!'.
    ELSE.
      READ TABLE  MESSTAB WITH KEY MSGID = 'M3'
                                   MSGNR = '810' .
      IF SY-SUBRC = 0 .
        WRITE:/ '物料' , GS_01-MATNR ,'修改成功!'.
      ELSE.
        WRITE:/ '物料ERROE' .

        LOOP AT MESSTAB WHERE MSGTYP = 'E'  .

          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              MSGID               = MESSTAB-MSGID
              MSGNR               = MESSTAB-MSGNR
              MSGV1               = MESSTAB-MSGV1
              MSGV2               = MESSTAB-MSGV2
              MSGV3               = MESSTAB-MSGV3
              MSGV4               = MESSTAB-MSGV4
            IMPORTING
              MESSAGE_TEXT_OUTPUT = LV_MESSAGES.
          WRITE:/ LV_MESSAGES.
        ENDLOOP .

      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.

2.BATCH INPUT SESSION

*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM APPEND_ABCDATA_BATCH .
  DATA GX_SESSION TYPE APQI-GROUPID VALUE 'ZMM02_GX_TEST' .
* 开启session
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
*     CLIENT              = SY-MANDT
*     DEST                = FILLER8
      GROUP               = GX_SESSION
*     HOLDDATE            = FILLER8
      KEEP                = 'X'
      USER                = SY-UNAME
*     RECORD              = FILLER1
*     PROG                = SY-CPROG
*     DCPFM               = '%'
*     DATFM               = '%'
*   IMPORTING
*     QID                 =
    EXCEPTIONS
      CLIENT_INVALID      = 1
      DESTINATION_INVALID = 2
      GROUP_INVALID       = 3
      GROUP_IS_LOCKED     = 4
      HOLDDATE_INVALID    = 5
      INTERNAL_ERROR      = 6
      QUEUE_ERROR         = 7
      RUNNING             = 8
      SYSTEM_LOCK_ERROR   = 9
      USER_INVALID        = 10
      OTHERS              = 11.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    EXIT.
  ENDIF.

  LOOP AT GX_01 INTO GS_01 .
    CLEAR: BDCDATA , BDCDATA[],MESSTAB,MESSTAB[].
    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0060'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'RMMG1-MATNR'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' '=ENTR'.
    PERFORM APPEND_FIELDS USING 'RMMG1-MATNR' GS_01-MATNR.

    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0070'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE'  '=ENTR'.
    PERFORM APPEND_FIELDS USING 'MSICHTAUSW-KZSEL(01)' 'X'.


    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '4004'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' 'BU'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MARA-MATKL'.
    PERFORM APPEND_FIELDS USING 'MAKT-MAKTX'  GS_01-MAKTX.
    PERFORM APPEND_FIELDS USING 'MARA-BRGEW'  GS_01-BRGEW.
    PERFORM APPEND_FIELDS USING 'MARA-NTGEW'  GS_01-NTGEW.
    PERFORM APPEND_FIELDS USING 'MARA-GEWEI'  GS_01-GEWEI.

*向SESSION插入事务
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE            = 'MM02'
*       POST_LOCAL       = NOVBLOCAL
*       PRINTING         = NOPRINT
*       SIMUBATCH        = ' '
*       CTUPARAMS        = ' '
      TABLES
        DYNPROTAB        = BDCDATA
      EXCEPTIONS
        INTERNAL_ERROR   = 1
        NOT_OPEN         = 2
        QUEUE_ERROR      = 3
        TCODE_INVALID    = 4
        PRINTING_INVALID = 5
        POSTING_INVALID  = 6
        OTHERS           = 7.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDLOOP.

* 关闭SESSION
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      NOT_OPEN    = 1
      QUEUE_ERROR = 2
      OTHERS      = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ELSE.
    WRITE:/'SUCC'.
  ENDIF.

ENDFORM.

BDC实现,上传文件

1.使用函数 WS_FILENAME_GET 获取文件路径

FORM GET_FIELNAME .
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '
*     DEF_PATH         = ' '
      MASK             = ',excel.xls,*.xls,text.txt,*.txt.'
      MODE             = 'O'
      TITLE            = '打开文件'
    IMPORTING
      FILENAME         = P_FILES
*     RC               =
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.

2.使用函数GUI_UPLOAD,上传txt文件

  DATA GV_FILE TYPE STRING.
* 1. 获取本地文件
  CHECK P_FILES IS NOT INITIAL .
*  2.从文件取数据
  TRANSLATE P_FILES TO UPPER CASE .
  FIND '.TXT' IN P_FILES .
  IF SY-SUBRC = 0 .
    GV_FILE = P_FILES.

    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        FILENAME                = GV_FILE
*       FILETYPE                = 'ASC'
        HAS_FIELD_SEPARATOR     = 'X'
*       HEADER_LENGTH           = 0
*       READ_BY_LINE            = 'X'
*       DAT_MODE                = ' '
*       CODEPAGE                = ' '
*       IGNORE_CERR             = ABAP_TRUE
*       REPLACEMENT             = '#'
*       CHECK_BOM               = ' '
*       VIRUS_SCAN_PROFILE      =
*       NO_AUTH_CHECK           = ' '
* IMPORTING
*       FILELENGTH              =
*       HEADER                  =
      TABLES
        DATA_TAB                = GX_01
* CHANGING
*       ISSCANPERFORMED         = ' '
      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.
* Implement suitable error handling here
    ENDIF.

3.使用函数TEXT_CONVERT_XLS_TO_SAP,上传excel文件

    FIND '.XLS' IN P_FILES .
    IF SY-SUBRC = 0 .
* EXCEL 文件的上传
      DATA  LT_RAW TYPE TRUXS_T_TEXT_DATA.
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
          I_FIELD_SEPERATOR    = 'x'
          I_LINE_HEADER        = 'x'
          I_TAB_RAW_DATA       = LT_RAW
          I_FILENAME           = P_FILES
        TABLES
          I_TAB_CONVERTED_DATA = GX_01
        EXCEPTIONS
          CONVERSION_FAILED    = 1
          OTHERS               = 2.
    ENDIF.
  ENDIF.

四、BDC录制,记录屏幕操作

*&---------------------------------------------------------------------*
*&      Form  APPEND_BDCDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM APPEND_BDCDATA .
  DATA LV_MESSAGES  TYPE C LENGTH 200.
  LOOP AT GX_01 INTO GS_01 .
    CLEAR: BDCDATA , BDCDATA[],MESSTAB,MESSTAB[].
    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0060'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'RMMG1-MATNR'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' '=ENTR'.
    PERFORM APPEND_FIELDS USING 'RMMG1-MATNR' GS_01-MATNR.

    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '0070'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE'  '=ENTR'.
    PERFORM APPEND_FIELDS USING 'MSICHTAUSW-KZSEL(01)' 'X'.

    PERFORM APPEND_SCREEN USING 'SAPLMGMM' '4004'.
    PERFORM APPEND_FIELDS USING 'BDC_OKCODE' 'BU'.
    PERFORM APPEND_FIELDS USING 'BDC_CURSOR' 'MARA-MATKL'.
    PERFORM APPEND_FIELDS USING 'MAKT-MAKTX'  GS_01-MAKTX.
    PERFORM APPEND_FIELDS USING 'MARA-BRGEW'  GS_01-BRGEW.
    PERFORM APPEND_FIELDS USING 'MARA-NTGEW'  GS_01-NTGEW.
    PERFORM APPEND_FIELDS USING 'MARA-GEWEI'  GS_01-GEWEI.

    CLEAR GS_OPTION.
    GS_OPTION-DISMODE ='A'.
    GS_OPTION-UPDMODE ='S'.
    CALL TRANSACTION  'MM02' USING BDCDATA "使用内表调用
                             OPTIONS FROM GS_OPTION " CTU_PARAMS
*                             UPDATE 'S' " 更新模式 s a
*                             MODE 'N'    "显示模式 A,N
                             MESSAGES INTO MESSTAB .
    READ TABLE MESSTAB WITH  KEY MSGID = 'M3'
                                      MSGNR = '801'.
    IF SY-SUBRC = 0 .
      WRITE:/ '物料' , GS_01-MATNR ,'修改成功!'.
    ELSE.
      READ TABLE  MESSTAB WITH KEY MSGID = 'M3'
                                   MSGNR = '810' .
      IF SY-SUBRC = 0 .
        WRITE:/ '物料' , GS_01-MATNR ,'修改成功!'.
      ELSE.
        WRITE:/ '物料ERROE' .

        LOOP AT MESSTAB WHERE MSGTYP = 'E'  .

          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              MSGID               = MESSTAB-MSGID
              MSGNR               = MESSTAB-MSGNR
              MSGV1               = MESSTAB-MSGV1
              MSGV2               = MESSTAB-MSGV2
              MSGV3               = MESSTAB-MSGV3
              MSGV4               = MESSTAB-MSGV4
            IMPORTING
              MESSAGE_TEXT_OUTPUT = LV_MESSAGES.
          WRITE:/ LV_MESSAGES.
        ENDLOOP .

      ENDIF.
    ENDIF.

  ENDLOOP.

ENDFORM.

FORM APPEND_SCREEN USING VALUE(P_PROGRAM)  "值传递
                          VALUE(P_DYNPRO) .
  CLEAR BDCDATA .
  BDCDATA-PROGRAM  = P_PROGRAM.
  BDCDATA-DYNPRO   = P_DYNPRO .
  BDCDATA-DYNBEGIN = 'X'.
  BDCDATA-FNAM     = ''.
  BDCDATA-FVAL     = ''.
  APPEND BDCDATA.

ENDFORM.
FORM APPEND_FIELDS USING VALUE(P_FIELD)
                         VALUE(P_VALUE).
  CLEAR BDCDATA .
  BDCDATA-PROGRAM  = ''.
  BDCDATA-DYNPRO   = '' .
  BDCDATA-DYNBEGIN = ''.
  BDCDATA-FNAM     = P_FIELD.
  BDCDATA-FVAL     = P_VALUE.
  APPEND BDCDATA.
ENDFORM .

相关参照

在屏幕上添加一个按钮

TABLES : SSCRFIELDS .

SELECTION-SCREEN FUNCTION KEY 1. "1-5

INITIALIZATION .
   TYPE-POOLS: ICON.
   SSCRFIELDS-FUNCTXT_01 = '@01@下载模板'.

  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      PERFORM  DOWNLOAD_TEMPLATE.
  ENDCASE.

BDCDATA 录屏相关字段 程序/ 屏幕 / 开始ID / 字段名 / 值

BCD执行完收集信息的相关字段

CALL TRANSACTION USING ....运行是参数字符串

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ABAP CALL TRANSACTION 'BP是一个ABAP语言中的事务调用命令。它用于在SAP系统中执行业务事务,并可以通过传递相关数据来实现自动化处理。在这个命令中,'BP'是指调用与业务伙伴相关的事务。引用中列举了一些与业务伙伴银行详细信息相关的函数组和函数模块,可以用于修改或添加业务伙伴的银行详细信息。而引用中提到了两种简单的事务调用方法,其中第一种使用CALL TRANSACTION命令直接调用事务,第二种使用CALL TRANSACTION命令并结合批量输入表来传递数据。引用中定义了一些与事务调用相关的数据对象,例如ls_bankdetail和ls_bankdetail_x用于存储业务伙伴银行详细信息,lt_return用于存储返回消息。综上所述,ABAP CALL TRANSACTION 'BP可以用于调用与业务伙伴相关的事务,并通过传递数据来修改或添加业务伙伴的银行详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SAP ABAP 更新BP银行数据](https://blog.csdn.net/weixin_43176021/article/details/129693577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ABAPDEMOCALLTRANSACTION使用_SAP刘梦_新浪博客](https://blog.csdn.net/senlinmu110/article/details/109651349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值