1. 程式人生 > >一個完整的BDC程式,僅供參考!(包括各種引數的配置)

一個完整的BDC程式,僅供參考!(包括各種引數的配置)

BDC的引數我們都比較熟悉了:可能有一個opt我們用得比較少,而且經常有問題的時候我們還需要F1去檢視是否有辦法可以解決。(例如由於commit work導致沒有返回message的)


LOOP AT IT_BDC.


    PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
    PERFORM bdc_field  USING:  'BDC_CURSOR'  'BKPF-WAERS',
                               'BDC_OKCODE'  '=SL',
                               'BKPF-BLDAT'  
L_BUDAT,
                               'BKPF-BLART'  'dz',
                               'BKPF-BUKRS'  'JP01',
                               'BKPF-BUDAT'  L_BUDAT,
                               'BKPF-WAERS'  'jpy',
                               'BKPF-XBLNR'   IT_BDC-BELNR,
                               'FS006-DOCID'  
'*'.

    PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
    PERFORM bdc_field  USING:  'BDC_CURSOR'  'RF05A-XPOS1(03)',
                               'BDC_OKCODE'   '/00',
                               'RF05A-AGBUK'  'JP01',
                               'RF05A-AGKOA'  'D',
                               'RF05A-AGUMS'  
'A',
                               'RF05A-XNOPS'  'X',
                               'RF05A-XMULK'  'X',
                               'RF05A-XPOS1(01)'  ' ',
                               'RF05A-XPOS1(03)'  'X'.

    PERFORM bdc_dynpro USING 'SAPMF05A' '0609'.
    PERFORM bdc_field  USING:  'BDC_CURSOR'  'RF05A-XNOPS(01)',
                               'BDC_OKCODE'   '=GO',
                               'RF05A-AGKON(01)'  '0001027941',
                               'RF05A-AGKOA(01)'  'S',
                               'RF05A-XNOPS(01)'  'X'.

    PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
    PERFORM bdc_field  USING:  'BDC_CURSOR'  'RF05A-SEL01(02)',
                               'BDC_OKCODE'   '/00',
                               'RF05A-SEL01(01)'  IT_BDC-BELNR,
                               'RF05A-SEL01(02)'  IT_BDC-BELNR1,
                               'RF05A-SEL01(03)'  IT_BDC-BELNR2,
                               'RF05A-SEL01(04)'  IT_BDC-BELNR3,
                               'RF05A-SEL01(05)'  IT_BDC-BELNR4,
                               'RF05A-SEL01(06)'  IT_BDC-BELNR5.

    PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
    PERFORM bdc_field  USING:  'BDC_CURSOR'  'RF05A-SEL01(01)',
                               'BDC_OKCODE'   '=PA'.

    PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
    PERFORM bdc_field  USING:  'BDC_OKCODE'  '=BU',
                               'BDC_SUBSCR'  'SAPDF05X                                6102PAGE',
                               'BDC_CURSOR'  'RF05A-ABPOS',
                               'RF05A-ABPOS'   '1'.

    CALL TRANSACTION 'F-30' USING BDCDATA
                            MODE  P_MODE
                            MESSAGES INTO L_BDCMSG.

*    IF SY-SUBRC EQ 0.
*      COMMIT WORK AND WAIT.
*    ELSE.
*      ROLLBACK WORK.
*    ENDIF.

    WAIT UP TO p_wait SECONDS.

    READ TABLE GT_LOG INTO WA_LOG WITH KEY BELNR IT_BDC-BELNR.
    LOOP AT L_BDCMSG.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               L_BDCMSG-MSGID
          msgnr               L_BDCMSG-MSGNR
          msgv1               L_BDCMSG-MSGV1
          msgv2               L_BDCMSG-MSGV2
          msgv3               L_BDCMSG-MSGV3
          msgv4               L_BDCMSG-MSGV4
        IMPORTING
          message_text_output WA_LOG-MSG.

      IF L_BDCMSG-MSGTYP EQ 'S'.
        CHECK L_BDCMSG-MSGID EQ 'F5' AND L_BDCMSG-MSGNR EQ '312'.
        WA_LOG-AUGBL L_BDCMSG-MSGV1.
      ENDIF.
     ENDLOOP.

     LOOP AT GT_LOG WHERE BELNR IT_BDC-BELNR.
       IF L_BDCMSG-MSGTYP EQ 'S'.
        CHECK L_BDCMSG-MSGID EQ 'F5' AND L_BDCMSG-MSGNR EQ '312'.
        MODIFY GT_LOG FROM WA_LOG TRANSPORTING AUGBL.
      ELSE.
        CHECK L_BDCMSG-MSGTYP EQ 'E'.
        MODIFY GT_LOG FROM WA_LOG TRANSPORTING MSG.
      ENDIF.
     ENDLOOP.

     CLEAR BDCDATA[].
     CLEAR L_BDCMSG[].

   ENDLOOP.

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
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.
*  IF fval <> nodata.
  CLEAR bdcdata.
  bdcdata-fnam fnam.
  bdcdata-fval fval.
  APPEND bdcdata.
*  ENDIF.
ENDFORM.                    "bdc_field