Graphical Mapping Problem : Create Segments by conditions
Hi,
i have a problem while mapping an incoming invoice to IDoc Invoic02. I had to create some Segments (E1EDP02) on basis of identifiers in the incoming message. I hope the following example i created will help to understand my exact problem:
EXAMPLE MESSAGE:
<invoice>
<document>
<position>
<line>
<posnum> 1 </posnum>
<IMD>
<ident> Name </ident>
<val> Maxx </val>
</IMD>
<IMD>
<ident> Age </ident>
<val> 19 </val>
</IMD>
<IMD>
<ident> Gender </ident>
<val> Male </val>
</IMD>
</line>
</position>
<position>
<line>
<posnum> 2 </posnum>
<IMD>
<ident> Name </ident>
<val> Tina </val>
</IMD>
<IMD>
<ident> Age </ident>
<val> 28 </val>
</IMD>
<IMD>
<ident> Gender </ident>
<val> Female </val>
</IMD>
</line>
</position>
</document>
</invoice>
THE RESULT I WANT:
<invoic02>
<E1EDP01>
<SEGMENT> </SEGMENT>
<POSEX> 1 </POSEX>
<E1EDP02>
<SEGMENT> </SEGMENT>
<QUALF> 021 </QUALF>
<BELNR> 19 </BELNR> // THIS should be the Age
</E1EDP02>
<E1EDP19>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<SEGMENT> </SEGMENT>
<POSEX> 2 </POSEX>
<E1EDP02>
<SEGMENT> </SEGMENT>
<QUALF> 021 </QUALF>
<BELNR> 28 </BELNR> // THIS should be the Age
</E1EDP02>
<E1EDP19>
</E1EDP19>
</E1EDP01>
</invoic02>
I tried to different ways to get the above result but i failed
My first try:
ident -------|--- equalsS ------ createIf ---- E1EDP02
Constant[000] --------- SEGMENT
Constant[Age]--|
ident -------|--- equalsS ------ ifWithoutElse ---- QUALF
Constant[Age]--| |
|
Constant[021]
ident -------|--- equalsS ------ ifWithoutElse ---- BELNR
Constant[Age]--| |
|
val
Result:
The E1EDP02 Element will not created reliable. Sometimes it is there sometimes not dunno why ? Any Idea ?
My second try:
IMD -------------- E1EDP02
Constant[000] --------- SEGMENT
ident -------|--- equalsS ------ ifWithoutElse ---- QUALF
Constant[Age]--| |
|
Constant[021]
ident -------|--- equalsS ------ ifWithoutElse ---- BELNR
Constant[Age]--| |
|
val
Result:
Now every E1EDP01 Element has two E1EDP02 Elements. One correct one and an empty one with only a segment element. Is there a way to delete this empty elements ?
Any ideas to create a working mapping ?
Thanks
@Liang Ji
When i do this i have only the first E1EDP01 Element
@Tarang Shah
Which function i had to use for this ?
Thank you
Similar Messages
-
Avoid explicit closing tag in XML using graphical mapping
Hi,
I created a data type with an element called TAG1 which has an attribute called attr.
I mapped an empty constant to the element and the value XXX to the attribute. I`m using graphical mapping and the XML I get is the following:
<TAG1 attr = u201CXXXu201D></TAG1>
But for reasons of volume I need to generate the XML without the explicit closing tag, such as:
<TAG1 value = u201CXXXu201D/>
Is there any possibility to achieve this with graphical mapping?
Thanks & Best Regards,
Viviana> But for reasons of volume I need to generate the XML without the explicit closing tag, such as:
>
> <TAG1 value = u201CXXXu201D/>
>
> Is there any possibility to achieve this with graphical mapping?
This is not posible. The graphical mapping always creates start and end tag, even for empty elements.
You need a seperate mapping step with XSLT or Java mapping.
Regards
Stefan -
Hi gurus,
we need help for following graphical mapping problem.
Our input message structure and payload is like;
<MT_INPUT>
<Header>
<VendorName>GREEN IT</VendorName>
</Header>
<Records>
<MType>T</MType>
<Unit>KG</Unit>
<MS>40</MS>
</Records>
<Records>
<MType>S</MType>
<Unit>STK</Unit>
<MS>2</MS>
</Records>
<Records>
<MType>S</MType>
<Unit>STK</Unit>
<MS>5</MS>
</Records>
<Records>
<MType>T</MType>
<Unit>KG</Unit>
<MS>30</MS>
</Records>
<Records>
<MType>S</MType>
<Unit>STK</Unit>
<MS>3</MS>
</Records>
</MT_INPUT>
We need only the values with Mtype = T
needed output message is like;
<MT_OUTPUT>
<Header>
<VendorName>GREEN IT</VendorName>
</Header>
<Records>
<Type>Total</Type>
<Unit>KG</Unit>
<VALUE>40</VALUE>
</Records>
<Records>
<Type>Total</Type>
</Records>
<Records>
<Type>Total</Type>
</Records>
<Records>
<Type>Total</Type>
<Unit>KG</Unit>
<VALUE>30</VALUE>
</Records>
<Records>
<Type>Total</Type>
</Records>
</MT_OUTPUT>
Kind Regards,
PMMType---
------ equals-----if withoutelse(Unit----then) ------UNIT
Constant("T")---
MType---
------ equals-----if withoutelse(ms----then) ------VALUE
Constant("T")--- -
Mapping problem of Child Node elements as per Parent Node conditions
Hi,
I have an IDOC to SOAP scenario,I have to map the following fields of IDOC,
E1EDPT1 (0..999..)
_TDID (0..1)
_ E1EDPT2 (0..999..)
_ TDLINE (0..1)
Whenever I have the element TDID = Z011, I have to map the element TDLINE to the target Message Type AVL_QTY , which is as below (any one)
ITEM_TEXTS (0..unbounded)
_ ITEM_TEXT (0..unbounded)
|_ AVL_QTY (0..1)
I have done a graphical mapping where the Node ITEM_TEXTS is created only if the above condition is met, ITEM_TEXT and AVL_QTY are mapped directly to E1EDPT2 and TDLINE.
This works for only one item, it fails for multiple.
Please suggest a solution...
Thanks and Regards,
Rohit.Hello,
Thanks for the above suggestion!
But still the problem exits.
I have currently mapped the field in such a way that it gives proper solution but every item i.e. E1EDP01 segment must have an E1EDPT1 segment with element TDID = Z011.
Mapping in Text View looks like below:
/ns0:MT_CONTRACT_DOWNLOAD_MOnline/CONTRACT_ITEM/AVL_QT=addCorresponding(removeContexts(index(ifWithoutElse(stringEquals(/ORDERS05/IDOC/E1EDP01/E1EDPT1/TDID, const(value=Z011)), /ORDERS05/IDOC/E1EDP01/E1EDPT1/E1EDPT2/TDLINE, keepss=false), start=1, inc=1, type=0, result)), removeContexts(ifWithoutElse(stringEquals(/ORDERS05/IDOC/E1EDP01/E1EDPT1/TDID, const(value=Z011)), /ORDERS05/IDOC/E1EDP01/E1EDPT1/E1EDPT2/TDLINE, keepss=false)), result)
UDF for addCorresponding method:
int flg=0;
for (int i=0; i<indexes.length; i++)
if(! indexes<i>.equals("1"))
result.addValue(tdTexts<i>);
else
if(flg == 0)
result.addValue(tdTexts<i>);
flg = 1;
else
result.addContextChange();
result.addValue(tdTexts<i>);
Suppose if there are 3 items, the above condition is met in 1st and 3rd item, and if the 2nd item has TDID = Z008, then in the output i get three item values with the TDLINE values in the first two items itself, it doesnt recognise that 2nd item hasnt matched the condition.
Thanks and Regards,
Rohit. -
Graphical mapping issue with useOneAsMany if segment does not exist
Hi all
I have an issue with graphical mapping in an IDoc to file scenario. I need to have header level fields mapped to line item fields. Whether or not and how many source header segments of the same type exist depends on a qualifier (QUALF). This is generally working if I use the following graphical mapping:
if QUALF = 001 then <source> -> removeContext -> useOneAsMany -> splitByValue -> <target>
... with setting QUALF, <source>, and the second input for the useOneAsMany to the highest possible context node.
Nevertheless, if the segment with the qualifier 001 does not exist in the source then the mapping throws the error "Too few values in first queue in fuction useOneAsMany". Whatever I've tried, the mapping wants to execute the useOneAsMany statement anyway and I haven't found a way to omit this. Whether the target would be created with an empty value or not created at all would be secondary. Would eventually somebody have a solution to this problem?
Thanks in advance,
DanielDaniel,
try using mapWithDefault function before useAsmany
if QUALF = 001 then <source> -> removeContext -> <b>MapwithDefault</b>->useOneAsMany -> splitByValue -> <target>
I think it takes care even if the value occur in the contaxt or.
Babu -
Create Attachment within Graphical Mapping using UDF
Hi!
We want to create an attachment witihn a graphical mapping using an UDF function.
I use that function:
public String addAttachment(String filename, String mimeType, String content, Container container) throws StreamTransformationException{
BASE64Decoder decoder=new BASE64Decoder();
try {
GlobalContainer globalContainer = container.getGlobalContainer();
OutputAttachments outputAttachments = globalContainer.getOutputAttachments();
Attachment attachments = outputAttachments.create(filename, mimeType,decoder.decodeBuffer(content));
outputAttachments.setAttachment(attachments);
return "Adde1: "+filename;
} catch (Exception e) {
return e.toString();
(SDN helped me much in creating that
This function has no compiling errors, anything workes fine:
It takes 3 input-parameters, see also: http://help.sap.com/javadocs/pi/SP3/xpi/com/sap/aii/mapping/api/OutputAttachments.html
filename (ok, more or less contentID)
mimeType (more or less contentType)
content: Base64-encoded String which should be set as content
In my sample I use the following constants for that function:
filename = "fn1.txt"
mimeType="application/xml"
content = "UG9seWZvbiB6d2l0c2NoZXJuZCBhw59lbiBNw6R4Y2hlbnMgVsO2Z2VsIFLDvGJlbiwgSm9naHVydCB1bmQgUXVhcms=" --> cames directly from http://de.wikipedia.org/wiki/Base64
When using the message, I got this error within SXMB_MONI:
<SAP:AdditionalText>com.sap.engine.interfaces.messaging.api.exception.MessagingException: Could not queue receive for
message 0022642d-b106-02df-8e8c-f41c243bd112(INBOUND). Reason: java.lang.NullPointerException: while trying to
invoke the method com.sap.aii.af.sdk.xi.lang.Binary.getBytes() of an object returned from
com.sap.aii.af.sdk.xi.mo.xmb.XMBPayload.getContent()</SAP:AdditionalText>
This looks pretty much the same as Add Attachment from ABAP Mapping but this tread is also not answered.
Adding attachment from PI level looks also in that direction, again, no answer.
So, I was wondering if someone has solved such problem?Hi Divyesh!
We did it that way:
1. Choosing the XML-Mailstructure as Destination as described in Configuring the Receiver Mail Adapter - Advanced Adapter Engine - SAP Library - Example (XI payload with mail package)
2. now we have created a UDF for creating the "content"
public void getContent(String[] text, String[] attFname, String[] attType, String[] attContent, ResultList result, Container container) throws StreamTransformationException{
// vergleich ob alle att-Arrays selbe anzahl haben
if (attFname.length!=attType.length || attFname.length!=attContent.length) {
result.addValue(Integer.parseInt("Fehler: alle Attachment-Eingänge müssen die selbe Anzahl an Elementen haben!"));
String CRLF = "\r\n";
String output="This is a multi-part message in MIME format."+CRLF+CRLF+
"--"+getBoundary(container)+CRLF+
"Content-Type: text/plain; charset=UTF-8"+CRLF+
"Content-Disposition: inline" + CRLF + CRLF +
text[0]+CRLF;
for (int i=0;i<attFname.length;i++) {
output+="--"+getBoundary(container)+CRLF+
"Content-Type: "+attType[i]+"; name="+((char)34)+attFname[i]+((char)34)+CRLF+
"Content-Disposition: attachment; filename="+((char)34)+attFname[i]+((char)34)+CRLF+
"Content-Transfer-Encoding: Base64"+CRLF+CRLF+attContent[i]+CRLF;
output+="--"+getBoundary(container)+CRLF;
result.addValue(output);
This UDF is configured as "QUEUE"
We have configured this input-structure
The Content itself is allready base64.
So we can call this mapping and it creates a Multipart-Mail for us. -
Hi all,
i have a Graphical mapping logic here
Source Structure:
GS
GP[1]
F1- QI
SDQ
F2- 2
GP[2]
F1- QD
SDQ
F2- 3
GP[3]
F1- PC
CTP
F2- 5.3
GP[4]
F1- AI
SDQ
F2- 4
GS
Target structure:
MT
Material[1]
Qty
Material[2]
Qty
Material[3]
Qty
Material[4]
Price
MT
Here the Material node occurences is 0 to Unb.
For values QI,QD and AI should be a seperate mapping ie) three nodes will be created.
For values 'PC' seperate mapping ie. last node will be created only if F1 receives 'PC' beacause i need to implement the separate mapping logic for a value 'PC'.
If i send the data sequence QI,QD,AI and PC my mapping is working correctly.
MT
Material[1]
Qty 2
Material[2]
Qty 3
Material[3]
Qty 4
Material[4]
Price 5.3
MT
But if i send the the data sequence QI,QD,PC and AI my mapping is not working properly for 'AI'. But for QI,QD and PC mapped correctly.
Output:
MT
Material[1]
Qty 2
Material[2]
Qty 3
Material[4]
Price 5.3
MT
Note: For Value 'AI' , target node Material[3] is completly ignored/not coming.
We used createif function to create the target node in the target structure based on the value 'PC'.
we think that once if mapping executed the value for 'PC', mapping for 'AI' is not executed i.e. it doesn't go back and execute the mapping for 'AI'.
Can you please help me to solve this problem,
Thanks and Regards
KamalHi Kamal,
I understand that your src is
GS
GP
F1
SDQ/CTP
F2
and depending on the value of F1 the target nodes has to be created.
here, by using the createif, u can generate the nodes properly, but the problem arises when u have to get the corressponding values in the feild QTY of your target.
in such a situation, writing a UDF would be better a better option.
Thanks
Hari. -
Mapping problem with coupled PO1 segments
The following idoc message is being processed:
- <E1EDP01 SEGMENT="1">
<POSEX>00011</POSEX>
<ACTION>001</ACTION>
<PSTYP>0</PSTYP>
<MENGE>1.000</MENGE>
<MENEE>PCE</MENEE>
<BMNG2>1.000</BMNG2>
<PMENE>PCE</PMENE>
<PEINH>1</PEINH>
<GEWEI>KGM</GEWEI>
<MATKL>79</MATKL>
<UEPOS>00010</UEPOS>
<BPUMN>1</BPUMN>
<BPUMZ>1</BPUMZ>
<BRGEW>0.7</BRGEW>
<WERKS>DC01</WERKS>
<LGORT>CD01</LGORT>
- <E1EDP20 SEGMENT="1">
<WMENG>1.000</WMENG>
<AMENG>0.000</AMENG>
<EDATU>20050302</EDATU>
</E1EDP20>
- <E1EDP19 SEGMENT="1">
<QUALF>002</QUALF>
<IDTNR>0017400</IDTNR>
</E1EDP19>
- <E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>000000000000001683</IDTNR>
<KTEXT>PHILIPS HQ100 T</KTEXT>
</E1EDP19>
- <E1EDP19 SEGMENT="1">
<QUALF>003</QUALF>
<IDTNR>8710103083351</IDTNR>
</E1EDP19>
</E1EDP01>
- <E1EDP01 SEGMENT="1">
<POSEX>1</POSEX>
<UEPOS>00011</UEPOS>
<MATNR>000000000000001683</MATNR>
- <E1ADDI1 SEGMENT="1">
<ADDIMATNR>SERVICE_PREPACK</ADDIMATNR>
<ADDINUMBER>1.000</ADDINUMBER>
<ADDIVKME>PCE</ADDIVKME>
<ADDIFM>0005</ADDIFM>
<ADDIFM_TXT>SLS: transito-picken</ADDIFM_TXT>
</E1ADDI1>
- <E1EDPA1 SEGMENT="1">
<PARVW>SLS</PARVW>
<PARTN>0000000004</PARTN>
<NAME1>Osdorp 04</NAME1>
<NAME4>0000000004</NAME4>
<STRAS>Osdorpplein 138</STRAS>
<ORT01>Amsterdam</ORT01>
<PSTLZ>1068 EN</PSTLZ>
<LAND1>NL</LAND1>
<SPRAS>N</SPRAS>
<SPRAS_ISO>NL</SPRAS_ISO>
</E1EDPA1>
- <E1EDP19 SEGMENT="1">
<QUALF>017</QUALF>
<IDTNR>0001</IDTNR>
</E1EDP19>
</E1EDP01>
- <E1EDP01 SEGMENT="1">
<POSEX>00012</POSEX>
<ACTION>001</ACTION>
<PSTYP>0</PSTYP>
<MENGE>1.000</MENGE>
<MENEE>PCE</MENEE>
<BMNG2>1.000</BMNG2>
<PMENE>PCE</PMENE>
<PEINH>1</PEINH>
<GEWEI>KGM</GEWEI>
<MATKL>79</MATKL>
<UEPOS>00010</UEPOS>
<BPUMN>1</BPUMN>
<BPUMZ>1</BPUMZ>
<BRGEW>0.7</BRGEW>
<WERKS>DC01</WERKS>
<LGORT>CD01</LGORT>
- <E1EDP20 SEGMENT="1">
<WMENG>1.000</WMENG>
<AMENG>0.000</AMENG>
<EDATU>20050302</EDATU>
</E1EDP20>
- <E1EDP19 SEGMENT="1">
<QUALF>002</QUALF>
<IDTNR>0017400</IDTNR>
</E1EDP19>
- <E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>000000000000001683</IDTNR>
<KTEXT>PHILIPS HQ100 T</KTEXT>
</E1EDP19>
- <E1EDP19 SEGMENT="1">
<QUALF>003</QUALF>
<IDTNR>8710103083351</IDTNR>
</E1EDP19>
</E1EDP01>
- <E1EDP01 SEGMENT="1">
<POSEX>1</POSEX>
<UEPOS>00012</UEPOS>
<MATNR>000000000000001683</MATNR>
- <E1ADDI1 SEGMENT="1">
<ADDIMATNR>SERVICE_PREPACK</ADDIMATNR>
<ADDINUMBER>1.000</ADDINUMBER>
<ADDIVKME>PCE</ADDIVKME>
<ADDIFM>0005</ADDIFM>
<ADDIFM_TXT>SLS: transito-picken</ADDIFM_TXT>
</E1ADDI1>
- <E1EDPA1 SEGMENT="1">
<PARVW>SLS</PARVW>
<PARTN>0000000022</PARTN>
<NAME1>Amersfoort 22</NAME1>
<NAME4>0000000022</NAME4>
<STRAS>Amsterdamseweg 8-1-</STRAS>
<ORT01>Amersfoort</ORT01>
<PSTLZ>3812 RS</PSTLZ>
<LAND1>NL</LAND1>
<SPRAS>N</SPRAS>
<SPRAS_ISO>NL</SPRAS_ISO>
</E1EDPA1>
- <E1EDP19 SEGMENT="1">
<QUALF>017</QUALF>
<IDTNR>0001</IDTNR>
</E1EDP19>
</E1EDP01>
Every position has data in two PO1 segments. The first one is referenced in the second one by the UEPOS field. In our mapping we want to create a record in a flat file when such a couple is existing in the idoc.
In my mapping I create a record in the flat file when the first segment is being found. At the second PO1 segment the record is not being written (exactly as wanted). Nevertheless I need to map a field out of the second PO1 segment to the flat file (a field in the PA1 segment), except I cannot access the field from the second segment in the first record. I should I do this??? Working with contexts isn't helping me neither.Hi Mark,
Here is the code to convert
grey
any value
grey
0000000004
grey
any value
grey
0000000022
darkgrey
into
grey
0000000004
grey
any value
grey
0000000022
grey
any value
darkgrey
You have to cache the whole queue:
boolean first = true;
for (int k=0; k<a.length;k++)
if ( ! a[k].equals(ResultList.CC))
if (first)
first = false;
else {
first = true;
result.addValue(a[k]);
result.addContextChange();
result.addValue("");
if (k<a.length-1)
result.addContextChange();
This works only, if the line comes strictly in pairs.
Hope that hepls,
Stefan -
Conditional mapping in Graphical mapping
Hi All,
I have a conditional mapping requirement i.e.I have 2 nodes ( collections/collection/object and extensions/collection/@name) in the source structres. Both nodes are identical and have unbound occurences. Based on certain condtions I need to map second node in the source node to target node ( Items ). Below is the condition.
If first node '/MT_FCI_CONTRACT_EXPORT/fcidataexport/objects/object/collections/collection/object/@classname' (Occurs Unbounded ) value is not 'contracts.LineItem' and second node '/MT_FCI_CONTRACT_EXPORT/fcidataexport/objects/object/extensions/collection/@name' ( Occurs Unbounded ) value is 'MATGRP_COLLN' then only map source field '/MT_FCI_CONTRACT_EXPORT/fcidataexport/objects/object/extensions/collection/row' ( occurs unbounded ) to target node 'Items' ( Occurs unbounded ).
I have done this mapping using If condtions and did some context changes. My second condition is working fine but my first condition is not working as expected. Its only taking value in the first occurences and based on that passing first condition. But I need to check in all occurences whether value 'contracts.LineItem' is not exist then only I need to pass that condition. Please let me know how to achieve this.
Please help me to achieve my requirement.Thanks.
Regards,
RajeshHi Rajesh,
To reply your query first we have to understand the exact requirement . So I am writing my understanding below and solution for it .Kindly reply if your requirement is different.
you have three source field which is involved in mapping .@classname, @name, and row and target side you have node item .
Now you have to check for all classname and name that if classname is not equal to contracts.LineItem and @name is equal to MATGRP_COLLN ( both the values I have considered as constant) then map row to target node item. i.e if classname and lineitem is occuring 4 time and two time both are satisfying both the codition then generate two target Item node .
Solution.
classname -> (CollapseContext)->equals to ContractLineitem --not -->
AND -
IIF WITHOUT ELSE
Name -
>(CollapseContext)-->equals to MATGRP_COLLN--
>
the condition of if without else function will be output of AND and in then map row----.(collpasecontext) finally the output of if without else will be mapped to item
note :all ittalic is Graphical mapping functions .
Regards,
Saurabh -
Problem creating several image maps (linking to different pdf files) RoboHelp 8
Hi,
I have a problem creating several image map hotspots (that link to different .pdf files), from the same image using RoboHelp 8 HTML (WebHelp project).
After compiling, the first image map hotspot created, opens the .pdf file correctly. Unfortunately, when clicking on the other image hotspots, I get an error " Cannot find file...<file path>... Make sure path or Internet address is correct".
All the pdf documents are located in the same folder within the project.
Can anyone help?Have you added the target files as baggage?
See www.grainge.org for RoboHelp and Authoring tips
@petergrainge -
Geo Maps - Graphics rendering problem
Hi Experts,
I got this error while running an Application with Geo Map.- " Graphics rendering problem"
In my application there are two UI elements ,
Geo Map and Business Graphics, i can see business graphics properly but problem is only with GeoMap.
I checked the SAP Note : 704604.
And the entry in my Visual Admin is : http://localhost :40180
When i go to the URL http://<server>:4<instance>80 , i get the message displayed as "SAP IGS is running"
I am unable to figure out the problem can you guys help?
regards,
Ashish ShahHello Ashish,
There must be some problem with IGS server. So check whether your IGS server is configure properly or not.
Follow these steps:
1. Check the path first
Local Drive : \ usr \ SAP \ J2E \ JC01 \ J2EE \ admin
2. Connect to SAP J2EE Engine
3.Open the Visual Administrator Window, In Global Configuration page ,go to
CONFIGURATION ADAPTER -> WEBDYNPRO -> sap.com - > tcwddispwda -> propertysheet.default
4. Switch to edit mode
5.Change property entry , http://<server name: port number>
6.Exit the visual Administrator window
7.Restart J2EE Engine.
Best Regards,
Sheetal.
Edited by: Shital Patil on May 1, 2008 3:11 PM -
Problem creating Header Condition in BAPI_PO_CREATE1
Hello Gurus,
I am having problems with creating a header conditions using the BAPI BAPI_PO_CREATE1. I am filling up table such as: POCONDHEADER, POCONDHEADERX.
It creates a PO document but the header conditions I supplied is not included.
How do I go about this?
Can you guys give a sample code for this?
Need your urgent response on this matter.
Thanks,
JeffreyHai
Check the following Code
DATA: g_s_poheader TYPE bapimepoheader,
g_s_poheaderx TYPE bapimepoheaderx.
DATA: l_no_messaging TYPE char1.
DATA: bednr LIKE wvfb-bednr.
DATA: l_t_return LIKE bapiret2 OCCURS 0.
DATA: l_t_poitem STRUCTURE bapimepoitem,
l_t_poitemx STRUCTURE bapimepoitemx,
l_t_poschedule STRUCTURE bapimeposchedule,
l_t_poschedulex STRUCTURE bapimeposchedulx,
l_t_poaccount STRUCTURE bapimepoaccount,
l_t_poaccountx STRUCTURE bapimepoaccountx,
l_t_pocond STRUCTURE bapimepocond,
l_t_pocondx STRUCTURE bapimepocondx.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = g_s_poheader
poheaderx = g_s_poheaderx
no_messaging = l_no_messaging "RWI-47-20-messaging
IMPORTING
exppurchaseorder = bednr
EXPHEADER =
TABLES
return = l_t_return
poitem = l_t_poitem
poitemx = l_t_poitemx
POADDRDELIVERY =
poschedule = l_t_poschedule
poschedulex = l_t_poschedulex
poaccount = l_t_poaccount
POACCOUNTPROFITSEGMENT =
poaccountx = l_t_poaccountx
pocond = l_t_pocond
pocondx = l_t_pocondx.
Thanks & regards
Sreenivasulu P -
Graphic Mapping:IDOC to File-Avoid Error in Adapter Engine
Hi all,
I'm using Graphic Mapping in my IDOC to File scenario in which each segment in source IDOC will generate a ROW in target File with the condition: DATBI >= currentdate (and some other conditions)
I have a UDF and use the mapping function CREATEIF for this purpose:
DATBI -> UDF -> CREATEIF -> ROW
Problem scenario: In the source IDOC if all the segments have DATBI < currentdate then there is no ROW created, and I get the error in Adapter Engine
Exception in XML Parser (format problem?):'java.lang.Exception: Message processing failed in XML parser: 'Conversion configuration error: Unknown structure ...
How can I avoid this?
I've tried to put this condition using XPATH in Interface Determination and got the error.
There is a way to use function current-date() in XPATH condition?
Thanks for your help,
ElaineHi all,
How can I "suppress the row node if condition fails"? I'm new in PI, so please give more details.
My FCC as follows:
Record Structure: Record, Row
Row.addHeaderLine 0
Row.fieldSeparator ,
Record.fieldSeparator 'nl'
Row.endSeparator ; 'nl'
It works fine if the condition satisfied.
In Message Mapping, I've use Test to double check my mapping, and in the scenario that conditions fails, there is no Row in the target message.
Please advise.
Thanks,
Elaine -
Issue with a graphical mapping -
Hi folks,
I have an issue with a graphical mapping.
We are replicating the Material Master, with an interface of ECC -> PI -> JDBC.
The idoc we are using is the MATMAS.MATMAS05, and in the database we created 5 tables, simulating the structure of the source idoc. The tables are: MARA, MARC, MARD, MBEW, MAKT.
The fact is that we need some data of some segments (tables) in another ones.
In this case we I need to take a value of the segment E1MARCM (MARC) to the MBEW table. The value is: SERNP.
The condition to copy that value is the centre (WERKS). So, the condition will be:
If MBEW-WERKS == MARC-WERKS,
then MBEW-SERNP = MARC-SERNP.
The problem I'm having is that I have to lookup in many different E1MARCM segments, and the relation is not 1...1, nor, E1MBEWM is a child of it (they are in the same level.)
For example there could come:
- E1MARCM_1 (WERKS = 0001)
- E1MARCM_2 (WERKS = 0002)
- E1MARCM_3 (WERKS = 0003)
- E1MBEWM_1 (WERKS = 0001)
- E1MBEWM_2 (WERKS = 0002)
- E1MBEWM_3 (WERKS = 0002)
- E1MBEWM_4 (WERKS = 0003)
- E1MBEWM_5 (WERKS = 0003)
Am I clear with the requirement?
Any answer will be greatly appreciated.
Thanks in advance.
.Juan.Hey folks, any advice or input about this?
Thanks again.
Juan -
Context Mapping Problem from IDoc to EDI
Hi,
I'm trying to map an IDoc to an EDI and I get this problem.
In my IDoc, I have segment E1ADRM1 (1:N)
My mapping condition is if E1ADRM-PARTNER_Q = OSP then copy E1ADRM-REGION into x (EDI field)
So here is my problem:
In my IDoc test, the segment E1ADRM1 is repeated 6 times and the field REGION is not populated in all iterations so the wrong
REGION is being copied to my EDI field.
If I do a display queue on E1ADRM-PARTNER_Q, the value OSP is at the 5th position
AG
SP
VE
WE
OSP ***
OSO
If I do a display queue on E1ADRM-REGION, since only 5 segment E1ADRM have the field REGION populated, I get
KS
VA
KS
ON
VA
**(E1ADRM-PARTNER_Q = SP do not have the RIGION populated so not showing in the IDoc)
So now, since E1ADRM-PARTNER_Q = OSP is at the 5th position, it is copying the 5th E1ADRM-REGION from the list but it should be the 4th.
How can I do that?
Rgds,
YvesHi,
For the mapping to work as you are expecting the queue should look like this(<b>CC</b> denotes context change)..
KS
<b>CC</b>
<b>CC</b>
VA
<b>CC</b>
KS
<b>CC</b>
ON
<b>CC</b>
VA
If you are not having the context changes, check at what level is field REGION at, right click on REGION in graphical mapping and choose menu item context, the 1st entry should have the tick mark(same should be for the PARTNER_Q field also).
Thanks,
Renjith.
Maybe you are looking for
-
Sharing iTunes library with another user on the same computer
My husband and I use the same iMac and have the same iTunes login, but have different user accounts on our computer. When I download things from iTunes, they only show up in my library and do not show up in his. In addition, the two libraries are not
-
How to read list of all files in folder on application server?
How to read list of all files in folder on application server?
-
I just installed an update from Firebox on a Macbook with OS X. I got a message from Firefox telling me to install an adobe update right away, but I don't remember which adobe product it told me to install. Do you know which it was?
-
IWeb pages only working in Safari, not other browsers.
I have created a website in iWeb for my school. All pages open and function correctly in Safari, for either Mac or Windows, but not other browsers. One of the pages in question is: http://www.grovemedia.k12.ok.us/Information.html The "Parent" page
-
Xdb username and password while accessing servlets
Hi all, I just installed application server 8.2. I wrote a simple login.html and a servlet program. The deployment went fine but when I access from browser and click sunbit in login page, it asks for a xdb username and password. I don't remember givi