This document is meant for the people who are looking for a prototype of a report program for editing (modifying) Idocs data. Recently, I got a requirement to reprocess few Idocs in the production environment with over 500 fields to be edited per Idoc.
Editing and reprocessing can be done by Standard Tcode we19 however, it was too tedious and time consuming activity to change the values of 500 elements per Idoc manually. I checked the Idoc segment fields and found that most of the incorrect values were repeating e.g. Dates in all the date fields were coming incorrectly as DDMMYYYY instead of YYYYMMDD.As the requirement was an urgent one, I was looking for a quick fix solution for editing the Idoc and repeated incorrect values in the segment fields using a report program.
In my voyage of searching the solution I found following function modules which can be used for editing the Idoc.
1) EDI_DOCUMENT_OPEN_FOR_EDIT (To Open the IDOC for Editing)
2) EDI_CHANGE_DATA_SEGMENTS (To change the segments field’s data)
3) EDI_DOCUMENT_CLOSE_EDIT (To Close the IDoc after editing )
However, I was not able to find any completely reusable report which can be used directly or as a template to reprocess Idocs of different message types.
I have tried to write a report which can provide us flexibility of editing different types of Idocs and conditional edit in the Idoc with all the possible validations which I can think of 🙂
Step 1. In the selection screen Idoc number, Idoc Type, Segment to be Edited, Element of the segment will be given as input parameters.
For conditional edit, Segment and element values for Comparison at the runtime can be provided.
Step2. At selection screen check if the segment type entered in selection screen exists in the message type of the Idoc. Give the appropriate message for the check.
Step 3. Open Idoc for editing using Function Module EDI_DOCUMENT_OPEN_FOR_EDIT. Give the appropriate message if unable to open the document.
Step 4. Get the segment structure for the segment entered in the selection screen and validate if the element entered in the selection screen exists in the segment. Give the appropriate message if the segment doesn’t exist.
Step 5. Create internal table with the structure of the segment for creation of dynamic internal table.
Step 6. Create dynamic internal table and dynamic work area and assign it to the field string. Modify the data using EDIDD segment to change the data of the Idoc and Call the function module EDI_CHANGE_DATA_SEGMENTS.
Step 8. Close Idoc using function module EDI_DOCUMENT_CLOSE_EDIT.
Source Code :
The source code is available in Code Sample Under Wiki.URL for the same is https://wiki.sdn.sap.com/wiki/display/Snippets/Reusable+Code+for+Editing+Idoc
1) We have to edit the Idoc segment E1EDKA1 field PARTN.
The existing value of PARTN is 05890 as shown in figure.
We have to made it 05900.
2) Execute the report using Tcode SE38 or SE80 if any tcode is not assigned for the same. If you have used the same Selection Texts as shown in the Code Sample Under Wiki following selection screen will appear.Now fill the values as shown below for our Use case.
Please note that if no values will be specified for segments and elements for conditional edit the report will modify all the occurence of element PARTN under segment E1EDKA1 in the Idoc.
3) Message appears if the data is edited successfully.
4) Check the Edited Idoc.
And we have edited the Idoc. 🙂
After editing you can reprocess the Idoc.
Point to Note: Report is tested in my system and it works excellently for me. It is just a prototype and whoever so using the report can customize and enhance it to address the specific needs of the project. Report can be tuned for its performance for better results.