Application Development and Automation 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: 
Read only

ALE FM

Former Member
0 Likes
517

HI All,

Can any one help me how to create FM for Idoc posting whith ex.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
483

Hi,

Create Function Module in this way.

Example parameters

Import parameters Reference field Opt Y/N

INPUT_METHOD BDWFAP_PAR-INPUTMETHD N

MASS_PROCESSING BDWFAP_PAR-MASS_PROC N

Export Parameters Reference field Opt Y/N

WORKFLOW_RESULT BDWFAP_PAR-RESULT N

APPLICATION_VARIABLE BDWFAP_PAR-APPL_VAR N

IN_UPDATE_TASK BDWFAP_PAR-UPDATETASK N

CALL_TRANSACTION_DONE BDWFAP_PAR-CALLTRANS N

Table Parameters Reference field Optional Y/N

IDOC_CONTRL EDIDC

IDOC_DATA EDIDD

IDOC_STATUS BDIDOCSTAT

RETURN_VARIABLES BDWFRETVAR

SERIALIZATION_INFO BDI_SER

Exceptions

WRONG_FUNCTION_CALLED

Example code

populates a BDC table with the IDoc info;

calls the transaction via a BDC call; and

updates the IDoc status according to the BDC error status

EXTRACT FROM: Z_IDOC_INPUT_ZINVRV

*--- 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. " UPDATE_IDOC_STATUS

HI All,

Can any one help me how to create FM for Idoc posting whith ex.

2 REPLIES 2
Read only

Former Member
0 Likes
483

These blogs will help u...

/people/ravikumar.allampallam/blog/2005/02/23/configuration-steps-required-for-posting-idocsxi

/people/swaroopa.vishwanath/blog/2007/01/22/ale-configuration-for-pushing-idocs-from-sap-to-xi

plzz reward if those threads are usefull to u...

Read only

Former Member
0 Likes
484

Hi,

Create Function Module in this way.

Example parameters

Import parameters Reference field Opt Y/N

INPUT_METHOD BDWFAP_PAR-INPUTMETHD N

MASS_PROCESSING BDWFAP_PAR-MASS_PROC N

Export Parameters Reference field Opt Y/N

WORKFLOW_RESULT BDWFAP_PAR-RESULT N

APPLICATION_VARIABLE BDWFAP_PAR-APPL_VAR N

IN_UPDATE_TASK BDWFAP_PAR-UPDATETASK N

CALL_TRANSACTION_DONE BDWFAP_PAR-CALLTRANS N

Table Parameters Reference field Optional Y/N

IDOC_CONTRL EDIDC

IDOC_DATA EDIDD

IDOC_STATUS BDIDOCSTAT

RETURN_VARIABLES BDWFRETVAR

SERIALIZATION_INFO BDI_SER

Exceptions

WRONG_FUNCTION_CALLED

Example code

populates a BDC table with the IDoc info;

calls the transaction via a BDC call; and

updates the IDoc status according to the BDC error status

EXTRACT FROM: Z_IDOC_INPUT_ZINVRV

*--- 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. " UPDATE_IDOC_STATUS