This page is for explaining how to test the OData $batch services with Content ID, which is implemented in the H2G.
In this H2G, we're going through the steps of testing OData $batch services with Content ID by REST Client.
In the test steps, we'll create a $batch request that contains one parent entity with Content ID $100, and two children.
Two testing tools are explained:
SAP Gateway Client
In the SAP tx SEGW, find your Gateway project and select "Service Maintenance" > "Your GW System" > "SAP Gateway Client".
In a SAP Gateway Client tool, enter following request information:
Note: SAP Gateway Client handles all the authentication info such as X-CSRF-Token or Basic Auth behind the scenes.
And execute it - confirm the successful response.
POSTMAN REST client
Start a POSTMAN REST client. Type the URL of your OData service document URL (the URL that ends with "_SRV/"). Set following params:
Execute the request by pressing "Send". You should be able to obtain the returned x-csrf-token value. Copy it - this is required to execute HTTP POST later.
Paste the token value for X-CSRF-Token param in the header. Set following params:
Now your POSTMAN is fully ready for sending the $batch payload. Click on "Body" and select raw.
Here you'll enter the payload. (Explanation follows)
01 --batch_mybatch
02 Content-Type: multipart/mixed; boundary=changeset_mychangeset1
03
04 --changeset_mychangeset1
05 Content-Type: application/http
06 Content-Transfer-Encoding: binary
07
08 POST HeaderSet HTTP/1.1
09 Content-Type: application/xml
10 Content-Length: 1021
11 Content-ID: 100
12
13 <?xml version="1.0" encoding="utf-8"?>
14 <entry xml:base="http://..._SRV/"
15 xmlns="http://www.w3.org/2005/Atom"
16 xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
17 xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
18 <content type="application/xml">
19 <m:properties>
20 <d:Id>1</d:Id>
21 <d:Text>New parent entity</d:Text>
22 </m:properties>
23 </content>
24 </entry>
25
26 --changeset_mychangeset1
27 Content-Type: application/http
28 Content-Transfer-Encoding: binary
29
30 POST $100/ToItems HTTP/1.1
31 Content-Type: application/xml
32 Content-Length: 1021
33
34 <?xml version="1.0" encoding="utf-8"?>
35 <entry xml:base="http://..._SRV/"
36 xmlns="http://www.w3.org/2005/Atom"
37 xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
38 xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
39 <content type="application/xml">
40 <m:properties>
41 <d:ParentId></d:ParentId>
42 <d:Id>000010</d:Id>
43 <d:Text>First child entity</d:Text>
44 </m:properties>
45 </content>
46 </entry>
47
48 --changeset_mychangeset1
49 Content-Type: application/http
50 Content-Transfer-Encoding: binary
51
52 POST $100/ToItems HTTP/1.1
53 Content-Type: application/xml
54 Content-Length: 1021
55
56 <?xml version="1.0" encoding="utf-8"?>
57 <entry xml:base="http://..._SRV/"
58 xmlns="http://www.w3.org/2005/Atom"
59 xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
60 xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
61 <content type="application/xml">
62 <m:properties>
63 <d:ParentId></d:ParentId>
64 <d:Id>000020</d:Id>
65 <d:Text>Second child entity</d:Text>
66 </m:properties>
67 </content>
68 </entry>
69
70 --changeset_mychangeset1--
71
72 --batch_mybatch--
#01 - The beginning of the $batch request. It has to start with "--" with the batch name, which is the same name you defined in the header of Content-Type = multipart/mixed;boundary=batch_mybatch.
#02 - Content type definition of the changeset.
#03 - This line space is very important. At least one "carriage return line feed" is required.
#04 - The beginning of the changeset. It has to start with "--" with the changeset name, which is the same name you defined in the line #02.
#05/06 - Conventional value for Content-Type and Content-Transfer-Encoding.
#07 - At least one "carriage return line feed" is required.
#08/09 - POST request for HeaderSet entity.
#10 - Content-Length value must be equal to or greater than the real length of the data below.
#11 - A line of the Content ID value.
#12 - At least one "carriage return line feed" is required.
#13 to 24 - The HeaderSet payload. You can obtain this payload format via Read operation. If you obtain the payload via Read, that should contain the tags like <id/>, <title/>, <updated/>, <category/>, and <link/>. You can keep them in this $batch payload or just discard them - the OData services simply ignore them.
#25 - At least one "carriage return line feed" is required.
#26 - As the next entity is a part of the same changeset, it has the same value with the line #04.
#27 to 29 - Same rule follows in the ItemSet.
#30 - POST request for ItemSet entity. As you see, the Content ID is being used.
#31 to 33 - Same rule follows in the ItemSet.
#34 to 46 - The ItemSet payload. Just like you did for HeaderSet entity, you can obtain this payload format via Read operation. Please note this payload has the empty value for <parentID> tag. During OData $batch processing, this value will be handled correctly via the Content ID value.
#47 to 69 - The second HeaderItem POST request.
#70 - The closing of the changeset. It has to start with "--" with the changeset name AND closing "--" characters.
#71 - At least one "carriage return line feed" is required.
#72 - The closing of the batch request. It has to start with "--" with the batch name AND closing "--" characters.
Let's execute the $batch request by pressing Send button. If the $batch processing is done correctly, you should be able to see "201 Created" responses for each entity in the returned payload body.
Note: As written, the line spacing is critical (it is a part of the standard OData specification).
Time to experiment further... try set the remote breakpoint in the ABAP editor - and see how the changeset_begin, changeset_process, and changeset_end are called sequentially.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
13 | |
11 | |
10 | |
9 | |
7 | |
7 | |
7 | |
7 | |
6 |