Produce multiple target nodes
Hi Experts,
In my SOAP to RFC scenario , the SOAP req contains one input value i.e. MAtnr . I have mapped this field with a field Mat_Number in RFC -Req . Its simply direct mapping . Its working for a single value perfectly .
My requirement is If SOAP -Req contains many matnr values , Its not working . How can I build this MEss Mapping to produce multiple Mat_Number field in RFC-Req.
Presently It is MATNR----
>MAT_NUMBER.
Can you pls suggest how to build mapping to produce multiple MAT_NUMBER .
Thanks.
Drumi
Mark,
This is source and target structures.
Source::
MT 1..1
-Records 1..Unb
-Matnr 1..Unb
Target::
ZRFC 1..1
-IMPORT 1..1
-Item 0..Unb
- werks 0..1
Here I have mapped matnr -
> werks and Records -
> item .
Can you now explain If I want multiple werks values at target side .
-Drumi
Similar Messages
-
Single source to create multiple target nodes
Hi Guys,
I need to create multiple target node as many occurrence of source node. how should i achieve it?
Source node (1...999999) to Target node(1..1)
please suggest.
Regards
SwapnilHi Nutan,
Sorry formatting got messed up so posting again.
Sorry for the confusion. Target structure is 0..unbounded.
Source structure ...................................... Target structure
Message 1 ...................................................Message 1
ZHRMD_A07 (1...1)..........................................MT_EMPLOYEE (0....unbounded)
E1PLOG1(1...unbounded)................................ Field1
I need to create MT_EMPLOYEE multiple times depend upon occurences of E1PLOG1.
Regards
Swapnil
Edited by: Swapnil Bhalerao on Mar 3, 2010 12:41 PM
Edited by: Swapnil Bhalerao on Mar 3, 2010 12:47 PM -
[Solved] How to create multiple target nodes from single input node (XSL)
Hello all,
I have identified what I think is a bug in the visual XSLT mapper (JDev 10.1.3.3). Here is the simplified scenario:
I have a source XML file that contains a bill-to address and a ship-to address, something like this:
<header>
<bill-to-name>My Customer Bill To</bill-to-name>
<bill-to-address>123 main street</bill-to-address>
<ship-to-name>My Customer Ship To</ship-to-name>
<ship-to-address>567 first avenue</ship-to-address>
</header>I want to translate it to a target XML file that looks like this:
<addresses>
<address>
<address-type>BILLTO</address-type>
<name>My Customer Bill To</name>
<street-address>123 main street</street-address>
</address>
<address>
<address-type>SHIPTO</address-type>
<name>My Customer Ship To</name>
<street-address>567 first avenue</street-address>
</address>
</addresses>Note that what I am trying to do is to create two nodes in the target (something like a for-each), but where there is no repeating node in the source.
I was able to do this quite simply with a map like this:
<xsl:template match="/">
<ns2:addresses>
</ns2:address>
<ns2:address-type>
<xsl:text disable-output-escaping="no">BILLTO</xsl:text>
</ns2:address-type>
<ns2:name>
<xsl:value-of select="/ns1:header/bill_to_name"/>
</ns2:name>
<ns2:street-address>
<xsl:value-of select="/ns1:header/bill_to_address"/>
</ns2:name>
</ns2:address>
</ns2:address>
<ns2:address-type>
<xsl:text disable-output-escaping="no">SHIPTO</xsl:text>
</ns2:address-type>
<ns2:name>
<xsl:value-of select="/ns1:header/ship_to_name"/>
</ns2:name>
<ns2:street-address>
<xsl:value-of select="/ns1:header/ship_to_address"/>
</ns2:name>
</ns2:address>
</ns2:addresses>
</xsl:template>As long as I only use the source view for the xsl file, this works fine and tests just fine. As soon as I switch over to the graphical (design view), the source gets mangled to:
<xsl:template match="/">
<ns2:addresses>
</ns2:address>
<ns2:address-type>
<xsl:text disable-output-escaping="no">BILLTOSHIPTO</xsl:text>
</ns2:address-type>
<ns2:name>
<xsl:value-of select="/ns1:header/bill_to_name"/>
<xsl:value-of select="/ns1:header/ship_to_name"/>
</ns2:name>
<ns2:street-address>
<xsl:value-of select="/ns1:header/bill_to_address"/>
<xsl:value-of select="/ns1:header/ship_to_address"/>
</ns2:name>
</ns2:address>
</ns2:addresses>
</xsl:template>which obviously does not work.
So:
1). Should my original map work? If not, what is the correct way to do it?
2). If the map should work (it does), this looks like a bug in the design view.
3). If my map should work, is there a way to do this in the design view?
Kind regards,
JohnJohn,
GUI has limited functionality and hence it does not support all the constructs. If you want to implement soln that is visible in gui follow this steps.
for-each(bill-to-name)
create <address>tag
map concat(BILLTO) to <address-type>
map value of <bill-to-name> to <name>
map value of <bill-to-address> to <street-address>
select the for-each you created - right click -> add xsl node ->clone for-each
repeat similar steps for mapping <ship-to_name>...etc
If you still unsure send me the source & target xsd and I will send the xsl your way. You can email me at [email protected]
Dipal -
How to map one element to multiple target nodes? Kindly help!
Hi Experts,
I have a source XML:
<Inventory>
<MaterialNo>Z001</MaterialNo>
<InventoryLineItem>
<BatchNo>B001</BatchNo>
<Quantity>100</Quantity>
</InventoryLineItem>
<InventoryLineItem>
<BatchNo>B002</BatchNo>
<Quantity>120</Quantity>
</InventoryLineItem>
<InventoryLineItem>
<BatchNo>B003</BatchNo>
<Quantity>50</Quantity>
</InventoryLineItem>
</Inventory>
I want the target output as: This is a RFC function module which has an internal table ITAB_STOCK as the input parameter.
YGET_STOCK
ITAB_STOCK
Item
MM - Z001
Batch - B001
Qty - 100
Item
MM - Z001
Batch - B002
Qty - 120
Item
MM - Z001
Batch - B003
Qty - 50
What I am getting is:
YGET_STOCK
ITAB_STOCK
Item
MM - Z001
Batch - B001
Qty - 100
Item
Batch - B002
Qty - 120
Item
Batch - B003
Qty - 50
The MaterialNo (MM) is not coming in all the items. What could be the problem in my graphical mapping? How to achieve the expected target uisng graphical mapping?
Kindly help!
Thanks
GopalHello,
Just do the below mapping you will get it...
Map InventoryLineItem to Item in your table.
Then MaterialNo--->CopyValue---->MM
[0]
You will get it let me know if not.
Regards, -
Multiple Target Files as the number of times Item in source node
Hi all
I am new XI ,my scenario is File to File and my data type structures for source and target are as follows
Data type for source
Source
Header 1:unbound
Org 1:unbound
In declaration of target data type occurrence of all child nodes are 1:unbounded. And I have used it in Message type and in message mapping for my target message type occurrence is showing as 1:1.
My objective is to replicate this entire Target as the no of times the Item is occurring in source ie for multiple items in source I want multiple target files. For this I have mapped item node of source to Target(parent node). But in mapping test it is only displaying one Target structure for multiple nodes in source. Please Help me in solving this issueHi Satish,
Use Multi Mappings :
When you create message mapping change the occurence of target from 1 to unbounded. This will allow you to create multiple target structures.
Then map them accordingly as per your need and you can see multiple output in test.
Just you have to be more focused on the context and for that you have to go thro' the mapping documents.
Search related documents on SDN and go thro' them.
Regards,
Shri -
Multiple Target files as the item in source file
Hi all ,
I am new XI ,my scenario is File to File and my data type structures for source and target are as follows
_Data type for source: _
Source
Header 1:unbound
org 1:unbound
order 1:unbound
Item 1:unbound
itemno 1:unbound
matno 1:unbound
Data type for Target
Target
org 1:unbound
order 1:unbound
itemno 1:unbound
matno 1:unbound
In declaration of target data type occurrence of all child nodes are 1:unbounded. And I have used it in Message type and in message mapping for my target message type occurrence is showing as 1:1.
My objective is to replicate this entire Target as the no of times the Item is occurring in source ie for multiple items in source I want multiple target files. For this I have mapped item node of source to Target(parent node). But in mapping test it is only displaying one Target structure for multiple nodes in source. Please Help me in solving this issue .
Full Points will be awarded
Thanks & Regards
Satish.Hi,
If you want multiple Targerts you need to use UseOneAsMany.
check below link
http://help.sap.com/saphelp_nw70/helpdata/en/38/85b142fa26c811e10000000a1550b0/content.htm
Thanks,
RamuV -
Server 2012 R2 iSCSI Target - Multiple targets per iSCSI Virtual Disk with CHAP
Scenario I am trying to achieve is this:
Windows Server 2012 R2 serves as iSCSI Target configured to have 1 iSCSI Virtual Disk
2 Hyper-V servers connecting to this target with iSCSI Inistator and have multiple targets for that iSCSI Virtual Disk using CHAP
**These 2 are nodes in fail over cluster, this iSCSI is added as a CSV.
Issue that I have, is that you can only have 1 target per iSCSI Virtual Disk
Both Hyper-V servers can connect to this LUN without issue when I add both initiator IDs to the target, but once I enable CHAP, you can only put one initiator ID in the "Name" field, so I can only connect from 1 Hyper-V server.
Do you know of a way around this?From my understanding, "chaptest" is a single target, my goal was to make 2 targets to the same iSCSI virtual disk.
So if you were to right click the iSCSI virtual disk that "chaptest" is assigned to and click "Assign iSCSI Veritual Disk...", then select "New iSCSI Target, and proceed with the wizard it removes the "chaptest" target
and adds the new one just created.
My goal was to have 2 targets to 1 iSCSI VD, but seeing your screenshot, with 2 initiators connected, that goal doesn't seem needed anymore.
I was under the impression that the "User name" = the iscsi initiator IQN name, which had to be unique. That is why I thought I would need 2 targets.
Thanks -
Biztalk Map create duplicate target node
Using biztalk mapper, I need a target node to be duplicated.. I have created a simplified version of my issue. Please see below map
link for source and destination schema.
I need the target Option node to be duplicated for each OptionNotes. The value of OptionNotes is to be split by a pipe ("|"),
then map to target Code and Description.
The input is as below:
<ns0:Source xmlns:ns0="http://Test.SOAP.Source1">
<Option>
<OptionID>ID0_NoNotes</OptionID>
<OptionName>OptionName_0</OptionName>
</Option>
<Option>
<OptionID>ID1_NoNotes</OptionID>
<OptionName>OptionName_1</OptionName>
<OptionNotes>NOTE1|BLAH1</OptionNotes>
<OptionNotes>NOTE2|BLAH2</OptionNotes>
</Option>
</ns0:Source>
The output should be as below:
<Destination>
<Options>
<Option>
<Code>ID0_NoNotes</Code>
<Description>OptionName_0</Description>
</Option>
<Option>
<Code>ID1_NoNotes</Code>
<Description>OptionName_1</Description>
</Option>
<Option>
<Code>NOTE1</Code>
<Description>BLAH1</Description>
</Option>
<Option>
<Code>NOTE2</Code>
<Description>BLAH2</Description>
</Option>
</Options>
</Destination>
Tried to use Looping and combination with Value Mapping, but to no avail. Do I have to resort to inline xslt?
Thanks.Thanks for all your answers.
@Pi_xel_xar Your suggestion requires a change in the message schema.
@Nadeem We have already tried the solution on the blog, but it's not quite the scenario we face. The issue is the OptionNote is in the same layer as OptionID and OptionName.
We have used another tool, which has done this easily. We then get the XSLT and import it as part of Inline XSLT scripting functoid.
The XSLT produced was as below:
<xsl:for-each select="ns0:Source/Option">
<Option>
<xsl:for-each select="OptionID">
<Code>
<xsl:value-of select="string(.)"/>
</Code>
</xsl:for-each>
<xsl:for-each select="OptionName">
<Description>
<xsl:value-of select="string(.)"/>
</Description>
</xsl:for-each>
</Option>
</xsl:for-each>
<xsl:for-each select="ns0:Source/Option/OptionNotes">
<xsl:variable name="var1_resultof_cast" select="string(.)"/>
<Option>
<Code>
<xsl:value-of select="substring-before($var1_resultof_cast, '|')"/>
</Code>
<Description>
<xsl:value-of select="substring-after($var1_resultof_cast, '|')"/>
</Description>
</Option>
</xsl:for-each>
Thanks everyone. -
Batch Automap to Multiple Target Applications
Hello,
I've Googled and read through the admin guide but I'm still confused with this function. I have multiple target applications in one FDM application and I need to setup an automap function for all the target applications.
I would be very grateful if someone could answer the following questions and describe the process.
How do you set “AutoMapCorrect” location for multiple target applications since there are different dimensions in each application?
Do I have to add a suspense member for each dimension in every target application?
I’m not sure how to produce a report that will tell a user: Here are the automapped members of the outline that kicked-out during this run?
Any help is greatly appreciated.
Thanks!As far as your first 2 questions, I can not provide a lot of help, as I'm pretty sure the out of the box automapping works only for the default adapter but I'm not entirely sure on that. To the 3rd problem, I've implemented a little script and put a taskflow associated to it in menumaker. I've toned this down a bit so I may have missed something in the syntax, in my implementation, I also removed the records of the suspense mapping to help push the user to fix them on a timely basis and added some error trapping. This was done by changing select * to delete * from tDatamap.
strSQL = "Select * from tDatamap "
strSQL = strSQL & "Where SrcDesc = 'Auto Map Suspense'"
Set rs = DW.DataAccess.farsKeySet(strSQL)
If Not rs.bof And Not rs.eof Then
Do Until rs.eof
lngCounter = lngCounter + 1
strProblem = strProblem & rs.fields("srcKey") & vbcrlf
rs.movenext
Loop
rs.close
Set rs = Nothing
RES.PlngActionType = 2 '(See Enumeration: ScriptActionTypes)
RES.PstrActionValue = "The Following were the suspense Maps" & vbcrlf & strProblem
End Sub
Regards
JTF -
Generating target nodes dynamically in message mapping
Hi XI GURUS
I am trying to generate target node using using more then source node. Is it possible to do this.
I need this as in source I have 2 different nodes (0 to unbounded) and in target I want to create corresponding number of target nodes. For e.g if I have 2 + 1 nodes in source then I want to create 3 nodes in target
Source as below
<FIRSTNAME>
<Raj>
<Kum>
</FIRSTNAME>
<FIRSTNAME>
<Naveen>
<Kumar>
</FIRSTNAME>
<CITY>
<bANGALORE>
</CITY>
Desired output in target as below
<ADDRESS>
<qwerty1>
<ADDRESS>
<ADDRESS>
<qwerty2>
<ADDRESS>
<ADDRESS>
<qwerty2>
<ADDRESS>
Can i follow an alternative approach (using java function) of counting the total number of occurences of source nodes and generating as many number of the target node
ThanxIf you have a condition check for each of the source node to be mapped to the target node,
use "create if" standard function and pass the boolean result of your Condition check as an input to this standard function. For each "true" a value would be added to the output queue. If you have a simple condition check on some source field value for each correspoding node, use "if without else" or depending on the complexity of the condition you may use a udf to get the boolean outcome.
And for mapping from more than on type of source node, you may duplicate subtree for target node.
Regards,
Suddha -
Loading Data to Multiple Targets in BI
Hi Experts,
I have one doubt regarding data load to multiple targets in BI. I explain clearly- the scenario is to load the data coming from one source system to multiple Data Targets in BI. Like in BW, we will just create multiple update rules from InfoSource to different targets. In InfoPackage maintenance screen, under Data Targets Tab, we will select the respective targets which we want to load and we run the InfoPackage, it will updates the data to all the selected targets in the infopacakge.
But in BI, how we will implement this scenario, bcoz here we need to create the individual DTPs, and there is no options to load the data simultenaously to multiple targets.
So, is there any solution to implement this scenario in BI, plz expalin.
Thnaks in Advance
Ragards
Ramakrishna KamurthyHi Dennis,
No worries at all. I've been trying different approaches and strangely it does seem to load data packages faster when going via an InfoSource. (I don't understand why). However, it doesn't want to do it parallel.
Whereas when I went loaded direct from the DataSource to DataSource, it processed data packages twice as slow but three at a time. The result being without the InfoSource was faster. This can be seen in the DTP Process Monitor and in SM50.
Both DTPs had the default setting in Settings for Batch Manager of 3 parallel processes.
Our batch queues in SM50 have not been blocked with other processes.
Has anyone else had problems with parallel processes when loading via an InfoSource?
Thanks
Adrian
P.S.
I think I've discovered two cases where InfoSource may bring performance improvements:
Filtering Records
Transformation A includes the common and more simplistic transformations. e.g Sets a flag "Relevant" for certain conditions being met.
Transformation B includes the complex transformations. At the beginning of B, you include a Start Routine that filters out records not marked "Relevant". That way it only does the complex work on relevant records.
Time Conversion
If your Data Source has Fiscal Period, but you wish your DataTarget to have Calendar Month, you need to write a routine to covert if you extract direct from DataSource to DataTarget.
Whereas, if the Fiscal Period is passed to an InfoSource, you can use Time conversions or formulas to convert Fiscal Period to Calendar Month in a transformation between InfoSource and DataSource
Edited by: Adrian Bell on Jul 31, 2008 9:33 AM -
ABAP MAPPING Querry - How to create Different Target NODE NAME as of Source
Hi,
In abap Mapping
<b>DATA READ FROM SOURCE XML NODE into <u>incode</u></b> ******
data: incode type ref to if_ixml_node_collection.
incode = idocument->get_elements_by_tag_name( 'BUSINESS_DAY' ).
<b>CREATE OUTPUT XML NODE WITH SAME NAME AS <u>'BUSINESS_DAY'</u></b> **
data: outcode type ref to if_ixml_node.
outcode = incode->get_item( index = 0 ).
data irc type i.
irc = msgtype->append_child( outcode ).
*<b>BUT TO CREATE OUTPUT XML NODE WITH <u>DIFFERENT NAME AS 'BUSS_DAY'</u></b>*
data: ws_val type string VALUE 'xyz'.
data: elementsender type ref to if_ixml_element.
elementsender = odocument->create_simple_element(
name = 'BUSS_DAY'
value = ws_val
parent = msgtype ).
<b>Please guide me how I can assign <u>incode</u> value to ws_val.
So that I can generate <u>OUTPUT XML NODE with different name as of SOURCE XML NODE</u></b>
i.e. How to create Different Target NODE NAME as of
Source with same Data
<Note>: I am using "How to... Use ABAP Mapping in XI 3.0 ver.1.00" and to create different NODE name as of source
is not given in it.
Thanks & Regards.Hi ABAPers,
Please Guide Me .....
<u>This is ABAP Mapping problem in XI.</u>
<b>How can I read data from incode into ws_val.</b>
data: <b>ws_val</b> type string
data: <b>incode</b> type ref to if_ixml_node_collection.
<b>incode</b> = idocument->get_elements_by_tag_name( 'BUSINESS_DAY' ).
Best Regards -
How to remove target node if source field value is empty SAP PI Mapping
Hello,
how to remove target node if source field value is empty in graphical Mapping.
Like if
MIddle name in source filed is empty, I would like to eliminate target field from out put XML.
Thank you
JohnHi Jhon,
If you want to remove all empty tags and you dont to complicate your message mapping, you can use a XSL, after the message mapping, to remove all the empty tags:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@*|*|comment()|processing-instruction())
and normalize-space()='' ]"/>
</xsl:stylesheet>
Regards -
Child element of target node in message mapping getting suppressed
Hello All,
I am having mapping where i am trying to generate the target node based on some condition of the source structure ,this is working fine ,I am able to generate the target node once the condition gets satisfied ,but the problem is one of the child elements of the same node is not getting populated,its getting suppressed,i have some condition for the same
I checked the queues its showing value as
SUPPRESS
Value
Value ( in grey )
But still element is not getting generated..
I have added a condition used at the node function and apart from other condition of element..
If some body have the solution for the same,please help me out
Thanks in advance
RajeshHi Rajesh,
The Error is mostly cause of that the node and your child are in same context.
You got to remember that the parent node creates the context, and then the child element puts the value in it.
Try putting your child element to a higher context then mapwithdefault for your supress and then removecontext.
This Issue, you got to work it out with the node functions,
I had the same kind of issue in my mapping, it was rectified with the help of node functions as mapwithdefault, removecontext.
Further unless one sees the mapping of your issue it is a bit difficult to imagine it and answer it.
For more clarifications please give the full hierarchy, and the condition. As of now try with the node functions.
Thanks
Ashmi -
Target node creation on condition
Hi I have a requirement where i have to create a target node based on a requiremnt.
the source is The target is
Line Tar
a1 C1
b1 C2
c1
Line
a1
b1
c2
Line Tar
a2 C3
b2
c3
I have achieved creating Tar based on a b values . now i have to map the C target so that it is created for every c value . but if a,b values are same then C has to be in the same Tar element.
How can i achieve this . Any help is greatly appriciated.
Note: i just need the mapping for C node. not the Tar node.
Thank youHi ,
in my input i have,
<Name>
<FirstName>demo</FirstName>
<LastName>test</LastName>
</Name
<Name>
<FirstName>Testdemo</FirstName>
<LastName>test</LastName>
</Name
<Name>
<FirstName>Test</FirstName>
<LastName>test</LastName>
</Name
<Name>
<FirstName>demo data</FirstName>
<LastName>test</LastName>
</Name
So i have to create Name node in target whenever FirstName is starts with demo with other values in the corrspoinding Name node.
So my target will be
<Name>
<FirstName>demo</FirstName>
<LastName>test</LastName>
</Name>
<Name>
<FirstName>demo data</FirstName>
<LastName>test</LastName>
</Name
Please tell me how to get this
Thanks
Archanaa
Maybe you are looking for
-
I have an old Ipod 5th gen that I have been using for downloading music from my library. Upon purchasing an Ipod touch and registering it in Itunes, I can no longer sync tunes to my old ipod. How can I get that option back on my old ipod?
-
Change presenter note font size and edit notes in slideshow mode
Hi, I just switched to Keynote 5.03 and am still learns its features. I have some questions about the slideshow mode of keynote 1. While in slideshow rehearsal mode with presenter notes showing, is there a way to zoom in on the notes to make the text
-
This is with regards to adding media to AV player in iTunes. I recently updated to the latest version of iTunes. Now, I am unable to drag and drop media files that I was able to earlier in a much older version of iTunes. Earlier, i would click on "Ap
-
I publish a podcast, and I just switched to iTunes 5 last week. I'm having a bit of a problem ripping our podcast to mp3. I used to encode from AIFF to MP3 at 64kbps CBR 22.050khz, and it sounded okay for our show (mostly talk with some music breaks)
-
Dear gurus, Im working with billing plan. There you have billing date in order to determinate when sales document have to be created. I need a report which showm me sales documents with billing date near to due date. Please let me know if im not very