Enterprise Resource Planning Portal ERPGenie.COM Enterprise Resource Planning Portal

   Advertise | BLOG

Web ERPGenie.COM

Home | Vote for us |

ERPGenie.COM -> SAP Technical -> ABAP -> Tips and Tricks -> BDC and IDoc Status

Quicklinks

On inbound function modules processing IDocs the following template can be used to post a transaction and the appropriate status to the IDoc.

*---- Data definition -------------------------------------------------

  DATA: BEGIN OF BDCDATA OCCURS 5.

          INCLUDE STRUCTURE BDCDATA.

  DATA: END OF BDCDATA.

  DATA: C_TCODE LIKE BKPF-TCODE VALUE 'FB01'.

  DATA BEGIN OF MESSTAB OCCURS 10.      

         INCLUDE STRUCTURE BDCMSGCOLL.

  DATA END OF MESSTAB.                  

 

*---- Call transaction ------------------------------------------------

FORM Main_Program

  REFRESH BDCDATA.

  PERFORM APPEND_BDC USING 'SAPMF05A' '0100' '          ' '        '.

  PERFORM APPEND_BDC USING '        ' '    ' 'BKPF-BLDAT' '09031998'.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' '/00'.

  PERFORM APPEND_BDC USING 'SAPMF05A' '0300' '          ' '   '.

  PERFORM APPEND_BDC USING '        ' '    ' 'BSEG-WRBTR' '*'.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' 'BU'.

 

  CALL TRANSACTION 'FB01' USING BDCDATA MODE 'N' UPDATE 'S'.

  PERFORM UPDATE_IDOC_STATUS.

ENDFORM.

 

*--- Call transaction with errors to BDC -----------------------------

  REFRESH MESSTAB.

  CALL TRANSACTION C_TCODE USING BDCDATA MODE 'N' UPDATE 'S'

       MESSAGES INTO MESSTAB.

 

  RETURN_CODE = SY-SUBRC.

  IF RETURN_CODE = 0.

    LOOP AT MESSTAB.

      IF MESSTAB-MSGTYP = 'E'.

        RETURN_CODE = MESSTAB-MSGNR.

        SY-MSGID = 'B1'.

        SY-MSGNO = 999.

        SY-MSGV1 = 'Error: Check BDC'.

      ENDIF.

    ENDLOOP.

  ENDIF.

 

*--- Here we check the return code, if there was an error, we put the

*    transaction in a BDC session for the user to review and correct.

  IF RETURN_CODE NE 0.

    CALL FUNCTION 'BDC_OPEN_GROUP'

         EXPORTING

              CLIENT = SY-MANDT

              GROUP  = 'ZKJW'

              USER   = SY-UNAME

              KEEP   = 'X'.

    CALL FUNCTION 'BDC_INSERT'

         EXPORTING

              TCODE     = C_TCODE

         TABLES

              DYNPROTAB = BDCDATA.

    CALL FUNCTION 'BDC_CLOSE_GROUP'

         EXCEPTIONS

              NOT_OPEN    = 1

              QUEUE_ERROR = 2

              OTHERS      = 3.

  ENDIF.

 

*--- Append BDCDATA internal table ------------------------------------

FORM APPEND_BDC USING    VALUE(P_PROG)

                         VALUE(P_SCREEN)

                         VALUE(P_NAM)

                         VALUE(P_VAL).

  CLEAR BDCDATA.

 

  IF P_PROG NE SPACE.

    BDCDATA-PROGRAM   = P_PROG.

    BDCDATA-DYNPRO    = P_SCREEN.

    BDCDATA-DYNBEGIN  = 'X'.

    BDCDATA-FNAM      = P_NAM.

    BDCDATA-FVAL      = P_VAL.

  ELSE.

    BDCDATA-FNAM      = P_NAM.

    BDCDATA-FVAL      = P_VAL.

  ENDIF.

   APPEND BDCDATA.

 ENDFORM.

 

*&---------------------------------------------------------------------*

FORM UPDATE_IDOC_STATUS.

*--- Now we check the CALL TRANSACTION return code and set IDOC status

  CLEAR IDOC_STATUS.

  IF RETURN_CODE = 0.

    WORKFLOW_RESULT = '0'.

    IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

    IDOC_STATUS-STATUS = '53'.

    IDOC_STATUS-UNAME = SY-UNAME.

    IDOC_STATUS-REPID = SY-REPID.

    IDOC_STATUS-MSGTY = SY-MSGTY.

    IDOC_STATUS-MSGID = SY-MSGID.

    IDOC_STATUS-MSGNO = SY-MSGNO.

    IDOC_STATUS-MSGV1 = SY-MSGV1.

    IDOC_STATUS-MSGV2 = SY-MSGV2.

    IDOC_STATUS-MSGV3 = SY-MSGV3.

    IDOC_STATUS-MSGV4 = SY-MSGV4.

    RETURN_VARIABLES-WF_PARAM = 'Processed_IDOCs'.

    RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

    APPEND RETURN_VARIABLES.

  ELSE.

    WORKFLOW_RESULT = '99999'.

    IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

    IDOC_STATUS-STATUS = '51'.

    IDOC_STATUS-UNAME = SY-UNAME.

    IDOC_STATUS-REPID = SY-REPID.

    IDOC_STATUS-MSGTY = SY-MSGTY.

    IDOC_STATUS-MSGID = SY-MSGID.

    IDOC_STATUS-MSGNO = SY-MSGNO.

    IDOC_STATUS-MSGV1 = SY-MSGV1.

    IDOC_STATUS-MSGV2 = SY-MSGV2.

    IDOC_STATUS-MSGV3 = SY-MSGV3.

    IDOC_STATUS-MSGV4 = SY-MSGV4.

    RETURN_VARIABLES-WF_PARAM = 'Error_IDOCs'.

    RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

    APPEND RETURN_VARIABLES.

  ENDIF.

  APPEND IDOC_STATUS.

ENDFORM.                               " UPDATE_IDOC_STATUS

Contact Us | Polls | Add URL | Contribute | About | Privacy | Terms | Feedback | Help!

Message Board | Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job