Convert Number to Sting in graphica mapping
Hi
I need to convert the number to string using graphical mapping in SAP PI 7.1
Please share the posts if any,
Regards
Blue
Edited by: hiddu4u on Nov 21, 2010 10:56 AM
You can do this using mapping UDF; UDF code will b something like this:-
int aInt = [input];
String aString = Integer.toString(aInt);
Edited by: Samiullah Qureshi on Nov 22, 2010 9:41 AM
Similar Messages
-
Graphical Mapping Vs XSLT mapping Vs Java Mapping Vs ABAP Mapping
Hi Experts,
I have a question regarding different message mapping options available in XI namely
Graphical Mapping
XSLT mapping
Java Mapping
ABAP Mapping
Q1: Which amoung the above mappings is the best and why?
Q2: On what cases Graphical, XSLT, Java and ABAP Mapping should be used?
Q3: Is it true that graphical and XSLT mappings are converted into Java class internally?
Kindly help!
Thanks
Gopal
Message was edited by:
gopalkrishna baligaHi,
There is no hard and fast rule for using the mapping techniques.
Graphical Mapping is used for simple mapping cases. When, the logic for your mapping is simple and straight forward and it does not involve mult hiearchical mapping requirement. and context handling.
Java and XSLT mapping are used when graphical mapping cannot help you.
When the choice is between Java And XSLT, XSLT is simpler than java mapping and easier. But, it has its drawbacks. XSLT can lead to a bad perfrormance if the Source XML is huge.
Java Mapping uses 2 types of parsers. DOM and SAX. DOM is easier to use with lots of classes to help you create nodes and elements, but , DOM is very processor intensive.
SAX parser is something that parses your XML one after the other, and so is not processor intensive. But, it is not exaclty easy to develop either.
For further info on each of the mapping, refer to these links,
Graphical Mapping,
http://help.sap.com/saphelp_nw04/helpdata/en/6d/aadd3e6ecb1f39e10000000a114084/content.htm
http://help.sap.com/saphelp_nw04/helpdata/en/43/c4cdfc334824478090739c04c4a249/content.htm
XSLT Mapping
http://help.sap.com/saphelp_nw04/helpdata/en/73/f61eea1741453eb8f794e150067930/content.htm
http://www.w3.org/TR/xslt20/
Java Mapping
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/content.htm
DOM parser API
http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/package-frame.html
Also, check this thread for more info,
Different types of Mapping in XI
Am not sure about XSLT , but , yes graphical mapping is converted into java classes internally and these classes use SAX parsing as well.
Regards,
Bhavesh -
Should we avoid Graphical mapping and stick with Java mapping?
After developing mappings in XI for a month, I just don't see any good reasons to use Graphical mappings over Java mappings. Maybe some experienced users here can give me some valid reasons why we should choose Graphical mappings. Here is what I think:
Disadvantages of Graphical mappings:
1. No way to perform automated unit testings. This is probably the biggest reason I hate it. You can do some tests manually when you work in Integration Builder. But there is no way you can write some unit testing utilities to automate the task.
2. Complexity. Even for some simple requirements, your Graphical mappings can become complicated and hard to understand. A lot of times, I find myself staring at several dozens of graphical nodes and try to understand what it does.
3. Impossible to reuse. This is totally against the DRY (Don't repeat yourself) principle. For example, to generate messages for JDBC adapter, it is common to have two identical fields for primary keys: one in the access node and another in the key node. If you change the mapping logic in one, you have to remember to change the other.
Advantage with Java mappings:
1. Fully automated unit testing. You can create JUnit tests along with your Java mapping classes and use Maven or other build tools to perform automated unit testing.
2. Your choice of XML parsing and binding. With Java mapping, you can choose any open source framework for XML parsing and binding. For example, with XMLBeans, I can convert XML input message to a Java object, transform to another Java object and write to output message. And each Java object is generated from its corresponding XML schema.
3. Highly reusable. We can use fundamental object-oriented designs to create highly reusable mapping components.
4. Better version control. Since the mappings are just Java classes, we can use CVS or SVN to track code changes.
5. Better build tools. We can fully utilize build tools like Ant and Maven to automate the build, unit tests, or even generate documents and mapping web sites.
So do you guys agree? Maybe I am still new to XI or I am missing some important things. But at this point, I just don't see why I should use Graphical mappings. Is there anyone developing XI interfaces completely with Java mappings?
Thanks in advance for any comments!
Kenny CheangHi Suraj,
> Since its graphical the blocks will take space, but
> there is always an adavntage of processing time.
> Ebven though it may appear bigger, it will take less
> time as compared with Java code (for the same
> mapping).
Could you explain more why the graphical mapping has better performance? I thought the graphical mapping is compiled into a Java class in the runtime anyway.
> Yes thats there, but same goes with Java mapping too
> right (if you haven't mentioned it as constants)
I mainly think about inheritance. If I have to build 10 interfaces and they all have some common behavior, I can create a base interface class to encapsulate the common logic. But with graphical mapping, you have to duplicate them in each interface.
> Disadvantages of Java mapping:
> 1. Performance
Same as above. I just don't see why Java has worse performance. I actually think Java should have better performance. You can optimize the code anyway you want. In some cases, you have to use queue functions in graphical mapping but it's not necessary in Java.
> 2. All might not be well versed with Java Code(though
> everyone may know basic java) .
I am not asking everyone to abandon graphical mapping. I am just wondering which one is better when you have skills for both.
> 3. Lot of standard functions are available in GM
> which you can choose, but you have to remember the
> exact code for those in Java mapping.
You can create functions in Java too. All you have to do is to remember the function name.
Kenny -
How to convert number datatype to raw datatype for use in data warehouse?
I am picking up the work of another grad student who assembled the initial data for a data warehouse, mapped out a dimensional dw and then created then initial fact and dimension tables. I am using oracle enterprise 11gR2. The student was new to oracle and used datatypes of NUMBER (without a length - defaulting to number(38) for dimension keys. The dw has 1 fact table and about 20 dimension tables at this point.
Before refining the dw further, I have to translate all these dimension tables and convert all columns of Number and Number(n) (where n=1-38) to raw datatype with a length. The goal is to compact the size of the dw database significantly. With only a few exceptions every number column is a dimension key or attribute.
The entire dw db is now sitting in a datapump dmp file. this has to be imported to the db instance and then somehow converted so all occurrences of a number datatype into raw datatypes. BTW, there are other datatypes present such as varchar2 and date.
I discovered that datapump cannot convert number to raw in an import or export, so the instance tables once loaded using impdp will be the starting point.
I found there is a utl_raw package delivered with oracle to facilitate using the raw datatype. This has a numbertoraw function. Never used it and am unsure how to incorporate this in the table conversions. I also hope to use OWB capabilities at some point but I have never used it and only know that it has a lot of analytical capabilities. As a preliminary step I have done partial imports and determined the max length of every number column so I can alter the present schema number columns tp be an apporpriate max length for each column in each table.
Right now I am not sure what the next step is. Any suggestions for the data conversion steps would be appreciated.Hi there,
The post about "Convert Numbers" might help in your case. You might also interested in "Anydata cast" or transformations.
Thanks, -
Performance of an UDF v/s standard graphical mapping functions
Hello Experts,
I would like to get your opinion/comments on the performance issues with respect to speed of execution when using graphical functions for doing the date conversion requirement given below:
Requirement is to convert input date u20182008-12-03u2019 from the source side to u201820081203u2019 on the target side.
We have used the standard graphical mapping functions 'substring' & 'replacestring' for doing this conversion as explained here: The u2018substringu2018 function is used to capture the part of the string from the source. A u2018constantu2019 with value u2018u2013u2018 is replaced by u2018constantu2019 (empty value) by using the standard text function u2018replaceStringu2019 in the target side.
We did the same using the following UDF too:
public String convertDate(String dateStringInOriginalFormat) {
SimpleDateFormat originalFormatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat newFormatter = new SimpleDateFormat("yyyyMMdd");
ParsePosition pos = new ParsePosition(0);
Date dateFromString = originalFormatter.parse(
dateStringInOriginalFormat, pos);
String dateStringInNewFormat = newFormatter.format(dateFromString);
return dateStringInNewFormat;
From a critical performance point of view, which approach will fare better?
Thanks in Advance,
Earnest A Thomas
Edited by: Earnest Thomas on Dec 4, 2008 6:54 AMHi,
Not only in this case but in general it is always better to use the functions available in MM and only if your requirement is not satisfied with the standard mapping functions then go for UDF.
Also for your requirement no need of going for substring....you can directly use the DateTransform function available.
Source --> DateTransform --> Target
Regards,
Abhishek.
Edited by: abhishek salvi on Dec 4, 2008 11:25 AM -
Can i use graphical mapping to do such conversion or do i need java mapping
Hi Folks,
Need all your help and experience in solving this .
Can you let me know is it possible do to such kind of conversion in XI using file adapter or do I need to do java mapping
Say from rom database I get data in this format
Seq Field Name Field Value
1 Cust No Cust 1
1 S SS1
1 Score1 10
1 Score 2 12
2 Cust No Cust 2
2 S SS2
2 Score1 5
2 Score 2 10
Based on this my o/p has to be
Cust 1 SS1 10 12
Cust 2 SS2 5 10
( ie values in the last column )
The number of rows returned from database can vary . like here for 1 seq it gives 4 in the example bt it can be any number
Like
Seq Field Name Field Value
1 Cust No Cust 1
1 S SS1
1 Score1 10
1 Score 2 12
1 Score3 15
2 Cust No Cust 2
2 S SS2
2 Score1 5
2 Score 2 10
2 Score3 25
Based on this my o/p has to be
Cust 1 SS1 10 12 15
Cust 2 SS2 5 10 25
is there any way that we can use graphical mapping plus file content conversion to do this or is java based mapping the only solution
Thanks
amitHi Amit,
You can do this using Graphical mapping and File Content Conversion.You concatenate the necessary fields in a Context and assign it to the the field Data(or field name of your wish )) in the target which will of the structure
<Records>
<Record>
<Data>concatenated value</Data>
</Record>
</Records>
and in File Content Conversion
make Records,Record 0:1 and Data as 0:unbounded
and give Recordset Structure as Record
then Record.fieldSeparator as 'nl'
This will give you desired output
Regards,
Sundar -
Convert number of dayes per year to data
Please i need help in Convert number of dayes to date
I have ID's like id
FT*09025*0000000001 date=20090125
FT*01171*0000000002 date=20100620
so should convert first five number after FT to date
example *09025*
09 map to 2009
025 number of dayes per year map to 25 jan
example *01171*
01 map to 2010
171 number of dayes per year map to 20 jun
(jan+feb+mar+apr+may)=(31+28+31+30+31)=151
171-151=20 for the next month
Please need help so will added filter to informatica map with date
Edited by: user8929623 on Jul 4, 2010 7:04 PMWell, I do not follow why when 09 maps into 2009, 01 maps into 2010, not into 2001. Assuming it should be 2001, use YYDDD format:
SQL> with t as (
2 select 'FT*09025*0000000001' id from dual union all
3 select 'FT*01171*0000000002' from dual
4 )
5 select to_date(substr(id,4,5),'yyddd') dt
6 from t
7 /
DT
20090125
20010620
SQL> SY. -
Value Mapping and graphical mapping
Hi all
I am learning value mapping and
all function used in graphical mapping ..
can anybody send me inforamtion regarding tht.
Any link appericiated.Hi Nagsen,
Mapping is basically done to convert one form of xml into another form. This can be done using either of them mentioned below.
- Graphical mapping
- XSLT mapping
- JAVA mapping
- ABAP mapping
To know more about each of them please go thru the following links. And if you ask me your which is better, it depends basically on the scenario you implementing and the complexity involved. Anyways please go thru the following links:
Graphical mapping
/people/bhanu.thirumala/blog/2006/02/02/graphical-message-mapping-150-text-preview
http://www.sapgenie.com/netweaver/xi/mapping1.htm
/people/alessandro.guarneri/blog/2006/01/26/throwing-smart-exceptions-in-xi-graphical-mapping
XSLT mapping
http://help.sap.com/saphelp_nw04/helpdata/en/73/f61eea1741453eb8f794e150067930/content.htm
JAVA mapping
http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/content.htm
ABAP mapping
/people/r.eijpe/blog
To know more about the value mapping tools for the SAP Exchange Infrastructure (XI), please go thru the following link:
http://www.applicon.dk/fileadmin/filer/XI_Tools/ValueMappingTool.pdf
To get an idea as to what value mapping is, please go thru the following links:
http://help.sap.com/saphelp_nw04/helpdata/en/13/ba20dd7beb14438bc7b04b5b6ca300/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/f2/dfae3d47afd652e10000000a114084/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/2a/9d2891cc976549a9ad9f81e9b8db25/content.htm
most of the links that I have provided also helps you get the step by step procedure of doing the same. And also involves the procedure to implement certain advanced features.
Hope this clears your doubt fully.
Regards,
Abhy
PS: AWARD POINTS FOR HELPUL ANSWERS. -
Hi All,
I have a requirement to do a graphical mapping from a Single row in Source to Multiple rows in target.
Source:
<SingleRow>
quanutity_1
quanutity_2
quanutity_3
</SingleRow>
Target:
<SingleRow>
<item>
quantity
</item>
<item>
quantity
</item>
<item>
quantity
</item>
</SingleRow>
please suggest.
regards,
PiyushUsage of useOneAsMany:
The first input parameter expects the list of values that we want to propagate to the target message.
The second input parameter expects the number of iterations or how many times we want to replicate the value given in the first parameter.
The third input parameter is the list of context changes. Depending on this parameter the source values will be propagated to the target after every context change.
Also,For this function to work as expected, the first two parameters must contain the same number of contexts while the last two parameters must contain the same number of values
Thanks -
About the number of rows used to map data in Xcelsius
Hi Everyone:
I am using web services to fetch data into Xcelsius. The information I got from web service will increase in time and what I suppose is when I run out of rows to get all data I must open my Xcelsius model and select a greater range of rows on each component to get all the data that the web service is bringing.
Is there an alternative to avoid modifying ranges of data in crontrollers when rows mapped are not enough for the data you are fetching from a web service?
It is a bit confusing, I hope I've been clear enough. I really really will appreciate your opinions. If possible give me technical explanations.
Thank you,
Skull
Edited by: skull_buck on Aug 6, 2009 7:40 PMHi Greg
Thanks for your fast reply.
What you suggested is exactly what I am doing now, and also I increased the number of rows allowed to map en Xcelsius which are 512 by default.
I would like to know now, how many rows are advisable to increase? Because I am using some components and you must specify for each one a certain number of rows.
I test mapping 3000 and even 6000 rows but the model is too slow and I was not able to export the swf file in any format.
Thank you again,
Skull -
Bug in exists() function of XI Graphical Mapping Tool?
Hi!
If I connect a source field with the exists() function in XI Graphical Mapping Tool and the tag exists it returns TRUE, otherwise it returns FALSE, so everything works as expected.
But I have to connect a user-defined function with exists(). The user-defined function will either calculate a value or set Resultset.SUPPRESS.
If there is a value the exits() function returns TRUE, however if Resultset.SUPPRESS is set it does also return TRUE! This looks to me like a bug in exists() function. Shouldn't it always return FALSE if the input is Resultset.SUPPRESS?
Regards, TanjaHi Stefan!
> The exists() function checks, if a queue is empty.
> An empty queue is <b>not</b> represented by the
> SUPPRESS value.
> If inside a queue there is a SUPPRESS value, the
> queue is <b>not</b> empty.
Ok, so it's not a bug and the exists() function is working as expected.
> If you want the exist() function after a UDF, provide
> an empty queue, or easier: return the values "true"
> or "false" directly from the UDF.
Yes, that's how I actually solved the problem. The UDF was used at several places where the ResultList.SUPPRESS output was needed. So I copied the UDF and changed it so that the output was TRUE or FALSE instead.
Regards, Tanja -
How to use Advance java function in graphical mapping in XI 2.0?
Hi,
currently I am using a simple java function to make an RFC call to R3 system.
I want to avoid making connection for each lookup. Instead I want to make a single connection for whole message queue and get the corresponding values in some array or container object.
please suggest a solution.
I think this is possible using Advance java function, but I am not able to find any example on using Advance java function at help.sap.com.
thaks in advance.Hi!!!
I'm not sure if I understood you well.
Do you want to preload some data into your structures in the memory and keep them there so you don't need to make a new connection during processing the whole message or every message?
In my opinion you can cache some data during processing a message, but it's impossible to cache some data between processing messages.
If you write your java mapping or you use graphical mapping (even with user-defined function), then you have a java class. The problem is that XI 2.0 reloads this class during processing every message, so even if you load some data from your data source into your structures in the memory, this data will be lost after reloading your mapping class.
Regards,
Andrzej Filusz -
Is it possible to replace XSLT mapping in place of Graphical mapping
Is it possible to do XSLT mapping in place of Graphical mapping, in any normal scenario?
Means the fuctionality we do by using Graphical mapping(like the operations by using node functions etc...) could possible to do with XSLT Mapping?HI
yes it is possible to replace the graphical mapping with the XSLT mapping.
But using XSLTs degrade the performance of the interface and moreover they are not easily maintainable.
Refer the below links for assistance on XSLT Mapping:
XSLT MAPPING:
Generic XSLT Mapping for SAP XI,Part I
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/01a57f0b-0501-0010-3ca9-d2ea3bb983c1
Generic XSLT Mapping for SAP XI,Part II
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/9692eb84-0601-0010-5ca0-923b4fb8674a
XSLT: Recursive Templates
XSLT: Recursive Templates
Easy RFC lookup from XSLT mappings using a Java helper class
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/05a3d62e-0a01-0010-14bc-adc8efd4ee14
Step u2013 By u2013 Step Simple Approach for XSLT Mapping
Step By Step Simple Approach for XSLT Mapping
http://www.devguru.com/Technologies/xslt/quickref/xslt_element_applytemplates.html
XSLT Mapping
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/01a57f0b-0501-0010-3ca9-d2ea3bb983c1
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/9692eb84-0601-0010-5ca0-923b4fb8674a
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/006aa890-0201-0010-1eb1-afc5cbae3f15
xpath functions in xslt mapping
https://www.sdn.sap.com/irj/sdn/advancedsearch?cat=sdn_all&query=xslt+mapping&adv=false&sortby=cm_rnd_rankvalue#
Using XSLT mapping in a ccBPM scenario
File to Multiple IDocs (XSLT Mapping)
Comparsion of Different mappings:
Comparing Performance of Mapping Programs
Complete mapping guide url:
http://help.sap.com/saphelp_nw04/helpdata/en/73/f61eea1741453eb8f794e150067930/content.htm
cheers -
How to debug global values in UDF in a graphical mapping
Hi Every one,
I got a situation in PI where i have to use global values in graphical mapping UDF.
I can't able to get the values in "Display Queue " option.
Can you please tell me what is the best way of debugging global variable in graphical mapping UDF.
1. I declare one array list in the global values
2. store some values using another UDF to the arraylist.
3. I am traversing the values in the arraylist, but the values are not showing in "Display Queue".
What is the solution to this.Did you try with trace.addInfo?
https://help.sap.com/javadocs/NW04/current/pi/com/sap/aii/mapping/api/AbstractTrace.html
Sample code for the setMail UDF (Carrier B2B) - Business Process Expert - SCN Wiki -
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
Maybe you are looking for
-
Business Activity in SAP CRM 7.0 WebUI
Hello SAP Experts, In SAP CRM 7.0, under maintain activities, I have assigned categories to class interaction log, appointments and tasks. The same categories have been assigned to some business activities. For example Category Sales Call (001) is as
-
Mail not updating the smart folder list after "archive" correctly
Hello, I am using OSX Mail on Yosemite (10.0.2) and have - since about two months ago - weird behavior of smart mailboxes. Previously, when I Archived (ctrl-cmd-A) messages selected in Smart mailbox, the GUI immediately removed the messages from the
-
Have Home folders Eric and Eric 1 due to problems with Migration Assistant
I have duplicate Home folders for my user accounts after trying several times to copy user data from my old MacBook to my new MacBook Pro. I have deleted the folders labeled "from old Mac" and the non-active Eric folder that were the duplicates from
-
I am using the Mozilla Firefox as my browser. But everytime I open a new window, I am unable to navigate back to the previous page. It is so frustrating to not be able to use a back arrow. Where is this feature hidden?>????
-
Getting CDS-18008 when generation server model DDL. Anyone else?