Product Information
What’s new in Mobile Services App Development Tools 1910
In case you are still wondering what exactly is “Mobile Services App Development Tools” ? Well, let me share some insights on this –
in SAP Web IDE (full Stack) there is now a dedicated extension (aka plugin) for creating and developing Mobile development kit and SAP Mobile Cards based applications along with Mobile Backend Tools (MBT) that provides capabilities enabling you to quickly build an mobile enabled OData service that constitutes your mobile back-end service for mobile applications.
Here is help documentation for more details.
The main focus of 1910 release are –
- Mobile development kit Editor
-
- MDK Development perspective got a new icon
- Enhance Search in Wizard
- Add Navigation Property to EntitySet List
- New LanguageURLParam into Service
- Allow use of generic rule extension control in MDK Editor
- Support Style Files in CIM
- New action type to check for new App Update definitions
- Ability to discard objects or transactions on irrecoverable errors
- Support Undo Pending Offline Changes of a specified Entity
- Support ServiceOptions in OfflineOptions for OData Service
- New “Visible” support to Form Cell sections
- Support OnResume event in Page
- Support PUT (replace) & PATCH (merge) option for OData transactions
-
- Mobile Cards Editor
- Mobile Backend Tools (MBT)
Mobile development kit Editor
MDK Development perspective got a new icon
“MDK Development” icon has been replaced with MDK logo icon.
Enhance Search in Wizard
We have enhanced the Search in the wizard, it will now display the items while you input text int the search box.
e.g. searching for “update” results related actions and their types.
- Application Update Action
- OData Action>UpdateEntity
Add Navigation Property to EntitySet List
With this release, you can easily point to a navigation property associated with a parent entity by clicking on a dropdown option under EntitySet .
New LanguageURLParam into Service
There is a new parameter option added in service file for Language URL, select this option if this service can accept request with language parameter.
Check the documentation for more details.
Allow use of generic rule extension control in MDK Editor
You can now write an extension in metadata project (or WebIDE MDK project) without having to build a custom MDK client.
Note: this feature only supports Javascript codes (.ts files). You cant add additional framework/library/module/aar
Place the extension module with controls folders into metadata definition folder:
metadata/"BaseProject"/Extensions/"ExtensionModule1"/controls/[..]
Having extensions under metadata definition would allow them to be bundled into your metadata bundle (MDK app) during deployment process and be updated as part of App Update via SAP Cloud Platform Mobile Services.
Check the documentation for more details.
Support Style Files in CIM
There is now support for Styles in CIM file.
New action type to check for new App Update definitions
This new predefined Action “Application Update action” allows the client to check for an application update manually.
Check is considered
- successful if the application checks for a new version or downloads a new version.
- failure if the application fails to either check for a new version or download the new version.
Check the documentation for more details.
Ability to discard objects or transactions on irrecoverable errors
We have introduced a new property when Initializing Offline OData SetEnableIndividualErrorArchiveDeletion – It must be set on an OData Service and will affect how ErrorArchive deletion work.
When set to false (this is default value):
It will behave the same as the current behavior: If you delete one entry of ErrorArchive, it will revert all error states and discards all data from the ErrorArchive. In additions, the requests associated with entries in the ErrorArchive are removed. Note: requests that are not associated with the Error Archive entries will not be removed.
When set to true:
Deleting an individual failed request from ErrorArchive will cause that request and any following requests in the request queue (sent or unsent) that depend on the failed request to be deleted as well.
In this mode, you will need to manage the ErrorArchive entries, individually.
Check the documentation (Store Parameters) for more details.
Support Undo Pending Offline Changes of a specified Entity initial & delta sync
We have introduced a new OfflineOData Action UndoPendingChanges that discards all unsent (offline) requests that affect a specified entity So that you can any local changes they’ve made for that entity without needing to send those requests to the backend.
This action allows app to undo a pending changes (local changes that has not been uploaded) as if it never happens:
- An existing entity will be restored to the original status as if no any changes had been made.
- A new entity will be removed as if the entity had never been created.
Check the documentation for more details.
Support ServiceOptions in OfflineOptions for OData Service
Service Options is for application to inform the MDK whether your OData Service supports certain features e.g. supportsBind, supportPatch.
- supportsBind: Service either supports or doesn’t support bind operations. (default value is false)
- supportsPatch: Service either supports or doesn’t support patch operations. (default value is true)
E.g. If an OData Service does not accept PATCH method for updating an entity, then the app should set the supportPatch to false. Setting supportPatch to false will tell MDK that your OData Service doesn’t accept PATCH. So, MDK will react accordingly and will no longer use PATCH method when executing UpdateEntity action. Instead, MDK will use PUT method
New “Visible” support to Form Cell sections
You now have ability to hide/show an entire Form Cell Section in a Form Cell Container from the metadata.
use case – When loading a FormCell page, you can hide or show sections based on binding data or logic in a rule.
Support OnResume event in Page
This OnResume event is invoked when the application is resumed and the page is shown. The event is raised after the application OnResume event is raised. For Android platform, if the default language in the device is changed during the application suspension, when the application resuming it will navigate to main page. In this case the page resume event will not be invoked.
Check the documentation for more details.
Support PUT (replace) & PATCH (merge) option for OData transactions
We have introduced a new argument RequestOptions in Update Entity action which has an updateMode property that allows user to specify the mode as patch (merge) or PUT (replace).
MDK should expose that in metadata.
RequestOptions.UpdateMode has two possible values:
- “Replace” (PUT method): Include all of the Entity’s properties in the update request, as in a complete replacement of the resource
- “Merge” (PATCH method): Include only properties with changed values in the update request, as in patching the resource Default value is “Merge”. If any other value is set to “UpdateMode”, it will be ignored and default will be used.
{ 'RequestOptions': {
'UpdateMode': 'Replace'
}
}
Mobile Cards Editor
Support preview for adaptive card
with this release we are now fully supporting the Microsoft adaptive card standard
(https://adaptivecards.io/) which enables our customers to build visualization of their data even faster on a mobile device. Adaptive cards simplifies visual representation of the data.
Support Auto-subscription
This feature empowers administrators to now preselect which information will be by default visible to all the users
MCK Emulator in SAP WebIDE
This feature simplifies the development as with standard web tools like the chrome inspector one can now debug the cards inside the web browser. So debugging handlebar helper functions is now just as easy as debugging java script.
Mobile Backend Tools (MBT)
Enhancements on Annotation Editor:guided value input
In this release we have enhanced the Annotation Editor that is part of Mobile Back-End Tools. Previously the user was already able to edit annotations. However, there were various scenarios where the user could have entered the wrong values. To avoid entering wrong values that would be reported on later in the process, we have added various measures and input validation to avoid such mistakes. These new features are accessible in the edit annotation dialog and the right side detail table.
Annotation values can be in different data types. For each data type, we present them with different controls, and provide convenient support to facilitate the user input. Meanwhile, we also validate the user input.
Data type support
Boolean | this type is presented as CheckBox. | ![]() |
Enum | this type is presented as Select. | ![]() |
Time | this type is presented as a TimePicker. | ![]() |
Date, DateTime, GUID | These data types are presented as MaskInput | ![]() |
Number Types |
Some types include multiple parts. We show these parts separately to help the user remember what value to input. Some examples are shown below: |
![]() |
Validation
When the user is editing a value, we validate the input in real time. This prevents the user from inputting any illegal text. If errors are found, we prevent the input.
When the user finishes editing a value, we check whether the value is in the valid range. If not, we restore the value to its previous state and show an error message as shown below
Auto deployment of OData service and mobile app binding
Generating and deploying an OData service to Cloud Foundry was already possible with our tooling. However, binding this to a mobile application in SAP Mobile Services on Cloud Foundry and taking care of the security configuration is a non-trivial task that can go wrong in various places. We therefore introduce a new feature that helps you in this tedious configuration process.
After generating the services from your CSDL file and customizing it (optional), you can select the project, right-click and in the context menu select Deploy > Deploy to Mobile Services.
In the first step, you will see a dialog showing you the mobile app configurations currently available in Mobile Services on Cloud Foundry. You might also see a browser popup dialog requesting credentials. You’ll need to provide the credentials for your SAP Cloud Platform on Cloud Foundry account. The username is typically the email address you’ve used to sign up for the SAP Cloud Platform account.
The dialog allows you to select the mobile app and its endpoint that you are going to bind to the OData service. You can also create a new mobile app configuration and endpoint in SAP Mobile Services on Cloud Foundry from this dialog
After clicking OK, the mta (multi target application) project will be built and deployed to Cloud Foundry.
After deployment of the service, it will be bound to the specified endpoint of the mobile app
You can test the endpoint by opening the SAP Mobile Services endpoint url shown in the SAP Web IDE console in a browser (see screenshot above).
The above described flow also works for protected services using authentication through XSUAA. However, it is currently still required to manually configure the Role Collection and Trust Configuration on SAP Cloud Platform. Omitting this results in a ‘Forbidden’ response when you try to access the protected service. We will simplify these steps as well in a future release. Check this blog post for details.
Let me know if you have any questions/feedback on MDK topic.
References:
New to Mobile Development Kit development?
- Follow these tutorials to get started with MDK.
- Enhance your MDK app with some advanced functionalities
- Level Up with the Mobile Development Kit
Regards
Jitendra Kansal
Product Management, SAP Cloud Platform Mobile Services
SAP SE
P.S. Many thanks to our dev colleagues to share inputs in writing up this post.
Hi Jitendra,
is it possible that the "Navigation Property to EntitySet List" is not working for offline scenarios?
BR,
Michael
Jitendra Kansal
Thank you for your fast reply. I actually can see the property but i don't see any data. I found a workaround by binding the control target directly to the child and using the $filter-query since my child entity also has the appropriate property - everything works fine even using offline-functionalities.
Best regards
Michael