Navigation is supported in soap data source when a web service has such an operation which takes an input parameter which is the key element of another entity set.
Steps from Design Time tool
3. Right click on odatasvc and choose Select data source
4. Select the SalesOrders entitySet and choose the query CRUD operation. Select the data source SOAP Service.
5. Specify the wsdl file and choose the getSalesOrders operation from the list of soap operations and click on finish
6. Right click on Query and select Define Custom Code
7. Select the script type as either javascript or groovy script
8. The navigation segment path has to be fetched from the odata request uri and a proper request payload has to be created. If the navigation segment path is like CustomerSet(10)/SalesOrdersSet, then the key predicate customerId = 10 must be fetched from the navigation segment path and this should be an input parameter to the web service operation getSalesOrders.
function processRequestData(message) {
var uriInfo = getUriInfo(message);
importPackage(org.apache.olingo.odata2.api.uri);
importPackage(java.util);
var map = new HashMap();
var navSegments = uriInfo.getNavigationSegments();
var first = true;
if (navSegments.size() > 0) {
var keyPredicate = "";
for (var i=0; i<uriInfo.getKeyPredicates().size();i++) {
importPackage(org.apache.olingo.odata2.api.edm);
var key=uriInfo.getKeyPredicates().get(i);
edmSimpleType = key.getProperty().getType();
if (first) {
first = false;
} else {
first = true;
}
keyPredicate = getWhereString(key, edmSimpleType);
}
map.put("CustID", keyPredicate);
message.setBody(map);
}
return message;
}
function getUriInfo(message) {
importPackage(org.apache.olingo.odata2.api.uri);
importPackage(com.sap.gateway.core.ip.component.commons);
var uriInfo = message.getHeaders().get(
ODataExchangeHeaderProperty.UriInfo.toString());
return uriInfo;
}
function getWhereString(key, edmSimpleType) {
var appendStr = "";
importPackage(org.apache.olingo.odata2.api.edm);
if (!(edmSimpleType == EdmSimpleTypeKind.Int16
.getEdmSimpleTypeInstance()
|| edmSimpleType == EdmSimpleTypeKind.Int32
.getEdmSimpleTypeInstance()
|| edmSimpleType == EdmSimpleTypeKind.Int64
.getEdmSimpleTypeInstance()
|| edmSimpleType == EdmSimpleTypeKind.Decimal
.getEdmSimpleTypeInstance() || edmSimpleType == EdmSimpleTypeKind.Double
.getEdmSimpleTypeInstance())) {
appendStr = "\'" + key.getLiteral() + "\'";
} else {
appendStr = key.getLiteral();
}
return appendStr;
}
If the OData request is https://localhost:8083/gateway/odata/SAP/SOAP;v=1/CustomersSet(10)/SalesOrdersSet
The request payload looks like
<soapenv:Body>
<tes:getSalesOrders>
<tes:CustID>10</tes:CustID>
</tes:getSalesOrders>
</soapenv:Body>
9. Right click on Query and select Define Response Mapping
10. Do the response mapping.
11. Select a data source for the other entity set as well.
12. Right Click on Project and select Generate and Deploy Integration Content. This will deploy the bundle.
Now fire an OData Request https://localhost:8083/gateway/odata/SAP/SOAP;v=1/CustomersSet(10)/SalesOrdersSet on the browser and response will give the list of sales orders with customerId 10.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
17 | |
14 | |
14 | |
12 | |
11 | |
9 | |
9 | |
8 | |
8 | |
7 |