Monday, December 10, 2007

How can I transform XML into a string?

There are times when you have to send an XML message inside a XML tag of the other message.
There are at least two approaches when doing such a scenario:

- you can change the XML message's tags into something else and later on chage it back

- you can also include the XML message inside a CDATA tag

But while doing such transformations you cannot use "Graphical mapping"... is that right?
Not always. We can still use Graphical mapping but we have to combine it with any other kind of mapping.
XI gives us the possibility to use many mappings with one transformation - Interface mapping.
The thing to remember is that only once you can do Source message to Target message transformation.
The rest of those transformations are Target message to Target message only.

image

...but this is just great in our case as we want to do the whole mapping inside the first graphical mapping
and then just transform the result a little.

So how can we do it?

- use graphical mapping to trasform our source message to our target message
(target message contains all tags - in my example it looks exactly the same as the source message)

- then we want to put the WHOLE "name" node inside the "name" tag within CDATA

The first part is easy but how can we do the second one? We can use Udo's example with XSLT.



Now we can include both of those mappings inside the Interface mapping.
First the graphical then the XSLT and we can see the result (the whole node is now inside one tag - "name"):


image

Do we have to do the transformation inside the interface mapping if we want to use it always
with this particular communication channel? No we can include our XSLT mapping inside the Communication Channel.
To do this we have to use MessageTransformBean. I'm using a File/FTP channel in my example.

image

With the help of SAP standard Bean (MessageTransformBean) we only need to give path to the XSLT mapping
and we don't have to add it to our Interface mappings. Obviously we have to remember to use the same structure
(some sort of an envelope) of your Target messages so that it will always contain the same root tags so the XSLT mapping
will always work. But it depends on you XSLT mapping too.

image

We can now remove XSLT mapping from the Interface mapping and the result looks just like we wanted:

image

Basically I wanted to show three things:

- the use of several mappings inside an Interface mapping
- how you can change an XML message into a string
- how you can use XSLT mappings inside a communication channel

No comments:

Blog Archive