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

Function modules for the Inbound IDoc Processing

Former Member
0 Likes
9,941

i wanted to know if there are any entries that are required to be made any tables in SAP when we create a new inbound processing function module, other than the standard process of creating a function module

any changes or any entries or any settings or any customizing changes before creating a process code

3 REPLIES 3
Read only

Former Member
0 Likes
5,382

hi anup hope u find this helpfull

Creating a Function Module (Direct Inbound Processing)

This describes how to create a function module which is identified by the IDoc Interface using a new process code and called from ALE (field TBD52-FUNCNAME). Direct inbound processing using a function module (not using a workflow) always includes the ALE layer. This setting (processing with function module and ALE layer) is identified by the value 6 in the field TEDE2-EDIVRS, which is read by the function module IDOC_START_INBOUND. IDOC_START_INBOUND then calls ALE.

Prerequisites

You must have completed the required steps in Defining and Using a Basic Type .

Procedure

Choose Tools ® ABAP Workbench ® Development ® Function Builder, and create a new function module.

Create the segments as global data in your function group. The function module should copy the application data from the segments into the corresponding application tables and modify the IDoc status accordingly. If an error occurs, the function module must set the corresponding workflow parameters for exception handling.

Activate the function module: From the initial screen of the Function Builder select .

In the example, create the function module IDOC_INPUT_TESTER with a global interface. The function module is called when an IDoc of type TESTER01 is received for inbound processing. You will assign an application object ("standard order") to this IDoc type and therefore maintain tables from SD. To do this, call transaction VA01 using the command CALL TRANSACTION. Please note that the intention here is not to simulate a realistic standard order, but only to illustrate how data reaches application tables from an IDoc table via segment structures (form routine READ_IDOC_TESTER) and how the function module triggers an event for exception handling (by returning suitable return variables to the ALE layer in the FORM routine RETURN_VARIABLES_FILL).

A comprehensive example of the code for an inbound function module is provided in the ALE documentation in the SAP Library under Example Program to Generate an IDoc. This function module, for example, also checks whether the logical message is correct and calls a (fictitious) second function module which first writes the application data and then returns the number of the generated document. In addition, status 53 is only set if the application document was posted correctly.

Example

FUNCTION IDOC_INPUT_TESTER.

*"----

-


""Globale Schnittstelle:

*" IMPORTING

*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD

*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC

*" EXPORTING

*" VALUE(WORKFLOW_RESULT) LIKE BDWFAP_PAR-RESULT

*" VALUE(APPLICATION_VARIABLE) LIKE BDWFAP_PAR-APPL_VAR

*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK

*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS

*" TABLES

*" IDOC_CONTRL STRUCTURE EDIDC OPTIONAL

*" IDOC_DATA STRUCTURE EDIDD

*" IDOC_STATUS STRUCTURE BDIDOCSTAT

*" RETURN_VARIABLES STRUCTURE BDWFRETVAR

*" SERIALIZATION_INFO STRUCTURE BDI_SER

*"----

-


  • initialize SET/GET Parameter and internal tables

PERFORM INITIALIZE_ORGANIZATIONAL_DATA.

  • Move IDOC to internal tables of application

PERFORM READ_IDOC_TESTER.

  • call transaction Order Entry VA01

PERFORM CALL_VA01_IDOC_ORDERS USING ERRORCODE.

  • set status value

perform write_status_record using errorcode.

  • return values of function module

PERFORM RETURN_VARIABLES_FILL USING ERRORCODE.

ENDFUNCTION.

FORM INITIALIZE_ORGANIZATIONAL_DATA.

  • initialize SET/GET parameters

SET PARAMETER ID 'VKO' FIELD SPACE.

SET PARAMETER ID 'VTW' FIELD SPACE.

SET PARAMETER ID 'SPA' FIELD SPACE.

SET PARAMETER ID 'VKB' FIELD SPACE.

SET PARAMETER ID 'VKG' FIELD SPACE.

  • initialize internal tables

REFRESH BDCDATA.

CLEAR BDCDATA.

CLEAR BELEGNUMMER.

CLEAR ERRTAB.

REFRESH ERRTAB.

REFRESH XBDCMSGCOLL.

CLEAR XBDCMSGCOLL.

ENDFORM. " INITIALIZE_ORGANIZATIONAL_DATA

FORM READ_IDOC_TESTER.

PERFORM INITIALIZE_IDOC.

LOOP AT IDOC_DATA

WHERE DOCNUM = IDOC_CONTRL-DOCNUM.

CASE IDOC_DATA-SEGNAM.

  • header data

WHEN 'E1HEAD'.

MOVE IDOC_DATA-SDATA TO E1HEAD.

PERFORM PROCESS_SEGMENT_E1HEAD.

  • position data

WHEN 'E1ITEM'.

MOVE IDOC_DATA-SDATA TO E1ITEM.

PERFORM PROCESS_SEGMENT_E1ITEM.

ENDCASE.

ENDLOOP.

  • only when there were one or more items

CHECK FIRST NE 'X'.

APPEND XVBAP. "last one

ENDFORM. " READ_IDOC_TESTER

FORM INITIALIZE_IDOC.

CLEAR XVBAK.

REFRESH XVBAP.

CLEAR XVBAP.

POSNR = 0.

FIRST = 'X'.

ENDFORM. " INITIALIZE_IDOC

FORM PROCESS_SEGMENT_E1HEAD.

  • requested date of delivery

WLDAT = E1HEAD-WLDAT.

  • delivery date

XVBAK-BSTDK = E1HEAD-BSTDK.

  • customer number

XVBAK-KUNNR = E1HEAD-AUGEB.

  • order number

XVBAK-BSTNK = E1HEAD-BELNR.

  • division

XVBAK-SPART = E1HEAD-SPART.

  • distribution channel

XVBAK-VTWEG = E1HEAD-VTWEG.

  • sales organization

XVBAK-VKORG = E1HEAD-VKORG.

  • order type

XVBAK-AUART = E1HEAD-AUART.

  • do not fill incoterms (inco1, inco2)

  • customer function

CALL CUSTOMER-FUNCTION '001'

EXPORTING

PI_VBAK621 = XVBAK

IMPORTING

PE_VBAK621 = XVBAK

TABLES

PT_IDOC_DATA_RECORDS = IDOC_DATA.

ENDFORM. " PROCESS_SEGMENT_E1HEAD

FORM PROCESS_SEGMENT_E1ITEM.

  • position number

XVBAP-POSNR = XVBAP-POSNR + 1.

  • amount

XVBAP-WMENG = E1ITEM-MENGE.

  • unit

CALL FUNCTION 'ISO_TO_SAP_MEASURE_UNIT_CODE'

EXPORTING

ISO_CODE = E1ITEM-BMEINH

IMPORTING

SAP_CODE = XVBAP-VRKME

EXCEPTIONS

OTHERS = 0.

  • material number

XVBAP-MATNR = E1ITEM-LMATNR.

CALL CUSTOMER-FUNCTION '002'

EXPORTING

PI_VBAP621 = XVBAP

IMPORTING

PE_VBAP621 = XVBAP

TABLES

PT_IDOC_DATA_RECORDS = IDOC_DATA.

APPEND XVBAP.

ENDFORM. " PROCESS_SEGMENT_E1ITEM

FORM CALL_VA01_IDOC_ORDERS USING ERRORCODE.

  • call transaction first dynpro

PERFORM DYNPRO_START.

  • call transaction double-line entry

PERFORM DYNPRO_DETAIL2.

  • incoterms

PERFORM DYNPRO_HEAD_300.

  • call transaction item datas

PERFORM DYNPRO_POSITION.

PERFORM DYNPRO_SET USING 'BDC_OKCODE' 'SICH'.

  • determine input method

IF INPUT_METHOD IS INITIAL.

INPUT_METHOD = 'N'.

ENDIF.

  • call transaction VA01

CALL TRANSACTION 'VA01' USING BDCDATA

MODE INPUT_METHOD

UPDATE 'S'

MESSAGES INTO XBDCMSGCOLL.

errorcode = SY-SUBRC. " remember returncode for status update

ENDFORM. " CALL_VA01_IDOC_ORDERS

form write_status_record using errorcode.

  • FILL IDOC_STATUS

IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

IF ERRORCODE = 0.

IDOC_STATUS-STATUS = BELEG_GEBUCHT. "value 53

GET PARAMETER ID 'AUN' FIELD BELEGNUMMER.

IDOC_STATUS-MSGID = 'V1'.

IDOC_STATUS-MSGNO = '311'.

IDOC_STATUS-MSGV1 = 'Terminauftrag'.

IDOC_STATUS-MSGV2 = BELEGNUMMER.

ELSE.

IDOC_STATUS-STATUS = BELEG_NICHT_GEBUCHT. "value 51

IDOC_STATUS-MSGID = SY-MSwGID.

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.

ENDIF.

APPEND IDOC_STATUS.

ENDFORM.

FORM DYNPRO_START.

PERFORM DYNPRO_NEW USING PROGRAMM_AUFTRAG

DYNPRO-EINSTIEG

CHANGING LAST_DYNPRO.

  • ordertype

PERFORM DYNPRO_SET USING 'VBAK-AUART' XVBAK-AUART.

  • sales organization

PERFORM DYNPRO_SET USING 'VBAK-VKORG' XVBAK-VKORG.

  • Distribution channel

PERFORM DYNPRO_SET USING 'VBAK-VTWEG' XVBAK-VTWEG.

  • Division

PERFORM DYNPRO_SET USING 'VBAK-SPART' XVBAK-SPART.

  • Sales office

PERFORM DYNPRO_SET USING 'VBAK-VKBUR' XVBAK-VKBUR.

  • Sales group

PERFORM DYNPRO_SET USING 'VBAK-VKGRP' XVBAK-VKGRP.

ENDFORM. " DYNPRO_START

FORM DYNPRO_NEW USING PROGNAME

DYNPRONR

CHANGING LAST_DYNPRO.

CLEAR BDCDATA.

BDCDATA-PROGRAM = PROGNAME.

BDCDATA-DYNPRO = DYNPRONR.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA.

LAST_DYNPRO = DYNPRONR.

ENDFORM. " DYNPRO_NEW

FORM DYNPRO_SET USING FELDNAME

FELDINHALT.

CLEAR BDCDATA.

CHECK FELDINHALT NE SPACE.

  • dynpro field name

BDCDATA-FNAM = FELDNAME.

  • contents

BDCDATA-FVAL = FELDINHALT.

APPEND BDCDATA.

ENDFORM. " DYNPRO_SET

FORM DYNPRO_DETAIL2.

  • okcode

  • PERFORM DYNPRO_SET USING 'BDC_OKCODE' PANEL-UER2.

  • fix dynpro number 4001

PERFORM DYNPRO_NEW USING PROGRAMM_AUFTRAG

'4001'

CHANGING LAST_DYNPRO.

  • order party

PERFORM DYNPRO_SET USING 'KUAGV-KUNNR' XVBAK-KUNNR.

  • purchase order number

PERFORM DYNPRO_SET USING 'VBKD-BSTKD' XVBAK-BSTNK.

  • requested delivery date

PERFORM DYNPRO_DATE_SET USING 'VBKD-BSTDK' XVBAK-BSTDK.

  • purchase order date

PERFORM DYNPRO_DATE_SET USING 'RV45A-KETDAT' WLDAT.

ENDFORM. " DYNPRO_DETAIL2

FORM DYNPRO_DATE_SET USING FELDNAME

FELDINHALT.

DATA: DATE TYPE D.

CLEAR BDCDATA.

CHECK FELDINHALT NE SPACE.

BDCDATA-FNAM = FELDNAME.

WRITE FELDINHALT TO DATE.

BDCDATA-FVAL = DATE.

APPEND BDCDATA.

ENDFORM. " DYNPRO_DATE_SET

FORM DYNPRO_HEAD_300.

PERFORM DYNPRO_SET USING 'BDC_OKCODE' PANEL-KKAU.

  • incoterms part 1

IF NOT XVBAK-INCO1 IS INITIAL.

PERFORM DYNPRO_SET USING 'VBKD-INCO1' XVBAK-INCO1.

ENDIF.

  • incoterms part 2

IF NOT XVBAK-INCO2 IS INITIAL.

PERFORM DYNPRO_SET USING 'VBKD-INCO2' XVBAK-INCO2.

ENDIF.

  • PERFORM DYNPRO_SET USING 'BDC_OKCODE' 'BACK'.

ENDFORM. " DYNPRO_HEAD_300

FORM DYNPRO_POSITION.

LOOP AT XVBAP.

  • dynpro item double line entry

  • PERFORM DYNPRO_SET USING 'BDC_OKCODE' 'UER2'.

IF XVBAP-POSNR = 1.

  • material number

PERFORM DYNPRO_SET USING 'VBAP-MATNR(01)' XVBAP-MATNR.

  • order quantity

PERFORM DYNPRO_SET USING 'RV45A-KWMENG(01)' XVBAP-WMENG.

  • desired delivery date

PERFORM DYNPRO_DATE_SET USING 'RV45A-ETDAT(1)' WLDAT.

  • sales unit

PERFORM DYNPRO_SET USING 'VBAP-VRKME(1)' XVBAP-VRKME.

ELSE.

  • PERFORM DYNPRO_SET USING 'BDC_OKCODE' 'POAN'.

  • material number

PERFORM DYNPRO_SET USING 'VBAP-MATNR(02)' XVBAP-MATNR.

  • order quantity

PERFORM DYNPRO_SET USING 'RV45A-KWMENG(02)' XVBAP-WMENG.

  • desired delivery date

PERFORM DYNPRO_DATE_SET USING 'RV45A-ETDAT(02)' WLDAT.

  • sales unit

PERFORM DYNPRO_SET USING 'VBAP-VRKME(02)' XVBAP-VRKME.

ENDIF.

ENDLOOP.

ENDFORM. " DYNPRO_POSITION

FORM RETURN_VARIABLES_FILL USING ERRORCODE.

  • allocate IDOC numbers to Workflow output parameters

IF MASS_PROCESSING <> SPACE.

IF ERRORCODE = 0.

RETURN_VARIABLES-WF_PARAM = PID.

RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

APPEND RETURN_VARIABLES.

RETURN_VARIABLES-WF_PARAM = APO.

RETURN_VARIABLES-DOC_NUMBER = BELEGNUMMER.

APPEND RETURN_VARIABLES.

WORKFLOW_RESULT = C_WF_RESULT_OK.

ELSE.

RETURN_VARIABLES-WF_PARAM = EID.

RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

APPEND RETURN_VARIABLES.

WORKFLOW_RESULT = C_WF_RESULT_ERROR.

ENDIF.

ELSE.

IF ERRORCODE = 0.

RETURN_VARIABLES-WF_PARAM = APE.

RETURN_VARIABLES-DOC_NUMBER = BELEGNUMMER.

APPEND RETURN_VARIABLES.

WORKFLOW_RESULT = C_WF_RESULT_OK.

ELSE.

WORKFLOW_RESULT = C_WF_RESULT_ERROR.

ENDIF.

ENDIF.

ENDFORM. " RETURN_VARIABLES_FILL

Globale Daten von IDOC_INPUT_TESTER

TABLES: E1HEAD, E1ITEM.

DATA: BEGIN OF BDCDATA OCCURS 500.

INCLUDE STRUCTURE BDCDATA.

DATA: END OF BDCDATA.

DATA: BEGIN OF XVBAK. "Kopfdaten

INCLUDE STRUCTURE VBAK621.

DATA: END OF XVBAK.

DATA: BEGIN OF XVBAP OCCURS 50. "Position

INCLUDE STRUCTURE VBAP.

DATA: WMENG(18) TYPE C.

DATA: LFDAT LIKE VBAP-ABDAT.

DATA: KSCHL LIKE KOMV-KSCHL.

DATA: KBTRG(16) TYPE C.

DATA: KSCHL_NETWR LIKE KOMV-KSCHL.

DATA: KBTRG_NETWR(16) TYPE C.

DATA: INCO1 LIKE VBKD-INCO1.

DATA: INCO2 LIKE VBKD-INCO2.

DATA: YANTLF(1) TYPE C.

DATA: PRSDT LIKE VBKD-PRSDT.

DATA: HPRSFD LIKE TVAP-PRSFD.

DATA: END OF XVBAP.

DATA: BEGIN OF DYNPRO,

EINSTIEG LIKE T185V-DYNNR VALUE 101,

KKAU LIKE T185V-DYNNR,

UER2 LIKE T185V-DYNNR,

KBES LIKE T185V-DYNNR,

ERF1 LIKE T185V-DYNNR,

PBES LIKE T185V-DYNNR,

PKAU LIKE T185V-DYNNR,

PEIN LIKE T185V-DYNNR,

EID1 LIKE T185V-DYNNR,

POPO LIKE T185V-DYNNR,

EIPO LIKE T185V-DYNNR,

KPAR LIKE T185V-DYNNR,

PSDE LIKE T185V-DYNNR,

PPAR LIKE T185V-DYNNR,

KDE1 LIKE T185V-DYNNR,

KDE2 LIKE T185V-DYNNR,

PDE1 LIKE T185V-DYNNR,

PDE2 LIKE T185V-DYNNR,

PKON LIKE T185V-DYNNR,

END OF DYNPRO.

DATA: BEGIN OF PANEL,

KKAU LIKE T185V-PANEL VALUE 'KKAU',

UER2 LIKE T185V-PANEL VALUE 'UER2',

KBES LIKE T185V-PANEL VALUE 'KBES',

ERF1 LIKE T185V-PANEL VALUE 'ERF1',

PBES LIKE T185V-PANEL VALUE 'PBES',

PKAU LIKE T185V-PANEL VALUE 'PKAU',

PEIN LIKE T185V-PANEL VALUE 'PEIN',

EID1 LIKE T185V-PANEL VALUE 'EID1',

EIAN LIKE T185V-PANEL VALUE 'EIAN',

POPO LIKE T185V-PANEL VALUE 'POPO',

EIPO LIKE T185V-PANEL VALUE 'EIPO',

KPAR LIKE T185V-PANEL VALUE 'KPAR',

PSDE LIKE T185V-PANEL VALUE 'PSDE',

POAN LIKE T185V-PANEL VALUE 'POAN',

PPAR LIKE T185V-PANEL VALUE 'PPAR',

KDE1 LIKE T185V-PANEL VALUE 'KDE1',

KDE2 LIKE T185V-PANEL VALUE 'KDE2',

PDE1 LIKE T185V-PANEL VALUE 'PDE1',

PDE2 LIKE T185V-PANEL VALUE 'PDE2',

PKON LIKE T185V-PANEL VALUE 'PKON',

KOAN LIKE T185V-PANEL VALUE 'KOAN',

END OF PANEL.

DATA: BEGIN OF ERRTAB OCCURS 20,

TRANS LIKE TSTC-TCODE,

ARBGB LIKE T100-ARBGB,

CLASS(1) TYPE C,

MSGNR LIKE T100-MSGNR,

  • TEXT LIKE T100-TEXT,

TEXT(123) TYPE C,

MSGV1 LIKE SY-MSGV1,

MSGV2 LIKE SY-MSGV2,

MSGV3 LIKE SY-MSGV3,

MSGV4 LIKE SY-MSGV4,

END OF ERRTAB.

*---- Hilfsfelder -


*

DATA: PROGRAMM_AUFTRAG LIKE T185V-AGIDV VALUE 'SAPMV45A'.

DATA: LAST_DYNPRO LIKE T185V-DYNNR,

WLDAT LIKE VBAK-BSTDK,

POSNR LIKE VBAP-POSNR,

FIRST(1) TYPE C VALUE 'X'.

DATA: BEGIN OF XBDCMSGCOLL OCCURS 10.

INCLUDE STRUCTURE BDCMSGCOLL.

DATA: END OF XBDCMSGCOLL.

  • Terminauftrag ( Auftragsart wird fest gesetzt !)

DATA: BELEGNUMMER LIKE VBAK-VBELN.

DATA: ERRORCODE LIKE SY-SUBRC.

  • Statuswerte fuer IDOC-Status

DATA: BELEG_NICHT_GEBUCHT LIKE TEDS1-STATUS VALUE '51'.

DATA: BELEG_GEBUCHT LIKE TEDS1-STATUS VALUE '53'.

*- Direktwerte für Return_variables -

-


data:

eid like bdwfretvar-wf_param value 'Error_IDOCs',

pid like bdwfretvar-wf_param value 'Processed_IDOCs',

apo like bdwfretvar-wf_param value 'Appl_Objects',

ape like bdwfretvar-wf_param value 'Appl_Object'.

*- Direktwerte für Workflow_Result -

-


DATA: C_WF_RESULT_ERROR LIKE BDWFAP_PAR-RESULT VALUE '99999'.

DATA: C_WF_RESULT_OK LIKE BDWFAP_PAR-RESULT VALUE '0'.

regards

navjot

reward if helpfull[http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f/frameset.htm | http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f/frameset.htm]http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f/frameset.htm[http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f/frameset.htm | http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f/frameset.htm]http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7df143d711d1893e0000e8323c4f

Message was edited by:

navjot sharma

Read only

former_member404244
Active Contributor
0 Likes
5,382

Hi,

u have to make an entry in BD51 of the new function module u created...then u have to attch it in WE42(process code)..

regards,

nagaraj

Read only

Former Member
0 Likes
5,382

i have done all of that and more

but its asking me to maintain an object.

In the second scren of creatingf a process code