See what's new in the latest SAP Mobile Platform 3.0 SP4 Server and SP5 SDK. From the Offline OData Service to the new Harmonized SDK and much much more.
SAP Mobile Platform 3.0 - What's New in the SP4 Server and SP5 SDK
Developing Offline Apps with the Kapsel SDK
Learn how to develop offline applications using the latest Kapsel SDK found in the Mobile SDK 3.0 SP5. This presentation will go over a Kapsel Overview, show of the SAP Mobile Platform OData Offline Services work, and then go over Kapsel SDK Offline OData plugin.
Writing Custom Script in SMP 3 Integration Gateway
Okay, get ready to put your hands in custom scripts. You must have read about the possibilities of using custom scripts in Integration Gateway using Javascript or Groovy from SMP SP04, that helps you to customize request and response mappings, delta token, access to Header etc. In this document I am going to use a simple SOAP data source available in the web to customize a request (WSDL File: http://www.webservicex.net/medicareSupplier.asmx?WSDL).
- Use SOAP UI to test the requests and to identify the payload.
- Create Odata Models:
- After creating Odata models, select the data source.
- You can create a script file by right clicking on the "Query". To customize the request you have to write custom code inside processRequestData function. You can find the payload structure you have to build with the payload created by SOAP UI tool. When I look at the payload in SOAP UI tool, below script satisfy the request.
function processRequestData(message) {
importPackage(com.sap.gateway.ip.core.customdev.logging);
importPackage(com.sap.gateway.ip.core.customdev.util);
importPackage(org.apache.olingo.odata2.api.uri);
importPackage(java.util);
importPackage(com.sap.gateway.core.ip.component.commons);
importPackage(com.sap.gateway.ip.core.customdev.api);
parentMap = new LinkedHashMap();
parentMap.put("key:City","california");
//Set the message body back
message.setBody(parentMap);
//Logger
importPackage (com.sap.gateway.ip.core.customdev.logging);
log.logErrors(LogMessage.TechnicalError, "This is first log"+message.getBody().toString());
return message;
}
- Don't forget to map the response.
How to debug ?
Modify the function
function processRequestXML(message) {
//Logger
importPackage (com.sap.gateway.ip.core.customdev.logging);
log.logErrors(LogMessage.TechnicalError, "This is first log"+message.getBody().toString());
return message;
}
This will log the request xml in the SMP server logs, you can find the log file in SMP Admin cockpit or in the server installation path. Compare the xml payload created with the SOAP UI payload or paste the payload in SOAP UI tool and run it, to troubleshoot.
Windows SDK in a Nutshell
This PowerPoint presentation provides a high level overview of the Windows SDK in the latest service pack of SAP Mobile Platform. The speaker notes provide enough background information to understand the Windows SDK even for the novice user.
How To... Enable User On-boarding using MAF Logon (Android)
The Mobile Application Framework (MAF) contains the MAF logon component that provides easy integration for applications that use logon UI behaviour and need to on-board users with SAP Mobile Platform (SMP). This guide explains how developers can leverage the MAF Logon component to on-board users with SMP.
SAP Mobile Platform 3.0 - Options for Developing Your Own Apps
SAP Mobile Platform 3.0 allows for numerous options for developing your own mobile applications. From native to hybrid mobile applications, the SAP Mobile Platform will support it. This session will give you an overview of what options are available to you and what makes the most sense for you projects.
App Builder vs River RDE
Dear All,
There has been a great demand to develop Web Applications for Mobile and there are different Tools and IDEs available for developers .
App Builder and River RDE are two different Web IDE s offered from SAP to ease the development process of web applications for mobile underlying the UI5 libraries.
This blog mainly compares the different features available in each of them.
Features supported | Appbuilder ( 1.0.1252 ) | River RDE ( Beta ) |
---|---|---|
Release Date | November 2013 | Sapphire Orlando 2014 , Beta |
Pre Requisites | Node.js, JDK, cordova , Browser (Chrome /Safari ) | Hana cloud account, Hana Cloud Connector and a Browser (Chrome/Safari) |
Target Audience | Developers | Developers, Business Experts and Designers |
Collaborative Development | no | yes |
Runs On premise | yes | no |
Mock Data support | yes | yes |
OData consumption | yes | yes |
Github integration | no | yes |
Rest integration | yes | no |
EDMX | no | yes |
Version maintenance | no | yes |
SMP integration | yes | supported in future |
Cordova and Kapsel support | yes | supported in future |
IOS | yes | yes |
Android | yes | yes |
Simulator | yes | yes |
Develop Fiori like applications | complex | yes |
Extending Fiori applications | no | yes |
UI5 framework | yes | yes |
CSS Styles | yes | yes |
makit | yes | yes |
Default templates | Superlist , Charts , Tab | Fiori |
Default ui5 library | sap.m | sap.m |
WYSIWYG | yes | yes |
Theme Designer integration | no | supported in future |
Price | Free | Free |
Learn more about
PS:
This document is open for editing and community members can feel free to add /edit points as the product version changes.
Integration Gateway in SMP 3.0 Webinar Slides
Slides presented in Integration Gateway in SMP 3.0 Webinar.
AppBuilder Tutorial - Hello World App
Introduction
This tutorial will introduce you to AppBuilder and guide you on creating a simple application using AppBuilder.
Prerequisites
AppBuilder must be installed on your workstation. Visit here to get AppBuilder and here for the documentation.
Starting AppBuilder
To start AppBuilder the user need double click run.bat (or execute run.sh in Terminal app in Mac), which will start the AppBuilder server instance and loads the AppBuilder in Google Chrome/Safari browser.
If everything goes fine, the IDE will be started using the following URL http://127.0.0.1:9009/ide/ares/index.html
The browser will go to the above URL in the address bar automatically, the Project Management page will show up like figure 1.
Figure 1
Using AppBuilder to create new project
Creating hello world application
- Tap New > button in Project Management screen.
- In the New Project dialog, enter Project Name as “SAPB_HelloWorld_Tutorial”.
Figure 2
- Select Device Type to “Phone” from the drop down list box.
- Select Template to“Generic Application” from the drop down list box.
- Press “CONFIRM” to create the project.
Adding Controls to the Project
- The workspace of IDE now opens with phone device frame Form Builder. Following figure 3 shows IDE with Form Builder.
Figure 3
- To add a label control to the Form, drag and drop the label control from toolbox to the designer surface in the Form.
- Enter control name as “helloLabel” in properties of the control.
- Press text and enter display text as “HelloWorld”. press Enter.
- Press style and add font size to “font-size:20px;”. Press “CONFIRM”.
Figure 4
- After adding label the designer form looks like figure 5:
Figure 5
- Add input control into designer and enter control name as “helloInput” and then enter placeholder text as “Enternewtextforthelabel”. Press Enter.
Figure 6
- Add Button control into designer and enter control name as “helloBtn” and then enter text as “ApplyChanges”. Press Enter.
Figure 7
- Select Events tab of button control from the right panel.
Figure 8
- Enter the event handler name for press event as “onHelloBtnPressed”. Press Enter.
- Select application view “SOURCE” tab from the panel.
Figure 9
- You can see the event handler “onHelloBtnPressed” which was enter for “helloBtn” button control.
- Type the following script to “onHelloBtnPressed” event, this script will change the “HellWorld” label to “NewHellowWorld” when press the “ApplyChanges” button.
//Get the controls var helloLabel = this.byId("helloLabel"); var helloInput = this.byId("helloInput"); //Get the value of helloInput var newLabel = helloInput.getValue(); //Check the newLabel value is not empty and set the label if(newLabel.length > 0) { helloLabel.setText(newLabel); }
- After entering the script, the screen will looks like figure 10:
Figure 10
- Press “Save” from main menu “FILE”.
Running AppBuilder Project
SAPB_HelloWorld_Tutorial project can run Chrome/Safari Browser by clicking the “Run” menu from main menu “EXECUTE”. The new browser will be launched to show the hello world application.
Figure 11
Enter text “New Hello World” in the input column and press “Apply Changes” button. Now you can see the “Hello World” text changed to “New Hello World”.
Figure 12
Efficient SUP log collection
Productive SUP environments produce a multitude of interesting logs in a multitude of places. The important process of collecting these logs regularly can become quite tedious, so I wrote a short and hopefully universally adaptable batch script that simplifies and streamlines this task.
This script will check which logs exist on the machine it is running and use a packer (default is 7-zip) to pack all existing logs into a single file that is automatically named with a timestamp and the hostname for optimal distinction. The script has been successfully tested on both single-node and clustered installations of SUP 2.1.2 in its current form and it is easily adaptable to whatever environment you may have.
In order to use it, you may need to customize the following three variables OUTPUT_DIR, SYBASE_DIR, PACKER:
SET PACKER="C:\Program Files\7-Zip\"7z a -ssw SET SYBASE_DIR=D:\Sybase SET OUTPUT_DIR=%USERPROFILE%\Desktop
PACKER is the path to the packer's executable. Here, the default is the standard installation path of 7-zip. You can configure other packers to work with the script, but 7-zip is the best free tool for the job. I also include an adaptation to WinRAR for convenience.
SYBASE_DIR is the top-level folder of your SUP installation. Since most people run SUP and the OS on separate partitions, this defaults to D:\Sybase.
OUTPUT_DIR is where the packed logs will end up. The default is the desktop of the active user, to ensure that you have the necessary write permissions.
Please note that this script comes without warranty of any kind. You should check it thoroughly for yourself and will run it at your own risk. Since the script is collecting some windows eventlogs, you may have to run it as an administrator. If you don't have an administrator account on the machine, the script will still collect all logs that your user can access.
Listing of logcollect.bat
@ECHO OFF SETLOCAL REM 8<----- Change this part to customize REM Uncomment to use 7-zip SET PACKER="C:\Program Files\7-Zip\"7z a -ssw REM Uncomment to use rar REM SET PACKER="C:\Program Files\WINRAR\"rar a -dh SET SYBASE_DIR=D:\Sybase REM Seperate database dir can be entered here if necessary REM Standard is UnwiredPlatform\Data\CDB SET DATABASE_DIR=UnwiredPlatform\Data\CDB SET OUTPUT_DIR=%USERPROFILE%\Desktop REM ----->8 IF EXIST %SYBASE_DIR% ( CD /D %SYBASE_DIR% ) SET LOG_DIRS= REM Main SUP logs SET ITEM=UnwiredPlatform\Servers\UnwiredServer\logs IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %ITEM% ) REM Main SCC logs SET ITEM=SCC-3_2\log IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %ITEM% ) REM Windows Eventlogs SET ITEM=%SYSTEMROOT%\system32\winevt\logs IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %ITEM%\System.evtx %ITEM%\Application.evtx ) REM SUP repository information SET ITEM=UnwiredPlatform\Servers\UnwiredServer\Repository\Instance IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %ITEM% ) REM SCC database errorlogs SET ITEM=SCC-3_2\services\Repository\scc_repository.slg IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %ITEM% ) REM Advantage database errorlogs SET ITEM=C:\ADS_ERR.ADI IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% C:\ADS_ERR.* ) REM SQL Anywhere database errorlogs (on data tier) SET ITEM=%DATABASE_DIR%\errorlog.txt IF EXIST %ITEM% ( SET LOG_DIRS=%LOG_DIRS% %DATABASE_DIR%\*errorlog.txt ) REM Get time in locale-independent WMI format SET X= FOR /F "skip=1 delims=" %%x IN ('wmic os get localdatetime') DO ( IF NOT DEFINED X ( SET X=%%x ) ) REM Split WMI format SET YEAR=%X:~0,4% SET MONTH=%X:~4,2% SET DAY=%X:~6,2% SET HOUR=%X:~8,2% SET MINUTE=%X:~10,2% SET SECOND=%X:~12,2% SET ARCHIVE_FILENAME=%OUTPUT_DIR%\ SET ARCHIVE_FILENAME=%ARCHIVE_FILENAME%%YEAR%-%MONTH%-%DAY%_ SET ARCHIVE_FILENAME=%ARCHIVE_FILENAME%%HOUR%-%MINUTE%-%SECOND%_ SET ARCHIVE_FILENAME=%ARCHIVE_FILENAME%%COMPUTERNAME%_ SET ARCHIVE_FILENAME=%ARCHIVE_FILENAME%suplogs SET CMD=%PACKER% "%ARCHIVE_FILENAME%" %LOG_DIRS% ECHO Running %CMD% %CMD% IF %ERRORLEVEL% NEQ 0 ( ECHO Errorlevel is %ERRORLEVEL%, please check what went wrong PAUSE ) ENDLOCAL
Handling SOAP Inline Count in Custom Processor
In odata - > soap, inline count operation is supported provided there is a web service operation which can return the In Line count of the No of Records from response. The operation must take an input parameter and return the count of the entries from the Web Service response.
Steps from Design Time tool
- Create an OData Service Implementation Project
- Create an OData Model for getSalesOrder operation, which can have properties CustomerID, SalesOrderID, Note etc.
3. Right click on odatasvc and choose Select data source
4. Select the entity set and choose the query CRUD operation. Select the data source SOAP Service.
5. Specify the wsdl file and choose the salesOrderInlineCount 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 Customer ID on which the Inline count has to be fetched. A hash map must be created in processRequestData function with key being CustID or any entity with which Web service Returns the response.
set the Hash Map to message body.
If the odata request is https://<localhost:8083/Namspace>/<ProjectName>;v=1/SalesOrder_InlineCountSet
Then the soap request body looks like
<soapenv:Body>
<web:CustID>1</web:CustID>
</soapenv:Body>
9. Once the web service response is returned, the response includes both the Inline Count Value and the Payload i.e. Each row of entity set. This has to be Parsed to get the inline count value and the Normal Response.
Parsing of the Response which is in the form of an XML can be achieved using Custom Processor below is the sample code for the same.
here we are fetching the Inline Count Value by splitting the tag <inlineCount> from xmlBody which we got from Input Parameter message.
if Inline Count Value is not null we are setting a property value to message object with Key as InlineCount and the value with the value of inline Count we got from response.This property will be converted to a count value in the final odata Response.
Now we will Map the Response to EDMX Entities/Properties i.e. we are achieving this with out Design Time Tool.
create a String buffer and append the xml tag, entity set tag, entity tag, properties to it.
Proprieties are fetched by Iterate through the xmlBody to the corresponding Node level and if the node name matches the EDMX property name then append the value to the property tag.
Iterate until the next element is not found.
set the XML created using String Buffer to the message Body.
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/Namspace>/<ProjectName>;v=1/SalesOrder_InlineCountSet on the browser and response will give the list of SalesOrder Items and the InlineCount of the Items.
Developing Native Apps for iOS
It discusses native app development for iOS, based on the SAP Mobile Platform SP4 & SDK SP5. In particular, it covers the innovations that we delivered with the latest Support Packages. One of the highlights: offline Apps!
SMP 3.0: Setup BO Mobile Connection
I have previously posted questions related to setting up an SMP 3.0 connection for Business Objects Mobile iOS application in this thread http://scn.sap.com/thread/3629468, unfortunately I didn't get any responses
One of my colleagues has been chasing down SAP Support to get some assistance. It turns out that no documentation is publicly available for setting up this connection
However we did get help from SAP Support to set it up, and now I want to post it so others may benefit from this knowledge.
I don't have any knowledge of Business Objects, and there are some prerequisites that needs to be fulfilled on the Business Objects Servers. You will probably find these in the standard documentation http://help.sap.com/businessobject/product_guides/sbo41/en/608_mobiOS_admin_en.pdf
We are moving from SUP 2.1, and the BO configuration has only changed slightly, so this setup is the same as it has been for a couple of years.
SMP 3.0 Configuration
The connection setup on SMP 3.0 is very easy.
Step 1. Define the Application in SMP 3.0.
Log in to the Management Cockpit of SMP 3.0 and navigate to the Application overview.
Click the New button.
Define your application of type Native.
IMPORTANT:
For some weird reason the name "MobiApp" is reserved for this application and you must use this name. In turn this unfortunately means that you can only have one BO Mobile Application defined in your SMP 3.0 environment
For the Backend Configuration setup the endpoint as displayed.
The structure of the URL might be different for your BO server.
Step 2. Define and assign a security profile.
Navigate to the Authentication tab.
Create a new security profile.
Enter a name and click to add an authentication provider.
NB: The name of the security profile may be chosen freely
Choose the "HTTP/HTTPS Authentication" Authentication Provider, and specify the URL to the login service on your BO Server.
Hint: Check the URL in a browser and confirm that you are being prompted for credentials. The Tomcat server will display a blank screen if you are authenticated on the BO Server.
Save your changes.
Step 3: Configure your iPad.
First of all you need to install the client on your iPad.
The app may be downloaded from Apple App store: https://itunes.apple.com/us/app/sap-businessobjects-mobile/id441208302?mt=8
Start up the client.
Click the "Connect" button.
Click "Create new Connection".
Choose the Connection Type "SMP BOE Connection".
The Connection type will be displayed as "SAP Mobile Platform".
Enter Connection Details:
- Connection Name: Freely chose name for your connection.
- Security Configuration: Enter the name of the Security Profile defined on the SMP server.
- Server URL: Base URL to your SMP server.
- Proxy Name: Name of the SMP Application hosting your connection (must be named MobiApp).
Click Done and you will be presented with a login screen.
Enter your credentials and click Register.
You should get access to whatever reports you have access to on your BO system.
That’s it.
Søren Hansen
Replace all HTTPS certificates on a new SMP 3.0 installation
It still surprises me how many SMP/SUP implementations I work on where the replacement of the server SSL certificates is left to the last minute when in fact it only takes about 20 mins to complete as part of the install process. I am a firm believer that we should aim to be secure by default and I encourage everybody to do the same.
By default the install of SMP comes with a number of self-signed and untrusted certificates which can be annoying both from an admin perspective, as browsers will complain, but also annoying from an app perspective as devices generally don't like insecure communications. So we need to replace these certs.
First lets start with a list of the HTTPS listening ports that we will need to address:
SMP 3.0
There are four main ports for SMP itself of which three use SSL. I of course am referencing the default port numbers here so you may need to adjust to fit any non-standard installation:
8081 - this is the HTTPS client connector for secure client communications
8082 - this is the Mutual SSL authenticator for secure certificate authenticated communications
8083 - this is the administration port on which you can find the admin console and uses SSL
In this case the replacement of the default certificate is pretty easy. With every installation in the SMP_HOME\Server\configuration folder there is a file called smp_keystore.jks. The first thing you ALWAYS do when manipulating the keystone is make a backup and that is as simple as copying the file. So do that first.
Next let's list the contents - using the keytool command which is a standard command delivered as part of a JRE (java runtime environment) installation. So go to your command prompt, and navigate to the above location. Run the following command:
keytool -list -keystore smp_keystore.jks
Once you execute, one of two things will happen - you may get an error with the command keytool not found in which case the JRE is missing from your path. I won't cover how to fix that here but it is widely documented on google if you need it. What should happen is that it prompts you for your keystore password which is the same as the one you provided during the SMP setup. Other default passwords from years gone by on SMP include changeit, changeit2 and s3pAdmin.
Once you enter your password you will be shown a list of the existing certificates in your keystone. In the list you should see an entry with the alias smp_crt which is the one we will be replacing. First I usually delete the existing cert that I will be replacing using the command:
keytool -delete -alias smp_crt -keystore smp_keystore.jks
Once executed you will again be prompted for your password for the keystore. You may also be prompted for the password for the key you are deleting which is the same as the keystore.
Now we have to replace the cert we just deleted. For me, I have been provided a certificate and private key pair in a PKCS12 format or pfx file. You can generate a private key on the sever and get this signed by your CA but I find it easier to simply import the whole cert in one go. One point on your cert - you need to make sure the password for your pfx file matches the password on the SMP keystore - this is a limitation on SMP.
Ok - two more steps, first we import the cert then we rename it to smp_crt. To import the cert we use the command:
keytool -importkeystore -srckeystore myNewSMPCert.pfx -destkeystore smp_keystore.jks -srcstoretype pkcs12
At this stage you will be prompted for the password for your keystore as well as your new certificate both of which should match. Now we have the certificate in we need to rename it or rather change the alias. To do this we first need to see what the current alias name is by running the list command we ran above earlier and identifying the cert we just imported. I usually do this by the cert date which I compare to the certificate. The lengthy string to the left of the date is the current alias of your certificate so simply copy it - it will look something like:
So the next command I run is to tell the keystore to take that certificate and rename the alias to smp_crt as follows:
keytool -changealias -alias "le-5ba8d3f9-dfa6-5e72-b488-ef3f76acae35" -destalias "smp_crt" -keystore smp_keystore.jks
Obviously replace the long HEX string with your own string and enter the passwords when prompted (they should all be the same).
And that is it for the SMP server, if you restart your SMP instances now and reload your browser (you may need to clear the cache) you will see that the certificate used to secure the communications is now the one you provided and hopefully one your browser trusts (if your setup is right).
SMP MBO 3.0 sidecar
The second area where you may have SSL certificates is of course on the old MBO sidecar. For MBOs there are, again, a number of ports we need to concern ourselves with:
2481 - for secure RBS (replication based sync) communications
8001 - for secure Web/REST communications
8283 - for the MBO sidecar admin console (the SAP Control centre)
The first two ports are pretty easy to update and can all be done from within the SCC. Simply log into your SAP Control centre (port 8283) and go to the configuration area on the left, then select the General tab and go to the SSL Configuration section. Once in there you can import a new certificate using the "Key Store Configuration" button.
Once in there use the "Import" function to upload the certificate selecting the type PKCS #12, a sensible alias and the password for the certificate. For me a sensible alias for my cert is something like "<serverHostname>-<CAName>" for example for the server SMP01 and CA myCA1 it would be SMP01-MYCA01.
Once this is uploaded you can adjust the security profile to use the new certificate. Simply change the default values below to match your new alias above and save to activate your certificate. And that is it for ports 2481 and 8001 once you restart your MBO sidecar services.
One more to go now - the certificate presented for the SAP Control Centre. This is slightly more....hidden
In this case we need to replace the certificate with the alias "jetty" in the keystore in SMP_HOME\SCC-3_2\services\EmbeddedContainer\keystore. The default password for this keystore is changeit unless it has been changed by your installer. The process to replace the certificate is the exact same as we did above:
- Backup the keystore
- List and identify the cert to be replaced (frequently there is only one cert in this keystore)
- keytool -list -keystore keystore
- Delete the existing cert with the alias "jetty"
- keytool -delete -alias jetty -keystore keystore
- Import your new certificate
- keytool -importkeystore -srckeystore myNewSMPCert.pfx -destkeystore keystore -srcstoretype pkcs12
- Change the alias to match "jetty"
- keytool -changealias -alias "le-5ba8d3X Y Z6acae35" -destalias "jetty" -keystore keystore
- Restart all MBO services including the SCC
And that is it - you should have all SSL enabled ports presenting valid certificates now. SAP recommend using a wildcard certificate for multi-node environments (e.g. *.mycorp.com) as this makes the distribution work amongst many nodes.
Any questions/comments most welcome below.
Brenton.
How To...Consume OData Services in offline mode with OData SDK (iOS) (SMP3 SP4/SDK SP5)
H2G explaining how to use offline APIs. (Xcode projects: 13_Offline_Exercise/Solution_Xcode) All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios
How To... Configure the required SDK libs in the example Xcode project (SMP3 SP4/SDK SP5)
Instruction of how to configure SDK libs with H2G Xcode projects. All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios
How To... Send Push Notifications to the Device (iOS) (SMP3 SP4/SDK SP5)
H2G explaining how to use push notification. (Xcode projects: 11_PushNotifications_Exercise/Solution_Xcode) All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios
How To... Log and Trace Using the OData SDK (iOS) (SMP3 SP4/SDK SP5)
H2G explaining how to use Log&Tracing APIs. (Xcode projects: 10_Log_And_Trace_Exercise/Solution_Xcode) All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios
How To... Make Batch Requests Using the OData SDK (iOS) (SMP3 SP4/SDK SP5)
H2G explaining how to invoke $batch call via online APIs. (Xcode projects: 09_BatchRequest_Exercise/Solution_Xcode) All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios
How To... Call OData Services to POST Data Using the OData SDK (iOS) (SMP3 SP4/SDK SP5)
H2G explaining how to create an entity via online APIs. (Xcode projects: 08_ODataService_PostData_Exercise/Solution_Xcode) All exercise and solution Xcode projects can be found here: https://github.com/SAP/sap_mobile_native_ios