Z_BDC_421930(关于BDC使用的exercise)

本文深入探讨了 SAP BDC (Business Data Cooperation) 技术的应用实践,包括如何通过 BDC 动态程序、字段操作实现销售订单的创建与修改流程。文章详细介绍了 SAP BDC 的使用步骤及注意事项。

report Z_BDC_421930.

DATABEGIN OF IT_UPLOAD OCCURS 0,
*Sales order number, item number, and rejection reason
        T_VBELN LIKE VBAK-VBELN,
        T_POSNR LIKE VBAP-POSNR,
        T_ABGRU LIKE VBAP-ABGRU,
      END OF IT_UPLOAD.

*       no standard page heading line-size 255.
DATABEGIN OF IT_MESSAGE1 OCCURS 0,
    LINE(100),
  END OF IT_MESSAGE1.

DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
      IT_MESSAGE LIKE  BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

PARAMETERS P_FILE LIKE RLGRAP-FILENAME.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM GET_FILENAME.

START-OF-SELECTION.
  PERFORM UPLOAD.


  LOOP AT IT_UPLOAD.


perform bdc_dynpro      using 'SAPMV45A' '0102'.
perform bdc_field       using 'BDC_CURSOR'
                              'VBAK-VBELN'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SUCH'.
perform bdc_field       using 'VBAK-VBELN'
                              IT_UPLOAD-T_VBELN.
perform bdc_dynpro      using 'SAPMV45A' '4001'.
perform bdc_field       using 'BDC_OKCODE'
                              '=T/07'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_002.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_003.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_004.
*perform bdc_field       using 'RV45A-KETDAT'
*                              record-KETDAT_005.
*perform bdc_field       using 'RV45A-KPRGBZ'
*                              record-KPRGBZ_006.
*perform bdc_field       using 'VBKD-PRSDT'
*                              record-PRSDT_007.
*perform bdc_field       using 'VBKD-ZTERM'
*                              record-ZTERM_008.
*perform bdc_field       using 'VBKD-INCO1'
*                              record-INCO1_009.
*perform bdc_field       using 'VBKD-INCO2'
*                              record-INCO2_010.
perform bdc_field       using 'BDC_CURSOR'
                              'RV45A-MABNR(02)'.
perform bdc_dynpro      using 'SAPMV45A' '4001'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_011.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_012.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_013.
perform bdc_field       using 'BDC_CURSOR'
                              'RV45A-MABNR(01)'.
perform bdc_dynpro      using 'SAPMV45A' '4001'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_014.
perform bdc_field       using 'BDC_CURSOR'
                              'KUAGV-KUNNR'.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_015.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_016.
perform bdc_dynpro      using 'SAPMV45A' '4001'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SICH'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_017.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_018.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_019.
perform bdc_field       using 'BDC_CURSOR'
                              'VBAP-ABGRU(01)'.
perform bdc_field       using 'VBAP-ABGRU(01)'
                              IT_UPLOAD-T_ABGRU.

*
*    PERFORM BDC_DYNPRO      USING 'SAPMV45A' '0102'.
*    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
*                                  'VBAK-VBELN'.
*    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                  '/00'.
*    PERFORM BDC_FIELD       USING 'VBAK-VBELN'
*                                  IT_UPLOAD-VBELN_001. " Sales order number
*    PERFORM BDC_DYNPRO      USING 'SAPMV45A' '4001'.
*    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                  '/00'.
*    PERFORM BDC_FIELD       USING 'RV45A-MABNR(01)' " Material
*                                  IT_UPLOAD-MABNR_01_012.
*    PERFORM BDC_FIELD       USING 'RV45A-KWMENG(01)' " Quantity
*                                  IT_UPLOAD-KWMENG_01_013.
*    PERFORM BDC_DYNPRO      USING 'SAPMV45A' '4001'.
*    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                  '=SICH'.
*    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
*                                  'RV45A-MABNR(01)'. " Material number

*PERFORM BDC_TRANSACTION USING 'VA02'.

    CALL TRANSACTION 'VA02'
                     USING  BDCDATA
                     MODE 'A'

*  there have three parameters : N A E .three mode ,you N means no notice.
*  A means show stem by step
                     UPDATE 'S'
                     MESSAGES INTO IT_MESSAGE.
* Message
    PERFORM DISPLAY_SUCCESS_MSG.
    REFRESH: BDCDATA, IT_MESSAGE.
    CLEAR: BDCDATA,IT_MESSAGE.
  ENDLOOP.

*include bdcrecx1.

*parameters: dataset(132) lower case.
***    DO NOT CHANGE - the generated data section - DO NOT CHANGE    ***
*
*   If it is nessesary to change the data section use the rules:
*   1.) Each definition of a field exists of two lines
*   2.) The first line shows exactly the comment
*       '* data element: ' followed with the data element
*       which describes the field.
*       If you don't have a data element use the
*       comment without a data element name
*   3.) The second line shows the fieldname of the
*       structure, the fieldname must consist of
*       a fieldname and optional the character '_' and
*       three numbers and the field length in brackets
*   4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE  ***
**data: begin of record,
** data element: VBELN_VA
*        VBELN_001(030),
** data element: BSTKD
*        BSTKD_002(035),
** data element: KUNAG
*        KUNNR_003(010),
** data element: KUNWE
*        KUNNR_004(010),
** data element: KETDAT
*        KETDAT_005(010),
** data element: KPRGBZ
*        KPRGBZ_006(001),
** data element: PRSDT
*        PRSDT_007(010),
** data element: DZTERM
*        ZTERM_008(004),
** data element: INCO1
*        INCO1_009(003),
** data element: INCO2
*        INCO2_010(028),
** data element: BSTKD
*        BSTKD_011(035),
** data element: KUNAG
*        KUNNR_012(010),
** data element: KUNWE
*        KUNNR_013(010),
** data element: BSTKD
*        BSTKD_014(035),
** data element: KUNAG
*        KUNNR_015(010),
** data element: KUNWE
*        KUNNR_016(010),
** data element: BSTKD
*        BSTKD_017(035),
** data element: KUNAG
*        KUNNR_018(010),
** data element: KUNWE
*        KUNNR_019(010),
** data element: ABGRU_VA
*        ABGRU_01_020(002),
*      end of record.

*** End generated data section ***
*
*start-of-selection.
*
*perform open_dataset using dataset.
*perform open_group.
*
*do.
*
*read dataset dataset into record.
*if sy-subrc <> 0. exit. endif.
*
*perform bdc_dynpro      using 'SAPMV45A' '0102'.
*perform bdc_field       using 'BDC_CURSOR'
*                              'VBAK-VBELN'.
*perform bdc_field       using 'BDC_OKCODE'
*                              '=SUCH'.
*perform bdc_field       using 'VBAK-VBELN'
*                              record-VBELN_001.
*perform bdc_dynpro      using 'SAPMV45A' '4001'.
*perform bdc_field       using 'BDC_OKCODE'
*                              '=T/07'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_002.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_003.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_004.
*perform bdc_field       using 'RV45A-KETDAT'
*                              record-KETDAT_005.
*perform bdc_field       using 'RV45A-KPRGBZ'
*                              record-KPRGBZ_006.
*perform bdc_field       using 'VBKD-PRSDT'
*                              record-PRSDT_007.
*perform bdc_field       using 'VBKD-ZTERM'
*                              record-ZTERM_008.
*perform bdc_field       using 'VBKD-INCO1'
*                              record-INCO1_009.
*perform bdc_field       using 'VBKD-INCO2'
*                              record-INCO2_010.
*perform bdc_field       using 'BDC_CURSOR'
*                              'RV45A-MABNR(02)'.
*perform bdc_dynpro      using 'SAPMV45A' '4001'.
*perform bdc_field       using 'BDC_OKCODE'
*                              '/00'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_011.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_012.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_013.
*perform bdc_field       using 'BDC_CURSOR'
*                              'RV45A-MABNR(01)'.
*perform bdc_dynpro      using 'SAPMV45A' '4001'.
*perform bdc_field       using 'BDC_OKCODE'
*                              '/00'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_014.
*perform bdc_field       using 'BDC_CURSOR'
*                              'KUAGV-KUNNR'.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_015.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_016.
*perform bdc_dynpro      using 'SAPMV45A' '4001'.
*perform bdc_field       using 'BDC_OKCODE'
*                              '=SICH'.
*perform bdc_field       using 'VBKD-BSTKD'
*                              record-BSTKD_017.
*perform bdc_field       using 'KUAGV-KUNNR'
*                              record-KUNNR_018.
*perform bdc_field       using 'KUWEV-KUNNR'
*                              record-KUNNR_019.
*perform bdc_field       using 'BDC_CURSOR'
*                              'VBAP-ABGRU(01)'.
*perform bdc_field       using 'VBAP-ABGRU(01)'
*                              record-ABGRU_01_020.
*perform bdc_transaction using 'VA02'.
*
*enddo.
*
*perform close_group.
*perform close_dataset using dataset.
*
*INCLUDE Z_BDC_421930_GET_FILENAMEF01.



*&---------------------------------------------------------------------*
*&      Form  GET_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form GET_FILENAME .

  CALL FUNCTION 'F4_FILENAME'
   EXPORTING
     PROGRAM_NAME        = SYST-CPROG
     DYNPRO_NUMBER       = SYST-DYNNR
*   FIELD_NAME          = ' '
   IMPORTING
     FILE_NAME           = P_FILE.

ENDFORM.

             " GET_FILENAME
*&---------------------------------------------------------------------*
*&      Form  UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form UPLOAD .

  DATA: P_FILE1 TYPE STRING,
        L_W_TAB.

  L_W_TAB = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

  P_FILE1 = P_FILE.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                = P_FILE1
      FILETYPE                = 'ASC'
      HAS_FIELD_SEPARATOR     = L_W_TAB
    TABLES
      DATA_TAB                = IT_UPLOAD
    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.                    " UPLOAD
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_SUCCESS_MSG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form DISPLAY_SUCCESS_MSG .
  SORT IT_MESSAGE BY MSGTYP MSGID.
  LOOP AT IT_MESSAGE WHERE MSGTYP = 'S' AND
                           MSGID  = 'CO'.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        MSGID               = IT_MESSAGE-MSGID
        MSGNR               = IT_MESSAGE-MSGNR
        MSGV1               = IT_MESSAGE-MSGV1
        MSGV2               = IT_MESSAGE-MSGV2
        MSGV3               = IT_MESSAGE-MSGV3
        MSGV4               = IT_MESSAGE-MSGV4
      IMPORTING
        MESSAGE_TEXT_OUTPUT = IT_MESSAGE1.
    APPEND IT_MESSAGE1.
    CLEAR IT_MESSAGE1.
  ENDLOOP.

endform.                    " DISPLAY_SUCCESS_MSG

FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "bdc_dynpro

*&---------------------------------------------------------------------*
*&      Form  bdc_field
*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值