W to read the idoc in inbound
HI Freinds
I am new to idocs...I have created (custom)idoc using stand alone program in outbound.....then what are the next steps in inbound....if we have to create process code in inbound side....how to read idocs and post the inbound...pls any body tel me clearly....
Regards
Mani R
Hi mani,
You should follow the following steps 1 by 1.
WE30 - IDOC type creation
WE31 - Create segment
WE81 - Message type creation
WE82 - Link IDOC type to Message type
SE37 - Create Inbound Function Module
BD51 - Maintain entry for Function Module
WE57 - Maintain
BD57 - Link Function Module, IDOC type and Message type
WE42 Create Inbound Process Code
BD67 - Link Process code to Function Module
WE20 - Create Partner Profile
BD64 - Display Distribution Model
WE02 - IDoc List, Display all Inbound/Outbound IDocs
WE14 - Outbound Processing of IDocs
BD20 - Inbound Processing of IDocs
1st Step: Create a Segment ( WE31)
Segment is a structure for passing data in IDoc. It actually contains the IDoc data, just like the DDIC table/structure. Segment is created with all the required fields. Then Save it. But, to actually use this Segment, you have to Release the Segment, otherwise u cant use the Segment, by menu, EDIT--> Set Release.
Now, if you want to do some change to this Segment, u cant, unless & until u Cancel the Release, by Edit--> Cancel Release.
2nd Step: Create IDOC Type ( WE30 )
After creating the Segment, now we have to create the IDoc Type. IDOC Type is like an envelop of a letter, which contains the data inside it, & also some more information like address. IDoc type can be Basic Or Extended.
Basic IDoc Type: Using some SAP existing IDOC type (ex. MATMAS) or Custom IDOC type.
Extension IDOC Type: When we need some fields extra to an existing IDOC type, then we can extend that Basic Idoc Type by another Segment. This is called Extended idoc type
3rd Step: Create Message Type (WE81)
Message Type is like the Postman for sending the Letter.
4th Step: Attach Message Type to the IDOC Type (WE82)
5th Step: Create a Function Module (SE37)
Write the Processing logic in a Function Module.
6th Step: Mention the IDOC Type, i.e, 0/1/2 (BD51)
7th Step: Assign the Message Type, IDOC Type & Function Module (WE57)
8th Step: Create a Custom Process Code (WE42)
9th Step: Attach the Function Module to the Process Code (BD67)
10th Step: Execute Inbound IDOC s (WE19)
Example Function Module: IDOC_INPUT_ORDERS (Standard FM to create Sales Order).
Reward is helpful,
Regards,
Tanmay
Similar Messages
-
READING EDI IDOC'S INBOUND ORDERS
HELLO.
DOES ANYBODY KNOW HOW TO READ EDI INBOUND SALES ORDERS IN
ABAP ?
I WANT TO READ THE IDOC'S WITH A PROGRAM
AND FIND THE MATERIALNUMBER AND THE QUANTITY .
THANKSHi,
Check out this document for the details:
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/an advanced guide to implementing application link enabling.pdf
regards
Aveek -
About the idoc(DEBMAS) inbound, contact info, need help!
Hi everyone,
we have SAP and SIEBEL system, and crate/update customer info(or say account) at SIEBEL first, then send account info to SAP via IDOC, message type is DEBMAS06.
Now there is a bug. create/update contact info at siebel, it always create new contact at SAP when inbound to SAP system.
Is there anyone can give me any advice about how to fix this bug?
Thanks & best regards.Hi Sir,
First thanks very much for your reply.
I known the MSGFN field, segment E1KNVKM(contact info) has MSGFN field too. but there is a still some issues. I found you must pass the PARNR field to SAP if want to update info(If not, even I set the MSGFN as Deleted or UPDATE, it not works). PARNR is the only key for table KNVK. but you know, PARNR is created at SAP when create this contact info, I need create/update contact at SIEBEL, that's not easy to know what's the value of PARNR will be created.
Is that possible too pass PARNR value to SAP? I know a little about the SAP BASIS Setting.
Thanks again. -
Function module to read the the idoc
Hi abap gurus,
I have an inbound idoc coming form a wms system .The IDOC is for goods recieved . how can I read the idoc to update the inbound delivery data in the sap system ? Is there any function module to read the data from teh inbound idoc ?Hi Gaurab,
Creating a Function Module (Direct Inbound Processing)
This step 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.
Administration parameters for IDOC_INPUT_TESTER
Application abbreviation
V (Sales and Distribution)
Processing type
Normal, start immediately
Interface for IDOC_INPUT_TESTER (global interface)
Formal parameters
Reference structure
Explanation
Import parameters
INPUT_METHOD
BDWFAP_PAR-INPUTMETHD
Describes how the function module is to be processed (example: in the background)
MASS_PROCESSING
BDWFAP_PAR-MASS_PROC
Mass inbound processing? (indicator)
Export parameters
WORKFLOW_RESULT
BDWFAP_PAR-RESULT
Set to 99999 if an event is to be triggered for error handling.
APPLICATION_VARIABLE
BDWFAP_PAR-APPL_VAR
Variable freely available from application for workflow
IN_UPDATE_TASK
BDWFAP_PAR-UPDATETASK
Asynchronous update? (indicator is not set in example)
CALL_TRANSACTION_DONE
BDWFAP_PAR-CALLTRANS
Transaction called? (indicator is not set in example)
Table
IDOC_CONTRL
EDIDC
IDoc control record
IDOC_DATA
EDIDD
IDoc data records
IDOC_STATUS
BDIDOCSTAT
IDoc status records for ALE
RETURN_VARIABLES
BDWFRETVAR
IDoc assigned to Object type method parameters.
SERIALIZATION_INFO
BDI_SER
If several IDocs are to be processed in a certain sequence: this structure contains the necessary information
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'.
thanks
karthik
DATA: C_WF_RESULT_OK LIKE BDWFAP_PAR-RESULT VALUE '0'. -
To delete the IDOC Segment in the Inbound i.e.Item Data
Hi All,
Idoc is received for orders05 as inbound.
The IDoc Data contains two levels of item data
i.e. Segment E1EDP01 - In this we Pass only the quantity.
in the Sub Segment of item E1EDP19 - Customer Material in the segment IDTNR with qualifier 002.
The same segment is repeated again but the customer material is different.
Now need to check the material, if it is different, i need to delete the entire second item segment and put the customer material in the Segment E1EDP19 which has empty field.
His there any Function Module or so to delete the incoming data of the idoc through inbound?.
Could you please let me know if there any way to do the same.
Thank you.
Regards,
Dinesh.yes here you can access only one segment, if you don't control that here, then the information will be populated to xvbap. or else you can even try to implement the error handling exit EXIT_SAPLVEDA_008 /EXIT_SAPLVEDA_011
already item information will be populated to xvbap table . so try to delete the item from xvbap also -
Idoc - for inbound delivery order confirmation
Hi,
Can some body give me the idoc for Inbound SO Delivery Order Confirmation and if any BAPI method is there to create Delivery order confirmation.
With Regards
VasuHi Vasu,
Below is the link to find out the IDOC name for ur Inbound IDOC scnario
http://help.sap.com/bp_bpmv130/Documentation/K17_BPP_EN_US.doc
Hope this willl help you.
Reward if helpful. -
How the idoc interfaces works..
Hi...
When we design a interfaces using Idocs... what is the actual process so that data get updated in SAP..
I want to know the flow of the process...
I have created Idoc structure in the system....but how the data will get into this...and from Idoc what makes the data to get updated into system....
Just few lines will be helpfull..Hi,
An IDoc is simply a data container that is used to exchange information between any two processes that can understand the syntax and semantics of the data...
1.IDOCs are stored in the database. In the SAP system, IDOCs are stored in database tables.
2.IDOCs are independent of the sending and receiving systems.
3.IDOCs are independent of the direction of data exchange.
The two available process for IDOCs are
1) Outbound Process
2) Inbound Process
There are basically two types of IDOCs.
1) Basic IDOCs: Basic IDOC type defines the structure and format of the business document that is to be exchanged between two systems.
2) Extended IDOCs: Extending the functionality by adding more segments to existing Basic IDOCs.
For creating a IDOC
see the below steps for outbound processing IDOCS..
1. Analyse Hierarchy Levels
2. Create New segment
3. Create New IDoc Type
4. Create New Message Type
5. Link Message with IDoc Type
6. Create an entry in EDP13 via transactions WE20 and BD64
7. Populate the Custom IDoc via ABAP Program
7b Error Handling
7c. Send Status Email
8. Test the Population of the Custom IDoc
Step 1 Analyse Hierarchy Levels:
Analyse the data relationships being processed in the interface. Define the appropriate hierarchical Parent-to-Child relationships.
Navigate to transaction code WEDI
Transaction WEDI displays the IDOC main menu. This allows navigation around the various development and control areas to create a customised IDOC.
Step 2 Create a new segment:
via wedi : Development - IDOC Segments or Transaction code WE31.
Enter segment name and click on Create.
name of the segment type must start with Z1 , and have a maximumThe of eight characters.
Enter description and enter the relevant field names and data elements.
The segment should represent a structure in the program so each field in the segment a field name and a data element must befor defined.
Save the segment and enter Person Responsible and Processing Person .
Go to Edit and Set Release.
Repeat this procedure for each new Segment in the IDOC.
Step 3 Create a new IDOC Type
via wedi Development - IDOC Types or Transaction WE30.
Enter segment name (starting with Z), click on Basic Type and then Create.
Create as new, enter Person Responsible and Processing Person and enter description.
On Create Basic Type screen decide where segments should be inserted and go to Edit/Create Segment.
Complete relevant fields in the Maintain Attributes screen:
From the relevant segments created in Step 2 enter the Segment type and if mandatory segment.
The Minimum and Maximum number of segments to be allowed in the sequence. (One minimum and one maximum if segment is mandatory).
The Parent Segment and Hierarchy Level will be automatically created depending on where in the IDOC tree you decided to create that particular segment.
Repeat this process for each segment needed in the IDOC type, deciding whether to add the next segments at the same level or as a Child.
When IDOC created return to initial screen. Go to Edit and Set Release.
Go to Transaction WE60 to view the IDoc Type you have created.
Step 4 Create new Message Type
via wedi Development - Message Types or Transaction WE81.
Display/Change and click on New Entries
Create a new Message Type and Save.
Step 5 Link Message Type to IDOC Type
via wedi Development - IDOC Type/Message or Transaction WE82.
Display/Change and then click on New Entries.
Enter Message Type, Basic Type (IDOC Type) and Release (46C) and Save.
Step 6 Create an entry in EDP13 via transactions WE20 and BD64.
The partner profile for the Idoc must be set up and generated in the transaction BD64 and transaction WE20.
WE20 Add Message Type to appropriate Partner Type, Enter Message Type, Receiver Port and Idoc Type and Save.
BD64 Create a Model View, Enter Sender and Receiver Ports, Attach Message Type. Go to Environment on Menu and click on Generate Partner Profiles and generate (not save) profile.
Step 7 Populate the custom IDOC via ABAP Program
See Test Program ZOUTBD_IDOC_TEMPLATE, Appendix IV.
Create an Internal Table for each segment type, this should be exactly the same structure as the segment type.
The control record is filled into a structure like EDIDC. The message type and the Idoc type for the Idoc must be populated into the eddic structure.
PERFORM populate_Control_structure USING c_mestyp
c_SEGMENT_type1.
The data segments are filled into a structure like edidd-sdata; sdata and the segment name are populated into the edidd structure.
PERFORM transfer_Parent_data_to_seg.
The standard SAP function module MASTER_IDOC_DISTRIBUTE is called to pass the populated IDOC to the ALE Layer.
PERFORM master_idoc_distribute.
NOTE: This function module is only called for stand alone programs and Shared Master Data programs (SMD). It is not called when using extensions or output determination.
The ALE Layer handles the sending of the IDOC to the receiving system.
Error Handling (see Step 7b).
Commit work.
Project SpecificStep 7b Error Handling
Analyse which fields in the interface are mandatory for the receiving system and who needs to receive error notification.
Declare a structure of type MCMAILOBJ for sending instructions.
Enter values for the internal table based on structure MCMAILOBJ
For selection processes, on SY-SUBRC checks and where fields are mandatory for the receiving system; insert Function Module MC_SEND_MAIL.
Enter values in the following parameters: -
MS_MAIL_SENDMODE = B (Batch Mode)
MS_MAIL_TITLE = 'Mail Title'
MS_MAIL_DESCRIPTION = Error description (e.g. MATNR not given)
MS_MAIL_RECEIVER = Name of Receiver (To be determined)
MS_MAIL_EXPRESS = E (Express Delivery)
MS_MAIL_DLINAME = Leave Blank
MS_MAIL_LANGU = 'E' (Language)
MS_MAIL_FUNKOBJ_NAME = Leave Blank
TABLES
MS_MAIL_CONT = I_MCMAILOBJ
Note:
It has to be determined separately for each interface how these errors and mail notifications are to be grouped dependant upon the number of errors that are potentially likely. One possible approach is to send an email for each reason for rejection and include all the records that failed for that reason in the mail notification. Another possible approach is to send an email for every failure.
When error checking for mandatory fields it is common SAP practice to reject a record on its first failure (irrespective of subsequent errors in that record)
Step 7c Send status mail
Append to table I_MCMAILOBJ details of the time the interface was processed, how many Idocs were created and how many of these produced a status of 03.
Select the user to receive the mail from ZINT_RECEIVER, using the name of the program as a key (SY-CPROG).
Use function Module MC_SEND_MAIL to send a mail to the user containing the contents of I_MCMAILOBJ at the end of the interface processing.
Step 8 Test the population of the custom IDOC
via wedi IDoc - Display IDoc or Transaction WE02.
Enter your message type and execute.
Status should be green, double click on one of the Idocs you have created to view its contents.
If a problem has occurred click on Status which will give you a description of the error.
Drop down Data Records arrow and this should list the data in the IDoc in the correct hierarchical structure.
Click on each individual segment and view the content to check that the correct data has been read.
If you have UNIX access by using AL11 you can view the file that you have created.
Note:
For some interfaces it may be valid to send an empty file to SAP. This empty file is converted to the custom IDOC format expected by SAP. This custom IDOC will contain dummy information. In the inbound processing code, if the dummy information is identified then the processing of the IDOC is considered to be complete and the IDOC should then be assigned a successfully processed status of 53, even though it has not been processed at all.
hi,
2.2 Inbound Interface
Follow steps 1 to 5 inclusive as detailed above in outbound interface.
Step 6
Write a custom function module to handle custom inbound processing. This custom function module must
Check for the correct message type
Read the IDoc data segment
Perform data conversion and validate the data as appropriate
Post the data to the database
Handle any error situations
Set the correct return values for the status record
Note that the Function Module must not make a commit to the database. This is because the status record is not written until control returns to the ALE layer. So if you commit work in the Function Module and an error occurs in returning to the ALE Layer, the status record must not be updated with a successful outcome.
The commit work is executed in the ALE Layer after the status records are updated, via the standard SAP function module IDOC_INBOUND_PROCESS. This attributes of this function module are set up in (Transaction BD51), click on New Entries and fill in data; the main input parameters being Input Type and Dialog Allowed.
Take care as some standard SAP transactions contain a Commit Work as part of their processing. Therefore using a BDC to process inbound data to SAP may not be acceptable. You need to check that the SAP transaction is ALE enabled.
Step 7
(Transaction WE57)
Assign the custom function module to the IDoc type and the message type.
Set function module to type F and direction 2 for inbound.
Step 8
(Transaction WE42)
Create a new process code and assign it to the function module. The process code determines how the incoming IDoc is to be processed in SAP.
Step 9
(Transaction BD67)
Assign the function module to the process code created above. Got to New Entries and enter the process code and the function module name.
Step 10
(Transaction WE20 and Transaction BD64)
Create a partner profile for your message and ensure that in transaction WE20 the process code is the one that points to your function module. (See step 6 of creating Outbound Idocs).
Step 11
Ensure that error handling functionality is present.
Or Check these links.....
ALE/ IDOC
http://help.sap.com/saphelp_erp2004/helpdata/en/dc/6b835943d711d1893e0000e8323c4f/content.htm
http://www.sapgenie.com/sapgenie/docs/ale_scenario_development_procedure.doc
http://edocs.bea.com/elink/adapter/r3/userhtm/ale.htm#1008419
http://www.netweaverguru.com/EDI/HTML/IDocBook.htm
http://www.sapgenie.com/sapedi/index.htm
http://www.sappoint.com/abap/ale.pdf
http://www.sappoint.com/abap/ale2.pdf
http://www.sapgenie.com/sapedi/idoc_abap.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/0b/2a60bb507d11d18ee90000e8366fc2/frameset.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/78/217da751ce11d189570000e829fbbd/frameset.htm
http://www.allsaplinks.com/idoc_sample.html
http://www.sappoint.com/abap.html
http://help.sap.com/saphelp_erp2004/helpdata/en/dc/6b835943d711d1893e0000e8323c4f/content.htm
http://www.sapgenie.com/sapgenie/docs/ale_scenario_development_procedure.doc
http://edocs.bea.com/elink/adapter/r3/userhtm/ale.htm#1008419
http://www.netweaverguru.com/EDI/HTML/IDocBook.htm
http://www.sapgenie.com/sapedi/index.htm
http://www.allsaplinks.com/idoc_sample.html
Reward points if useful....
Regards
AK -
Searching Message ID in XI using the IDOC number produced in S1P
Hi Everyone,
I'm a sap XI newbee and i have a question.
The scenario is like this, We have a message ID (PO) that passes thru XI from a 3PLP(3rd party system) which eventually produces an IDOC when it reaches S1P(R/3).
Message flow: 3PLP - XI - S1P.
So in S1P(R/3)'s perspective, the IDOC is INBOUND and its supposed to display the message ID from XI in the DETAILS TAB (tCode:WE02) unfortunately it did not.
So how would I be able to find the message ID in XI using the IDOC produced in S1P.
I hope you get my point.
PS: tcode IDX5 wont work since the IDOC was only produced as soon as it reaches S1P(R/3).
Thank you so much,
XI MonitorYou have to search for the IDOC from IDX5 in your XI system...
Also please check the following OSS note : Note 1083694 - IDoc adapter: IDX5 and IDoc tracking
No object relationship is written in step 2.
No object relationship is displayed in the IDoc monitor (transaction WE02) in the receiver system.
Note that object relationships are written for logical systems only (partner type = "LS").
For more information, see Note 428344.
In transaction WENOLINKS, check whether the administrator has deactivated the object relationships.
If everything is maintained, you should see the Sender idoc number(PI) in BD87...
One of the roundabout ways till you fix the issues is to get the timestamp when IDOC was created and go to SXMB_MONI or IDX5 in PI for that timestamp to get the message id -
Hi,
my issue is regarding the Idoc using inbound process using the FM BAPI_IDOC_DISTRIBUTE_LIST1.
here the user wants the dhmt plant tobe refer instead of mirror plant.
can anybody help me regarding this or any doc regarding iDOCS inbound.Seetha,
I have this already..
IDOCPACKET
Object type IDPKWMMBXY
End event MASSINPUTFINISHED
IDOC
Object type IDOCWMMBXY
Start event INPUTERROROCCURRED
End event INPUTFINISHED
Application object
Object type BUS2017
Start event -
How to obtain the IDOC number after creation
Hello everyone,
for our master data distribution via report RHALEINI (triggered via a custom report), we have some additional code in BAdI HRALE00OUTBOUND_IDOC, method IDOC_DATA_FOR_RECEIVER_MODIFY.
Everything is working fine so far. Now I need to know the Idoc number after it was created to store it in a customer table together with some additional data. Since the Idoc was not yet created when we're in the method mentioned above, I have to put my coding somewhere else.
Any that's exactly my question: Were could I put my coding? It needs to be executed after MASTER_DATA_DISTRIBUTE since this function creates the idoc in the database.
I though about the following:
- Since RHALEINI is called by a custom report, I might be able to read the idoc number from memory id COMM_HRMD_A (see RHALEINI, line 418).
- Maybe BAdI IDOC_DATA_INSERT could be used for this purpose?
What would be your approach for this?
Thank you in advance.Hello Markus,
EXPORT comm_control TO MEMORY ID 'COMM_HRMD_A'.
This is a nice observation!
Since RHALEINI is called by a custom report, I might be able to read the idoc number from memory id COMM_HRMD_A
Are you SUBMIT'ting the report RHALEINI in the custom program? If yes, you can access the memory COMM_HRMD_A in your program. To verify this you can check in debug mode if the memory id is populated.
I've checked the report RHALEINI & the internal table comm_control should contain the idoc number!
Maybe BAdI IDOC_DATA_INSERT could be used for this purpose
Only if the previous approach doesn't work out. Remember [K.I.S.S|http://en.wikipedia.org/wiki/KISS_principle]
BR,
Suhas -
A warning message in the Inbound part of the IDOC
Hi all,
A warning message is being displayed for the Inbound part of the IDOC.
Here is the message.
No filters , No conversion , No version change .
IDoc successfully processed in the ALE layer
The IDoc has passed through the ALE layer successfully and can now be
passed to the application. This transfer is either done online or as a
background job, depending on the settings in the partner profile.
If there are no further status records, the IDoc waits for the next run
of the transfer report to the application.
Success or failure when passing the IDoc to the application is
documented in the subsequent status records.
Actions in the ALE layer
The parameter 'No filters' indicates whether the processing in the ALE
layer led to segments of the inbound IDoc being omitted. The important
criteria here are the settings in the segment filter and in the
distribution model for this sender.
The parameter 'No conversion' indicates whether field values were
converted in the ALE layer. This is the case if the IDoc contains
organizational units to be converted, or if the ALE conversion tool for
this sender is activated.
The parameter 'No version change' indicates whether the IDoc was
converted into an earlier version of the IDoc type. This happens if the
IDoc type of the sender is different from its own IDoc type.
I have checked all the necessary Config settings and all of them are in place.
Your help on this will be highly appreciated.
- Surya.Hi,
The IDOC may have successfully passed through the application, but check whether the status of the IDOC is changed to 53.
No filters, No conversions, No version change
occurs when the IDOC is not processed fully.
It may have stopped the processing without raising any error...
Check the program, whether there is any piece of code which stops the processing of the IDOC without changing its status to 51.
Sharin. -
IDoc adapter inbound channel: Error Error when reading Exchange Profile
Hello Experts,
Currently i am working on an IDOC to file scenario, in which Data will be sent from ECC server (IDOC) to an FTP server via SAP PI, but when i try to send IDOC to PI, i am getting the following error
in Transaction SM58:-
'IDoc adapter inbound channel: Error Error when reading Exchange Profile for system XID and
client 401 occurred in the IS pipeline' .
Can anyone please help me on this.
Thanks & Regards,
Amit NaikHello Experts,
Let me explain to you the whole scenario, We have two servers of PI, 7.1 & 7.0. Now the Java Stack of 7.0 is not working & Cache update of 7.1 is not happening.
Thats why we have linked ABAP stack of 7.0 with Java stack of 7.1. Now we can see the objects created under Java 7.1 in ABAP stack of 7.0 (SXI_CACHE).
Now we have done all the settings to create an IDOC to file scenario. All the RFCs are working fine, but when we send an IDOC from the ECC system to ABAP 7.0, we are getting the following error 'Error while reading exchange profile for system NW' in SM58 .
Now can anyone tell me what exact settings i have to change in the Exchange profile (Java stack of 7.1), so that the Java 7.1 & ABAP 7.0 connection is setup or do i need to change anything else.
Thanks & Regards,
Amit Naik -
IDoc adapter inbound channel: Error Error while read
Dear All
I am sending idoc from SAP 4.6C to PI. But on SM58 I am getting an error
IDoc adapter inbound channel: Error Error when reading
Which is not complete because field length is 50 characters , double clicking on this message is asking for message class. How can i see the complete message.
Can any one send me configuration detail of receiving IDOC at PI end , I don't want send to it forward from PI.Please clear these points.
In PI system:
1. Create RFC destination of type 3 pointing to R/3 system.
2 . create Port using the IDX1 t-code port name should be SAP + SYSTEM ID OF R/3 system.
3. Using IDX2 import the IDOC meta data in to your PI system.
RFC destination to which direction , towards sender of IDOC ?
Port of which system sender system or receiver system?
What about configuration in Integration Directory , is there any configuration required on integration repository and on integration directory.
What will be the procedure of seeing complete message on SM58.
-->In PI system while ur creating the RFC destination of type 3 give the hostname and system number of ur R/3 system ie SAP 4.6 c.
-->In PI create Port using the IDX1 t-code port name should be SAP + SYSTEM ID OF R/3 system and in that RFC destination option, maintaine the destinatination name which we created using sm59.
-->coming to IR you need to create the:
1. Receiver data type.
2. receiver message type
3. receiver message interface. No need to create the above 3 for sender.
4.while mapping source is your Idoc and target is your receiver message type.
5. while interface mapping source is Idoc and target is receiver interface.
-->Coming to ID no need to create sender communication channel and no need to create sender agreement.
-->create receiver communication channel and receiver agreement.
--->create Interface determination.
-->create receiver determination.
-->If message got stuck in SM58, unlock it by using double click or activate the selected message.
Thanks -
How to read the value of a field of an IDoc
Hi my requirement is " read the LIFNR value from inbound idoc Then i should go for validation".
Hi,
Please check the code below:
LOOP AT idoc_data INTO wa_idocdata
WHERE docnum EQ gwa_edidc-docnum.
CASE wa_edidd-segnam.
WHEN 'E1EDL20'.
wa_e1edl20 = wa_edidd-sdata.
APPEND wa_e1edl20 TO it_e1edl20.
CLEAR wa_e1edl20.
READ TABLE it_e1edl20 INTO wa_e1edl20 INDEX SY-INDEX.
if sy-subrc eq 0.
processing......
endif.
Regards
Kannaiah -
Unable to post the Purchase Order inbound idocs which are in status 64
Hi
While Processing the inbound idocs which are in status 64 for message type: PORDCR i am getting the
idoc into error status 51 saying the error as "Missing authorization: Purchase Order Create Purchasing Grou V10"
We are getting the inbound idocs from third party and we need to post these idocs in production.
Can any one help me out how to proceed further on this.
Thanks in Advance
Regards,
Phani Miriyala.Hi
Thank you very much for your quick response.
As the same user is able to process the idocs of message type PORDCR which are in status 64 successfully previously.
Regards,
Phani Miriyala.
Maybe you are looking for
-
Exibir => Barra de ferramentas => Abaixo de "Barra de Extensão", desapareceu a opção "Barra acima"
-
SRM ERS Purchase order / SRM Document Control flags
Hi, We are using ECC 6.0 and SRM 5.0. Which flags should be set in SRM when raising an ERS PO. The options are: PO Response Shipping Notif. Confirm Performance of Service/Goods Receipt Invoice Expected Confirmation-Related Invoice Verification Automa
-
Hi, I have been having quite a few problems with the PowerMac recently - specifically the machine would regularly freeze-up and fail to wake from sleep or after the screensaver had been running. After waiting some time I would eventually give in and
-
I am trying to use a lighting software and it works on one user but not others. I even removed it and tried downloading on the user I intend to use the program. It keeps popping up with this: Can anyone help me please!? I'm trying to get this so m
-
HT5129 Iphoto will move MobileMe Gallery into Albums section -freezes. Any suggestions?
Iphoto '11 Freezes when trying to migrate mobileme to iphoto library. Any suggestions?