What’s new in Mobile development kit client 26.6
Share

[[{“value”:”

Dear Community,

I’m happy to announce that a new release of the Mobile development kit (MDK) is now available for all SAP Build and Mobile Services customers. You can download it from the SAP Software Center, or soon from the community download page.

The SAP Mobile Services Client has been updated to version 26.6.0 on the Google Play Store and will soon be updated on the Apple App Store.

SAP MDK enables developers and technical business users to build cross-platform mobile applications. It allows you to build your application once, in an integrated development environment (SAP Business Application Studio / Visual Studio Code) and run it natively on Mobile (iOS & Android).  

The following UI enhancements are available only on iOS and Android platforms:

Pre-Onboarding Device Compliance Check

MDK already provides a device compliance check API which can be used in the application metadata after a user completes onboarding. With this release, MDK extends this capability to perform compliance checks before onboarding begins.

Key Benefits:

  • Early detection of potentially compromised devices (for example, rooted or jailbroken devices).
  • Reduced risk of exposing user credentials and corporate data to non-compliant devices.
  • Stronger security posture through compliance validation at the earliest stage of user access.
  • Flexible administrator controls to determine how non-compliant devices are handled.
  • Support for organizational security policies through configurable actions such as Block or Warn.
  • Built-in test mode for validating compliance-check behavior without requiring an actual rooted or jailbroken device.

// Excerpt of BrandedSettings.json
“PreLoginDeviceComplianceCheck”: {
“Enabled”: true,
“FailureAction”: “Warn”
}​

  • The FailureAction setting determines what happens when a compromised device is detected:
    • Block – The user is shown a message indicating that the device does not meet security requirements and cannot continue with onboarding.
    • Warn – The user is shown a warning message but can choose to continue with onboarding after acknowledging the alert.

A Customized message in case of  blocking users access the app.A Customized message in case of blocking users access the app.

 

A Customized message in case of  warning users and continuing using the app.A Customized message in case of warning users and continuing using the app.

For more information, refer to this documentation.

App Attestation Support

MDK now supports App Attestation, allowing SAP Mobile Services to validate that requests originate from an approved app running on a trusted device. This capability provides an additional layer of protection against app impersonation and unauthorized modifications.

Key Benefits:

  • Reduces the risk of requests originating from altered or cloned app installations.
  • Provides a reliable way for mobile services to establish trust in the source of incoming requests.
  • Supports enterprise security and compliance initiatives.
  • Works with existing MDK applications with minimal configuration changes.

App Attestation is configured through the Attestation property in the MDKProject.json file. The create-client tool automatically applies the required platform-specific settings during client generation.

//Excerpt of MDKProject.json
{
“AppName”: “YourAppName”,
“BundleID”: “com.example.yourapp”,
“AppVersion”: “1.0.0”,
“Attestation”: {
“iOS”: {
“Environment”: “development”,
“DebugToken”: “your-ios-debug-token-here”
},
“Android”: {
“DebugToken”: “your-android-debug-token-here”
}
}
}

Notes:

  • Debug tokens are intended for development and testing only and are not recommended for production deployments.
  • Before configuring attestation in your MDK project, an administrator must enable and configure the Attestation feature in the mobile services admin UI. See configuration settings for iOS and Android.

    For more information, refer to this documentation.

AI Notice Form Cell Control

As part of ongoing enhancements in embedded AI capabilities, a new FormCell control, AINoticeFormCell, is introduced to display an inline notice for AI-generated content that may require review before use. 

Key Benefits:

  • Clearly indicates when content is generated using AI.
  • Helps users understand that AI-generated content may need validation.
  • Supports optional links for additional context or guidance.

The notice shows an AI icon, a customizable message, and an optional hyperlink. The hyperlink can be configured to open supporting information or trigger an MDK action when selected. A common use case is providing details about the AI feature, including usage guidelines, privacy information, or related policies.

//Excerpt of a .page
{
“_Name”: “ainotice_with_hyperlink”,
“_Type”: “Control.Type.FormCell.AINotice”,
“IsVisible”: true,
“Separator”: true,
“Message”: “This is an AI generated message, proceed with caution.”,
“HyperlinkText”: “Learn more”,
“OnHyperlinkPress”: “/MDK266/Actions/Message.action”,
“Styles”: {
“Background”: “AINoticeYellowBackground”,
“Message”: “AINoticeHeadlineBold”
}
},

The AINoticeFormCellProxy class enables dynamic updates at runtime, including changes to the message, hyperlink text, styling, and click behavior through MDK rules.

let control = context.evaluateTargetPathForAPI(‘#Page:AINoticeClientAPI/#Control:ainotice_api_target’);
let message = control.getMessage();
control.setMessage(‘Updated via Client API!’);
let hyperlinkText = control.getHyperlinkText();
control.setHyperlinkText(‘Updated hyperlink’);
control.setStyles({
“Background”: “AINoticeYellowBackground”,
“Message”: “AINoticeBlueMessage”
});

AI Notice FormCell control examplesAI Notice FormCell control examples
For more information, refer to this documentation.

AI Feedback Form Cell Control

As part of the embedded AI enhancement area, a new FormCell control, AIFeedback, is introduced to enable quick user feedback on AI-generated content. The control provides thumbs-up and thumbs-down options along with a caption and is designed specifically for AI-related experiences.

Key Benefits:

  • Enables quick user feedback on AI-generated content
  • Captures user sentiment in a simple, lightweight way
  • Helps improve AI experiences through user input

//Excerpt of a .page
{
“_Type”: “Control.Type.FormCell.AIFeedback”,
“_Name”: “SectionFunc_InitUp”,
“Caption”: “Initial value: Up”,
“Value”: “Up”,
“IsEditable”: true,
“IsVisible”: true,
“Separator”: true,
“Styles”: {
“Background”: “AIFeedbackBackground”,
“Caption”: “AIFeedbackCaption”,
“VoteButtons”: “AIFeedbackVoteButton”
}
},

Note: This control does not provide any AI capabilities. It is a UI component used to capture feedback in AI-enabled scenarios, and developers determine what to do with the feedback and where to store it for their application.

The AIFeedbackFormCellProxy class enables dynamic updates at runtime, including changes to the caption, vote value, and styles through MDK rules.

AI Feedback Form cell control examplesAI Feedback Form cell control examples

For more information, refer to this documentation.

Stepper Form Cell Control

A new FormCell control, Stepper, is introduced to allow users to increase or decrease numeric values using buttons or direct input. The control supports configurable step size, value range limits, decimal precision, and validation.

Key Benefits:

  • Enables easy adjustment of numeric values through stepper buttons or manual entry
  • Supports configurable increments for flexible use cases
  • Allows enforcement of minimum and maximum value limits
  • Provides control over numeric precision for consistent input formatting

{
“Caption”: “Initial Value 5 and Step 1”,
“Value”: 5,
“DecimalPlacesSupported”: 2,
“Step”: 1,
“_Type”: “Control.Type.FormCell.Stepper”,
“_Name”: “StepperWithValue”
}

The StepperFormCellProxy class enables dynamic updates at runtime, including retrieves or modifies the Stepper value through MDK rules. 

Fiori Stepper Form cell control with its OnValueChange eventFiori Stepper Form cell control with its OnValueChange event

For more information, refer to this documentation.

Enhanced Offline OData Progress Feedback

Offline OData operations now provide step-level progress messages, offering improved visibility into long-running tasks such as initialization, download, upload, and send store. Localized default messages are displayed automatically with no additional configuration.

Key Benefits:

  • Introduces step-level progress updates for offline operations
  • Improves visibility into long-running processes such as sync and data transfer
  • Provides localized default messages out of the box
  • Enables customization and runtime control of progress feedback
  • Progress messages can be customized using the ProgressMessages property under OfflineOptions in the .service definition. These messages are used during offline operations including initialization, download, upload, and send store.

//.service file
{
“DestinationName”: “com.sap.edm.sampleservice.v4”,
“OfflineEnabled”: true,
“OfflineOptions”: {
“AutoIncludeProgressMessages”: false,
“ProgressMessages”: {
“BuildingEntityStore”: “{0}/{1} Custom Building the entity store”,
“CreatingBootStrapDatabase”: “{0}/{1} Custom Creating bootstrap database”,
“CreatingRequestQueueDatabase”: “{0}/{1} Custom Creating request queue database”,
“DownloadingEntityStore”: “{0}/{1} Custom Downloading entity store {2}”,
“ErasingExpiredRequests”: “{0}/{1} Custom Erasing expired requests”,
“LoadingMetadata”: “{0}/{1} Custom Performing request queue optimizer”,
“PerformingTransactionMerge”: “{0}/{1} Custom Performing transaction builder”,
“PerformingCreateDeleteMerge”: “{0}/{1} Custom Performing undo local creation optimizer”,
“ProcessingDefiningQueries”: “{0}/{1} Custom Processing defining queries {2}”,
“ProcessingRequests”: “{0}/{1} Custom Processing requests {2}”,
“ReapplyingChanges”: “{0}/{1} Custom Reapplying changes”,
“AnalyzingReceivedData”: “{0}/{1} Custom Receiving data from the client”,
“ReceivingDataFromServer”: “{0}/{1} Custom Receiving data from the server {2}”,
“RemovingDeletedRelationships”: “{0}/{1} Custom Removing deleted relationships”,
“RemovingRemoveAfterUploadRequests”: “{0}/{1} Custom Removing RemoveAfterUpload requests”,
“SendingDataToServer”: “{0}/{1} Custom Sending data to the server {2}”,
“SendingEntityStoreDatabase”: “{0}/{1} Custom Sending entity store database {2}/{3}”,
“SendingRequestQueueDatabase”: “{0}/{1} Custom Sending request queue database”,
“UploadPreprocessing”: “{0}/{1} Custom Pre-processing requests before uploading”,
“WaitingForDownload”: “{0}/{1} Custom Waiting for download”
}
},
“OnOfflineProgressUpdate”: “/MDK266/Rules/ProgressFeedback/OnOfflineProgressPromiseUpdate.js”
}

Notes: 

  • To control automatic UI behavior, use the AutoIncludeProgressMessages property.
  • A new OnOfflineProgressUpdate rule callback allows applications to  customize the progress messages at runtime. Structured event details can be accessed using the getEventData() client API.
  • ProgressText in the Initialize action is deprecated as of MDK 26.6.0. Use the new ProgressMessages instead. If both properties are configured, ProgressMessages takes precedence.

Granular progress feedback for Offline OData Initialization actionGranular progress feedback for Offline OData Initialization action

For more information, refer to this documentation.

Configurable Onboarding Illustration Sizes for Android

This enhancement is particularly useful on Android devices with limited screen space. For example, on smaller devices, onboarding illustrations can reduce the visible area available for important content such as passcode instructions and client policies. Adjusting the illustration size—or hiding it entirely—helps ensure critical information remains accessible and easier to read.

A new onboardingIllustrationSize property is available under OnboardingCustomizations in BrandedSettings.json, allowing you to control the size of illustrations displayed on onboarding screens or hide them entirely.

//Excerpt of BrandedSettings.json
“OnboardingCustomizations”: {
“onboardingIllustrationSize”: “L”, // XS, S, M, L, XL, None
},

This property is supported on Android for the following onboarding screens:

  • Launch
  • Set Passcode
  • Confirm Passcode
  • Notification Permission
  • Camera Permission
  • Offline Network Error

Key Benefits

  • Provides greater flexibility when designing onboarding experiences.
  • Helps optimize screen space on smaller Android devices.
  • Improves visibility of onboarding content and client policies.
  • Allows illustrations to be resized or removed based on branding and usability requirements.

    Examples showcasing onboarding illustration on Create passcode screenExamples showcasing onboarding illustration on Create passcode screen

    For more information, refer to this documentation.

New Section Filter Bar with Advanced Filtering

MDK now provides a new FilterBar experience for sectioned tables, enabling more advanced filtering scenarios while following SAP Fiori design patterns.

While the existing Filter Feedback Bar remains ideal for quick-access filters and common filtering actions, the new FilterBar supports richer interactions for scenarios that require more sophisticated input. Users can work with controls such as segmented selections, list pickers, switches, sliders, and multi-sort options directly within the filtering experience.

Key Benefits

  • Supports more advanced filtering scenarios beyond simple filter chips.
  • Provides a consistent experience aligned with SAP Fiori design guidelines.
  • Reduces the need for custom filtering screens and dialogs.
  • Enables users to refine large datasets more efficiently.
  • Supports a variety of filter interaction patterns, including selection lists, ranges, toggles, and sorting options.

Filter bar at one or more sectionsFilter bar at one or more sections

 

//Excerpt of a .page
{
“Sections”: [
{
“FilterBar”: {
“_Type”: “Control.Type.FilterBar”,
“_Name”: “SortFilter”,
“Filters”: “/MDK266/Rules/FilterBar/InitialFilters.js”,
“Sections”: [
{
“_Name”: “FilterSection1”,
“Controls”: [
{
“_Name”: “Width”,
“_Type”: “FilterBar.Type.Segmented”,
“Label”: “DimensionWidth Compare”,
“Items”: [
{
“DisplayValue”: “< 25”,
“ReturnValue”: “DimensionWidth lt 25”
}
],
“AllowEmptySelection”: true,
“AllowMultipleSelection”: false,
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “PriceLP”,
“_Type”: “FilterBar.Type.ListPicker”,
“Label”: “Price >=”,
“Value”: “Price ge 126”,
“PickerItems”: {
“DisplayValue”: “{Price}”,
“ReturnValue”: “/MDK266/Rules/FilterBar/PriceReturnValue.js”,
“Target”: {
“EntitySet”: “Products”,
“Service”: “/MDK266/Services/SampleServiceV4Online.service”,
“QueryOptions”: “$top=30”
}
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “Favorite”,
“_Type”: “FilterBar.Type.Switch”,
“Label”: “Is Favorite?”,
“HelperText”: “Favorite is”,
“_SimpleQuery”: {
“Property”: “Category”
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “Height”,
“_Type”: “FilterBar.Type.Slider”,
“Label”: “Height >=”,
“MinValue”: 10,
“MaxValue”: 111,
“Step”: 1,
“SimpleQuery”: {
“Property”: “DimensionHeight”,
“Operator”: “ge”
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
}
]
}
]
},
“_Name”: “Section”,
“_Type”: “Section.Type.ObjectTable”
}
],

Notes: 

  • This new FilterBar is defined at the section level which is more intuitive.

  • If there is only one section, the FilterBar will remain sticky (i.e., it will stay at the top of the screen while scrolling). If there are multiple sections, it will scroll with the content. Users can also define different FilterBars for individual sections, unlike the existing FilterFeedbackBar. 
    Additionally, both approaches cannot coexist on the same page; FilterBar will take higher priority.
     
    For more information, refer to this documentation.

Action Bar Image Icon Size Customization

You can now control the display size of image icons in the Action Bar using the new Width property on ActionBarItem. By specifying a width value, image icons can be displayed at a custom size instead of the default 18 × 18 dimensions.

Key Benefits:

  • Provides greater control over Action Bar appearance.
  • Supports larger image icons for improved visibility.
  • Enables more flexibility when implementing custom branding and designs.

    Action Bar item Width property examplesAction Bar item Width property examples

     

“ActionBar”: {
“Caption”: “Icon Width Examples”,
“Items”: [
{
“_Name”: “IconDefault”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“OnPress”: “/MDK266/Actions/Message.action”
},
{
“_Name”: “Icon24”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“Width”: 24,
“OnPress”: “/MDK266/Actions/Message.action”
},
{
“_Name”: “Icon36”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“Width”: 36
}
]
},​

Notes:

  • The maximum supported value is 36; values above this limit are automatically set to 36.
  • Values less than or equal to 0 use the default size of 18.
  • This property applies only to image icons and does not affect SAP icons or font icons.
  • When sizing your image, pay attention to any existing white space bordering the image.

For more information, refer to this documentation.

Dynamic Visibility and Enablement for Button Table Buttons

The ButtonTableButtonProxy now supports new client APIs that allow applications to read and dynamically control the enabled state and visibility of Button Table buttons at runtime.

Key Benefits:

  • Enables dynamic control of button availability and visibility.
  • Supports context-aware user experiences.
  • Allows button states to be updated through rules based on application logic.
  • Provides APIs to both read and modify button state at runtime.

Section Button visibility and EnablementSection Button visibility and Enablement

 

Available APIs:

export default function ToggleButtonEnabled(context) {
let pageProxy = context.getPageProxy();
let button = pageProxy.getControl(‘SectionedTable’).getSection(‘TargetSection’).getButton(‘ButtonTableTypeButton0’);
if (button) {
let currentEnabled = button.getEnabled();
button.setEnabled(!currentEnabled);
let currentVisible = button.getVisible();
button.setVisible(!currentVisible);
}

Become an SAP MDK Explorer!
Do you have a requirement to build a mobile solution for your enterprise? Take your first steps today by following these tutorials to get started and learn more about the SAP Mobile development kit. We’re excited to see what you build—your feedback and ideas are invaluable!

Submit Improvement Requests
You can submit your improvement request here for Mobile development kit to the SAP Customer Influence site, a central place for all product improvement requests. You can browse all improvement requests, submit improvement requests, comment, vote, receive updates, and see who has voted at the SAP Customer Influence site.

“}]] 

 [[{“value”:”Dear Community,I’m happy to announce that a new release of the Mobile development kit (MDK) is now available for all SAP Build and Mobile Services customers. You can download it from the SAP Software Center, or soon from the community download page.The SAP Mobile Services Client has been updated to version 26.6.0 on the Google Play Store and will soon be updated on the Apple App Store.SAP MDK enables developers and technical business users to build cross-platform mobile applications. It allows you to build your application once, in an integrated development environment (SAP Business Application Studio / Visual Studio Code) and run it natively on Mobile (iOS & Android).  The following UI enhancements are available only on iOS and Android platforms:Security & Compliance EnhancementsPre-Onboarding Device Compliance CheckApp Attestation SupportEmbedded AI EnhancementsAI Notice Form Cell ControlAI Feedback Form Cell ControlUI EnhancementsStepper Form Cell ControlEnhanced Offline OData Progress FeedbackConfigurable Onboarding Illustration Sizes for AndroidNew Section Filter Bar with Advanced FilteringAction Bar Image Icon Size CustomizationClient API EnhancementsDynamic Visibility and Enablement for Button Table ButtonsPre-Onboarding Device Compliance CheckMDK already provides a device compliance check API which can be used in the application metadata after a user completes onboarding. With this release, MDK extends this capability to perform compliance checks before onboarding begins.Key Benefits:Early detection of potentially compromised devices (for example, rooted or jailbroken devices).Reduced risk of exposing user credentials and corporate data to non-compliant devices.Stronger security posture through compliance validation at the earliest stage of user access.Flexible administrator controls to determine how non-compliant devices are handled.Support for organizational security policies through configurable actions such as Block or Warn.Built-in test mode for validating compliance-check behavior without requiring an actual rooted or jailbroken device.// Excerpt of BrandedSettings.json
“PreLoginDeviceComplianceCheck”: {
“Enabled”: true,
“FailureAction”: “Warn”
}​The FailureAction setting determines what happens when a compromised device is detected:Block – The user is shown a message indicating that the device does not meet security requirements and cannot continue with onboarding.Warn – The user is shown a warning message but can choose to continue with onboarding after acknowledging the alert.A Customized message in case of blocking users access the app. A Customized message in case of warning users and continuing using the app.For more information, refer to this documentation.App Attestation SupportMDK now supports App Attestation, allowing SAP Mobile Services to validate that requests originate from an approved app running on a trusted device. This capability provides an additional layer of protection against app impersonation and unauthorized modifications.Key Benefits:Reduces the risk of requests originating from altered or cloned app installations.Provides a reliable way for mobile services to establish trust in the source of incoming requests.Supports enterprise security and compliance initiatives.Works with existing MDK applications with minimal configuration changes.App Attestation is configured through the Attestation property in the MDKProject.json file. The create-client tool automatically applies the required platform-specific settings during client generation.//Excerpt of MDKProject.json
{
“AppName”: “YourAppName”,
“BundleID”: “com.example.yourapp”,
“AppVersion”: “1.0.0”,
“Attestation”: {
“iOS”: {
“Environment”: “development”,
“DebugToken”: “your-ios-debug-token-here”
},
“Android”: {
“DebugToken”: “your-android-debug-token-here”
}
}
}Notes:Debug tokens are intended for development and testing only and are not recommended for production deployments.Before configuring attestation in your MDK project, an administrator must enable and configure the Attestation feature in the mobile services admin UI. See configuration settings for iOS and Android.For more information, refer to this documentation.AI Notice Form Cell ControlAs part of ongoing enhancements in embedded AI capabilities, a new FormCell control, AINoticeFormCell, is introduced to display an inline notice for AI-generated content that may require review before use. Key Benefits:Clearly indicates when content is generated using AI.Helps users understand that AI-generated content may need validation.Supports optional links for additional context or guidance.The notice shows an AI icon, a customizable message, and an optional hyperlink. The hyperlink can be configured to open supporting information or trigger an MDK action when selected. A common use case is providing details about the AI feature, including usage guidelines, privacy information, or related policies.//Excerpt of a .page
{
“_Name”: “ainotice_with_hyperlink”,
“_Type”: “Control.Type.FormCell.AINotice”,
“IsVisible”: true,
“Separator”: true,
“Message”: “This is an AI generated message, proceed with caution.”,
“HyperlinkText”: “Learn more”,
“OnHyperlinkPress”: “/MDK266/Actions/Message.action”,
“Styles”: {
“Background”: “AINoticeYellowBackground”,
“Message”: “AINoticeHeadlineBold”
}
},The AINoticeFormCellProxy class enables dynamic updates at runtime, including changes to the message, hyperlink text, styling, and click behavior through MDK rules.let control = context.evaluateTargetPathForAPI(‘#Page:AINoticeClientAPI/#Control:ainotice_api_target’);
let message = control.getMessage();
control.setMessage(‘Updated via Client API!’);
let hyperlinkText = control.getHyperlinkText();
control.setHyperlinkText(‘Updated hyperlink’);
control.setStyles({
“Background”: “AINoticeYellowBackground”,
“Message”: “AINoticeBlueMessage”
});AI Notice FormCell control examplesFor more information, refer to this documentation.AI Feedback Form Cell ControlAs part of the embedded AI enhancement area, a new FormCell control, AIFeedback, is introduced to enable quick user feedback on AI-generated content. The control provides thumbs-up and thumbs-down options along with a caption and is designed specifically for AI-related experiences.Key Benefits:Enables quick user feedback on AI-generated contentCaptures user sentiment in a simple, lightweight wayHelps improve AI experiences through user input//Excerpt of a .page
{
“_Type”: “Control.Type.FormCell.AIFeedback”,
“_Name”: “SectionFunc_InitUp”,
“Caption”: “Initial value: Up”,
“Value”: “Up”,
“IsEditable”: true,
“IsVisible”: true,
“Separator”: true,
“Styles”: {
“Background”: “AIFeedbackBackground”,
“Caption”: “AIFeedbackCaption”,
“VoteButtons”: “AIFeedbackVoteButton”
}
},Note: This control does not provide any AI capabilities. It is a UI component used to capture feedback in AI-enabled scenarios, and developers determine what to do with the feedback and where to store it for their application.The AIFeedbackFormCellProxy class enables dynamic updates at runtime, including changes to the caption, vote value, and styles through MDK rules.AI Feedback Form cell control examplesFor more information, refer to this documentation.Stepper Form Cell ControlA new FormCell control, Stepper, is introduced to allow users to increase or decrease numeric values using buttons or direct input. The control supports configurable step size, value range limits, decimal precision, and validation.Key Benefits:Enables easy adjustment of numeric values through stepper buttons or manual entrySupports configurable increments for flexible use casesAllows enforcement of minimum and maximum value limitsProvides control over numeric precision for consistent input formatting{
“Caption”: “Initial Value 5 and Step 1”,
“Value”: 5,
“DecimalPlacesSupported”: 2,
“Step”: 1,
“_Type”: “Control.Type.FormCell.Stepper”,
“_Name”: “StepperWithValue”
}The StepperFormCellProxy class enables dynamic updates at runtime, including retrieves or modifies the Stepper value through MDK rules. Fiori Stepper Form cell control with its OnValueChange eventFor more information, refer to this documentation.Enhanced Offline OData Progress FeedbackOffline OData operations now provide step-level progress messages, offering improved visibility into long-running tasks such as initialization, download, upload, and send store. Localized default messages are displayed automatically with no additional configuration.Key Benefits:Introduces step-level progress updates for offline operationsImproves visibility into long-running processes such as sync and data transferProvides localized default messages out of the boxEnables customization and runtime control of progress feedbackProgress messages can be customized using the ProgressMessages property under OfflineOptions in the .service definition. These messages are used during offline operations including initialization, download, upload, and send store.//.service file
{
“DestinationName”: “com.sap.edm.sampleservice.v4”,
“OfflineEnabled”: true,
“OfflineOptions”: {
“AutoIncludeProgressMessages”: false,
“ProgressMessages”: {
“BuildingEntityStore”: “{0}/{1} Custom Building the entity store”,
“CreatingBootStrapDatabase”: “{0}/{1} Custom Creating bootstrap database”,
“CreatingRequestQueueDatabase”: “{0}/{1} Custom Creating request queue database”,
“DownloadingEntityStore”: “{0}/{1} Custom Downloading entity store {2}”,
“ErasingExpiredRequests”: “{0}/{1} Custom Erasing expired requests”,
“LoadingMetadata”: “{0}/{1} Custom Performing request queue optimizer”,
“PerformingTransactionMerge”: “{0}/{1} Custom Performing transaction builder”,
“PerformingCreateDeleteMerge”: “{0}/{1} Custom Performing undo local creation optimizer”,
“ProcessingDefiningQueries”: “{0}/{1} Custom Processing defining queries {2}”,
“ProcessingRequests”: “{0}/{1} Custom Processing requests {2}”,
“ReapplyingChanges”: “{0}/{1} Custom Reapplying changes”,
“AnalyzingReceivedData”: “{0}/{1} Custom Receiving data from the client”,
“ReceivingDataFromServer”: “{0}/{1} Custom Receiving data from the server {2}”,
“RemovingDeletedRelationships”: “{0}/{1} Custom Removing deleted relationships”,
“RemovingRemoveAfterUploadRequests”: “{0}/{1} Custom Removing RemoveAfterUpload requests”,
“SendingDataToServer”: “{0}/{1} Custom Sending data to the server {2}”,
“SendingEntityStoreDatabase”: “{0}/{1} Custom Sending entity store database {2}/{3}”,
“SendingRequestQueueDatabase”: “{0}/{1} Custom Sending request queue database”,
“UploadPreprocessing”: “{0}/{1} Custom Pre-processing requests before uploading”,
“WaitingForDownload”: “{0}/{1} Custom Waiting for download”
}
},
“OnOfflineProgressUpdate”: “/MDK266/Rules/ProgressFeedback/OnOfflineProgressPromiseUpdate.js”
}Notes: To control automatic UI behavior, use the AutoIncludeProgressMessages property.A new OnOfflineProgressUpdate rule callback allows applications to  customize the progress messages at runtime. Structured event details can be accessed using the getEventData() client API.ProgressText in the Initialize action is deprecated as of MDK 26.6.0. Use the new ProgressMessages instead. If both properties are configured, ProgressMessages takes precedence.Granular progress feedback for Offline OData Initialization actionFor more information, refer to this documentation.Configurable Onboarding Illustration Sizes for AndroidThis enhancement is particularly useful on Android devices with limited screen space. For example, on smaller devices, onboarding illustrations can reduce the visible area available for important content such as passcode instructions and client policies. Adjusting the illustration size—or hiding it entirely—helps ensure critical information remains accessible and easier to read.A new onboardingIllustrationSize property is available under OnboardingCustomizations in BrandedSettings.json, allowing you to control the size of illustrations displayed on onboarding screens or hide them entirely.//Excerpt of BrandedSettings.json
“OnboardingCustomizations”: {
“onboardingIllustrationSize”: “L”, // XS, S, M, L, XL, None
},This property is supported on Android for the following onboarding screens:LaunchSet PasscodeConfirm PasscodeNotification PermissionCamera PermissionOffline Network ErrorKey BenefitsProvides greater flexibility when designing onboarding experiences.Helps optimize screen space on smaller Android devices.Improves visibility of onboarding content and client policies.Allows illustrations to be resized or removed based on branding and usability requirements.Examples showcasing onboarding illustration on Create passcode screenFor more information, refer to this documentation.New Section Filter Bar with Advanced FilteringMDK now provides a new FilterBar experience for sectioned tables, enabling more advanced filtering scenarios while following SAP Fiori design patterns.While the existing Filter Feedback Bar remains ideal for quick-access filters and common filtering actions, the new FilterBar supports richer interactions for scenarios that require more sophisticated input. Users can work with controls such as segmented selections, list pickers, switches, sliders, and multi-sort options directly within the filtering experience.Key BenefitsSupports more advanced filtering scenarios beyond simple filter chips.Provides a consistent experience aligned with SAP Fiori design guidelines.Reduces the need for custom filtering screens and dialogs.Enables users to refine large datasets more efficiently.Supports a variety of filter interaction patterns, including selection lists, ranges, toggles, and sorting options.Filter bar at one or more sections //Excerpt of a .page
{
“Sections”: [
{
“FilterBar”: {
“_Type”: “Control.Type.FilterBar”,
“_Name”: “SortFilter”,
“Filters”: “/MDK266/Rules/FilterBar/InitialFilters.js”,
“Sections”: [
{
“_Name”: “FilterSection1”,
“Controls”: [
{
“_Name”: “Width”,
“_Type”: “FilterBar.Type.Segmented”,
“Label”: “DimensionWidth Compare”,
“Items”: [
{
“DisplayValue”: “< 25”,
“ReturnValue”: “DimensionWidth lt 25”
}
],
“AllowEmptySelection”: true,
“AllowMultipleSelection”: false,
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “PriceLP”,
“_Type”: “FilterBar.Type.ListPicker”,
“Label”: “Price >=”,
“Value”: “Price ge 126”,
“PickerItems”: {
“DisplayValue”: “{Price}”,
“ReturnValue”: “/MDK266/Rules/FilterBar/PriceReturnValue.js”,
“Target”: {
“EntitySet”: “Products”,
“Service”: “/MDK266/Services/SampleServiceV4Online.service”,
“QueryOptions”: “$top=30”
}
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “Favorite”,
“_Type”: “FilterBar.Type.Switch”,
“Label”: “Is Favorite?”,
“HelperText”: “Favorite is”,
“_SimpleQuery”: {
“Property”: “Category”
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
},
{
“_Name”: “Height”,
“_Type”: “FilterBar.Type.Slider”,
“Label”: “Height >=”,
“MinValue”: 10,
“MaxValue”: 111,
“Step”: 1,
“SimpleQuery”: {
“Property”: “DimensionHeight”,
“Operator”: “ge”
},
“DisplayOnBar”: “/MDK266/Rules/FilterBar/GetDisplayOnBarValue.js”
}
]
}
]
},
“_Name”: “Section”,
“_Type”: “Section.Type.ObjectTable”
}
],Notes: This new FilterBar is defined at the section level which is more intuitive.If there is only one section, the FilterBar will remain sticky (i.e., it will stay at the top of the screen while scrolling). If there are multiple sections, it will scroll with the content. Users can also define different FilterBars for individual sections, unlike the existing FilterFeedbackBar. Additionally, both approaches cannot coexist on the same page; FilterBar will take higher priority. For more information, refer to this documentation.Action Bar Image Icon Size CustomizationYou can now control the display size of image icons in the Action Bar using the new Width property on ActionBarItem. By specifying a width value, image icons can be displayed at a custom size instead of the default 18 × 18 dimensions.Key Benefits:Provides greater control over Action Bar appearance.Supports larger image icons for improved visibility.Enables more flexibility when implementing custom branding and designs.Action Bar item Width property examples “ActionBar”: {
“Caption”: “Icon Width Examples”,
“Items”: [
{
“_Name”: “IconDefault”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“OnPress”: “/MDK266/Actions/Message.action”
},
{
“_Name”: “Icon24”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“Width”: 24,
“OnPress”: “/MDK266/Actions/Message.action”
},
{
“_Name”: “Icon36”,
“Position”: “Right”,
“Icon”: “/MDK266/Images/actionbar.png”,
“Width”: 36
}
]
},​Notes:The maximum supported value is 36; values above this limit are automatically set to 36.Values less than or equal to 0 use the default size of 18.This property applies only to image icons and does not affect SAP icons or font icons.When sizing your image, pay attention to any existing white space bordering the image.For more information, refer to this documentation.Dynamic Visibility and Enablement for Button Table ButtonsThe ButtonTableButtonProxy now supports new client APIs that allow applications to read and dynamically control the enabled state and visibility of Button Table buttons at runtime.Key Benefits:Enables dynamic control of button availability and visibility.Supports context-aware user experiences.Allows button states to be updated through rules based on application logic.Provides APIs to both read and modify button state at runtime.Section Button visibility and Enablement Available APIs:setEnabled() — Enables or disables the button.setVisible() — Shows or hides the button.getEnabled() — Returns the current enabled state.getVisible() — Returns the current visibility state.export default function ToggleButtonEnabled(context) {
let pageProxy = context.getPageProxy();
let button = pageProxy.getControl(‘SectionedTable’).getSection(‘TargetSection’).getButton(‘ButtonTableTypeButton0’);
if (button) {
let currentEnabled = button.getEnabled();
button.setEnabled(!currentEnabled);
let currentVisible = button.getVisible();
button.setVisible(!currentVisible);
}Become an SAP MDK Explorer!Do you have a requirement to build a mobile solution for your enterprise? Take your first steps today by following these tutorials to get started and learn more about the SAP Mobile development kit. We’re excited to see what you build—your feedback and ideas are invaluable!Submit Improvement RequestsYou can submit your improvement request here for Mobile development kit to the SAP Customer Influence site, a central place for all product improvement requests. You can browse all improvement requests, submit improvement requests, comment, vote, receive updates, and see who has voted at the SAP Customer Influence site.”}]] Read More Technology Blog Posts by SAP articles 

#SAPCHANNEL

By ali

Leave a Reply