Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Inbound Idoc

Former Member
0 Kudos

Hi All,

How to create an inbound functional module.

Please send me the sample code.

2 REPLIES 2

h_senden2
Active Contributor
0 Kudos

check for instance IDOC_INPUT_ORDERS

regards,

Hans

varma_narayana
Active Contributor
0 Kudos

Hi..

For this u have to Copy any Standard inbound FM such as IDOC_INPUT_MATMAS01 and change the Source code.

Sample Code:

*--- Declaration of local variables

DATA: C_SEGNAM(10) TYPE C VALUE 'Z1INVRV'.

*-Loop through the IDOCs

LOOP AT IDOC_CONTRL.

*---Loop through the data for the IDOC

LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.

CASE IDOC_DATA-SEGNAM.

WHEN C_SEGNAM.

  • Here we get the info from the idoc table

IT_Z1INVRV = IDOC_DATA-SDATA.

ENDCASE.

PERFORM REV_INV.

ENDLOOP.

PERFORM UPDATE_IDOC_STATUS.

ENDLOOP.

FORM REV_INV "Reverse invoice form

*--- Local variables & constants

DATA: C_TCODE LIKE BKPF-TCODE VALUE 'VF11'. "BDC transaction code

*--- Now we can build the bdc table to call the reversal transaction start of screen 109

CLEAR BDC_TAB.

BDC_TAB-PROGRAM = 'SAPMV60A'.

BDC_TAB-DYNPRO = '109'.

BDC_TAB-DYNBEGIN = 'X'.

APPEND BDC_TAB.

*--- Document number

CLEAR BDC_TAB.

BDC_TAB-FNAM = 'KOMFK-VBELN(01)'.

BDC_TAB-FVAL = IT_Z1INVRV-XBLNR. "Billing document number

APPEND BDC_TAB.

*--- OK Code for screen 109

CLEAR BDC_TAB.

BDC_TAB-FNAM = 'BDC_OKCODE'.

BDC_TAB-FVAL = 'SICH'.

APPEND BDC_TAB.

*--- Now we can call transaction 'VF11' with the populated bdc table. The transaction is called inside the idoc-contrl loop, so a transaction will be called for every idoc (journal). the transaction is called in no-display mode ('N') because this code runs in background as it is called by ale. The update is specified to be synchronous ('S') because we have to wait for the result to update the idoc status correctly.

CALL TRANSACTION C_TCODE USING BDC_TAB MODE 'N' UPDATE 'S'.

*--- Store the return code for use in another form (status update)

RETURN_CODE = SY-SUBRC.

*--- 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 SY-SUBRC NE 0.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = 'ZINVRV'

USER = C_ALE_USER

KEEP = 'X'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = C_TCODE

TABLES

DYNPROTAB = BDC_TAB.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3.

ELSE. "No problems

C_EXISTS = 'N'.

  • Select from the billing document table to get sales doc number

SELECT * FROM VBRP WHERE VBELN = IT_Z1INVRV-XBLNR.

  • Select from the sales document table to get user status number

SELECT SINGLE * FROM VBAP WHERE VBELN = VBRP-AUBEL AND

POSNR = VBRP-AUPOS.

  • Select from the status table to change the user status to pending

SELECT * FROM JEST WHERE OBJNR = VBAP-OBJNR AND

STAT LIKE C_USER_STATUS.

IF JEST-STAT = C_US_PENDING. "User status is pending

JEST-INACT = C_UNCHECKED. "Make pending the active status

UPDATE JEST.

C_EXISTS = 'Y'. "I.E. An entry is already in table

ELSEIF JEST-INACT = C_UNCHECKED AND JEST-STAT NE C_US_PENDING.

JEST-INACT = C_CHECKED. "Make everything else inactive

UPDATE JEST.

ENDIF.

ENDSELECT.

IF C_EXISTS = 'N'. "I.E. Pending has never been a status before

JEST-OBJNR = VBAP-OBJNR.

JEST-STAT = C_US_PENDING.

JEST-INACT = C_UNCHECKED. "Make pending the active status

INSERT JEST.

ENDIF.

ENDSELECT. "Select from VBRP (Billing document table)

ENDIF.

ENDFORM. " REV_INV

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.

<b>REWARD IF HELPFUL.</b>