Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Receiving and sending binary in a function

Former Member
0 Kudos

Hi,

at first, something I did in another project I have made, just to describe the problem better:

Previously, I have programmed a WebDynpro Java Application and the BAPIs for that. The Webdynpro had to send objects, like jpg pictures or something else, to the backend system by calling a bapi.

That was possible to handle by using an importing parameter from the type "RAWSTRING". Inside the function, I have writte the content of that string to a file on the SAP server.

Later on, with another function, I had to read this jgp from the SAP server again and send it back in in an exporting parameter of the type "RAWSTRING".

That was possible without any problems....

Now, I have a situation, which is a little bit more difficult. Now In have an external system with a c++ application, whcih should send XML files in binary (rawstring) to the SAP, SAP should then read that xml file, select some data from the database, build a response XML and send this as binary (rawstring) back to the server.

This is almost the same like I did in my other project. but now, I have to read the XML-tags of the binary file, work with the content and build a XML file in a binary stream as result.

Do you think, I should save the incoming XML-binary stream in a temporary file on the SAP server, read it as textfile, interprete the XML tags, select the data, build the xml, write it to a binary file on the sap server and send that back?

Or how to read the XML tags directly from the binary stream I´m getting inside of the function.

Hopefully my description was understandable and you know, what I mean!

Greetings Michael

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

ABAP provides the feature called as Transformation which you can use here.

Using transformation, you can convert XML message into ABAP structures and vice versa.

You need not parse the xml in your code. That transformation wil take care of that.

Hope this will help you.

~ Ramanath.

10 REPLIES 10

Former Member
0 Kudos

Hi,

ABAP provides the feature called as Transformation which you can use here.

Using transformation, you can convert XML message into ABAP structures and vice versa.

You need not parse the xml in your code. That transformation wil take care of that.

Hope this will help you.

~ Ramanath.

0 Kudos

Ok, thank you...

But what about reading the XML tags directly from the binary file, without saving it in binary mode to the sap server and read it in text mode again? Is that possible?

Former Member
0 Kudos

yeah it is possible to do that provided you are ready to write your own parser for that..

but i wud suggest you to use the existing features provided in ABAP instead of Reinventing the wheel..

~ Ramanath.

0 Kudos

Hey, you are right!

But I´m getting the file as binary in an importing paramter of the type rawstring. So how to read the XML of this binary stream without saving it to the SAP system and reading it in text mode again?

Can you give me an advice on that?

Thank you very much

Former Member
0 Kudos

Hi,

You can pass the rawstring to the transformation and it will take care of reading it appropriately and return you the ABAP structures.

Have a look at the sample code below.

CALL TRANSFORMATION <transformation_name>

SOURCE XML <xmlsource>

RESULT msg_hdr = lv_msg_comm_hdr

where xmlsouce is the rawstring and msg_hdr is the ABAP type which you want to be populated from that xml message.

Hope this will help you.

~ Ramanath.

0 Kudos

Ok, super!

What about <transformation_name> ?

And I have heard, if I also use transformation to build XML files from an internal table, the tag names are inculding something with "ABAP", right?

I think, to build up exactly the XML files, the server application needs, I have to

use the classes and methods I have used in my example programs.

Former Member
0 Kudos

Hi,

The transformation_name is the Transformation Object that you will create (just like a report program or a function module)

Go to transaction SE80. Right click on the package name and select "Create transformation". Choose the type of transformation as Simple Transformation.

Typically the transformation has 2 tags named <Serialize> and <Deserialize>.

Serialize tag will come into picture when you are converting ABAP structure into XML and Deserialize will come into picture when you are converting XML message into ABAP structures.

The example which i had given you was of DESERIALIZATION.

For serialization the syntax would look like,

CALL TRANSFORMATION <transformation_name>

SOURCE

msg_hdr = ls_xcs_message_comm_header

RESULT XML <xml_output>.

you can pass as many source ABAP structures as you want.

Hope this will help you.

~ Ramanath.

0 Kudos

Ok, thank you for the detailed description.

And what about the tag names in the output XML? Is there something included, like "ABAP" in the tagnames?

And how would you convert the XML data string in a binary rawstring?

Thanks!

Former Member
0 Kudos

Hi,

The output of the transformation will be in rawstring format only.. u need not do anything for that..

As i mentioned earlier, the <deserialize> tag will convert the ABAP structure into XML message.

You can specify the XML tag names in the <deserialize> tag as shown below.

<tt:deserialize>

<Msg>

<tt:attribute name="type" value-ref="msg_hdr.MESSAGE_TYPE"/>

<tag_name>

<tt:attribute name="attr" value-ref="$wa-attr"/>

</tag_name>

</Msg>

</tt:deserialize>

The tag_name can also be decided at run time. For that you can have a LOOP construct inside this transformation template and deciding the tag_name dynamically.

Hope this helps.

~ Ramanath.

Former Member
0 Kudos

Hi Michael,

Is your problem resolved or are you stuck on some point.

Do let me know if you have any problem in solving this issue.

~ Ramanath.