Hi Everyone,
Recently i gone through OData Read, Create, Update and Delete operations in SMP 3.0 Native ODataSDK.
here is a sample code for a OData service
http://sapes1.sapdevcenter.com:8080/sap/opu/odata/IWFND/RMTSAMPLEFLIGHT/TravelagencyCollection
GET Request Format
[RequestBuildersetRequestType:HTTPRequestType];
// Enable XCSRF handling for OData requests
[RequestBuilderenableXCSRF:YES];
// Initialize the Requesting class with the endpoint URL
id<Requesting> getRequest = [RequestBuilderrequestWithURL:[[NSURLalloc] initWithString: appEndPoint]];
// Add username and password for the end point
[getRequest setUsername:username];
[getRequest setPassword:password];
/// Set our request headers.
[getRequest setRequestMethod:@"GET"];
[getRequest addRequestHeader:@"X-Requested-With"value:@"XmlHttpRequest"];
[getRequest addRequestHeader:@"Content-Type"value:@"application/xml; charset=UTF-8"];
[getRequest addRequestHeader:@"Accept"value:@"application/xml,application/atom+xml"];
// This class is the delegate callback for any notifications (success and failure)
[getRequest setDelegate:self];
[getRequest setDidFinishSelector:@selector(handleReqSuccess:)];
[getRequest setDidFailSelector:@selector(handleReqFailed:)];
// Each request can be tagged with a number.
getRequest.requestTag = tag; // Useful for a change request.
// Start our request.
[getRequest startAsynchronous];
POST Request Format
[RequestBuildersetRequestType:HTTPRequestType];
[RequestBuilderenableXCSRF:YES];
id<Requesting> postRequest = [RequestBuilderrequestWithURL:[NSURLURLWithString:[NSStringstringWithFormat:@"%@/%@",appEndPoint,collectionName]]];
[postRequest setRequestMethod:@"POST"];
[postRequest addRequestHeader:@"Content-Type"value:@"application/json; charset=UTF-8"];
[postRequest addRequestHeader:@"Accept"value:@"*/*"];
// Here cSRFToken is retrieved from the GET Response.
[postRequest addRequestHeader:@"x-csrf-token"value:cSRFToken];
NSMutableData* postData;
// GetEntry is an ODataObject which has the response for GET done on single entry from a collection
ODataEntryconst *postBody = [[ODataEntryalloc]initWithEntitySchema:[[[self.serviceDocumentgetSchema] getCollectionByName:self.entityName] getEntitySchema]];
ODataPropertyValueObject* filterValue = [postBody getPropertyValueByPath:@"agencynum"]; ///agencynum is the primary key or the unique value
filterValue.rawValue=@"00000127";
ODataPropertyValueObject* filterValue1 = [postBody getPropertyValueByPath:@"agencyname"];
filterValue1.rawValue=@"BestAgency";
//The following code can be used to build a JSON post body:
ODataEntryBody *entryBody = buildODataEntryRequestBody(postBody, ENTRY_OPERATION_CREATE, self.serviceDocument, NO, BUILD_STYLE_JSON);
postData = [[entryBody.bodydataUsingEncoding:NSUTF8StringEncoding]mutableCopy];
[postRequest addRequestHeader:@"Content-Length"value:[NSStringstringWithFormat:@"%i",[postData length]]];
[postRequest setPostBody:postData];
[postRequest setDelegate:self];
// Each request can be tagged with a number.
getRequest.requestTag = tag; // Useful for a change request.
// Start our request.
[postRequest startAsynchronous];
PUT Request Format
[RequestBuildersetRequestType:HTTPRequestType];
[RequestBuilderenableXCSRF:YES];
id<Requesting> putRequest = [RequestBuilderrequestWithURL:[NSURLURLWithString:[NSStringstringWithFormat:@"%@/%@(%@)",appEndPoint,collectionName,agencynum]]];
[putRequest setRequestMethod:@"PUT"];
[putRequest addRequestHeader:@"Content-Type"value:@"application/json; charset=UTF-8"];
[putRequest addRequestHeader:@"Accept"value:@"*/*"];
[putRequest addRequestHeader:@"x-csrf-token"value:cSRFToken];
NSMutableData *postData;
ODataEntryconst *postBody = [[ODataEntryalloc]initWithEntitySchema:[[[self.serviceDocumentgetSchema] getCollectionByName:self.entityName] getEntitySchema]];
ODataPropertyValueObject* filterValue = [postBody getPropertyValueByPath:@"agencyname"];
filterValue.rawValue=@"NewAgencyName";
//The following code can be used to build a JSON post body:
ODataEntryBody *entryBody = buildODataEntryRequestBody(postBody, ENTRY_OPERATION_CREATE, self.serviceDocument, NO, BUILD_STYLE_JSON);
postData = [[entryBody.bodydataUsingEncoding:NSUTF8StringEncoding]mutableCopy];
[putRequest addRequestHeader:@"Content-Length"value:[NSStringstringWithFormat:@"%i",[postData length]]];
[putRequest setPostBody:postData];
[putRequest setDelegate:self];
putRequest.requestTag = tag;
// Start our request.
[putRequest startAsynchronous];
DELETE Request Format
[RequestBuildersetRequestType:HTTPRequestType];
[RequestBuilderenableXCSRF:YES];
id<Requesting> deleteRequest = [RequestBuilderrequestWithURL:[NSURLURLWithString:[NSStringstringWithFormat@"%@/%@(%@)",appEndPoint,collectionName,agencynum]]];
[deleteRequest setRequestMethod:@"Delete"];
[deleteRequest addRequestHeader:@"Content-Type"value:@"application/json; charset=UTF-8"];
[deleteRequest addRequestHeader:@"Accept"value:@"*/*"];
[deleteRequest addRequestHeader:@"x-csrf-token"value:self.cSRFToken];
[deleteRequest setDelegate:self];
deleteRequest.requestTag = tag;
// Start our request.
[deleteRequest startAsynchronous];
Regards
Siva Chandu