Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Jitendra_Kansal
Product and Topic Expert
Product and Topic Expert
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


“MDK Development” icon has been replaced with MDK logo icon.



 

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




 

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



    • DayTimeDuration

    • Byte

    • UnsignedByte

    • Int16

    • Int32

    • Int64

    • Decimal

    • Single

    • Double

    • Float




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?



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.
3 Comments
0 Kudos
Hi Jitendra,

 

is it possible that the "Navigation Property to EntitySet List" is not working for offline scenarios?

 

BR,

Michael
Jitendra_Kansal
Product and Topic Expert
Product and Topic Expert


u218772




I didnt understand your query. Are you not able to see the Navigation property (associated with a parent entity) while binding to a control target? Or you dont see the data on client?


In either case, i would suggest that you raise a new thread (ask a question) and mention details your about issue with some screenshots if possible.


Regards

JK
0 Kudos
jitendrakumar.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