2020-09-02

SAP BDC 录屏:

事物码:SHDB

需求举例说明:比如 给物料标记删除。

一开始思路是想通过查找SAP标准的BAPI实现的,根据事物码MM06 按照正常的查找ABAP的方法找关联的BAPI。下图双击事物进去看这个事物码在那个包下

2020-09-02_第1张图片

通过以上方法不一定能找到对应的包,这次就是个例外,找到的 该BAPI_MATERIAL_DELETE就在MGA包中

2020-09-02_第2张图片

根据这个SAP 标准的BAPI 发现不能正常的在程序中实现批量删除,填充BAPI需要的参数调用后只能去到MM06的第一个屏幕

1、

2020-09-02_第3张图片

2、

2020-09-02_第4张图片

以上方式无法实现,果断更改BDC录屏实现;

BDC 录屏如:

2020-09-02_第5张图片

2020-09-02_第6张图片

最终生成的from子程序填充参数实现

    PERFORM bdc_dynpro      USING 'SAPMM03G' '0100'.

    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RM03G-WERKS'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM bdc_field       USING 'RM03G-MATNR'
                                  -matnr.
    PERFORM bdc_field       USING 'RM03G-WERKS'
                                  -werks.

    PERFORM bdc_dynpro      USING 'SAPMM03G' '0111'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RM03G-LVOWK'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=BU'.
    PERFORM bdc_field       USING 'RM03G-LVOWK'
                                   abap_true.

    PERFORM bdc_transaction USING 'MM06' CHANGING l_subrc l_msg.
 

 

*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR gt_bdcdata.
  gt_bdcdata-program  = program.
  gt_bdcdata-dynpro   = dynpro.
  gt_bdcdata-dynbegin = 'X'.
  APPEND gt_bdcdata.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  IF fval <> nodata.
    CLEAR gt_bdcdata.
    gt_bdcdata-fnam = fnam.
    gt_bdcdata-fval = fval.
    APPEND gt_bdcdata.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM bdc_transaction USING pv_tcode CHANGING pv_subrc pv_msg.
  DATA: l_mstring(480).
  DATA: l_subrc LIKE sy-subrc.
  DATA: lx_auth_check TYPE REF TO cx_root.
  DATA: l_auth_check_text TYPE string.
  DATA: lt_bapireturn TYPE TABLE OF bapiret2 WITH HEADER LINE.
  DATA: lw_return LIKE LINE OF lt_bapireturn.
* batch input session
  TRY.
      CALL TRANSACTION pv_tcode  USING gt_bdcdata
                       MODE   'N'
                       UPDATE 'S'
                       MESSAGES INTO gt_bdc_msg.
    CATCH cx_sy_authorization_error INTO lx_auth_check.
*     Authorization missing for user when executing transaction
      l_auth_check_text = lx_auth_check->get_text( ).
      sy-subrc = 99.
  ENDTRY.

  IF sy-subrc NE 0.
    pv_subrc = sy-subrc.
    CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
      TABLES
        imt_bdcmsgcoll = gt_bdc_msg
        ext_return     = lt_bapireturn.
    LOOP AT lt_bapireturn INTO  lw_return .
      CONCATENATE  pv_msg lw_return-message l_auth_check_text INTO pv_msg SEPARATED BY space.
    ENDLOOP.
  ENDIF.

  REFRESH gt_bdcdata.
  CLEAR:gt_bdcdata.
  CLEAR:gt_bdcdata[].
ENDFORM.

你可能感兴趣的:(SAP,ABAP)