Splitting a message into multiple Idocs
Hi,
IDOC adapter does not support MULTIMAPPING.
You cannot use MultiMapping with the IDOC adapter.
Instead , use IDOC packaging. Refer to note : 814393.
Regards,
Bhavesh
Thankyou for the reply, but that's the same trick I already found in Michal's blog, so it isn't really an answer to the question!
I was hoping that someone could direct me to some useful documentation of Integration Processes, as the SAP help is a bit limited in explaining how things actually fit together.
Message was edited by: Nathan Shepperd
Similar Messages
-
Split source message into multiple target messages
Hi Experts,
I have a scenario where a source message needs to be split up into multiple messages for the corresponding target systems.
One source system and three target systems.
Source system is a .Net application
Target systems - SAP R/3, Two webservices on different application systems
Can i implement the scenario above using BPM in the following manner?
Source->WS Adapter->PI-->RFC Adapter->SAP R/3
Source->WS Adapter->PI-->WS Adapter->Target 2
Source->WS Adapter->PI-->WS Adapter->Target 3
I could have a webservice at the source which would be called by the .Net Application
Webservice request would be passed to an integration process which would split the message for the three target systems specified.
Correct me if am wrong.
Also please get back to me if you need more inputs
Regards,
KalyanHi,
You can implement the same with out using the BPM itself...
you can use either of the below options
1. if target messages are optional like based on certain conditions if you need to route the message to the particular targets
then you can use multimappings for the same which generates the mappings based on the condition for the particular target.
2. if each incoming message needs to be routed to the three receivers each time then configure the three receivers at the receiver determinations one for each target...
3. if you are using the same business system for all the three receivers then create the three interface mappings and configure the same at the interface determination level so that for each message three target messages will be generated and send to target...
HTH
Rajesh -
Splitting a message into multiple messages.
All,
I will simplify the issue we have and explain.
We have the following structure. (the occurence <data> node is unbounded)
<source>
<data>...</data>
<data>...</data>
<data>...</data>
</source>
we need to split this into another message <source2> with the exact same structure... but we need only 10 <data> nodes in the <source2>. In this <source2> the <data> node is of max occurs 10.
so if we get a <source> message with 1000 <data> nodes comes in, we need to split it into 100 <source2> messages.
How can we do this? (due to constraints we cannot use the file content conversion)
Thanks.Hello,
Please check whether the below logic suits your scenario.
Change Messages - http://flickr.com/photo_zoom.gne?id=1064675286&size=o
Mapping -http://flickr.com/photo_zoom.gne?id=1064675070&size=o
Mapping -http://flickr.com/photo_zoom.gne?id=1064675164&size=o
UDF's- http://flickr.com/photo_zoom.gne?id=1064675480&size=o
Results http://flickr.com/photo_zoom.gne?id=1064675320&size=o (Source 4 Data)
Results http://flickr.com/photo_zoom.gne?id=1064675430&size=o (Source 5 Data)
The above example will split source data into 2 messages each.
If it doesn't helps, let me know.
Best regards,
raj. -
Split the IDOC into multiple IDOC if the IDOC has more than 500 records
Hi All,
I developed an outbound IDOC in which we are facing an issue.
There is some limitation on the maximum idoc size it can handle.
If number of records is more than 500, split the idoc into multiple iDoc's, e.g. if it would have 1300 records , the result would be 2 iDoc's with 500 records, and the last one would have 300 records
How can i acheive this.
Regards
JaiHi,
1) first you need to know which message type/Idoc type you are triggering.
2) Get the Corresponding processcode from Partner profiles(WE20/ WE41).
3) Then the look for prper user-exit in the related processing FM.
4) write logic to split the IDoc accordingly.
if no proper user exit available then copy the standard processing FM and need to all ALE related configurations.
Catch hold any ABAP expert in your team to do all these.
Suresh -
Split Single IDOC into Multiple IDOC's Based on Segment Type
Hi Experts,
I have a scenario IDOC to FILE , Split Single IDOC into Multiple IDOC's based on Segment Type
Outbound:
ZIdocName
Control Record
Data Record
Segment 1
Segment 2
Segment 3
Status Record
I should get output like below
Inbound:
ZIdocName
Control Record
Data Record
Segment 1
Status Record
ZIdocName
Control Record
Data Record
Segment 2
Status Record
ZIdocName
Control Record
Data Record
Segment 3
Status Record
Please suggest me step by step process to achieve this task.
Thanks.Thanks a lot Harish for reply.
I have small doubt. According to your reply , If we have N number of segments in single IDOC with same fields in all segments then for splitting Single IDOC into Multiple IDOC's based on Segment Type we need to duplicate N number of target IDOC tree structure.
Is that possible to Split single IDOC into Multiple IDOC's based on Segment Type using only one Target IDOC structure without duplicating the Target IDOC structure tree. -
How can I split an Orders05 iDoc into multiple iDocs?
Hello,
Can one of you experts please tell me how I can split an ORDERS05 iDoc into multiple iDocs based upon Delivery addresses?
For example, if the iDoc contains 3 different Delivery Addresses then I need to split it into 3 iDocs.
It has been suggested to me that I can Create a custom function module. In this custom fm split the idoc into 3 based on the delivery address and create it using the FM MASTER_IDOC_DISTRIBUTE.
Problem is I don't know how to do this. Any help is greatly appreciated. Thanks.
DanHi Dan Avis
Write a Custom Z program .
1 get order05 idoc number....
2 get the segment details...(Based on you condition...)
3 In a loop send the data to the FM MASTER_IDOC_DISTRIBUTE (Based on you condition...)
4 IDOC will generated,,,every loop and
5 Change the status of original idoc .
or
Create Function module and use the FM as process code to create 3 idocs...and processs...new generated idoc and block original idocs...
Call me if you have questions @ 302 290 5677
Thanks
Ramesh -
Split a record into multiple records
Hi,
I have situation where i need to split a record into multiple records.
InputData :
value|BeginDate |EndDate
15 |2002/10/15|2002/10/16
13 |2002/10/13|2002/10/20
19 |2002/10/19|2002/10/23
10 |2002/10/10|2002/10/12
OutPut :
10 |2002/10/10|2002/10/12
13 |2002/10/13|2002/10/15
15 |2002/10/15|2002/10/16
13 |2002/10/16|2002/10/19
19 |2002/10/19|2002/10/23
ThanksHi ,
As a far I understood from your example ,
I have few questions...
1. You have information about the patient in a 1 source table.
2. how u are identifying for patient X u need 5 rows to be created. R u storing these informations in seprate table or how ...
3. if you have these information in a seperate tables ..... a simple cross join in ODI should get you the expected result.....
Or give some more information with a example ..that would be great ...
Thanks -
Split one row into multiple columns
Hi,
Data in one CLOB column in a table storing with delimiter, ##~~##. Ex. ##~~##abc##~~##defgh##~~##ijklm##~~##nopqr (data starts with delimiter). Please help me to split the data into multiple rows like below and it should be in the same order.
abc
defgh
ijklm
nopqr
I am using Oracle 11g.
Thanks.Thanks Hoek for your response. Before posting my question in the forum, I tried similar query. It is working with one character as delimiter.
with test as (select 'ABC,DEF,GHI,JKL,MNO' str from dual )
select regexp_substr (str, '[^,]+', 1, rownum) split
from test
connect by level <= length (regexp_replace (str, '[^,]+')) + 1;
Above query is giving correct result by fetching 5 rows. I have modified the query like below...
with test as (select 'ABC,,,DEF,,,GHI,,,JKL,,,MNO' str from dual )
select regexp_substr (str, '[^,,,]+', 1, rownum) split
from test
connect by level <= length (regexp_replace (str, '[^,,,]+')) + 1;
Above query resulting 13 rows and last 8 rows are nulls. Number of null rows are increasing, if I increase number of characters in delimiter. Could you please tell me how to avoid those null rows.
Thanks. -
Split single row into multiple rows containing time periods
Hi,
I have a table with rows like this:
id, intime, outtime
1, 2010-01-01 00:10, 2010-01-3 20:00
I would like to split this row into multiple rows, 1 for each 24hr period in the record.
i.e. The above should translate into:
id, starttime, endtime, period
1, 2010-01-01 00:10, 2010-01-02 00:10, 1
1, 2010-01-02 00:10, 2010-01-03 00:10, 2
1, 2010-01-03 00:10, 2010-01-03 20:00, 3
The first starttime should be the intime and the last endtime should be the outtime.
Is there a way to do this without hard-coding the 24hr periods?
Thanks,
Dan Scott
http://danieljamesscott.orgThanks for all the feedback, Dan.
It appears that the respective solutions provided will give you: a) different resultsets and b) different performance.
Regarding your 'truly desired resultset' you haven't answered all questions from my previous post (there are differences in the provided examples), but anyway:
I found that using CEIL or ROUND makes quite a difference, using my 'simple 3 record testset' (30 records vs. 66 records got initially returned, that's less than half of the original). That's quite a difference. However, I must call it a day (since it's almost midnight) for now, so there's room for more optimizement and I haven't thoroughly tested.
But this might hopefully make a difference performancewise when compared to my previous 'dreaded example':
SQL> drop table t;
Table dropped.
SQL> create table t as
2 select 1 id, to_date('2010-01-01 00:10', 'yyyy-mm-dd hh24:mi') intime, to_date('2010-01-03 20:00', 'yyyy-mm-dd hh24:mi') outtime from dual union all
3 select 2 id, to_date('2010-02-01 00:10', 'yyyy-mm-dd hh24:mi') intime, to_date('2010-02-05 20:00', 'yyyy-mm-dd hh24:mi') outtime from dual union all
4 select 3 id, to_date('2010-03-01 00:10', 'yyyy-mm-dd hh24:mi') intime, to_date('2010-03-03 00:10', 'yyyy-mm-dd hh24:mi') outtime from dual;
Table created.
SQL> select id
2 , max(intime)+level-1 starttime
3 , case
4 when level = to_char(max(t.outtime), 'dd')
5 then max(t.outtime)
6 else max(t.intime)+level
7 end outtime
8 , level period
9 from t
10 connect by level <= round(outtime-intime)
11 group by id, level
12 order by 1,2;
ID STARTTIME OUTTIME PERIOD
1 01-01-2010 00:10:00 02-01-2010 00:10:00 1
1 02-01-2010 00:10:00 03-01-2010 00:10:00 2
1 03-01-2010 00:10:00 03-01-2010 20:00:00 3
2 01-02-2010 00:10:00 02-02-2010 00:10:00 1
2 02-02-2010 00:10:00 03-02-2010 00:10:00 2
2 03-02-2010 00:10:00 04-02-2010 00:10:00 3
2 04-02-2010 00:10:00 05-02-2010 00:10:00 4
2 05-02-2010 00:10:00 05-02-2010 20:00:00 5
3 01-03-2010 00:10:00 02-03-2010 00:10:00 1
3 02-03-2010 00:10:00 03-03-2010 00:10:00 2
10 rows selected.
SQL> By the way: I'm assuming you're on 10g, is that correct?
Can you give us some information regarding the indexes present on your table? -
Split XSLT Output into Multiple Files
I have an XML-to-File scenario working, but now I need to split my XSLT map output into multiple files based on the data. I have been reading the Jin Shin blog on message splitting, but don't know that it pertains to my situation.
XML data getting mapped with XSLT map creates output formatted like this.
<?xml version="1.0" encoding="utf-8"?>
<ns1:ColdInvoiceData xmlns:ns1="http://graybar.com/cold/invoice">
<Header>
<RecordID>HDR</RecordID>
<InvoiceNumber>15</InvoiceNumber>
</Header>
<Details>
<RecordID>DTL</RecordID>
<LineItemNumber>001</LineItemNumber>
<UnitPrice>1.25</UnitPrice>
</Details>
<Details>
<RecordID>DTL</RecordID>
<LineItemNumber>002</LineItemNumber>
<UnitPrice>2.22</UnitPrice>
</Details>
<Header>
<RecordID>HDR</RecordID>
<InvoiceNumber>16</InvoiceNumber>
</Header>
<Details>
<RecordID>DTL</RecordID>
<LineItemNumber>001</LineItemNumber>
<UnitPrice>3.33</UnitPrice>
</Details>
</ns1:ColdInvoiceData>
I currently have this output writing to a file (FTP, File Conversion). A single file is no issue, but I need to send multiple files for every set of HDR/DTL(s). I also need to put the invoice number in the filename (which is working fine as a parameter in my single FTP File CC now).
Can I make this happen with message splitting and maybe a second map (GUI map)? Do I need to adjust the XSLT output XML format to have an invoice level? Is there a better way to go?
Thanks!I made a change to the namespace used on the Messages/Message1 nodes (since the system-assigned ns0 was already being used in my xml data) and now I am getting output.
The problem is that the output matches my input. As aforementioned, I started with just a one-to-one mapping on every node and field.
When I change the mapping to try to force multiple ColdInvoiceData nodes, I get the following error (when my source has two Invoice nodes):
<Trace level="1" type="T">com.sap.aii.utilxi.misc.api.BaseRuntimeException: RuntimeException in Message-Mapping transformation: Cannot produce target element /ns0:Messages/ns0:Message1/ns1:ColdInvoiceData[2]/Invoice. Check xml instance is valid for source xsd and target-field mapping fulfills requirements of target xsd at
When my source has one invoice node, it works ok.
Here is a screenshot of my mapping structure.
http://webpages.charter.net/kpwendel2/ib.jpg -
Splitting a message with multiple rows from the JDBC Adapter
Hi,
I'd like to split the resultset message with multiple row elements and process each row separately..
Does someone have this experience?
Thanx, PeterHi Chandrasekhar,
I tried to follow your advise, but I'm not able to complete the process correctly.
Let me explain my process:
First - output from the JDBC adapter goes into the first receive step. Of course, there are multiple ROW elements. (Should be marked the ingoing message marked in the container as Multiline??)
The next should be the transformation:
format of the source message is like
<message>
<row>
<column>w</column>
</row>
<row>
<column>w</column>
</row>
</message>
In the message I have the ROW element as 0..unbounded
and <column> element exactly 1
This message should be mapped to multiple messages of the format:
<message>
<value>w</value>
</message>
How should be the mapping be done?
Is it N:1 or 1:N (because in another thread there was an 1:N mapping advised)
Then (as you say) should follow the Block step:
Which message (container element) should be marked as Multiline? And what does it mean: Current Message?
Can you give me some advise, when and how to use the multiline mark?
Thanx a lot, Peter -
One src message to multiple IDocs without BPM?
Hi guys!
Is it possible to cerate multiple IDocs from one source incoming message without BPM?
I tried the scenario, but I get following error:
<SAP:Code area="OUTBINDING">CO_TXT_MMF_ENGINETYPE</SAP:Code>
<SAP:Stack>Messages in multi-message format can only be sent to one Adapter Engine</SAP:Stack>
Any ideas?
Thanx a lot!
OlianHi
Sorry my earlier link was with BPM.
refer to this blog by Michal
/people/michal.krawczyk2/blog/2005/12/04/xi-idoc-bundling--the-trick-with-the-occurance-change
Regards,
Kumar -
C# Split xml file into multiple files
Below i have an xml file, in this file, i need to split this xml file into multiple xml files based on date column value,
suppose i have 10 records with 3 different dates then all unique date records should go into each file . for ex here i have a file with three dates my output should get 3 files while each file containing all records of unique date data. I didn't get any idea
to proceed on this, thats the reason am not posting any code.Needed urgently please
<XML>
<rootNode>
<childnode>
<date>2012-12-01</date>
<name>SSS</name>
</childnode>
<childnode>
<date>2012-12-01</date>
<name>SSS</name>
</childnode>
<childnode>
<date>2012-12-02</date>
<name>SSS</name>
</childnode>
<childnode>
<date>2012-12-03</date>
<name>SSS</name>
</childnode>
</rootNode>
</XML>Here is full code:
using System.Xml.Linq;
class curEntity
public DateTime Date;
public string Name;
public curEntity(DateTime _Date, string _Name)
Date = _Date;
Name = _Name;
static void Main(string[] args)
XElement xmlTree = new XElement("XML",
new XElement("rootNode",
new XElement("childnode",
new XElement("date"),
new XElement("name")
string InfilePath = @"C:\temp\1.xml";
string OutFilePath = @"C:\temp\1_";
XDocument xmlDoc = XDocument.Load(InfilePath);
List<curEntity> lst = xmlDoc.Element("XML").Element("rootNode").Elements("childnode")
.Select(element => new curEntity(Convert.ToDateTime(element.Element("date").Value), element.Element("name").Value))
.ToList();
var unique = lst.GroupBy(i => i.Date).Select(i => i.Key);
foreach (DateTime dt in unique)
List<curEntity> CurEntities = lst.FindAll(x => x.Date == dt);
XElement outXML = new XElement("XML",
new XElement("rootNode")
foreach(curEntity ce in CurEntities)
outXML.Element("rootNode").Add(new XElement("childnode",
new XElement("date", ce.Date.ToString("yyyy-MM-dd")),
new XElement("name", ce.Name)
outXML.Save(OutFilePath + dt.ToString("yyyy-MM-dd") + ".xml");
Console.WriteLine("Done");
Console.ReadKey(); -
How to Split 1 Order into Multiple Deliveries based on Partner Function ?
Hello,
How can I split one Sales Order into multiple deliveries, based on the partner function "managed by" ?
The requirement is that one order will be created for different "managed by".
If partner function "managed by" is same at line item level in order, than the items having same "managed by" can be combined in one delivery, else delivery will split and multiple deliveries will be created from 1 Order.
Jatin MistryHi,
You need to create a new requirement in tcode VOFM for that, together with your ABAP consultant. This requirement will be used in copy contol.
http://saptechsolutions.com/pdf/VOFMCopyRequirementRoutines.pdf
MdZ -
MIRO : split line item into multiple
I have senario were we need to split 1 PO line into multiple line items in MIRO due to different tax applicable for different amounts....
Hi,
How same material from same vendor with same time in a single PO have different tax structure?
You have following options, chose your suitable one:-
Option-1
Create single PO with 10 qty and do not enter tax code in PO. Do invoice 2times for your PO ie.. invoice with 4qty with value 400 for tax code XX and again invoice with 6qty with value 600 for tax code ZZ
Option-2
Create single PO with two line items……1st line item with 4qty & value 400 with tax code XX and 2nd line item with 6qty & value 600 with tax code ZZ. Do invoice directly for that PO.
Option-3
Create two PO separately ie….. One PO with 4qty with value 400 with tax code XX and Another PO with 6qty & value 600 with tax code ZZ. Do invoice two PO’s
Regards,
Biju K
Maybe you are looking for
-
Hi, guys. This is my first post, although I have been lurking a while. You guys are full of solutions! Hopefully, you can solve mine my BB 8350i has a voicemail icon on it. I have no voicemails at all, and I want it gone. I am weird about stuf
-
Hey I totally need help. My daughter named her nano "Phoebe" and when I tired to charge it i tunes came up with a lock symbol on the bottom where it says how much time is left. I cant play any music under "phoebe" playlist but can play any other play
-
Embed files in EPS ...
Hi, if I use the option to embed linked files into an EPS I want to export, -all- linked images in the current AI-Project are embedded - not only the visible ones. How can I achieve, that only visible linked images are embedded in the eps? It would b
-
Program to update po item condition
Hi I need to write a progra which will update PO item's condition. Prefer not to use BDC, BAPI_PO_CHANGE looks promising but doesn't update the item condition here's my code: s_po_i-po_item = P_ebelp. s_po_i-calctype = 'B'. s_pox_i-po_item
-
Where is the latest saved version?
I save all the time but it never show the latest save by time? How do I find the latest versioin?