Object Page Floorplan

Information
This floorplan is available as an SAP Fiori Element.

For information on the default settings and other options for the SAP Fiori element implementation, see the topics for the object page header, content area, and footer bar in the SAP Fiori Elements Framework section.

Intro

The object page floorplan is used to display and categorize all relevant information about an object. Categorized content can be accessed quickly using anchor or tab navigation, and users can switch from display to edit mode to change the content. To create a new object, users can switch to create mode.

The object page floorplan comes with a flexible, responsive layout and a dynamic page header that can be adapted to display simple and complex business objects. This allows you to adjust the layout to a wide range of use cases.

Object page floorplan
Object page floorplan
Warning

  • Always build the object page using the dynamic page header and not the former object page header. Using the old object page header creates issues that can’t be fixed retrospectively. Using the dynamic header will also ensure consistency across all floorplans and provide greater flexibility. For details, see the Header section below.
  • Do not use the current implementation of the “page variant” feature in SAP Fiori elements. This feature is technically available for object pages, but we are still working on the final design.

When to Use

Use the object page floorplan if:

  • Users need to display, create, or edit an object.
  • Users need to get an overview of an object and interact with different parts of the object.
  • You need to structure your content into different sections.
  • You have a page with one section and editable header content.

Do not use the object page floorplan if:

Use instead:

  • Users need to edit several items at the same time.
  • Users need to find relevant items without knowing the exact item details.
 

List report floorplan

  • Users need to be guided through a series of steps when a new object is created.
  • The creation process for a new object is not linear, but can have different paths, depending on the information selected.
Wizard floorplan
  • Users need to find one specific item, where the item or an identifying data point is known to the user (such as a code identified by a scanner).
Initial page floorplan
  • Users need a way to analyze data step by step from different perspectives. They need to drill down to investigate a root cause and act on transactional content within one page.
  • Users need to interact with interdependent chart and table views (rather than using charts for visualization only).
Analytical list page
  • Your content can be shown in just one section and you don’t have editable header content.
Dynamic Page Layout page

Components

The object page consists of the following elements:

  • Dynamic page header (mandatory)
  • Navigation bar (optional)
  • Content area (mandatory)

The image below provides an overview of the object page components.

Schematic visualization of the object page
Schematic visualization of the object page
  1. Dynamic page header
  2. Navigation bar
  3. Content area
  4. Shell bar
  5. Breadcrumbs
  6. Global actions
  7. Header content
  8. Footer toolbar

The following sections explain these components in more detail.

Dynamic Page Header (mandatory)

The dynamic page header contains key information about the object and provides the user with the necessary context. The header initially expands in display mode. It also contains global actions for the object, such as Edit or Delete.

The header consists of the following elements:

  1. Breadcrumbs (optional)
  2. Title (mandatory)
  3. Subtitle (optional)
  4. Header content (optional)
  5. Object marker (optional)
  6. Header toolbar with global actions (optional)
  7. Visual indicator for header features (mandatory if the header can be collapsed and expanded)
Object page with expanded dynamic page header
Object page with expanded dynamic page header
Object page with collapsed dynamic page header
Object page with collapsed dynamic page header

If the object page is used in the flexible column layout, it can also contain layout actions.

Please note:

  • To display images and placeholders in the header, use the avatar control.
  • The subtitle is now below the title. (In the former object page header it was next to the title.)

For more information, see the Dynamic Page Header section for the dynamic page layout.

Warning
Always build the object page using the dynamic page header and not the former object page header. Using the old object page header creates issues that can’t be fixed retrospectively. Using the dynamic header will also ensure consistency across all floorplans and provide greater flexibility. For details, see the Header section below.
Developer Hint
To use the dynamic page header in SAP Fiori Elements, set the class “objectPageHeaderType” to “Dynamic”.

Breadcrumbs

A breadcrumb is displayed above the object title. Limit the breadcrumb to the drilldown levels within the object page.

Header Content (optional)

The header content displays app-specific contextual information. You build the content using containers, called facets.

The facets are arranged inline with a left float. Each facet adapts its size to the content and makes optimal use of the space without truncating the texts. If the facets do not all fit on one line, those on the right wrap to the line below.

The header content is hidden by scrolling down the page or clicking the collapse indicator.

There are several types of header facets for different kinds of data. The facets must be implemented by the app team for standalone object pages. For SAP Fiori elements, they are predefined.

The following header facets are available:

Form Facet (Dataset)

You can use the form facet to display datasets.

A form facet consists of:

  1. Title (optional)
  2. Label-text pair (no more than 5 in a group)
  • The labels can be invisible, but need to have a text for accessibility purposes.
  • The labels can be icons, but need to have a text for accessibility purposes.
  • Each text can hold a link.
Developer Hint
For non-SAP Fiori element object pages only:

For each label-value pair in the form header facet, use a sap.m.Label and a sap.m.Text or sap.m.Link, nested within an sap.m.HBox.

Header facet - Form facets
Header facet - Form facets

Plain Text Facet

You can use the plain text facet to display a continuous text in the header.

A plain text facet consists of:

  1. Title (optional)
  2. Text

You can have links inline in the continuous text. They can navigate to another page or open a quick view. The text can contain more than one link, with different actions.

The default width of the facet is 320 px. The width of the facet doesn’t adapt to its content, but when the headline is broader than the facet width, the header wraps. You can also set a specific width to make optimal use of the given space.

Developer Hint
For non-SAP Fiori element object pages only:

To set the width of the plain text facet, nest the text within an sap.m.HBox and set the property:width of the sap.m.HBox.

Header facet - Plain text facet with default width
Header facet - Plain text facet with default width
Header facet - Plain text facet with custom width
Header facet - Plain text facet with custom width

Image Facet

You can use the image facet to show a picture of the object or a user profile. The header can have either one image facet or no image facet. The position of the image facet is fixed to the left. The image can have a press event. The default press event enlarges the image. When the header collapses, the image facet moves to the left of the title and becomes smaller.

Guidelines
Always use the avatar control for the image in the header. This applies to both expanded and collapsed images.
Header facet – Image facet specification
Header facet – Image facet specification

Key Value Facet

You can use the key value facet to highlight important data or KPIs.

A key value facet contains:

  1. Title (mandatory)
  2. Text or number in a larger font size

If the key value facet is used with a text, such as a status, you can also display an icon to the right of the text. This icon must only be used as a visual cue for the text it relates to, and not to add more information.

Developer Hint
For non-SAP Fiori element object pages only:

Larger value texts are now possible following the introduction of new properties for the object status and object number.

Header facet – Key value facets with KPIs and a status
Header facet – Key value facets with KPIs and a status

Micro Chart Facet

A micro chart facet consists of:

  1. Title (mandatory)
  2. Subtitle (optional)
  3. Micro chart (mandatory)
  4. Footer text (optional)

To display the unit used in the micro chart, use the footer.

The following micro charts can be used in the micro chart facet:

The micro chart facet can have a click event on the chart itself. This can lead to a page with a bigger chart or open a quick view, for example.

For more information, see Micro Charts.

Header facet – Micro chart facets
Header facet – Micro chart facets

Progress Indicator Facet

A progress indicator facet consists of:

  1. Title (mandatory)
  2. Subtitle (optional)
  3. Progress indicator
  4. Footer text (optional)

For more information, see Progress Indicator.

Header facet - Progress indicator facet
Header facet - Progress indicator facet

Rating Indicator Facet

You can use the rating indicator facet to display a single rating value or an aggregated rating (such as an average rating for a product). The facet structure is slightly different in each case.

Single rating value:

The single rating consists of:

  1. Title (mandatory)
  2. Subtitle (optional): Displays supplementary texts
  3. Rating indicator
Rating indicator facet - Single rating
Rating indicator facet - Single rating

Aggregated rating:

The aggregated rating consists of:

  1. Title (mandatory)
  2. Subtitle (optional): Indicates the amount of data being aggregated.
  3. Rating indicator
  4. Footer text (mandatory): Displays the exact aggregation value. Use the format “<average rating> out of <maximum rating>”. For the average rating, use the exact value with one decimal place.
Rating indicator facet - Aggregated rating
Rating indicator facet - Aggregated rating
Guidelines
We recommend the following property settings when using the rating indicator in header facets:

  • Show 5 symbols as the default.
  • Use the Favorite icon as the symbol.
  • Display half-stars to represent decimal values.

Navigation Bar

You can only have several sections in the object page layout and there are two ways to structure it:

Anchor Bar Navigation

The anchor bar is the default navigation control for the object page. It consists of a series of anchor links, which are arranged horizontally at the top of the page. The anchors represent sections or subsections of the page. Clicking a link makes the screen scroll to the corresponding section of the page and the anchor bar remains visible.

Use tab bar navigation if your page covers different topics that each have complex content, such as long tables or lists.

Object page – Anchor bar navigation
Object page – Anchor bar navigation
  1. Active anchor
  2. Inactive anchor
  3. Subsection dropdown
  4. Subsection
  5. Subsection dropdown indicator
  6. Overflow carousel button
  7. Overflow menu button
  8. Overflow menu dropdown
  9. Section (hover) in overflow menu
  10. Section in overflow menu
  11. Subsection in overflow menu
Developer Hint
Make sure that the UpperCaseAnchorBar property is disabled and that you enter the anchor bar labels in title case (for example: Contact Information).

Overflow

If there are more anchors than the screen can accommodate, the remaining anchors move into an overflow menu. The overflow button on the right of the navigation bar () opens a hierarchical dropdown list of all sections and subsections. When the user scrolls down the page, the anchor links scroll horizontally to ensure that the active anchor is always visible.

You might also see a small right arrow on the anchor bar. This arrow allows you to scroll horizontally to reveal any hidden content, and only appears when you hover over the overflow menu. In the meantime, this arrow has been replaced by the overflow menu button, but is still supported technically for legacy reasons.

Responsiveness

On small screens, the anchor bar becomes a dropdown list. The text field of the dropdown list shows the section currently selected. Clicking the dropdown menu opens a hierarchical list with all the sections and subsections of the page.

Behavior and Interaction

Click / Select: Action:
Anchor link Scrolls page directly to the content of the selected section (not to the title).
Arrow next to section anchor with several subsections Opens the submenu.
Item in the overflow list Scrolls the page to the content of the respective section or subsection (not to the title).
Keyboard left and right arrows Move between anchor links.
Fade area to the left or right of the anchor bar Causes an overflow arrow button to appear (compact mode only). The overflow arrow button is always visible in cozy mode.
Overflow scroll button (right arrow) Scrolls the anchors horizontally to bring anchors that are hidden in the overflow into view.
Overflow menu button () Displays a hierarchical dropdown list with all the sections and subsections of the page.

Tab Bar Navigation

As an alternative to the anchor bar, you can also use the tab bar for navigation. The tab bar works in a similar way to the icon tab bar, but is not the same control. The tab bar navigation for the object page is a variant of the anchor bar, and is handled by the object page floorplan.

The tabs are a series of links arranged horizontally at the top of the page which link to subpages. Clicking a link displays the corresponding subpage below and the tabs remain visible.

Use tab bar navigation if your page covers different topics that each have complex content, such as long tables or lists.

Object page – Tab navigation
Object page – Tab navigation
  1. Anchor/tab bar navigation
  2. First section
  3. Second section

If you set the tab bar property (useIconTabBar = “true”), the navigation bar displays tabs instead of anchors. The object page only supports text-only tabs; icon tabs and icon/text tabs are not available. The object page sections and subsections are reflected in the tab navigation: sections of the object page become the tabs, and subsections become the internal content of the tab. The tabs can have an item counter, which is displayed in parentheses next to the title of the tab.

On small screens, the tab bar uses the same horizontal carousel overflow pattern as the icon tab bar. This differs from the dropdown approach used for the anchor bar.

If the content of a section contains a control, for example a table, then we recommend to always display it, even if the control title and tab title are identical. This makes it easier for the user to orientate themselves.

Subnavigation

To make it easier to reach specific content on a long tab page, tabs can have subnavigation. Subnavigation is optional, but the default state is set to “true” and a dropdown arrow is shown next to the tab. Clicking on the dropdown arrow displays a dropdown menu with the subsection anchors for that tab. Applications can decide which tabs are enabled for anchor subnavigation by setting their property to “true”.

Content Area

The object page content consists of sections and subsections arranged in a column layout.

Sections

Sections are containers for subsections. They provide the basic structure for navigation and are directly reflected in the navigation bar.

The first section doesn’t have a title.

All the following sections consist of:

  1. Title with item counter (counter is optional)
  2. Subsections

Sections cannot contain controls.

If a section contains only one subsection, the title of the subsection is used as the name of the section. In this case, there is no subsection submenu in the anchor bar.

Sections can only contain subsections, not content. Because of this, the object page only provides toolbars for local actions at the subsection level.

Subsections

Subsections are containers for actual content.

A subsection consists of:

  1. Title with item counter (counter is optional)
  2. Toolbar with actions (optional)
  3. Content
  4. Mixable related content (optional)
  5. Controls inside subsection (optional)

If the subsection contains a table or a chart and the title is the same, you have the option to hide the subsection title.

Subsection content is arranged according to the column layout approach for the respective screen size.

Subsections have a progressive disclosure mechanism to show and hide content. App developers can specify which content is shown initially, but the user can always choose to display everything by selecting the toggle button Show More / Show Less at the bottom right of the subsection.

Guidelines
If a section contains a control, like a table or a chart, and the title of the control is the same as the section title, then the section title can be hidden so that this title is only displayed once. This avoids unnecessary redundancies.

We recommend the same for subsection titles.

Responsiveness

The content blocks in a subsection display in a row. The width of the row depends on the column layout for the respective screen size. If there is not enough space to display a content block, it wraps to the line below.

Object page – Content responsiveness
Object page – Content responsiveness
Developer Hint
For non-SAP Fiori element object pages only:

The content of the dynamic page header, navigation bar, (sub)section titles, and subsections must be vertically aligned. To achieve this, apply the sapUxAPObjectPageSubSectionAlignContent CSS class to the content of the subsections and set the width property to “auto”.

Forms

Forms follow the standard layout of the object page:

  • Extra large: 4 columns / 6 columns
  • Large: 3 columns
  • Medium: 2 columns
  • Small: 1 column

Forms are located within subsections. They follow the column design of the object page, whereby each form group is arranged into a column. The title of the form is given by the subsection header. To improve access to the different forms we recommend always using one subsection per form, rather than placing multiple forms into one subsection.

If you need to perform any actions, you can use the subsection header. If you need action at group level, you can use a group header. To prevent confusion, we recommend inserting actions only in one place, depending on the use case.

Use top-aligned labels for form fields. Top-aligned labels are known to reduce completion times and are the best approach for forms requiring localization or long labels. Using top-aligned labels also avoids issues with the spacing between the label and form field, which can occur with left- and right-aligned labels.

If you are using the object page without object page blocks, you can use the column layout for forms, which automatically distributes form groups across the columns in the object page.

You can enable users to show and hide forms, groups or label-value field pairs using the Show More / Show Less toggle button.

SAP Fiori elements provide an option to show or hide fields on small screen devices based on their importance.

Developer Hint
You can set the importance of a field using the UI.Importance annotation. Based on the annotation type ("High", "Medium", or "Low"), the fields are shown or hidden depending on the screen size. If you do not specify the UI.Importance annotation, the default is set to "High" and the field is shown on all device types.

Blocks

Layout blocks allow content to be aligned within the columns as follows:

  • Layout 1: Occupies the maximum available horizontal space of one column.
  • Layout 2: Occupies the horizontal space of only two columns. If there is only one column available, it occupies one column.
  • Layout 3: Occupies the horizontal space of three columns. If there is only one column available, it occupies one column. If there are only two columns available, it occupies two columns.

To show and hide blocks, you can use a Show More / Show Less toggle button. Do not use the panel container in the object page content area.

Object page – Block base
Object page – Block base

Tables

When a section or subsection contains one table and no other content, remove the redundant table title so the section or subsection title serves as the table title. In the subsection, also reduce the vertical space.

Grid tables in sections must have at least 4 rows, and the maximum number of rows visible will depend on the window size. To prevent any need for the user to scroll to access the horizontal scrollbar, keep the table within the screen size limitations. This may not be possible in all use cases, for example, if the table contains a large data volume, then you must use two scrollbars.

In an object page with anchor bars, use no more than 4 grid tables to prevent cognitive overload. (Consider using different sections between multiple tables to ease the burden, except for table comparison use cases.) To include more than 4 grid tables, place them in individual tabs.

To embed analytical tables or tree tables in an object page, use an object page with tabs and place each table in its own tab. If you are using a scrollable object page without tabs, use responsive or grid tables instead, and offer navigation to another page with the respective table type.

Depending on the number of table items, use one of the following loading behaviors:

Number of Table Items: Use:
Up to 20 Items can be displayed right away
Up to 100 Lazy loading
More than 50-100 but less than 200 Tab navigation
More than 200 or tab approach is unsuitable Navigation to another page

If a table is expected to have more than 20 items, use one of the 3 options below for long tables.

For all three options, we recommend providing a search, and if feasible, sort and filtering for the table in the object page. Avoid grouping.

1. Lazy Loading Behavior (“More” button)

If you expect up to 100 items, use the More button of the responsive table. The initial number of items shown depends on the height of the rows. We recommend initially showing 10 items, but not more than 20. If there is more than one table in the object page, only use this option for tables with up to 50 expected items.

2. Tab Navigation

If you expect to have more than 50 to 100 items, but fewer than 200, using the object page with tab navigation instead of anchor navigation also solves the problems associated with long tables. To enable the scroll-to-load behavior, the table must be the only or last element within a tab.

3. Navigation to Another Page

For tables with more than 200 items, or when the tab approach is unsuitable, restrict the size of the table in the object page to a reasonable number of items. We recommend showing a preview of only 10 items, but not more than 20. This can be achieved using predefined filters and/or by sorting the table. If necessary, you can also set a fixed number of items (such as the top 10). To enable the user to work with the entire table, offer navigation to a separate page, such as a list report, subobject page, or dynamic page with the respective table type. To do this, place a right-aligned link below the table with the label Show All (x), where x represents the total number of items in the table.

Table with navigation to a separate list report
Table with navigation to a separate list report

Representation of Child Pages

In object pages with drilldown navigation, child pages are represented in two ways:

  • Breadcrumbs: A breadcrumb is displayed above the object title. Limit the breadcrumb to the drilldown levels within the object page.
  • Paging buttons: Up and down arrows in the layout action area allow the user to navigate between subitems without going back to the original list.

Footer Toolbar

The footer toolbar is used for closing and finalizing actions in:

  • Edit and create mode, for example, Save, Post, Accept, Reject, and Activate
  • Display mode, for example, Approve, Accept, and Reject 

Behavior and Interaction

The basic layout of the object page in terms of header, navigation, and content remains the same in all modes (display, edit, create).

Initial Focus

When the object page is loaded, set the initial focus as follows:

  • If the object page is in display mode, set the focus on the first section.
  • If the object page is in edit mode, set the focus on the first empty mandatory field.
  • If there are no mandatory fields, set the focus on the first editable element or first action.

Edit

The object page can contain a mixture of editable and read-only content.

Use the same content layout for both display and edit mode – content should not change location when the user switches between display and edit modes.

For global and local editing guidelines, see Object Handling (Create, Edit, Delete).

There are two ways of editing header content depending on whether you’re implementing Global Edit or Partial Edit, both of which are explained below.

Editing header content in Global Edit mode

Developer Hint

The temporary “Header” section described below which allows user to edit header content comes out of the box in Fiori elements, but it does not come out of the box for freestyle applications – it needs to be implemented manually.

Because the header snaps on scroll, there are no editable forms in the header itself, so if you’re dealing with editable header content, a temporary “Header” section is generated above all the other sections of the page where the header content can be edited. The same principle applies if your object page only has one section and there is editable content in the header, except a temporary navigation bar should be generated as well. Any changes made to the header are not reflected until the user saves them.

When there is editable content in the header, the title bar information and all editable fields from the header container move from the header to the temporary “Header” section and non-editable content displays as read-only. You can leave out header content that doesn’t make sense in edit mode (for example, aggregated values that are calculated from several sources, KPIs, or micro charts). If only a few fields in the header are editable, and they match an existing section, they are moved to that section. In this case, no editable header section appears. The header container in edit mode can also contain independent facets that are not included in the header content in display mode which provide information to assist editing.

Please note, the temporary “Header” section for editing header content doesn’t come out of the box for freestyle applications – it needs to be implemented manually, so it’s sometimes better to avoid having editable header content and move it into object page sections instead.

Editing header content in Partial Edit mode

The user can edit the header content separately by pressing the Edit Header button.

If there are only a few elements to edit, the partial edit triggers a dialog.

If there are too many elements to fit in a dialog, the partial edit triggers a subpage. The subpage contains all editable information from the header. However, it differs from the “Header” section in global edit mode in that it has no action buttons in the toolbar, no navigation, and no breadcrumbs.

Create and Edit Subobjects

The following options are available for creating or editing subobjects:

  • Navigation to a subobject page
  • Inline create or inline edit in a table
  • Dialog containing the fields of the object

To enable users to create subobjects inline, offer an Add or Create button on the table toolbar. Clicking the button creates a row at the top of the table. Pressing Ctrl+Enter has the same effect.

If the subobject has less than 8 fields, use a dialog or the inline create/edit option (no separate page for the subobject). Exceptions can apply if additional content for the subobject is available but not part of the edit process, or if other apps need to offer deep links to the subobject page.

Edit Actions in Display Mode (freestyle apps only)

The standard flow is to switch to edit mode for edit and delete actions. However, in some cases, it can be helpful to offer certain edit actions in display mode as well.

You can offer edit actions in display mode if:

  • Switching to edit mode would inconvenience the user. This is especially true if the change is small and quick, and switching to edit mode would take longer than making the change.
  • The change does not impact a critical flow or result in technical inconsistencies.

Examples: Adding a comment, uploading a file

Do not offer edit actions in display mode if:

  • The change has a critical impact on business data/follow-on processes.
  • The change requires a finalizing action.

Example: Deleting a sales order item would affect the entire sales order and dependent data.

When offering delete actions in display mode, always show a delete confirmation dialog. For more information, see:

Unsaved Changes

If draft handling has been implemented, documents are automatically saved as draft versions in the background. An editing icon to the right of the object title indicates that a draft version exists. In other words, either the current user or another user has made changes, but not yet actively saved the document (“unsaved changes”). Do not show the editing icon for unsaved changes if draft handling is not supported.

Selecting the editing icon invokes a popover with more information about the unsaved changes. This normally states:

  • Who made the changes
  • When the last changes were made

The popover closes when the user clicks outside the popover or clicks the  (Close) icon.

Unsaved changes popover
Unsaved changes popover

Create

Create mode is similar to edit mode, except that the user creates a new object and defines a title for it. Until the new object title is known, display the placeholder text “New ” (for example, New Purchase Order). Replace the placeholder text with the actual name or ID of the new object as soon as this has been entered or generated.

Consider using the wizard floorplan instead of the object page floorpan if:

  • You need to guide the user through a series of steps when a new object is created.
  • You need a progressive disclosure approach for the creation process.
  • The creation process is not linear, but can have different paths, depending on the information selected.
  • The user is not familiar with the creation task.

Loading Behaviour

The object page loads in a “growing” mode. This means that the object page loads section by section to show users some content before the whole page is loaded. Scrolling down the page triggers loading for the sections below. Hidden items in sections are only loaded (and rendered) by clicking the Show More button for the section.

If loading takes a long time, a busy indicator is shown on top of the section or item until the content is loaded and visible.

SAP Fiori elements uses a skeleton template with generic placeholders. For more information, see Placeholder Loading.

Busy indicators for sections still loading
Busy indicators for sections still loading

Message Handling

In Display Mode

The following controls can provide messages to users in the object page in display mode:

  1. Generic tag
  2. Message strip
  3. Object status

Generic Tag

The generic tag displays KPIs and situations.

Message Strip

You can place a message strip in the header or in a section in the content area:

Object page with different messaging options
Object page with different messaging options
  • Header:
    Show the message strip in the header if the information relates to the whole object.

Place the message strip between the object page title and the header content. When the header is collapsed, it remains visible.

  • Content area section:
    Show the message strip in the content area section if the information relates to a specific section.

Place the message strip at the top of the section above the section title.

Use a single message strip with a single message per area. Do not stack several message strips together.

A message strip can display:

  • A call to action, such as a task that the user must perform
  • Temporary information that the user needs to know
  • An issue that is not related to a form field
  • The object status if the object status control is too small to convey the information.

For a brief status text, use the object status control.

If you decide to display both the message strip and the object status control, they should not repeat the same information.

  • Brief guidance on how to use or read the page.

If the object page requires multiple hints for the user, consider using SAP Companion instead.

Object Status

The object status displays a brief description of the object status.

Object page with message strip and collapsed header
Object page with message strip and collapsed header
Object page with message strip in a section
Object page with message strip in a section

In Edit Mode

In edit mode, use the message popover to help validate forms and tables as a single object.

Responsiveness

The object page floorplan is responsive and supports all SAP FIori screen sizes: small (S), medium (M), large (L), and extra large (XL). The layout for size XL contains four columns.

Object page – Size S
Object page – Size S
Object page – Size L
Object page – Size L
Object page - Size XL
Object page - Size XL

The default layout for size L (desktop) contains three columns. If you want to display two content elements that require an equal amount of space, you can also use an optional two-column layout (for example, two tables next to each other). Do not use the two-column layout with forms.

Object page layout – Size L
Object page layout – Size L

The layout for size M (tablet) contains two columns.

Object page layout – Size M
Object page layout – Size M

The layout for size S (smartphone) contains one column.

Object page layout – Size S
Object page layout – Size S

Guidelines

Dynamic Page Header

Use the header to set the context. Ensure that it is clearly structured and contains only essential information. Too much information impedes the main purpose of providing clear context.

Developer Hint
How to achieve a small header:

  • The header container is always optional. If there is no important data to be displayed, you can omit it. In this case, only the header title bar is shown.
  • Omit the image if it is not necessary. It is generally the tallest element in a header container.
  • Use a light theme to reduce the emphasis on the header if it doesn’t contain much information.
  • Consider moving information from the header into a general information section.

Actions

Arrange the actions in the header toolbar with care, and consider what matters most to the user:

  • Highlight actions that are common or most important.
  • Differentiate between secondary and generic actions.
  • Use either a text button or an icon for an action, but not both.
  • Use icons only for generic actions (such as  for Share). For all business actions, use text buttons.
  • Place the most important actions on the left (actions go into the overflow from right to left).
  • Establish a coherent visual approach.

For more information, see Action Placement.

Image Facet

If you intend to use images in the object header, consider the following:

  • How will the user manage the images?
  • How will the system block people without permission from editing images?
  • How will these images be reflected in other floorplans if they are part of the object?
  • If there are a large number of items, how would a user be able to manage images without having to navigate from page to page?
  • Will the organization be able to manage the images?

Tab Navigation

If you have a complex object page, use the tab navigation approach. This can be useful when a complex object page has performance issues in a flat view, or in response to a specific user preference.

Content Area

  • Avoid using the object page as a universal container for masses of information. Use the object page in accordance with the SAP Fiori principles: role-based, coherent, simple, and adaptive.
  • Give your users quick and easy access to the information they need to complete their task(s). Use a progressive disclosure strategy to keep your interface clean. You can always provide additional information on request.
  • Only present your users with information that makes sense for their industry, role, activity, and task.

Dynamic Side Content

You can offer dynamic side content alongside the object page under the following conditions:

  • Use the side panel only for contextual content. Do not place finalizing or global actions in the side panel. This is because opening the side panel occupies the whole right side of the screen. There is no way to show it only below the header and anchor bar.
  • Do not place object information in the side panel. This information should always be in the content area of the object page.

Standard Naming Conventions

For all objects, follow the standard conventions for action buttons, the object name, and the title in the shell bar. For more information, see:

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Units of Measurement

This article describes the rules for units of measurement.

Guidelines

In general, use long text to display units of measurements, and do not use abbreviations, such as (ISO) codes.

Translate all units into the right language:

Developer Hint
Use the resource model provided by SAPUI5 to change properties based on the locale settings. (For example, to display “Stück” instead of “Pieces” when the application is used in Germany.)

Use short text for common units like currency, weight, and length.

Format the numbers according to the rules of the corresponding control:

Do
Use long text to display units
Use long text to display units
Don't
Do not use abbreviations for uncommon units
Do not use abbreviations for uncommon units

Object Number

Use the object number control where technically possible as it offers a small font for displaying the unit. It also allows the numbers to be displayed in bold, for example, to highlight values on a table row.

Price per Quantity

If you want to show a price alongside the corresponding quantity in one string, use “/” instead of text. This makes translation easier.

Do
Use a slash (/) for hyphenations
Use a slash (/) for hyphenations
Don't
Do not use long text
Do not use long text

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Formatting Data – Overview

SAP Fiori applications are often used in an international context, and therefore need to be designed to adapt to different locales. Consistent rules for data formatting and characteristic data styles make the apps easy to work with, while enabling users to solve seamless workflows with cross-border processes and communication.

Types

Formatters can be applied to different types of data. SAPUI5 provides formatting capabilities to format dates, time, numbers, and comma-separated lists. It is also important to consider general formatting rules when displaying units of measurement.

Dates

The SAPUI5 date formatter supports 5 different date formats based on international rules: short, medium, long, full, and relative.

For more information, see Formatting Dates.

Examples of date formatting
Examples of date formatting

Times

The time formatter supports 3 formats: short, medium, and long. The formatting depends on the locale defined in the browser settings.

For more information, see Formatting Time.

Examples of time formatting
Examples of time formatting

Numbers

The number format depends on the data type (integer, float, currency, or percentage) and the relevant length (short, standard, or long).

For more information, see Formatting Numbers.

Examples of number formatting
Examples of number formatting

Comma-Separated Lists

Comma-separated lists are typically used to show a series of values in a single line. The rendering of comma-separated lists depends on the locale.

Developer Hint
SAPUI5 provides a formatter for comma-separated lists.

Do not create comma-separated lists using hard-coded commas. The resulting format will be incorrect in some languages.

Comma-separated lists in different languages
Comma-separated lists in different languages

Units of Measurement

The formatting for units of measurement depends on the type of unit, the language, and the respective control.

For more information, see Units of Measurement.

Examples of units of measurement
Examples of units of measurement

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Handling Busy States

This article describes how to handle the busy state in SAP Fiori apps in general. You can set a busy indicator locally at control level (for example, on a page or for a button) using a busy state, or set it globally using the busy dialog. In SAP Fiori, the aim is to keep the blocking of UIs to a minimum, and to unblock areas where user interaction is possible. Because response time depends on available bandwidth and server performance, unblocking can take a second or more. In this case, we need to inform the user that the process is ongoing.

Usage

Busy indicators are used in the following areas:

  • Initial page loading
  • Dynamic fields and forms (asynchronous loading of fields based on user preselection)
  • Lazy loading of content, for example, in lists and tables
  • Searching and filtering, for example, lists, tables, and global searches
  • Primary actions such as Save, Update, and Delete
  • Deleting and updating lists or modifying tables
  • Partial loading of content

Setting the Busy State

The challenge here is to decide at what level and when the busy state needs to be set. The options are as follows:

  • Show the entire UI as busy (including SAP Fiori launchpad shell bar) using a busy dialog
  • Set a busy state at control level (for example, on a page or for a button)

To make the right decision, we first need to understand how a page or app is loaded.

The “Manage Products” example below uses a flexible column layout. We will also assume that the necessary data for labels, tables, and so on is loaded asynchronously, and that the mapping is done via binding.

The app is launched from a tile on the home page. The busy indicator is shown until the initial application data is available.

Busy indicator to indicate busy state on the home page
Busy indicator to indicate busy state on the home page

First, the UI description and metadata are loaded. This is the minimum for a basic functional UI. Until this data is available, the app UI needs to be blocked. In this case, we set the busy state from the flexible column layout control (sap.f.FlexibleColumnLayout).

Do not use the busy dialog to block the entire UI. Otherwise, this would also affect the shell bar, and the user would not be able to access shell features such as Sign Out or Search.

Busy state at app level
Busy state at app level

Once the metadata has been loaded, we can partially unblock the UI where it makes sense.

The busy state is set for the list column and the details area until the data has been loaded.

Separate busy states for list and detail areas
Separate busy states for list and detail areas

Once the data for the list area is available, the busy state is removed. Because the data for the details area is loaded asynchronously, its busy state is set separately.

List is visible, busy state for the details area
List is visible, busy state for the details area

Guidelines

  • Only use the busy dialog if you do not want to allow the user to use the shell, for example, to navigate to the home page. In some cases, long-running processes require the user to be informed about the result in order to continue, for example, to a second step.
  • If multiple busy indicators overlap, the SAPUI5 framework ensures that only the one at the uppermost level is shown.

  • Do not use the busy dialog for app or page loading. Set the busy state at app level.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Chart – Number and Time Format

All numbers and time information must comply with the user’s locale settings. For this purpose, you must use the following:

Numbers

All numbers must comply with the user’s locale setting. Numbers can be visible in the following areas:
  • Value axis
  • Plot area (value labels that are displayed close to the data points)
  • Popover
  • Tooltip
  • Value-based legend
  • Legend for the bubble size

Time

All dates and times must comply with the user’s locale setting. Dates and times can be visible in the following areas:

  • Time axis
  • Categorical axis (if you use standard categories for dates or times)
  • Popover
  • Tooltip

Developer Hint

In order to use UI5 formats in the chart, you must use the sap.viz.ui5.format.ChartFormatter. Just add the 2 lines:

  • var formatterInstance = sap.viz.ui5.format.ChartFormatter.getInstance();
  • sap.viz.ui5.api.env.Format.numericFormatter(formatterInstance);

The ChartFormatter comes with some predefined UI5 patterns listed in “sap.viz.ui5.format.ChartFormatter.DefaultPattern”. Therefore you can use them directly. They will be correctly localized.

Nevertheless, if you need a format pattern than is not in the list, you need to create your own pattern and register it by using registerCustomFormatter.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

  • No links.

Quick View

The quick view is similar to a popover, but has a predefined structure, a fixed set of UI elements, and automatic UI rendering.

Usage

Use the quick view if:

  • You want to display a concise overview of an object.
  • You want to display information about, for example, an employee or a company.
  • You can split your information into groups (for example, contact details and company information).

Do not use the quick view if:

  • You want to provide information in a way other than displaying it in groups.
  • You want to display complex information about an object.

Responsiveness

The quick view is based on the popover. It therefore inherits the same basic properties from it and provides the same responsiveness. For more information, see popover.

Layout

Generic Quick View

The figure on the right shows how the content is structured within the quick view. At the top of the content area, you can display an avatar next to the title and subtitle. Additionally, groups and fields are used to structure the information. When a field is empty, the “–” character shows.

You can use the fallbackIcon property to define a backup icon. This icon is displayed if the initial avatar can’t be loaded.

Example of a generic quick view
Example of a generic quick view

Quick View Examples

You can create your own quick view element or, as with the two examples below show, there are also basic structures for displaying employee and company information in a quick view.

Example: Employee quick view
Example: Employee quick view
Example: Company quick view
Example: Company quick view

Behavior and Interaction

The quick view is based on the popover. It therefore inherits the same basic properties from it and provides the same interaction. For more information, see popover.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Formatting Numbers

This article describes the international rules for number formats. The SAPUI5 number formatters will help you to comply with these rules.

Usage

Use number formatting if:

  • You need to display numbers based on the user’s locale settings.

Do not use number formatting if:

  • You need to display IDs.
  • You need to display telephone numbers.

Types

You can use four different data types for numbers: integerfloat, currency, and percentage. Each data type can be formatted using a short, standard, or long format.

Integer

Use integer if no decimal places are required.

Short

Integer numbers formatted using the short form are truncated after three digits. When you use the short form, the units are shown as an abbreviation, such as K (thousand), M (million), or B (billion).

Number to format: 1567

United States (US): 1.57K

Germany (DE): 1.567

China (CN): 1,567

India (IN): 1.57 हज़ार

Number to format: 1567000

United States (US): 1.57M

Germany (DE): 1,57 Mio.

China (CN): 157万

India (IN): 15.7 लाख

Number to format: 1567000000

United States (US): 1.57B

Germany (DE): 1,57 Mrd.

China (CN): 15.7亿

India (IN): 1.57 अ॰

Standard

In general, use standard format. When you use standard format, integer numbers are displayed in full.

Number to format: 10000000

United States (US): 10,000,000

Germany (DE): 10.000.000

China (CN): 10,000,000

India (IN): 1,00,00,000

Long

Integer numbers formatted using the long form are truncated after three digits. The units are shown as full text, such as thousand, million, and so on.

Number to format: 1567

United States (US): 1.57 thousand

Germany (DE): 1,57 Tausend

China (CN): 1,567

India (IN): 1.57 हज़ार

Number to format: 1567000

United States (US): 1.57 million

Germany (DE): 1,57 Millionen

China (CN): 157万

India (IN): 15.7 लाख

Number to format: 1567000000

United States (US): 1.57 billion

Germany (DE): 1,57 Milliarden

China (CN): 15.7亿

India (IN): 1.57 अरब

Float

If you want to show decimal places, use float. The decimal places beyond the defined number of digits are truncated. If the minimum number of decimal digits is not restricted, only the trailing zeros are truncated, which could lead to very large numbers.

Short

Float numbers using the short form are displayed entirely without truncation of the trailing zeros. The units are displayed as an abbreviation, such as K (thousands), M (million), or B (Billion).

Number to format: 1590.5

United States (US): 1.59K

Germany (DE): 1.590,5

China (CN): 1,590.5

India (IN): 1.59 हज़ार

Number to format: 1590000.5

United States (US): 1.59M

Germany (DE): 1,59 Mio.

China (CN): 159万

India (IN): 15.9 लाख

Number to format: 1590000000.5

United States (US): 1.59B

Germany (DE): 1,59 Mrd.

China (CN): 15.9亿

India (IN): 1.59 अ॰

Standard

In general, use the standard format. Numbers using the standard format are displayed in full.

Number to format: 1590000.99

United States (US): 1,590,000.99

Germany (DE): 1.590.000,99

China (CN): 1,590,000.99

India (IN): 15,90,000.99

Long

Use the long format to show units as full text, such as thousands, million, and so on.

Number to format: 1590.5

United States (US): 1.6 thousand

Germany (DE): 1,6 Tausend

China (CN): 1,590.5

India (IN): 1.6 हज़ार

Number to format: 1590000.5

United States (US): 1.6 million

Germany (DE): 1,6 Millionen

China (CN): 159万

India (IN): 16 लाख

Number to format: 1590000000.5

United States (US): 1.6 billion

Germany (DE): 1,6 Milliarden

China (CN): 16亿

India (IN): 1.6 अरब

Currency

If you want to show currencies, use the currency formatter. Most currencies have two decimal places, although some need three digits after the decimal point, such as the Tunisian dinar. The currency formatter takes this into account. Currency amounts are rounded down automatically.

Short format                   TND 150مليو

Standard format             TND 150,000,000.990

Long format                    TND 150 مليون

Short

Currency amounts that are greater than 1,000 and use the short format are abbreviated.

Number to format: 15000.99

United States (US): EUR 15.00K

Germany (DE): 15.000,99 EUR

China (CN): EUR 1.50万

India (IN): EUR 15.00 हज़ार

Number to format: 15000000.99

United States (US): EUR 15.00M

Germany (DE): 15,00 Mio. EUR

China (CN): EUR 1,500.00万

India (IN): EUR 1.50 क॰

Number to format: 15000000000.99

United States (US): EUR 15.00B

Germany (DE): 15,00 Mrd. EUR

China (CN): EUR 150.00亿

India (IN): EUR 15.00 अ॰

Standard

In general, use the standard format. Numbers using the standard format are displayed in full, including the decimal places.

Number to format: 15000000.99

United States (US): EUR 15,000,000.99

Germany (DE): 15.000.000,99 EUR

China (CN): EUR 15,000,000.99

India (IN): EUR 1,50,00,000.99

Long

Use the long format to show units as full text, such as thousand, million, and so on.

Number to format: 15000.99

United States (US): EUR 15.00 thousand

Germany (DE): 15,00 Tausend EUR

China (CN): EUR 1.50万

India (IN): EUR 15.00 हज़ा

Number to format: 15000000.99

United States (US): EUR 15.00 million

Germany (DE): 15,00 Millionen EUR

China (CN): EUR 1,500.00万

India (IN): EUR 1.50 करोड़

Number to format: 15000000000.99

United States (US): EUR 15.00 billion

Germany (DE): 15,00 Milliarden EUR

China (CN): EUR 150.00亿

India (IN): EUR 15.00 अरब

Percentage

If you want to show a percentage, use the percentage formatter.

Please note: Numbers formatted as a percentage are automatically multiplied by one hundred. This calculation is not shown in the following examples.

Short

Number to format: 246000%

United States (US): 246K%

Germany (DE): 246.000 %

China (CN): 246,000%

India (IN): 246 हज़ार%

Standard

Number to format: 246,000,000%

United States (US): 246,000%

Germany (DE): 246 Mio. %

China (CN): 2,460万%

India (IN): 24,600 लाख%

Long

Number to format: 246,000,000,000%

United States (US): 246B%

Germany (DE): 246 Mrd. %

China (CN): 2,460亿%

India (IN): 246 अ॰%

Guidelines

  • In general, use the standard format.
  • Follow the rules of the corresponding control to format the data appropriately. (For example, show 1.7M instead of 1,700,000 in the object list item.)
  • Use float numbers to prevent truncation of decimal places.
  • If you need to display amount fields without a value, leave them blank. Do not display a text as N/A.
  • Always use the correct format according to your language or locale setting to prevent confusion caused by incorrect formatting. (For example, “200,000” is interpreted as “two hundred thousand” in the United States, but “two hundred point zero” in Germany.)
  • If you need to display decimal numbers, use float and keep the number of digits after the decimal point to a minimum.
  • Use object numbers where possible, for example, to display amounts in forms and responsive tables.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Formatting Dates

This article describes the international rules for date formats. The SAPUI5 date formatters will help you to comply with these rules.

Usage

Use date formatting if:

  • You need to display dates based on the user’s locale settings.
  • The application is used in an international context.

Types

You can use five different types of date formats: short, mediumlongfull, and relative. The formatting and order of the values differ based on the locale settings that have been configured in the browser.

Information
The absolute date formats shown below are based on the Unicode Common Locale Data Repository (CLDR). Note that when the SAP Fiori app is running on an ABAP web application server, the “short” and “medium” CLDR patterns are replaced by the patterns defined for the user in the ABAP system.

Short Format

Dates in the short format are displayed as digits for the day, month, and year. Use the correct formatting to avoid errors.

English (US): 8/17/23

Spanish (ES): 17/8/23

Chinese (CN): 23/8/17

German (DE): 17.08.23

Medium Format

In general, you should opt to use the medium date format, which usually shows an abbreviation of the month as text.

English (US): Aug 17, 2023

Spanish (ES): 17 de ago. de 2023

Chinese (CN): 2023年8月17日

German (DE): 17.08.2023

Long Format

Use the long format if you need to display the full names of months. For some languages there may be no difference between the medium and long formats.

English (US): August 17, 2023

Spanish (ES): 17 de agosto de 2023

Chinese (CN): 2023年8月17日

German (DE): 17. August 2023

Full Format

If you need to display the day of the week, use the full date format.

English (US): Thursday, August 17, 2023

Spanish (ES): jueves, 17 de agosto de 2023

Chinese (CN): 2023年8月17日星期四

German (DE): Donnerstag, 17. August 2023

Relative Format

If it suits your use case, such as ongoing events within a period of six days, use the relative format. Relative dates are displayed as text, for example, today, 6 days, and so on.

The default range for relative dates is between -6 and 6 days relative to the current date.

English (US): 2 days ago, yesterday, today, tomorrow, in 2 days

Spanish (ES): hace dos días, ayer, hoy, mañana, dentro de 2 días

Chinese (CN): 2 天前,昨天,今天,明天,2 天后

German (DE): vor 2 Tagen, gestern, heute, morgen, in 2 Tagen

Guidelines

  • In general, use the medium date format.
  • Use the date picker control if dates have to be entered in an input field.

Object List Item and Object Header

Object list item and object header attributes should be formatted with the long type. If space is at a premium, for example, if attributes consist of a label and a date, use the short date format.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Formatting Time

This article describes the international rules for time formats. The SAPUI5 time formatters will help you to comply with these rules.

Usage

Use time formatting if:

  • You need to display time based on the user’s locale settings.

Types

You can use three different  types of time formats: short, medium, and long. The formatting and order of the values differ based on the locale settings that have been configured in the browser.

Short Format

In the short format, time is displayed to the user in hours and minutes only.

United States (US): 11:15 AM

Germany (DE): 11:15

China (CN): 上午11:15

Denmark (DK):  11.15

Medium Format

If you need to display the seconds, use the medium time format.

United States (US): 11:17:57 AM

Germany (DE): 11:17:57

China (CN): 上午11:17:57

Denmark (DK): 11.17.57

Long Format

If you need to display a time zone, use the long time format.

United States (US): 11:19:27 AM GMT+01:00

Germany (DE): 11:19:27 GMT+01:00

China (CN): GMT+01:00 上午11:19:27

Denmark (DK): 11.19.27 GMT+01:00

Guidelines

  • In general, use the short format.
  • In general, display information in the user’s timezone.
  • Show the timezone only if required by the use case (for example, to indicate the local arrival time of a cross-continental flight).
  • Use the correct time format according to your language or locale settings.
    If you have to display a time format as an object attribute, follow the formatting rules for the object header and object list item attribute.

Durations

If you need to display durations, show every number and unit of measurement according to the rules for units of measurement. (For example, use long text instead of ISO codes or abbreviations.)

Do
Use long text to display durations
Use long text to display durations
Don't
Do not use abbreviations when durations have to be displayed
Do not use abbreviations when durations have to be displayed

Time Intervals

If you need to display time intervals, use an en dash “–” (not a minus sign) as a delimiter between the times.

United States (US): 11:29 AM – 2:29 PM

Germany (DE): 11:29 – 14:29

China (CN): 上午11:29 – 下午2:29

Denmark (DK): 11.29 – 14.29

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Draft Handling

A draft is a temporary version of a business entity that has not yet been explicitly saved as an active version.

Drafts are used:

  • To keep unsaved changes if an editing activity is interrupted, allowing users to resume editing later.
  • To prevent data loss if an app terminates unexpectedly.
  • As a locking mechanism to prevent multiple users from editing the same object at the same time, and to make users aware when there are unsaved changes by another user.

When a user starts creating a new business entity or edits an existing one, a draft is created in parallel in the background to enable field validation and dynamic field control based on user interaction, and to provide default values for fields based on recent data entry. A draft can be validated for consistency and completeness at any time using the different message types and controls described in the message handling article.

While the user is modifying a business entity, the draft is saved every 20 seconds. Clicking the Save button is still necessary in order to incorporate the changes into an active business entity, which is called the saved version.

Draft popover
Draft popover

Information
In SAP Fiori elements, draft handling behaviour is only implemented for the global flow, which allows users to navigate between the main object page and sub-object pages in edit mode without explicitly saving their changes.

Responsiveness

Size S
Size S
Size M/L
Size M/L

Types

Draft Types

Drafts can differ in terms of their visibility to different users and the interactions allowed. SAP Fiori currently employs an exclusive draft scenario. In this type of scenario, one user is the owner of the draft. As long as a user is working on an object, the business entity remains locked for other users until the lock period expires. When the lock expires, other users can discard any unsaved changes and start editing.

Editing Status

In a draft context, we differentiate between the following editing statuses:

  • Saved version
    • If all mandatory fields have been filled, and the entries are consistent in the business context, the user can save. When a draft entity is saved, the changes are transferred to the saved version. After saving, the draft is deleted.
  • Draft
    • A user’s own draft is tagged as Draft. The editing status to filter for a user’s own drafts is called Own Draft.
  • Locked
    • If a user is editing a business entity, it is locked for other users. The object remains locked until the user has finished editing or until the locking time has passed. The editing status to filter for locked entities is called Locked by Another User.
  • Unsaved changes
    • If the locking time has expired, other users can see that there are unsaved changes by the person who edited the object The editing status to filter for unsaved entities by other users is called Unsaved Changes by Another User.

The sap.m.objectMarker was developed to express the technical status of an object. The user name cannot be represented with the object marker.

For more information about the sap.m.objectMarker, see the article on object display elements.

Behavior and Interaction

When a user creates a new business entity or edits an existing one, it remains in Draft state until the user saves it.

The following interaction flow shows how the draft concept helps users to create and edit new business entities.

Create and Edit

In a create scenario, drafts belong to a single user. No other user has access to the draft while the object is being created.

New business entities that have not been explicitly created (activated) are known as “create-drafts”.

In scenarios where the object entity does not have a name or ID, use the format New [entity| as a placeholder in tables, lists, or messages. If an ID or name is available, use this information instead.

In an edit scenario, when a user is actively editing an object, no other user has access to the edit mode of that object. In parallel, a draft is created, which is a deep copy of the business document. As soon as the user starts editing, the editing status of the object changes to Draft.

Saved versions of business entities that are edited by someone are known as “edit-drafts”.

The ist report reflects the information of the “edit-draft”. If the document is unchanged, the list report reflects the information of the saved version.

Draft/Saved Version Switch

When the user changes to edit mode, the main page no longer shows the Edit button. Instead, a draft/saved version switch is shown next to the title of the page that allows the user to switch between the draft version and the current saved version of the business entity.

Draft/saved version switch
Draft/saved version switch

Select Multiple Items – List in a List-Detail Layout

The user can select multiple items in the list as follows:

  • Display first or last item (default): Either the first or last (default) selected item remains visible in the details area. If the first or last selected item is a draft, show the object in edit mode and enable the Save and Discard buttons.
  • Display aggregate: The details area displays a summary of the selected items and offers some added value or functionality. If the selection includes a draft, use the data that is currently displayed in the draft, and not the last activated or saved data.

For more information about multiple selection of items, see the Mass Edit guideline.

List in a list-detail layout – Selecting multiple items
List in a list-detail layout – Selecting multiple items

Resume Editing

Once the user returns to the draft, the UI is displayed in edit mode and the user can resume editing. When the user exits the draft, the last modified status is auto-saved.

Resume editing
Resume editing

Save

If all mandatory fields have been filled and the entity has a consistent state independently and also within its business environment and business processes, users can incorporate the edits into an active business entity.

Saving an entity executes all necessary application logic and saves a consistent state. If errors occur that prevent the entity from being saved, users must first resolve these issues.

For more information, see messaging and form field validation.

If your use case requires further buttons apart from Save (for existing objects) or Create (for new objects), place them next to the Save or Create button. Examples might be Save and Next or Create and Next. For more information, see Manage Objects.

Saving a draft
Saving a draft

Save action – outdated draft

If the lock time expires due to a user’s inactivity, and another user starts editing in the meantime, display the following message:

Type: Error

Title: Error

Message text:

[Object] cannot be saved. A more recent version is available. Any changes you didn’t save were discarded.

Button: Close

Error message – Saving
Error message – Saving

Discard Draft

If the user makes changes and clicks the Discard button, display a popover (sap.m.Popover) to confirm that the draft should be deleted. The user must click outside the popover to close it.

If the user has not made any changes, the draft should be deleted, even if fields were already prefilled. To do so, use the CreatedAt and ChangedAt timestamps of the administrative data to check whether changes have been made to the draft entity.

Create-draft

For a create-draft, show the following message text:

Message text:

Discard this draft?

Button: Discard

 

When the user clicks Discard, display the following message:

Message text:

Draft discarded

Edit-draft

For an edit-draft, show the following message text:

Message text:

Discard all changes?

Button: Discard

 

When the user clicks Discard, display the following message:

Message text:
Changes discarded

Guidelines

When to Show Which Editing Status

When multiple users work on the same work list, there is always a chance that more than one user will try to edit the same object simultaneously. This can lead to important edits being lost when multiple users submit their changes without informing one another. Therefore, a draft for a business entity acts as an edit lock, which forces object information to be changed sequentially.

In an edit scenario, when a user actively edits an object, no other user has access to the edit mode of that object. In parallel, a draft is created, which is a deep copy of the business entity.

The object remains locked until the user has finished editing. When the user who is blocking the object has been idle for 30 minutes, the lock expires automatically. Other users can then take over editing, and the draft of the previous user is discarded.

This graphic shows how the draft locking concept works and when to display which message.

When to show which editing status
When to show which editing status

How to Display the Editing Status

In most controls the editing status is clickable and provides access to additional information related to the draft, such as when the draft was created or who the owner of a draft is. Clicking the status opens a responsive popover that displays all relevant information.

Controls That Display the Editing Status

Object list item, object header, and object page header

If an object has a certain editing status, use one of the status properties of the object list item or object header. Do not overwrite existing status properties. Instead, use an additional status line to ensure that no information gets overwritten.

If an object is locked, has unsaved changes or is in draft state, set the ShowMarkers property of the object list item or object header to true and use the sap.m.objectMarker.

(1) Split-screen layout - Object list item; object view; (2) object page
(1) Split-screen layout - Object list item; object view; (2) object page

Tables

If you need to indicate the editing status of a business entity in a responsive table, place a link below the key information. Use sapUiTinyMarginTop to align the information in a responsive table.

If you need to indicate the editing status of a business entity in a non-responsive table, such as an analytical table, tree table, or grid table, provide an extra column for that information and place a transparent button inside. Name the column header Editing Status. The column should be placed after the main information on the table.

The editing status has different visualisations, such as icon only, icon and text, or text-only. Choose the one that is the most appropriate. Draft should always be displayed as text-only.

(1) Responsive table ; (2) non-responsive table
(1) Responsive table ; (2) non-responsive table

Upload Set

The upload set control uses sap.m.objectMarker to display the editing status. The default behavior for the editing status is as follows:

On L/M size:

  • Locked and Unsaved Changes are displayed as icons and text, while Draft is displayed as text.

On S size:

  • Locked and Unsaved Changes are displayed as icons, while Draft is displayed as text.
Upload set - Attachments with the statuses 'Locked', 'Draft', and 'Unsaved Changes'
Upload set - Attachments with the statuses 'Locked', 'Draft', and 'Unsaved Changes'

Editing Status Popovers

Trigger

When the user clicks the editing status, a responsive popover appears and displays draft-related administrative information.

Popover trigger: (1) responsive table; (2) non-responsive table; (3) object page header
Popover trigger: (1) responsive table; (2) non-responsive table; (3) object page header

Types

When the user clicks the editing status, a popover will appear with information on who has locked an object or who has unsaved changes.

If the user’s name is not available or cannot be retrieved, replace the user’s actual name with “another user”.

The images show the different use cases.

Popovers - User name unknown
Popovers - User name unknown
Draft popover
Draft popover

Which Information Is Shown

If the user edits an entity, update the changed information immediately in the corresponding lists, such as the list report, worklist, or object list item. All other users will see the most recently saved version of the entity.

Graphic displaying which information is shown, for example in a worklist
Graphic displaying which information is shown, for example in a worklist

Bookmarking and Deep Linking

A page of an application that is not its entry page can be bookmarked or shared as a deep link. Ideally, the full UI state of the page will be retrieved. Technically this includes every part that is represented in the URL. For more information, see the article on deep linking.

Bookmarking an entity in active status

If a bookmark is called for an active entity for which no draft exists, open the entity in display mode.

If a bookmark is called for an active entity for which a draft exists, display a dialog asking the user whether he or she wants to resume editing or discard the draft.

The dialog contains the following information:

Type: Confirmation

Title: Resume Editing

Message text:

We saved a draft of your changes to [entity] on August 8, 2015 17:35.

Do you want to resume editing or discard the changes?

Buttons: Resume | Discard

If the user resumes editing via Resume, the last implicitly updated draft state will be displayed in edit mode. If the user clicks the Back button, the active entity will not be displayed. Instead, the previous entry before the user navigated to the active instance will be displayed. Navigation to the draft does not create an entry for back navigation.

If the user chooses Discard, show the original saved version in display mode and the following message informing the user that the draft was deleted:

Message text:

Changes discarded

Bookmarking an active entity
Bookmarking an active entity
Bookmarking an active entity with draft
Bookmarking an active entity with draft

Bookmarking a draft

If a bookmark is called for an entity that was bookmarked while in draft state, open the entity in edit mode.

If the bookmark relates to an entity that no longer exists due to an action that triggered its deletion, such as Save or Discard, or if it cannot be accessed, display an empty page.

Message text:

The [entity] is no longer available.
[App name as link]

If a user shares a link to an entity with another user, the other user will be taken to the display view of the entity. If a different user’s draft exists, the page shows the appropriate editing status, such as Locked by [user name].

Bookmarking a draft
Bookmarking a draft
Bookmarked draft no longer availalble
Bookmarked draft no longer availalble

Deep Linking

When one user navigates from one application to an entity in another application, and this entity has a draft created by that particular user, display a dialog asking whether the user wants to resume editing or discard the draft.

The dialog contains the following information:

Type: Confirmation

Title: Resume Editing

Message text:

We saved a draft of your changes to [entity] on August 8, 2015 17:35.

Do you want to resume editing or discard the changes?

Buttons: Resume | Discard

If the user resumes editing via Resume, the last implicitly updated draft state will be displayed in edit mode. If the user clicks the Back button, the active entity will not displayed. Instead, the previous entry before the user navigated to the active instance will be displayed. Consequently, navigation to the draft does not create an entry for back navigation.

If the user selects Discard, the page will show the original (active) document in display mode, and the following message informing the user that the draft was deleted:

Message text:

Changes discarded

Deep linking
Deep linking

Sorting, Filtering, and Grouping

Sorting

The table in a list report is sorted by a property defined either by the app (default sorting) or by the user, such as a key identifier, date, or status.
Draft entities are sorted by the same criteria. If the property is empty in the draft entity, the item appears at top. The table can also be sorted by Draft. In an ascending order, the entities that are in draft state or locked appear at the top. In a descending order, these items appear at the bottom.

Filtering

The table in a worklist is filtered by the properties defined by the app (by default) or by the user. Draft objects are filtered by the same criteria. If those properties are empty in the draft entity, the item will not match the criteria and will not be shown.

The table can also be filtered by Editing Status with the following values:

Editing Status Description
 All  Displays all entities
 Own Draft  Displays a user’s own draft only
Locked by Another User  Displays all entities that are currently in progress by someone
Unsaved Changes by Another User  Displays all entities with unsaved changes (lock expired, draft of someone is still available)
 Unchanged  Displays all entities that have no draft

Grouping

The table in a list report is grouped by the properties defined by the app (by default) or by the user. Draft entities are grouped accordingly. If the property is empty in the draft entity, this creates a group of its own, which appears at the top of the table.

Follow this guideline for empty properties:

[Filter criteria]: Not Defined

Actions and Messaging

The editing status of an entity also has implications for any actions the user executes:

  • Locked items can never be edited, updated, or deleted.
  • Update actions cannot be applied to a user’s own draft.
  • Users can delete their drafts and any objects for which the lock expired.

If your app offers mass actions with multiple selection, you may also need to consider potential conflicts – some actions may not be feasible if only some of the selected items can be processed. The sections below outline the different use cases and corresponding user messages.

Message Handling

We distinguish between edit, update, and delete actions:

  • Edit: Open an object in edit mode.
  • Update: Trigger changes to the latest active version, such as Post and Approve.
  • Delete: Remove from the database.
Editing Status/Action Edit Update Delete
Active Version (actively saved, no draft or unsaved changes exist) Editing allowed; no message Update allowed; no message Deletion allowed; warning
Locked (draft locked by another user) Never allow editing; error Never update; error Never delete; error
Draft (user’s own draft) Editing allowed; no message Use case-dependent Deletion allowed; warning
Unsaved Changes (draft by another user) Editing allowed; warning Update allowed; warning Deletion allowed; warning

Decision Dialog

The user has made some changes and attempts to navigate away from the object while in edit mode.

  • Type: Warning Message Box
  • Title: Warning
  • Message text: You’ve made changes to this object. What would you like to do?
  • Option 1: Save: Apply changes to the saved version.
  • Option 2: Keep Draft: Changes are only visible to you and have no effect on dependent processes and functions.
  • Option 3: Discard Draft: All changes will be lost.
  • Buttons: OK | Cancel

Decision dialog
Decision dialog

Message Patterns – Actions for a Single Item

Information
The message patterns below are intended to offer guidance on the information that your messages should include. The exact format will depend on the available messaging controls and infrastructure.

User attempts to DELETE …

… own draft/active item

Type: Warning

Title: Delete

Message text:

Delete [entity]?

Buttons: Delete | Cancel

Delete: Own draft/ active item
Delete: Own draft/ active item

a locked item

Type: Error

Title: Error

Message text:

User name known:

[entity] cannot be deleted. It is currently locked by:
[clickable user name]

User name unknown:

[entity] cannot be deleted. It is currently locked by another user.

Button: Close

Delete: Locked item
Delete: Locked item

an item with unsaved changes by another user

Type: Warning

Title: Delete

Message text:

User name known:

Another user edited this [entity] without saving the changes:
[clickable user name]

Delete anyway?

User name unknown:

Another user edited this [entity] without saving the changes. Delete anyway?

Buttons: Delete | Cancel

Delete: Item with unsaved changes by another user
Delete: Item with unsaved changes by another user

User attempts to EDIT …

… an item with unsaved changes by another user:

Type: Warning

Title: Warning

Message text:

User name known:

Another user edited this [entity] without saving the changes:[clickable user name]

If you take over, those changes will be lost.

User name unknown:

Another user edited this [entity] without saving the changes. If you take over, those changes will be lost.

Buttons: Edit | Cancel

Edit: Item with unsaved changes by another user
Edit: Item with unsaved changes by another user

… a locked item:

Type: Error

Title: Error

Message text:

User name known:

[entity] cannot be edited. It is currently locked by:
[clickable user name]

User name unknown:

[entity] cannot be edited. It is currently locked by another user.

Button: Close

Edit: Locked item
Edit: Locked item

User attempts to UPDATE …

… own draft 

Type: Error

Title: Error

Message text:

[entity] cannot be [action]. Save your changes to the [entity] first.

Button: Close

Update: Draft
Update: Draft

a locked item

Type: Error

Title: Error

Message text:

User name known:

[entity] cannot be [action]. It is currently locked by:
[clickable user name]

User name unknown:

[entity] cannot be [action]. It is currently locked by another user.

Button: Close

Update: Locked item
Update: Locked item

… an item with unsaved changes by another user

Type: Warning

Title: Warning

Message text:

User name known:

Another user edited this [entity] without saving the changes:
[clickable user name]

If you [action] this [entity], those changes will be lost.

User name unknown:

Another user edited this [entity] without saving the changes. If you [action] this [entity], those changes will be lost.

Buttons: [Action] | Cancel

Update: Item with unsaved changes by another user
Update: Item with unsaved changes by another user

Message Patterns – Actions for Multiple Items

Information
The message patterns below are intended to offer guidance on the information that your messages should include. The exact format will depend on the available messaging controls and infrastructure.

The following message patterns apply to multi selection cases. In case the user selects one item of one type show the entity name instead, e.g.

Locked items + 1 item with unsaved changes:

Message text:

2 of 3 sales orders are currently locked by other users and cannot be deleted.

Sales order 12345 has unsaved changes. Delete anyway?

 Buttons: Delete | Cancel

Locked items + 2 or more items with unsaved changes:

Message text:

2 of 4 sales orders are currently locked by other users and cannot be deleted.

2 sales orders have unsaved changes.

Do you still want to delete the sales orders with unsaved changes? 

Buttons: Delete | Cancel

User attempts to DELETE …

… active/draft items

Type: Warning

Title: Delete

Message text:

Delete the selected [entities]?

Buttons: Delete | Cancel

Delete: Active items
Delete: Active items

… locked items and active/draft items

Type: Warning

Title: Delete

Message text:

Short text:

X of Y [entities] are currently locked by other users and cannot be deleted.

Do you still want to delete the remaining n [entities]?

Long text:

Grouped list with entity information, e.g. ID and Description plus  information who locks  each item.

Buttons: Delete | Cancel

Delete: Locked and active/draft items
Delete: Locked and active/draft items
Delete: Locked and active/draft items - Details
Delete: Locked and active/draft items - Details

… locked items and items with unsaved changes

Type: Warning

Title: Delete

Message text:

Short text:

X of Y [entities] are currently locked by other users and cannot be deleted.

n [entities] have unsaved changes.

Do you still want to delete the [entities] with unsaved changes?

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item/ has unsaved changes.

Buttons: Delete | Cancel

Delete: Locked and unsaved changes
Delete: Locked and unsaved changes
Delete: Locked and unsaved changes - Details
Delete: Locked and unsaved changes - Details

… locked, unsaved changes and active/ draft items

Type: Warning

Title: Delete

Message text:

Short text:

X of Y [entities] are currently locked by other users and cannot be deleted.

Do you still want to delete the remaining n [entities]?

[checkbox] Also delete [entities] with unsaved changes

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item/ has unsaved changes.

Buttons: Delete | Cancel

Delete: Locked, unsaved changes and active/draft items
Delete: Locked, unsaved changes and active/draft items
Delete: Locked, unsaved changes and active/draft items - Details
Delete: Locked, unsaved changes and active/draft items - Details

… items with unsaved changes

Type: Warning

Title: Delete

Message text:

Short text:

Other users have edited the selected products without saving the changes.

Delete anyway?

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item/ has unsaved changes.

Buttons: Delete | Cancel

Delete: Items with unsaved changes by other users
Delete: Items with unsaved changes by other users
Delete: Items with unsaved changes by other users - Details
Delete: Items with unsaved changes by other users - Details

… items with unsaved changes and active/ draft items

Type: Warning

Title: Delete

Message text:

Short text:

X of Y [entities] are currently locked by other users and cannot be deleted.

n [entities] have unsaved changes.

Do you still want to delete the [entities] with unsaved changes?

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item/ has unsaved changes.

Buttons: Delete | Cancel

Delete: Unsaved changes and active/draft items
Delete: Unsaved changes and active/draft items
Delete: Unsaved changes and active/draft items - Details
Delete: Unsaved changes and active/draft items - Details

User attempts to UPDATE …

The following section does not show any example pictures. Please refer to the section before for examples.

… active items

Type: Confirmation

Title: [action] 

Message text:

[action] the selected [entities]?

Buttons: [action] | Cancel

… items with unsaved changes by other users and active items

Type: Warning

Title: Warning

Message text:

Short text:

Some of the [entities] you selected have been edited by other users, but not saved. These changes will be lost.

[checkbox] Also [action] [entities] with unsaved changes

Long text:

Grouped list with entity information, such as ID and description, as well as information on who has unsaved changes.

Buttons: [action] | Cancel

… user’s own draft and locked items

Type: Error

Title: Error

Message text:

Short text:

The selected [entities] cannot be [action]. They are currently locked, or exist as draft versions.

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item and user’s own draft.

Button: Close

… items with unsaved changes and locked items

Type: Warning

Title: Warning

Message text:

Short text:

X of Y [entities] cannot be [action]. They are currently locked, or exist as draft versions.

Do you still want to [action] the remaining n [entities]?

Long text:

Grouped list with entity information, such as ID and description, as well as information on who is locking each item.

Buttons: [action] | Cancel

… items with unsaved changes by other users, user’s own draft and locked items

Type: Warning

Title: Warning

Message text:

Short text:

X of Y [entities] cannot be [action]. They are currently locked, or exist as draft versions.

Do you still want to [action] the remaining n [entities]?

[checkbox] Also [action] [entities] with unsaved changes

Long text:

The following [entities] are currently locked by other users (n):
[entity]
Locked by: [clickable user name]

You have edited the following [entities] without saving the changes (n):[entity]
Save your changes before [action] the [entities].

The following [entities] have been edited by other users, but not saved (n):[entity]
Unsaved changes by: [clickable user name]

Buttons: [action] | Cancel

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Switch

The toggle switch mimics a physical switch. It allows users to set individual features (such as personalization or display settings) to either active or inactive.

Label, optional text, and switch
Label, optional text, and switch

Usage

Use the switch if:

  • You want to enable users to set something as active or inactive (for example, within a dialog).
  • You need to clearly show the mode or state of a setting.
  • The change takes immediate effect.

Do not use the switch if:

  • The user has to choose several options or perform extra steps for changes to become effective.
  • It’s not clear if the control is showing a state or an action. In this case, use a checkbox instead.

Types

There are three switch types: basic, semantic, and with optional text.

Basic Switch (Default)

The basic switch changes something to active or inactive. This is the default switch.

Default switch
Default switch

Semantic Switch

The semantic switch changes something to ‘positive’ or ‘negative’. An icon is displayed automatically for each semantic state and cannot be changed.

Semantic switch
Semantic switch

Switch with Optional Text

You can display a text (sap.m.text or sap.m.objectstatus) next to the switch to indicate what the ‘active’ and ‘inactive’ states mean in your specific use case. Keep the text succinct.

Position the text next to the switch:

  • Left of the switch in left-to-right writing systems
  • Right of the switch in right-to-left writing systems
Switch with optional text
Switch with optional text
Semantic switch with optional text
Semantic switch with optional text

On/Off Switch

Technically, the switch can also display 2-3 letters within the switch.

 This design is obsolete. To avoid localization issues, never use text inside a switch.

Don't
Switch containing text
Switch containing text

Behavior and Interaction

The control supports mouse, touch, keyboard and screen reader interaction.

The user can switch between two states: active or inactive. The state is changed by moving the toggle from one side to another or by clicking the empty side. The toggle then moves over.

Styles

Switches can have different states and markups, but are always ‘active’ or ‘inactive’. The control supports an enabled, hovered, and disabled state.

Enabled semantic switch
Enabled semantic switch
Hovered semantic switch
Hovered semantic switch
Disabled semantic switch
Disabled semantic switch

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Analytical Table (ALV)

An analytical table contains a set of data that is structured in rows and columns. It provides several powerful possibilities for working with the data, including advanced grouping and aggregations.

In contrast to other tables, the analytical data binding used by the analytical table allows an aggregated number to be shown automatically in a cell. This means that a number in such a summarized cell is a total sum of several lines in the database.

Usage

Use the analytical table (ALV) if:

  • The cell level and the spatial relationship between cells are more important than the line item. Examples include spreadsheet analyses and waterfall charts. Note that an analytical table is not fully responsive. It is only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
  • You have to work on more than 1,000 rows. In this case, the analytical table is easier to handle. In contrast to the responsive table, the architecture of the analytical table is optimized for handling large numbers of items. Note that an analytical table is not fully responsive. It is only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
  • Comparing items is a major use case. In this case, an analytical table might be more appropriate than a responsive table. In the analytical table, each cell contains only one data point. In contrast, the responsive table is more flexible regarding line items, including the ability to add more data points per cell and also the pop-in function. Both make comparisons more difficult. Note that an analytical table is not fully responsive. It is only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.

Do not use the analytical table (ALV) if:

  • You need a table. The responsive table is the default table in SAP Fiori. Additional use cases where you might need the responsive table include:
    • You need to provide a total sum for one column. You can also add totals to the responsive table.
    • The focus is on working on line items, not on cells. The responsive table is optimized for displaying complete items on all devices (such as purchase orders and purchase requisitions).
    • Selecting one or more items is a main use case and details are needed to choose the correct item.
    • Line items are independent of each other and no operation across columns is needed.
    • You want to have only one implementation for all devices.
  • The main use case is choosing one item from a very small number of items with no additional details. A select or combo box might be more appropriate.
  • The main use case is choosing one out of several items with only a few details per item. A list might be more appropriate. Examples include the list in a list-detail scenario or an attachment list. Pay attention to the layout of the list item to ensure that it has a pleasant appearance.
  • You cannot provide an analytical binding on the technical side. In this case, a grid table will do the work. However, please note that the grid table doesn’t provide grouping, aggregation options, and is not responsive.
  • Data needs to be structured in a hierarchical manner. In this case, a tree table might be more appropriate. Although the analytical table can have several grouping levels, it is not as flexible when nodes at several levels contain children. Note that neither the tree table nor the analytical table are responsive. You will need to take an adaptive approach by offering an additional UI for smartphones and tablets.
  • You need an overview of a large amount of data. In this case, use charts.
  • You just need it for layout reasons. In this case, use a layout container like HBox or VBox.
  • You need read-only or editable field-value pairs. Use a form instead. The analytical table is not optimized for form-like input navigation.

Responsiveness

The analytical table is available for desktops and tablets, but not in smartphone sizes. It supports touch interaction devices, but is not optimized for small screens. If you use an analytical table, you need to take an adaptive approach by offering an additional UI for smartphones.

You could create a fallback by using a responsive table. However, a completely different solution, such as showing charts in a read-only case, might be more suitable.

Analytical table (ALV) shown on a desktop
Analytical table (ALV) shown on a desktop
Analytical table (ALV) shown on a tablet
Analytical table (ALV) shown on a tablet

Components

An analytical table does not consist of other elements. However, it is common to use a toolbar above the analytical table.

The toolbar can contain entry points for the view settings dialog and the table personalization dialog or for the p13n dialog, as well as for view switches in the form of a segmented button, and buttons for Add, Edit, and other actions.

Behavior and Interaction

An analytical table is quite restricted in terms of its content, although it provides powerful features for working with the content.

Table Level

Scroll

An analytical table allows horizontal and vertical scrolling (sap.ui.table.AnalyticalTable, property: navigationMode, value: Scrollbar).

You can add any number of line items to the analytical table, which is known as “lazy loading”.

To prevent adverse side effects when scrolling vertically, all line items must have the same height (sap.ui.table.AnalyticalTable, property: rowHeight).

The analytical table is optimized to allow faster scrolling within the first 1000 items.

Scroll bar
Scroll bar

Select

Selection for an analytical table depends on the chosen selection mode. The following options are available:

No selection: Items cannot be selected. (property: selectionMode = None)

Analytical table without item selection
Analytical table without item selection

Single selection: One item in the analytical table can be selected. A row selector column is shown. (property: selectionMode = Single)

Analytical table with single selection
Analytical table with single selection
  • Multiple selection: One or more items can be selected. The analytical table provides a column with checkboxes on the left-hand side. Clicking a checkbox toggles the state of the corresponding row from deselected to selected and back. The Shift key can be used to select a range. For multiple selection, you can choose between two variants.
    • Multi-toggle mode (property: selectionMode = MultiToggle)
    • Multi-selection plug-in (sap.ui.table.plugins.MultiSelectionPlugin)

    These variants behave differently when the user selects more items than are currently loaded in the front end.

    Multi-toggle

    In multi-toggle mode, you can offer a Select All checkbox to the left of the column header (property: enableSelectAll). Selecting this checkbox selects or deselects all items that are currently loaded in the front end (keyboard: Ctrl+A). All other items are not selected/deselected. If the application data is stored in the back end, scrolling down further can reveal additional unselected items. The same can happen with range selections if not all items in the selected range have been loaded to the front end.

    Multi-selection plug-in

    If you use this plug-in instead of the multi-toggle selection mode, the behavior for range selection and Select All changes:

    • By default, a dedicated Deselect All button replaces the Select All checkbox. There is no default UI element for selecting all items.
    • You can set a limit for the number of items that can be selected (sap.ui.table.plugins.MultiSelectionPlugin, property: limit). This limit has the following effect:
      • The range that can be selected using the Shift key is limited to the specified number of items (default = 200). The table automatically scrolls back to the last selected item and a message can appear (sap.ui.table.plugins.MultiSelectionPlugin, property: enableNotification). Users can select more items by selecting additional ranges (the specified limit applies each time).
      • If the selection limit is set to 0, a Select All checkbox is shown. There is also no limit on the number of items that can be selected in a range. All selected items are loaded, which can lead to performance issues for large data sets. (Keyboard: Ctrl+A)
    • If selected items are not already available in the front end, they are loaded automatically by the plug-in and set as selected.
Information
When setting a limit for the number of items that can be selected, keep the following boundaries in mind:

  • The performance of your service: How many items can be loaded at once in a reasonable time? Does this also apply if an end-user shows all available columns?
  • The “minimum limit”: Internally, the analytcial table loads blocks of items as the user scrolls down. Because this block size (sap.ui.table.AnalyticalTable, property: threshold) is usually also based on the performance of the service, it should be safe to assume that the minimum selection limit is twice this size. In this case, loading the data would take as long as scrolling down and loading exactly one more block. Nevertheless, we recommend using larger limits if your service allows.

Analytical table with multiple selection
Analytical table with multiple selection
Using the multi-selection plug-in with a limit
Using the multi-selection plug-in with a limit

Selection Behavior

An item can be selected in different ways, depending on the configuration of the analytical table (sap.ui.table.Table, property: selectionBehavior):

  • Row: An item is selected by clicking the checkbox or the row. Use this option for multi-selection tables if clicking a row or a cell is not used for anything else.
  • RowSelector: An item is selected only by clicking the checkbox in the selector cell. Use this option if clicking the row (or a cell inside the row) is used for something else, such as navigation.
  • RowOnly: An item is selected only by clicking the row, and not using checkboxes in the selector cells. Use this for single-selection tables if clicking a row or a cell is not used for another purpose, such as navigation.

Compact, Cozy, and Condensed

Like all SAP Fiori controls, the analytical table is shown in compact mode on a desktop and in cozy mode on tablets.

For desktop devices, you can fit even more rows onto the screen by using the condensed mode together with the compact mode. This renders less white space for each item.

Note that the condensed content density must always be set in addition to the compact mode. Do not use the condensed mode on its own. Do not mix condensed with cozy. Doing so could lead to unpredictable or unwanted results, such as cozy-sized controls in condensed-sized containers, missing padding, and so on.

Note that neither compact mode nor condensed mode support touch interaction. Even on a desktop with a touch screen, users will have difficulty selecting rows or using controls inside the cells with their fingers.

For more information on cozy and compact modes, see content density.

 

 

 

 

Analytical table in compact mode
Analytical table in compact mode
Analytical table in condensed mode - More items on the same screen real estate
Analytical table in condensed mode - More items on the same screen real estate

Column Header

The column header provides the label for the corresponding column and access to the column header menu.

Columns are resized as follows:

  • Mouse interaction: The user drags the separator line between two columns (sap.ui.table.AnalyticalColumn, property: Resizable). Double-clicking the line optimizes the column according to the length of the data currently visible and the label of the column header (sap.ui.table.AnalyticalColumn, property: Autoresizable).
  • Touch interaction: The user clicks the column header to reveal two buttons: one to show the column header menu and one for resizing. The user drags the latter to resize the column.
  • Keyboard interaction: Users can increase the width of the focused column header with Shift+Right and decrease it with Shift+Left.

When the user resizes a column, the adaptation of the column width depends on how the column widths are set:

  • If column widths are set in pixel-based units (px, em, rem), the resized column is adapted and subsequent columns are moved accordingly. The width of all other columns is not affected.
    If all the columns together do not use up the full width of the table control, empty space is added. If all the columns together exceed the width of the table control, a scrollbar appears.
  • If all column widths are set as percentages or “auto”, resizing one column automatically resizes one or more other columns. Resizing can also affect the position of the resized column. This option utilizes the full width of the table and ensures that no white space is added. A scrollbar appears only if all or most of the columns become to narrow. To avoid the side effect of undersized columns, you can set a minimum width per column. However, this minimum width is only taken into account if columns are resized automatically. End users can still reduce the column width to below the defined minimum (sap.ui.table.Column, properties: width, minWidth).

Users can rearrange columns by dragging the column header to another position (sap.ui.table.AnalyticalTable, property: enableColumnReordering). Keyboard interaction: Ctrl+Left and Ctrl+Right move the focused column header one position in the corresponding direction.

Column header
Column header
Opening the column header menu on touch devices
Opening the column header menu on touch devices
Columns do not use up the available space
Columns do not use up the available space

Column Header Menu

For each column, a menu can contain the following menu items (sap.ui.table.AnalyticalColumnMenu, property: Visible):

  • Sort Ascending/Descending (sap.ui.table.AnalyticalColumn, property: showSortMenuEntries)
  • Free text filter (sap.ui.table.AnalyticalColumn, property: showFilterMenuEntries)
  • Group
  • Totals
  • Freeze from the first to the last specified column (sap.ui.table.AnalyticalTable, property: enableColumnFreeze)

For each column, the menu can be replaced by an app-specific menu.

Column header menu
Column header menu

Sort

The column header menu can provide two sort options (sap.ui.table.AnalyticalColumn, properties: sortProperty, showSortMenuEntry):

  • Sort Ascending
  • Sort Descending

The user selects one of these options to sort the corresponding column accordingly (sap.ui.table.AnalyticalColumn, properties: sorted, sortOrder, sortProperty).

Sort settings in column header menu
Sort settings in column header menu

Filter

The column header menu can provide a search field for entering free text (sap.ui.table.AnalyticalColumn, properties: filterProperty, showFilterMenuEntries).

If the user enters a term in the input field and triggers the search by pressing ENTER when the focus is on the filter input field, the analytical table is filtered by the corresponding column and value (sap.ui.table.AnalyticalTable, properties: filtered, filterProperty, filterValue, filterOperator, sap.ui.table.AnalyticalColumn, property: filterType).

Note that the filter may return zero results, in which case, the table might be empty.

General recommendations for filtering:

  • If filtering is a main use case, choose the filter bar or any other filtering UI over the built-in free text filter.
  • Only use the free text filter if filtering is a secondary use case and if the filter bar is too heavy.
Free text filter in column header menu
Free text filter in column header menu

Group

The column header menu can provide the option to group by this column (sap.ui.table.AnalyticalColumn, property: sortProperty).

One group collects all items with the same value within the corresponding column.

Group setting in column header menu
Group setting in column header menu

If line items are grouped in a column, every group is provided with a collapsible or expandable group header (sap.ui.table.AnalyticalColumn, property: grouped). The header text consists of the column name and the value for the corresponding group (sap.ui.table.AnalyticalColumn, property: groupHeaderFormatter). Several grouping levels are possible.

The corresponding column can be hidden to avoid duplicates (sap.ui.table.AnalyticalColumn, property: showIfGrouped). Exercise caution when using this option since hiding the column changes the table layout and may lead to confusion.

Group headers and the corresponding columns are shown – The relevant data is duplicated
Group headers and the corresponding columns are shown – The relevant data is duplicated
Group headers shown, the corresponding column hidden – No duplicates
Group headers shown, the corresponding column hidden – No duplicates

Aggregation

The column header menu can provide the option to show or hide aggregation totals for this column.

Intermediate aggregations are shown at group level for the corresponding columns if the group contains more than one line item (sap.ui.table.AnalyticalColumn, property: summed).

The overall aggregation is shown in a row at the bottom of the analytical table when the column contains values for a single unit of measure.

Overall aggregation for a single unit of measure
Overall aggregation for a single unit of measure

When the column contains values for more than one unit of measure, a Show Details link is displayed in a row at the bottom of the table, for example, when the column contains multiple currencies.

The Show Details link opens a popover that lists the totals for each unit of measure.

Overall aggregation for multiple units of measure via the 'Show Details' link
Overall aggregation for multiple units of measure via the 'Show Details' link

Freeze Columns

The column header menu can provide the option to freeze columns (sap.ui.table.AnalyticalTable, property: enableColumnFreeze). Selecting Freeze freezes all columns up to the one in which the operation was triggered (sap.ui.table.AnalyticalTable, property: fixedColumnCount).

When Freeze is triggered, the menu item changes to Unfreeze for the corresponding column.

Freeze setting in column header menu
Freeze setting in column header menu

Line Item Level

A line item contains a set of cells and provides options for selecting the item.

To prevent adverse side effects when scrolling vertically, all line items must have the same height.

(sap.ui.table.AnalyticalTable, property: rowHeight)

Line item
Line item

Drag and Drop

One or several items can be moved to other UI elements using drag and drop operations (sap.ui.table.AnalyticalTable, aggregation: dragDropConfig). While being dragged, the items are shown as ghost elements on the mouse cursor.

Drop targets can be on items, between items, or both (sap.ui.core.dnd.DropPosition). On a drop target, the mouse cursor changes to either a “copy”, “link”, “move”, or “none” cursor. “None” indicates that the dragged item cannot be dropped in the current position (sap.ui.core.dnd.DropEffect).

Drag and drop is only available on supporting browsers.

Drag and drop
Drag and drop
Whole item as drop target
Whole item as drop target

Cell Level

A cell provides one data point.

It can contain one of the following controls to display this data point:

While it is technically possible to also use other controls, doing so could lead to issues with alignment, condensed mode, screen reader support, and keyboard support.

If you use text, use only single-line text to keep the same row height. Truncate if necessary as this prevents adverse side effects when scrolling vertically (sap.m.Text, property: wrapping, value: false). Do not wrap.

Cell
Cell

Context Menu

You can attach a context menu (sap.m.Menu) to a table. The context menu gives users an alternative way to modify the focused elements by giving them access to context-specific functions.

When opened, the context menu gets the row and column context, except for special columns (such as the selection column) or special rows (like group headers). Context menus can be implemented for a specific table, row, or cell (not recommended for editable cells).

By default, the analytical table provides a context menu on the group headers (for example, Expand, Collapse, …). Otherwise, no default context menus are provided.

Context menus are opened by right-clicking (desktop), long press (mobile), the context menu key, or Shift+F10.

Be aware that using the context menu overrides the browser context menu, which can no longer be opened.

If a control inside a table is the “click target”, and the control also provides a context menu, the control context menu “wins”.

Analytical table with context menu
Analytical table with context menu

Guidelines

Data Density vs. Complexity

The analytical table can be used to display and work with large amounts of data. Unfortunately, the analytical table has a high data density and therefore conveys an immediate feeling of complexity.

Only show tables with a lot of data as a last resort. To make the data easier to read, you should instead try the following:

  • Break down the data into manageable chunks and allow the user to navigate or drill down between them.
  • Use charts with drilldown functionality until the amount of data is more manageable.

Try to avoid horizontal scrolling in the default delivery.

Try to minimize the number of columns, especially if there is a large number of rows.

Table Title

Implement the table title by using a title control in a toolbar.

Use a table title only if the title of the table is not indicated in the surrounding area.

Do not use a table title if it simply repeats text that is already above the table. For example:

  • A pricing conditions table is the only control on a tab labeled Pricing Conditions.
  • A section or subsection on an object page contains only one table.

Use a table title if you need the item count, table toolbar, or variant management. To avoid repeating text, feel free to use generic text as a table title, such as Items.
Exception: If the surrounding area contains the table title, and both the item count and toolbar can be added to the surrounding area, no additional table title is needed.
Example: An object page (sub-)section contains only one table. In this case, add the item count and the table toolbar to the (sub-)section header.

If you use a table title, show either a title for the table, with or without variant management, or an item count in the following format:

Items (2,534).

The item count in the table title includes all the visible items that a user can reach by scrolling or expanding groups. Group headers are not included.

Remove the item count in the table title if there are zero items.

Developer Hint
Assistive technologies (such as screen readers) use the title to create a hierarchical site map for faster navigation. In addition, screen readers use the title as the label for the table.

If you don’t use a title (for example, to avoid repetition), make sure that the table is connected to another meaningful on-screen text that can be used as a label for assistive technologies. You can do this using the method addAriaLabelledBy.

Selection

Single Selection

For single-selection list-detail scenarios within the flexible column layout, do not show an additional “navigated” indicator.

Multiple Selection

  • We strongly recommend using the multi-selection plug-in. This ensures that all items selected using Select All or as part of a range are included – even if some items were not initially loaded in the front end. This is not the case if you use the multi-toggle option.
  • Do not limit the range selection for the multi-selection plug-in unless you have to.
    • If the dataset is small and/or completely available in the front-end, set the limit property to 0 to enable the Select All option and allow users to select any range.
    • If you have a large dataset, set a limit on the number of selected items to avoid performance issues. Also bear in mind that some actions won’t be helpful if the dataset is too big (for example, a delete operation on 2 million database entries).
  • When setting a limit, also display the corresponding message when the user selects more items at once than the limit allows (sap.ui.table.plugins.MultiSelectionPlugin, property: enableNotification).
  • In multiple selection mode (multi toggle), do not show checkboxes in the first data column in the default delivery to avoid confusion.
Don't
Do not add checkboxes to the first column
Do not add checkboxes to the first column
  • Never disable the selection checkbox. If an action can’t be performed on a specific item, inform the user after the corresponding action has been triggered. For more information, see Enabling/Disabling Actions.

Loading Data

To indicate that the table is currently loading items, use the busy state (sap.ui.table.AnalyticalTable, property: busy). Do not show any items or text. As soon as the data is loaded, remove the busy state and show all items.

Errors and Warnings

To indicate that the table contains items with errors or warnings, show a message strip above the table. On the message strip, provide information about errors or warnings. When issues are solved or when new issues appear, update the message strip accordingly.

To indicate an error in a single row, see Item States below.

For details on displaying errors, warnings, and other messages, see Message Handling.

Developer Hint
The sap.m.plugins.DataStateIndicator displays a message strip above the table, which shows binding-related messages.
Table containing errors and warnings
Table containing errors and warnings

Columns – Best Practices

Minimize the number of columns. Avoid the need to scroll horizontally in the default delivery.

By default, the analytical table assigns the same width to each column. We recommend overwriting this default to provide optimal space for your content (sap.ui.table.AnalyticalColumn, property: width).

If you define the column width in pixels or rems, resizing a column affects only the width of this specific column. Reducing the size of the browser window results in a scrollbar. If the user resizes a column, and the total width of all columns exceeds the table width, a scrollbar appears. If the columns do not take up the full table width, white space appears to the right of the last column.

If you define the column width as a percentage, resizing one column affects the width of several or all columns. Reducing the size of the browser window truncates the texts. This ensures that the columns fill up all the available space. A scrollbar appears only if width of all the columns still exceeds the table width after the automatic width adjustments. To avoid the side effect of undersized columns, you can set a minimum width per column. However, this this minimum width is only taken into account if columns are automatically resized. End users can still reduce the column width to below the defined minimum (sap.ui.table.Column, properties: width, minWidth).

If you set the column width to “auto”, the behavior is the same as for “percentage”. However, unlike “percentage”, “auto” distributes the columns equally.

To decide on how to set the column width (pixel/rem/em vs. percent/auto), keep the following in mind:

  • For tables with only 2 to 3 columns, use pixel-based units. This ensures that the values in the columns are not spread over the whole screen on wide screens, which improves the readability of the line items.
  • For tables with many columns, where a horizontal scrollbar is usually needed, use pixel based units. This avoids unintended side effects when resizing columns.
  • For all other tables, use whatever fits your case better.

Be cautious when mixing columns with pixel-based and percentage-based widths. While this can be helpful in some cases, it can also cause even more side effects when resizing a column. If you are using percentage-based widths for one or more columns, consider not allowing end users to resize columns at all.

Optimize the column width for its initial visible content, including the column header texts. If this is not possible (for example, if showing the full texts would result in extremely wide columns), let the texts truncate. End users can change the width of the column to read the full text, as needed.

Maintain a constant column width and avoid adjusting it automatically when the content changes.

Always keep to one line of text. Do not wrap.

Don't
Don't truncate the initial visible content In the default delivery
Don't truncate the initial visible content In the default delivery
Don't
Never wrap texts
Never wrap texts

Column Headers – Best Practices

For each column, provide a label in the column header. In the default delivery, do not truncate the column header texts. Only let the text truncate if showing the full text would make the column too wide. Never wrap the text.

Content Alignment

For alignment of cell content, follow the guidelines below.

Left-align: text, IDs, phone numbers, URLs, passwords, and email addresses.

Left-alignment of text
Left-alignment of text

Right-align: numbers, except IDs, to ensure comparability of numbers and amounts.

Right-alignment of numbers
Right-alignment of numbers

Right-align amounts with currencies to the cell and align their respective decimal points.

This ensures that amounts with different currencies are shown correctly, regardless of whether the currencies have 0, 2, or 3 decimals.

For aligning to the decimal point, use the sap.ui.uinified.Currency control.

Alignment to the decimal point
Alignment to the decimal point

Right-align dates and times.

This ensures comparability for most formats and locales.

Right-alignment of dates
Right-alignment of dates

Left-align status information.

Left-align status information
Left-align status information

Center-align icons.

Left-align micro charts.

XS micro charts in condensed mode
XS micro charts in condensed mode

Content Formatting

Key Identifier

Use a bold label or an emphasized link as the key identifier of an item. In the default delivery, show the key identifier in the first column.

Emphasized link
Emphasized link

For strings with IDs, use one of the following:

  • Show the ID in a separate column. Use this format if users need to sort, group, or filter by both the string and the ID.
  • Show the ID in parentheses after the corresponding string. In this case, you must opt for one criterion for sorting, filtering, and grouping – either the string or the ID. This option is then used for all sort, filter and group actions and can’t be changed later by the user. Use this format only if users don’t need to sort, filter, and group by both the string and the ID.
Text and ID in two columns – Allows sorting, filtering, and grouping for both
Text and ID in two columns – Allows sorting, filtering, and grouping for both
If displayed as a link, use only the string as the link, not the ID
If displayed as a link, use only the string as the link, not the ID
Text and ID in one column – Sorting, filtering, and grouping are available for either the text or the ID, but not for both
Text and ID in one column – Sorting, filtering, and grouping are available for either the text or the ID, but not for both
If displayed as a link, use the whole text as the link
If displayed as a link, use the whole text as the link

Truncation

Avoid truncation of typical content in the default delivery (sap.ui.table.AnalyticalColumn, property: width). However, since the columns are resizable, do not worry too much if truncation occurs as columns can still be enlarged if necessary.

To prevent adverse side effects when scrolling vertically, all line items must also have the same height. If you need to decide between truncation and different row heights, choose truncation. Do not wrap.

Optimize column width for typical content, not all content
Optimize column width for typical content, not all content

Number of Links

Are there too many links? Use subtle links to avoid a wall of links. Standard links are also emphasized more if they are surrounded by subtle links.

For example, a financial table consists of several columns with summarized cells. A summarized cell shows the total sum of several database entries. Each sum should be a link to a report that shows details about which database entries produce the total sum. The line item identifier should also be a link that provides more detail about the line item itself. Use a standard or emphasized link for the item identifier, and subtle links for the summarized cells.

Emphasized links, links, subtle links, and text
Emphasized links, links, subtle links, and text

Missing Value

If there is no value for a cell, leave it blank. Do not display text as N/A.

Leave empty fields blank
Leave empty fields blank

Numbering Items

In terms of numbering items:

  • If the item number is more like an ID with regard to its description, use ID formatting as described above.
  • In all other cases, use a separate column for the item number.
Add a separate column for the item number
Add a separate column for the item number

Status

For status information, use semantic colors on the foreground elements.

For status information on text, use an object status.

Semantic colors on text
Semantic colors on text

Micro Charts

Use only the following micro charts: Bullet, comparison, stacked bar. When using micro charts, use them in size XS.

Micro charts in an analytical table
Micro charts in an analytical table

Empty Tables

Avoid empty analytical tables. If necessary, provide instructions on how to fill the analytical table with data (sap.ui.table.AnalyticalTable, properties: noDataText, showNoData).

Examples:

  • If a table is initially empty, provide at least a basic text:
    No items available.
    Overwrite this whenever a hint can be provided on how to fill the table with data.
  • If a table is used together with a filter bar (as in the list report), and is initially empty, use the following text:
    To start, set the relevant filters.
  • If a table is used together with a filter bar and the filter does not return results, use the following text:
    No data found. Try adjusting the filter settings.

Adapt the texts above if:

  • The standard text is not precise enough for your use case (for example, a search is also offered, or only the search is offered).
  • The standard text is misleading (for example, if the data is filled based on a list-detail pattern instead of filter settings).
Provide meaningful instructions
Provide meaningful instructions

Invalid State

To show an invalid state of the analytical table within the list report floorplan, show an overlay on the analytical table and the corresponding toolbar (sap.ui.table.AnalyticalTable, property: showOverlay). The overlay prevents user interactions.

Use this within the list report floorplan if filter settings have been changed but the analytical table has not yet been updated.

Analytical table with invalid data
Analytical table with invalid data

Item States

To show that an item has been modified, for example, within the global edit flow, add the string (Modified) in an additional column with the label Editing Status.

In the default delivery, add a column directly behind the key identifier.

A modified item
A modified item

To show that a modified item contains an error, for example, within the global edit flow, add the string Contains errors in the Editing Status column and highlight the row accordingly. This string replaces the Modified string. A row with errors should be highlighted in all use cases – for example when the field is visible in the row in edit mode.

A modified item with an error
A modified item with an error

To show that an item is locked, add a transparent-style button with the corresponding icon and the text Locked by [name] in the Editing Status column.

A locked item
A locked item

To show that an item is in draft state, add a transparent-style button with the text Draft in the Editing Status column.

Item in draft state
Item in draft state

Show only one state at a time.

Numbers and Units

Show the unit of measurement in one of the following ways:

The number and unit are in the same cell. Do this if sorting, filtering, or grouping by the unit of measurement are not needed.

For amounts, use a currency control to display the concatenated string.

Number and unit of measurement in one cell
Number and unit of measurement in one cell

The number and unit are in separate columns. Do this if sorting, filtering, or grouping by the unit of measurement are a common use case.

Note that this column can be hidden or moved independently of the column containing the corresponding number. Therefore, be sure to have clear labels for both columns to communicate the dependency.

Number and unit of measurement in two columns
Number and unit of measurement in two columns

If the unit of measurement is the same for all rows, show the unit of measurement in the column header. Otherwise, show the unit of measurement within the row.

Drag and Drop

Drag and drop is “invisible” on the UI: users can’t see where dragging is available and where it isn’t. In addition, there is no generic keyboard interaction. Drag and drop is also not available on all browsers. For these reasons, provide it only in addition to existing (and visible) UI elements that fulfill the same purpose. For example, offer (toolbar) buttons for moving or for copying and pasting items. These are keyboard operable and available on all browsers.

Use drag and drop only in addition to existing visible UI elements
Use drag and drop only in addition to existing visible UI elements

Do not use drag and drop for rearranging items in the analytical table. The analytical table is mainly used for grouping items and for calculating the totals per group and column. Moving items to another group also means that a value of the dropped item changes: because grouping is based on values in a column, the dropped item needs to take on the value of the target group for the corresponding column.

Example:
A table is grouped by availability. An item is moved from the group “Not Available” to the group “In Stock”. In this case, the moved item needs to change its availability to “In Stock” to match the target group. Because changing the value in this way doesn’t make sense, rearranging items is not permitted in analytical tables.

Don't
Do not use drag and drop for rearranging items in the analytical table
Do not use drag and drop for rearranging items in the analytical table

Context Menu

Use the context menu only to give users a quick way of accessing functions that are already available elsewhere (for example, as buttons in the toolbar). Don’t just offer actions in the context menu itself, as users might not realize that these actions are available at all.

The context menu can be triggered for the table, row, or cell. However, we do not recommend using context menus for cells: because the content of a cell is a different touch target than the cell itself, opening a cell context menu via touch is quite hard, even in cozy mode.

Do not combine context menus with condensed mode: editable controls fill the entire space inside a cell. Because of this, context menus cannot be opened at all with touch or mouse interaction.

Actions

Multiple Items

To trigger actions on multiple items, use a multiselection analytical table (sap.ui.table.AnalyticalTable, property: selectionMode, value: MultiToggle). Offer the corresponding actions in the table toolbar.

Do not offer action triggering on multiple items if the table is generally expected to have fewer than 10 items. In this case, try to use the responsive table instead of the analytical table.

Single Item

To trigger actions on a single item (sap.ui.table.AnalyticalTable, property: selectionMode, value: Single):

  • Show the actions on the table toolbar.
  • In rare cases, show the actions within the line item. One example would be an Add to Cart button in a shopping application. Since these actions are repeated in every line and thus use a lot of screen real estate, do this only for a maximum of one or two actions. Provide a separate column per action. Use a button, unless the action trigger belongs to a link. Hide the action in rows for which it is not applicable.

Single Cell

To trigger actions on a single cell, create the corresponding click event. Do not use the cell click event if the cell contains interactive controls, such as links.

To trigger navigation on line item level choose one of the following options:

  • Use a link for the attribute that identifies the row. Clicking the link triggers the navigation.
  • Add the RowActions column and show the navigation indicator (  ) at the end of the row. The navigation arrow triggers the navigation.

Special case: Multi-selection in a list-detail scenario
When a multi-selection table is used in a list-detail scenario, it is not clear which item was last opened (for example, which item is currently shown in the second column of a flexible column layout). In this case, you can display a “navigated” indicator to show which item is currently open.

Use the RowActions column only for one or both of the following actions:

  • Navigate to details page ( )
  • Delete ( )

The RowActions column does not provide a column header text. It is fixed and will not scroll away. Users also cannot personalize this column.

Navigate to details page
Navigate to details page

Single Cell

For triggering actions on a single cell, create the corresponding click event. Do not use the cell click event if the cell contains interactive controls, such as links.

Add Items

To let users add items, place an Add or Create text button on the table toolbar.

  • Use Create if the button adds a brand new item that doesn’t yet exist on the database.
  • Use Add if the item already exists and is merely added or assigned to the current object.

Show new items as the first item of the table, with a visual highlight at the beginning of the row.

Enable the shortcut Ctrl+Enter (and ideally also Enter) to trigger the Add or Create button.

There are three options for adding an item. In order of priority (most recommended first), these are:

  1. Add the item inline. Create an empty, editable row as the first item of the table. Show the Save button on the table toolbar. This option is recommended for simple scenarios with just a few columns and no option to hide columns.
  2. Open a dialog for larger tables with up to 8 editable columns. Save the new item at the dialog level.
  3. Navigate to a new page. Only use this option for very complex scenarios that cannot be handled by a dialog (for example, tables with more than 8 columns). When the user presses Save in the footer toolbar of the create page, navigate back to the table.

Depending on the flow, an item can be in one of three different states:

  • New: The item was just created inline and is in edit mode (for example, after pressing the Create button). It is highlighted with a visual indicator (information state).
  • Recent: The item was just created and is in read-only mode (for example, if Create leads to a dialog, and Save was triggered within the dialog). In this case, keep the item highlighted and display it as the first item in the table. Ignore current sort, filter and grouping criteria to keep the item visible.
  • Added: The item has been fully added. It follows the sort, filter, and grouping settings and also loses the visual highlight. This state is applied as follows:
    • Inline creation: After Save is triggered on the table toolbar or at page level.
    • Create with dialog: A table showing one or several items with the state “Recent” gets updated (for example, after sorting, filtering, or grouping, or when the browser is refreshed).

If draft handling is used, new items are not saved at table level, but rather with the entire draft.

For more details, see the guidelines for managing objects (including subarticles).

Editable Content

For editable content, only use the following controls, and only one control per cell:

Only these controls are optimized for all viewing modes of the analytical table.

If you need edit mode, change your text controls, such as label, text, link, object status, icons, and currencies, to editable controls as soon as you switch to edit mode, but not before. You can do this by exchanging the controls, for example, from sap.m.Text to sap.m.Input.

For mass editing items:

  • Provide multiselection.
  • Provide an Edit button.
  • If several items are selected, clicking the Edit button opens a dialog in which the user edits the corresponding fields for all selected items.

This is similar to mass editing in the split-screen layout floorplan.

Warning
Do not offer editing for summarized cells. A summarized cell shows the total sum of several database entries. Changing the total sum does not make sense since it is unclear how this sum is divided between the different database entries.
Interactive controls – Inline
Interactive controls – Inline

View Settings

There are several ways to show Sort, Filter, and/or Group settings:

  • Column header menu: In all cases, show the corresponding settings in the column header menu.
  • View settings dialog: Simple and more flexible with regard to filter settings. No advantage for sorting. Allows the user to ungroup grouped columns.tables with a medium amount of items.
  • Table personalization dialog: Provides complex options for sorting items by several levels and allows the user to ungroup grouped columns. It also provides a query-builder-like approach for filter settings. The complexity of the options is also its downside. Use the table personalization dialog for tables with a large number of items.
  • If filtering is a main use case, use the filter bar. In this case, avoid offering additional filter settings on the table. If you do, the filter settings on the table work only on the result set provided by the filter bar.

Always be careful when synchronizing the settings in the dialog with the settings from the column header menu.

Trigger the dialogs in one of the following ways:

  • View settings dialog: Provide several buttons, one for each of these view settings. Each button opens the view settings dialog on the corresponding page.
  • Table personalization dialog: Provide a settings button, which opens the table personalization dialog containing all pages.

Use only the view settings you really need. For example, do not offer grouping if it does not support your use case.

 

Column header menu with view settings
Column header menu with view settings
Table toolbar with triggers for view settings dialog
Table toolbar with triggers for view settings dialog
Table toolbar with trigger for table personalization dialog
Table toolbar with trigger for table personalization dialog

Persist the view settings. When a user reopens the app, show the analytical table with the same sort, filter, group, and aggregation settings as last defined by this user.

Sort

Always sort the table in a meaningful way when it first loads. In most cases, this means sorting by the column that identifies the row. This is usually the first column in the default delivery.

To display the current sort state, an icon is shown in the column header of the last sorted column. This icon indicates the sort direction (sap.ui.table.AnalyticalColumn, properties: sorted, sortOrder, sortProperty).

For the default sort setting, sort by the column that identifies the row, which is usually the first column in default delivery. Use a meaningful sort order, such as alphabetical order for text, numeric order for numbers, or chronological order for dates.

Column, sorted ascending
Column, sorted ascending
Column, sorted descending
Column, sorted descending

The descending sort order must always be the exact reverse of the ascending sort order.

For each column, provide a meaningful sort order. For example:

  • Sort text alphabetically
  • Sort numbers by their value
  • Sort status information by the severity of the status:
    • Ascending: Sort status information from positive to negative, with neutral last.
    • Descending: Sort status information from negative to positive, with neutral first.
Object status sorted ascending, with neutral status last
Object status sorted ascending, with neutral status last
Object status sorted descending, with neutral status first
Object status sorted descending, with neutral status first
    • Ascending with different values per severity level: Sort status information from positive to negative, with neutral last. Sort different values within a severity level (semantic color) alphabetically.
    • Descending with different values per severity level: Sort status information from negative to positive, with neutral first. Sort different values within a severity level (semantic color) alphabetically.
Object status sorted ascending and alphabetically, from positive to negative with neutral last
Object status sorted ascending and alphabetically, from positive to negative with neutral last
Object status sorted descending and alphabetically, from negative to positive with neutral first
Object status sorted descending and alphabetically, from negative to positive with neutral first

Filter

To display the current filter state, an icon is shown in the column header of the filtered column (sap.ui.table.AnalyticalColumn, properties: filtered, filterProperty, filterValue, filterOperator, defaultFilterOperator, filterType).

Column, filtered
Column, filtered

Group

To display the current group state, group headers are shown. Show the following text in the group header (sap.ui.table.AnalyticalColumn, properties: grouped, showIfGrouped, groupHeaderFormatter):

[Label of the grouped column]: [Grouping value]

If there is no grouping value, show the following text:
[Label of the grouped column]: (Not Available)

This is the case if you have a group of items that don’t have a value for the grouped column.

 

Set the property collapseRecursive to “false” to keep subgroups expanded even after collapsing and expanding the parent group.

Group headers, several levels
Group headers, several levels

On non-touch devices, right-clicking a group header opens the group header menu. On touch devices, the same menu is opened by using the menu icon on the right side of a group header.

The group header menu provides several options:

  • Show/Hide: Shows or hides the column in the table layout, although it is grouped.
  • Ungroup: When the user ungroups a column, the corresponding group headers disappear. If the column was hidden, it is shown again as a separate column.
  • Ungroup All: The columns are shown again.
  • Move Up: Rearranges the grouping levels hierarchy by moving the selected group above the group that is one level higher up in the hierarchy.
  • Move Down: Rearranges the grouping levels hierarchy by moving the selected group below the group that is one level lower down in the hierarchy.
  • Collapse Level: Collapses all groups on the corresponding grouping level.
  • Collapse All: All groups are collapsed.
Group header menu
Group header menu
Group header on touch devices
Group header on touch devices

In general:

  • Offer grouping on objects and attributes.
  • Do not offer grouping on measures.
  • If appropriate, offer reasonable grouping by default, but do not exaggerate. As a rule of thumb, use up to three group levels.
  • Provide more space for the first column. Grouping needs an indent per group level. Extra space in the first column prevents truncated text.

Aggregate

To display the current aggregation state, the total sum of the corresponding column is shown at the bottom of the table.

If items are grouped, an intermediate sum is shown:

  • At the bottom of each group if the group is expanded.
  • In the group header if the group is collapsed.

(sap.ui.table.AnalyticalColumn, property: summed)

When aggregating amounts with different units of measurement, show an asterisk (*) in the aggregation rows.

When sorting an aggregated column, only the leaf nodes of a group are included by default. If each measure column currently displays a single unit of measurement, the order of the groups can also be affected.

For example:
Let’s assume that table items are grouped by Country/Region and aggregated by Total Net Amount. If you sort the Total Net Amount column in descending order, the largest total net amount is shown first.

Warning
Only enable sorting by totals if each column has a single unit of measurement. This prevents inconsistencies in the sorting behavior, which depends on user settings, such as filter settings or the columns currently displayed.
Developer Hint
To allow sorting by totals, the following conditions must be met:

  1. For each measure column, multiple units must not occur in the displayed data, regardless of whether or not totals are shown.
  2. The autoExpandMode of the AnalyticalBinding must be set to Sequential. Note that the default is Bundled.

In general:

  • Offer aggregation on measures, but not on objects or attributes.
  • Avoid aggregations on the first three columns for the default delivery. As soon as grouping is used together with aggregations, collapsing a group shows the aggregation on the group header. This conflicts with the group name.
  • Where appropriate, offer reasonable aggregation by default.
Aggregation and groups
Aggregation and groups

Personalization

Only offer personalization if you need more columns than a tablet screen can display at any one time, which is usually five.

Persist the column layout. When a user reopens the app, show the analytical table with the same column layout settings as last defined by this user.

Add, Remove, and Rearrange Columns

To add, remove, or rearrange columns, use one of the following:

  • The table personalization dialog: It offers some simple settings for column layout. Use this if you have only a few columns to choose from and/or you use the view settings dialog.
  • The p13n dialog: Besides various complex view settings, it also provides settings for column layout. Use this if you have a large number of columns to choose from and/or you use this dialog anyway for view settings.

In both cases, trigger the dialog via the settings button in the table toolbar. As short cut, use CTRL+COMMA.

You can also use drag and drop to rearrange columns (sap.ui.table.Table, property: enableColumnReordering). If you allow rearranging via drag and drop as well as via a dialog, keep both places in sync.

Resize Columns

Resizing columns works differently on touch and non-touch devices.

  • Non-touch devices: Drag and drop the column separator on the right side of the column. Double-clicking the column separator optimizes the width of the column for the data currently loaded into the front end, which is usually about 100 rows.
  • Touch devices: Clicking the column header reveals two buttons: one for opening the column header menu, another one for resizing the column. Drag and drop this second button to resize the column.

Freeze Columns

For freezing columns, offer the setting in the column header menu (sap.ui.table.AnalyticalTable, property: enableColumnFreeze).

Selecting Freeze on a column freezes all columns from the first one to the one where Freeze is selected. On this column, the menu entry changes from Freeze to Unfreeze.

Frozen column
Frozen column

Highlight Items

To show that an item needs attention, you can display a highlight indicator in front of the item. The highlight indicator can be used to indicate:

  • A semantic state, such as red or orange for an error or warning. In this case, use semantic colors.
  • Additional information, such as blue to highlight newly added items. In this case, use semantic colors.
  • Industry-specific or process-specific states, such as “out of stock” or “excess of inventory”. In this case, use indication colors.

Be aware that the highlight is just an indication. It does not tell users exactly what is wrong. Make sure that you provide this information within the table row, ideally in the same color.

For details on the use of highlight colors, see How To Use Semantic Colors / Industry-Specific Colors.

(sap.ui.table.AnalyticalTable, aggregation: rowSettingsTemplate)

Highlighted items
Highlighted items

Tables in Object Pages

In the object page, you can use a responsive table or grid table and offer navigation to a list report with the previously mentioned tables. We advise using analytical and tree tables in tab mode.

For more information on the use of tables within the object page, see the Tables section of the Object Page article.

Export to Spreadsheet

On the table toolbar, apps can provide a menu button for exporting table data to a spreadsheet. For the export, use the export to spreadsheet function.

'Export to Spreadsheet' menu button
'Export to Spreadsheet' menu button

Properties

sap.ui.table.AnalyticalTable

The following additional properties are available for the analytical table:

  • The property: width defines the width of the analytical table.
  • The property: rowHeight defines the height of each row in the analytical table. Since the height required is calculated automatically by the analytical table, this property is only needed rarely.
  • The property: columnHeaderHeight defines the height of the column headers. Since the height required is calculated automatically by the analytical table, this property is only needed rarely.
  • The property: columnHeaderVisible can be used to hide the column headers. Always show the column headers.
  • The property: showColumnVisibilityMenu provides an additional entry in the column header menu that allows columns to be shown or hidden. In SAP Fiori, columns are shown and hidden via the table personalization dialog or via the table personalization dialog. Do not use this property.
  • The property: columnVisibilityMenuSorter is used for sorting the columns inside the column header menu if showing and hiding columns is provided in the menu. In SAP Fiori, columns are shown and hidden via the table personalization dialog or via the table personalization dialog. Do not use this property.
  • The property: visibleRowCount defines the height of the analytical table. Show as many rows as fit on the screen.
  • The property: visibleRowCountMode defines whether the height of the analytical table is fixed or automatically calculated based on the space provided by the underlying container. For automatic calculation, make sure that all rows have the same height.
  • The property: minimumAutoRowCount defines the minimum number of rows that must be shown if the property: visibleRowCountMode is set to “auto”. Show at least three to five rows.
  • The property: firstVisibleRow defines the first row shown in the visible area of the analytical table. The analytical table is scrolled accordingly.
  • The property: allowColumnReordering is deprecated. Use the property: enableColumnReordering instead.
  • The property: editable does not have a visible effect. Please do not use it.
  • The property: threshold is used for optimizing lazy loading of items. In most cases, the default value is appropriate.
  • The property: enableGrouping is experimental and does not have a meaningful effect on the analytical table. Do not use it.
  • The property: sumOnTop shows additional aggregation values on the group header, even if the group is expanded. Do not use it.
  • The property: enableCustomFilter changes the filter entry in the column header menu from an edit box to Filter…. Selecting this entry throws an event that apps can react to, for example, by opening a dialog. In general, you should choose the built-in filter over your own implementation. Specifically, keep filtering via the column header menu simple, while offering more advanced options via the table personalization dialog.
  • The property: enableBusyIndicator has not yet been fully implemented. Do not use it.
  • The property: title adds a line of text on top of the analytical table. Do not use it. To add a title to the table, use a toolbar.
  • The property: footer adds a short text at the bottom of the table.
  • The property: Busy sets the analytical table to busy state. While in busy state, the whole table cannot be used and items cannot be read due to an overlay.
  • The property: Tooltip does not have an effect. Do not use it.
  • The property: alternateRowColors displays the rows with alternating background colors (“banded rows”). Do not use it.

sap.ui.table.AnalyticalColumn

The following additional properties are available for the analytical column:

  • The property: leadingProperty is used for data binding.
  • The property: inResult is used for data binding.
  • The property: visible defines whether a column is shown or hidden.
  • The property: name defines the name shown in the column header menu for showing and hiding columns. In SAP Fiori, columns are shown and hidden via the table personalization dialog or via the table personalization dialog. Please do not use this property.
  • The property: headerSpan defines whether one column header is used for one or several columns. To prevent adverse side effects, always use one column header for only one single column. Please do not use this property.
  • The property: Tooltip does not have an effect. Please do not use it.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Radio Button

Radio buttons provide users with a set of mutually exclusive options. They allow a user to select only one option from two or more choices. Each option is represented by a radio button. Consequently, radio buttons only work in groups.

Usage

Use the radio button if:

  • You need to help users choose quickly between at least two clearly different choices.

Do not use the radio button if:

  • You need to offer the user the option of multiple selection. In this case, use checkboxes instead because radio buttons are for single-selection contexts only.
  • You want to allow the user to select list items. Instead, let the user tab the list item to make a single selection (consider a message toast for confirmation) and provide checkboxes to select multiple list items.
  • The default option is recommended for most users in most situations. In this case, consider a dropdown list instead, which uses less space by not showing all options straightaway.
  • You need to present more than 8 options. Use a dropdown box or list view.
  • In special cases, there are only two mutually exclusive options. Combine them into a single checkbox or toggle switch. For example, use a checkbox for “I agree” (for example, to terms and conditions) instead of two radio buttons for “I agree” and “I don’t agree”.
  • The options are numbers with fixed steps. Use a slider control.

Responsiveness

The radio button group control is not responsive. A horizontal radio button group should be displayed as a vertical group on smartphones because a horizontal group should never break into two lines.

Also note that the control does not handle long labels in horizontal groups. Such labels do not break and are not truncated. Therefore, check label lengths and padding in horizontal groups on desktop and tablets.

A horizontal radio button group does not match the size of mobile phone screens
A horizontal radio button group does not match the size of mobile phone screens
On smartphones, a horizontal group should always break into a vertical button group
On smartphones, a horizontal group should always break into a vertical button group

Behavior and Interaction

Activation

The user taps a radio button to activate the related option. Note that tapping an activated option does not deactivate it, but tapping a different option transfers activation to that option. Therefore, a user can select only one option from a group of radio buttons.

A group of radio buttons behaves like a single control: Using the tab key sets the focus directly on the selected option. Users can cycle through the group using the arrow keys.

Styles

States

A radio button can have different states that affect its appearance:

  • Control states, such as “enabled” or “read only”
  • Value states, such as “error” or “warning”, which are indicated using semantic colors
  • Visual states, such as “regular” or “hover”
  • Additional states, such as “selected”

For details on the different states, see UI Element States.

For more information on semantic colors for value states, see How to Use Semantic Colors.

Radio button interaction states
Radio button interaction states

Column Attribute

The radio button attributes also have a set arrangement so that you do not have to implement them for every single control. The column attribute adds or removes n-columns to a set of radio buttons.

Three columns – The example shows background color settings
Three columns – The example shows background color settings
One column – The example shows a customer survey
One column – The example shows a customer survey

Guidelines

The radio button control serves the purpose of exclusive selection and adds clarity and weight to very important options in your app. Use radio buttons when the options being presented are important enough to occupy more screen space. They should only be used if the user needs to see all available options instantly and side by side. Radio buttons draw more attention to the options as they emphasize all options equally.

Labeling

A label to indicate the option is mandatory for each radio button. Limit the radio button’s label to a single line.

Sorting

List the options in a logical order, such as lowest to highest risk, simplest to most complex operation, or most to least likely to be selected.

Alphabetical ordering is less recommended as it is language-dependent and therefore not localizable.

Aligning

Try to align radio buttons vertically instead of horizontally, especially for long labels. Horizontal alignment is harder to read and localize. Consider horizontal alignment in cases of one-word labels, such as in the background color settings example above.

In forms, always align radio buttons vertically instead of horizontally as the length of the labels may vary for different languages.

Do not put two radio button groups right next to each other as it is difficult to determine which buttons belong to which group. Use group labels and padding to separate them.

Offering “No Choice”

If the user is also able to select none of the options, be sure to add this option to the control as well (as this option is generally not offered in the control). Add a radio button that offers None or Does not apply.

Default State

Because radio buttons do not generally offer “no choice”, the app should show the less risky option (most likely the first option in the group) as preselected by default.

Exceptional Case: No Preselection by Default

In rare cases, preselection might result in incorrect inputs or assumptions. One such example is gender selection in a form. In this case, you should offer no preselection and decide whether a user input is mandatory or not depending on the use case.

If a choice is mandatory, set an error state if validation proves that a user did not select an option.

Offer no selection by default in this case of gender selection because a preselection might be misleading
Offer no selection by default in this case of gender selection because a preselection might be misleading

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Form Field Validation

This article describes data validation for fields in SAP Fiori apps. This includes information about the validation points and the choreography associated with messaging.

For more information on the messaging concept for SAP Fiori apps, see the article on message handling.

Information
For S/4HANA applications, use the On Enter and On Save or Create validation choreography. See the design decision.

Behavior and Interaction

The message popover is only used to display field-related messages.

Validation Choreography

Focus Out

  • Validation occurs when the value in the input field has changed and the focus leaves the field.
  • The mandatory fields get value states.
  • A message button appears in the toolbar (semantic button, icon: alert, counter).
  • If the message popover is open and already contains one or more messages, the list is updated.
Warning
Focusing out of a field or switching from one field to another manually or using the “Tab” key doesn’t validate the entire form. It only validates the field that was previously in focus.
Form
Form
Form with field validation
Form with field validation

When to Use

Do

Use the “focus out” validation when a draft has few fields to validate.

Don't

Don’t use the “focus out” validation when:

  • A draft has many fields to validate.
  • Users want to enter data quickly, uninterrupted by repeated validation.
  • They navigate with the keyboard for faster data entry.
  • They regularly enter data in a draft for some, but not all fields.

On “Enter”

L / XL Screens

  • The entire form is validated, or the whole object including all the forms it contains.
  • If the user selects a value by pressing Enter, the value is selected without triggering validation (for example, when adopting a suggestion or entering a value in a combo box). The user must then press Enter a second time to trigger the full form validation process.
  • Any errors or warnings are displayed in a message popover.

S / M Screens

  • On phones and tablet devices, there is no Enter shortcut. Instead, a Validate button is available in the footer. The Validate button is combined with Save in a split menu button.
Loading animation on enter
Loading animation on enter
'Save' / 'Validate' split menu button
'Save' / 'Validate' split menu button
Validation completed
Validation completed

When to Use

Do

Use the “on Enter” validation (or the Validate button on a phone or tablet device) when:

  • The object should stay in draft mode until the final Save or Create action.
  • A draft has many fields to validate.
  • Users want to control when the validation happens.

On “Create” or “Save”

  • The entire form is validated.
  • A message popover displays any errors or warnings.
Form with at least one input
Form with at least one input
Validation completed
Validation completed
Do

Always use this option, even if you use “focus out” or “on Enter” validation.

Don't

Don’t use the “on Create or Save” validation as the only validation option.

Validation

  • Highlight the specific field and include a useful message.
  • Display a button on the left side of the footer toolbar.
  • The button displays the sap.m.MessagePopover. For more information, see message popover.
  • If the issues have been resolved, and the user is able to proceed, remove the corresponding messages.
Useful message in value state
Useful message in value state

Connected Fields

Some fields are connected because the coherence of their values depend on each other. At the time of validation, one or several of those connected fields are highlighted according to the case. In every case, the value state message is the same for every field.

Some examples of connected fields are: value/unit of measure, price/currency, or zip-code/city.

Empty Fields

If the entered values are incoherent, all connected fields get the value state after the focus has left the connected fields.

Connected fields - Form starting with empty fields
Connected fields - Form starting with empty fields

Mandatory Fields

If the focus has left the connected fields, only the missing field gets the error state.

If the connected fields are not mandatory, validation occurs only when both fields contain data.

Connected mandatory fields
Connected mandatory fields

Read Only

Read-only fields don’t get value states.

Connected Fields With Read-Only States
Connected Fields With Read-Only States

Error Prevention

Help the user to avoid errors by using input types (sap.m.InputTypes) and mask input (sap.m.MaskInput). The input fields automatically get a specific format, which helps prevent the user from making invalid entries.

Always start with the least complex control (for example, use select instead of value help if the user needs to select only one item from a short list). Only use more intricate controls if the use case really requires it.

Guidelines

Depending on the floorplan, certain validation guidelines need to be applied.

Global Edit Flow

This floorplan is significant in that the actions are only displayed in the footer toolbar on the main page of the object. The subpages do not provide action buttons. Therefore, the message popover includes all messages for the whole object (the main object page and all subpages).

The validation can be triggered by the following:

  • Focus Out: Current field, or current field and dependent fields.
  • On Enter: The form with the latest focus and possible dependent fields in other sections on a page
  • Action Button: Complete object validation including subpages.
Information
Messages that occur on subpages should include the name of the line item so that the user at least knows where to find the field to resolve the issue.

For more information, see Complex Objects – Global Flow.

Partial Editing

When the user clicks Save, the whole form remains in a busy state until the action has been completed:

  • If there are no messages: switch to display mode.
  • If there are messages that relate to a field: highlight the respective field with its value state and do not use the message popover. 
  • If there are messages that do not relate to a field, show a dialog with the message(s).

For more information, see Partial Edit.

Message Popover Control

Do not show the message button and message popover:

  • In a popover
  • In a partial editing area. If you offer partial editing, never show a message popover for the part of the screen being edited. The message popover always belongs to the footer toolbar for the whole page.

Instead, just highlight the fields that contain errors to make it easier for the user to understand the issue(s).

Highlighted form fields in a dialog
Highlighted form fields in a dialog

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

  • No Links.

Map

Maps are used to visualize data in an easy and intuitive way. A map is a symbolic visual illustration of areas, regions, and themes. SAP Visual Business supports analytic maps and geographic maps.

The analytic map shows regions such as continents or countries. Another term for this kind of map is a choropleth map.

In the context of a business application, the analytic map is useful for displaying quantitative or qualitative data by coloring various regions.

The analytic map is the best choice if you want to visualize region-specific values, such as for visualizing the sales revenue for different countries.

Analytic map
Analytic map

The geomap displays geographic elements like roads, cities, forests, and other details and is mostly used for navigation. In the context of a business application, a geomap is useful for displaying points of interest, area objects, or other charts over the map.

The geomap is the best choice if you have location-based data, and you want to show a road map, satellite map, or another specialist map in the background. For example, a geomap is good for visualizing the revenue of stores.

Geomap
Geomap

In addition to the analytic map and geomap control, the SAP UI5 map container control provides you with a toolbar on top of the map. It also enables you to switch between maps and charts, includes personalization, provides a full screen mode, and enables you to include a list panel stack for displaying content on top of the map.

Components

A map can include any of the following elements:

  • Toolbar (optional)
  • Navigation tools:
    • Legend (optional)
    • Navigation control (optional) and scale (optional)
  • Symbols for improved visualization of use cases:
    • Spots (optional)
    • Labels (optional)
    • Circles/geocircles (optional)
    • Areas (optional)
    • Routes (optional)
    • Container (optional) – here an arbitrary SAPUI5 control or chart can be shown on a map

Toolbar

If you need a toolbar, use the SAP UI5 map container control.

Navigation Tools

Legend

A panel containing a legend is displayed and expanded by default. You can collapse, expand, hide, or move the legend anywhere on the map if necessary.

The legend can be used interactively, in which case you have to enable the legend click event, which is provided by the control.

Legend
Legend

Navigation Control and Scale

Use the navigation control only if you do not use the chart container toolbar.

The navigation control is responsive and adapts to mobile and desktop devices. For mobile devices, the zoom function is visualized by using “+” and “”, while an extended navigation tool is used for the desktop version.

The scale of a geomap is shown by default, although for analytic map it is not.

Desktop navigation
Desktop navigation
Navigation for mobile devices
Navigation for mobile devices

Symbols for Improved Visualization of Use Cases

Spots

You can use spots to visualize specific locations on the map. There are five different types of spots: the default blue spot without any semantic value and the four semantic spots with icons. Adding numbers or text to a spot will replace an existing icon on the spot.

If you want to use a number with more than one digit, or text with up to five characters, you can use the relevant predefined spots that are provided. Spots are available for numbers containing up to one, three, and five digits. For text, spots are available for up to five characters (in all five colors). Use the label for numbers or text that exceed these limits. Ensure that numbers and texts on spots are not translated; if this is necessary, use labels.

Default spot
Default spot
Spots with default icons
Spots with default icons
Spots with numbers or text
Spots with numbers or text

Labels

You can use a label to provide more information about a symbol. The label supports multiple lines and should be equally aligned for a group of symbols; for example, use the same alignment for all labels of spots.

For routes, the position of the label adapts to the map section. In other words, the label moves on the route so you can always see it at any zoom level. If a label is not sufficient, we recommend you use a container with the appropriate SAPUI5 control.

The label is available in five different colors: the default (neutral) white label and the semantic labels. The label adapts to the number of digits, and the content of the labels is translated if necessary.

In cases where a spot is insufficient, for example, if you want to include content that needs to be translated or that exceeds five characters, you can use a label instead of a spot. The label is available in four semantic colors, with or without anchors. It can be used as a standalone without any other symbols, like spots or routes.

Default label on a route
Default label on a route
Standalone labels with semantic colors, with and without anchors
Standalone labels with semantic colors, with and without anchors

Circles/Geocircles

You can use circles to visualize specific, quantitative parameters, while geocircles can be used to visualize specific sizes or measures. The difference between circles and geocircles is as follows:

  • Circles: Radius is given in pixels – constant screen size.
  • Geocircles: Radius is given in meters – constant size in reality.

A use case for circles on a map might be to show the size of the biggest towns in a region or the revenue of a company per production location.

Analytic map displaying two parameters
Analytic map displaying two parameters
Geomap with circles
Geomap with circles

Areas

You can visualize personalized areas. This can be used, for example, for visualizing regions such as countries or zip code zones.

Analytic map with areas (based on regions)
Analytic map with areas (based on regions)
Geomap with areas
Geomap with areas

Routes

Routes can be displayed on maps with varying levels of detail, such as a map of the world or a local/national map depicting transport networks. For both levels of detail, app developers can adjust the following properties:

  • Dot width: The default dot width for a route is zero, which results in a solid line. You can adjust the dot width to enable dotted or dashed lines, or a combination of dots and dashes.
  • Route width: App developers can choose an appropriate route width. We recommend a route width of 3 px.
  • Color: We recommend that you use the SAP Fiori chart colors.
  • Arrow head: The route does not have an arrow head by default. You can enable an arrow head for the start and end points by changing the start or end property to 1.
  • Direction indicator (only if arrow heads are enabled): The direction indicator is not set by default. If the direction of a route should always be visible, you can use the direction indicator, which displays additional arrows/triangles on the route as soon as the start or end point arrows are outside the visible area. In addition to the direction indicator, we recommend that you also use a white borderline.
  • Borderline: No borderline is set by default. For accessibility reasons, we recommend that you only use a borderline to make a route more visible on the map.
  • Curved route: Routes are displayed as straight by default. You can change them from straight to curved to display flight routes or bidirectional routes.

For accessibility reasons, we recommend that you use not only color, but also dot width for differentiation purposes. For example, use a solid line for planned routes and a dashed line for unplanned routes.

Analytic map with route
Analytic map with route
Analytic map with flight routes
Analytic map with flight routes
Geomap with route
Geomap with route

Container

You can use containers to display an arbitrary SAPUI5 control on the map. The map control only provides the container. The default container is transparent without a border. The app team can personalize the container (in terms of fill, border, and size) and add an arbitrary SAPUI5 control.

Analytic map with container containing another SAPUI5 control
Analytic map with container containing another SAPUI5 control

Behavior and Interaction

Zoom

There are four ways of performing a zoom:

  • Navigation tool: use the navigation controls to zoom in and out.
  • Mouse wheel: use the mouse wheel to zoom in and out.
  • Gesture: on a touchscreen, use the ‘pinch and spread’ gestures.
  • Keyboard: use the ‘+’ and ‘-‘ keys to zoom in and out, or use the ‘Z’ key to use the rectangular zoom.

Thumbnail Mode (Minimized Map Control)

The map control can be minimized to a thumbnail, which can be used for tiles on the SAP Fiori launchpad or for the object page. Note that the thumbnail is a full-scale VBI control. If you use data binding, the thumbnail is updated automatically.

The app development team can specify the size of the thumbnail.

In the minimized state, only the thumbnail click event is available; all other mouse, keyboard, and touch events are disabled.

Clustering

To avoid cluttered screens with too many objects on the map, you can use one of three cluster algorithms:

  • Grid clustering: Visual objects are clustered based on a grid. You can have multiple grid-based clusters. The visualization object is placed in the center of the grid cell with a specified offset.
  • Tree clustering: Complex clustering based on Voronoi diagrams. The clustering itself is based on the areas in the Voronoi diagram, and cluster objects are aggregated to a hierarchy over several levels of detail.
  • Distance clustering: Visual objects are clustered based on the visible distance between them. Objects are aggregated to a cluster object as long as they are within a specified range from the start object. The start object of a cluster is not specifically defined; only the nearest object that does not belong to a cluster is taken. The visualization objects are placed in the center of gravity of the covered objects. Thus the actual distance between them may vary. This type of clustering is fast, but the results may not be very convincing.

The control for visualizing clusters provides cluster icons in the four semantic colors (four types). If no type or text has been set, the default neutral, gray cluster is used. App developers can personalize the icons provided as follows:

  • Change color
  • Change icon
  • Add text
  • Replace the cluster icons provided with their own
Default cluster
Default cluster
Cluster icons provided (four types; without text)
Cluster icons provided (four types; without text)
Unclustered spots
Unclustered spots
Example: distance clustering with personalized semantic cluster icons
Example: distance clustering with personalized semantic cluster icons
Example: grid clustering with personalized semantic cluster icons
Example: grid clustering with personalized semantic cluster icons

Select

You can choose different selection modes: single selection to select a single item, and rectangular or lasso selection to select multiple items. You can also use the Shift key to add items to an existing selection, and the Ctrl key to select/deselect items.

Single Selection

This is the default selection mode. You can click your mouse button to select an object, while at the same time deselecting a previously selected object.

Rectangular Selection

You can switch to rectangular-selection mode by pressing the ‘R’ key. The cursor changes and you can use your left mouse button to draw a rectangle. Each object that lies within the rectangle is considered selected. Press the ‘R’ key again to leave this selection mode and return to single-selection mode.

Lasso Selection

You can switch to lasso-selection mode by pressing the ‘A’ key. The cursor changes and you can use your left mouse button to make a lasso selection. Each object that lies within the lasso is considered selected. Press the ‘A’ key again to leave this selection mode and return to single-selection mode.

View Tooltip

For desktops, a tooltip is enabled to provide additional information about the symbol.

Keyboard Shortcuts (desktop only)

Action Shortcut
Lasso selection A
Rectangular selection R
Zoom in +
Zoom out
Rectangular zoom Z
Move ← ↑ → ↓
Go to initial start position H

Styles

Analytical Map

Colors

For general rules about using colors in charts, see Chart – Color Palettes. You can define colors programmatically for each region.

Default Colors

Water and regions have default colors. The color of water cannot be changed. The color of each region can be changed individually. Keep the default color if the region has no data.

Default colors for analytic map
Default colors for analytic map

Regions Only

Colors from Qualitative Palette

Use colors from the qualitative palette to highlight particular regions. Use the first color of the qualitative palette. Also use colors from the qualitative palette to separate regions into distinct groups. Note that colors from the qualitative palette have no semantic value. For example, do not choose a color because it is blue or green as the hue associated to these colors may change in the future or may be customized by the customers. Start by using the first color and then the second color and so on, unless there is a good reason for not doing so. If there is no data for a region, keep the default color.

Map with one color
Map with one color
Map with multiple qualitative colors
Map with multiple qualitative colors

Colors from Sequential Palette

Use colors from the sequential palette to encode quantitative differences, that is, to visually represent the idea of level, progression, or graduation. If there is no data for an item, keep the default color. See the section on How to Use the Sequential Palette in the Chart – Color Palettes article.

Map with colors from the sequential palette
Map with colors from the sequential palette

Colors from Semantic Palette

Use colors from the semantic palette to show that data points are bad, neutral, or good. If there is no data for an item, keep the default color.

Map with colors from the semantic palette
Map with colors from the semantic palette

Colors for Symbols

Symbols and Regions

Map with Circles/Geocircles

If you need to display circles over a map and use sequential colors for the regions, use the sequential palette with the following colors:

Region Circle After
Multiple brightness of the first hue sapUiChartPaletteSequentialHue2; Opacity: 60% @sapUiLightestBorder

See the section on How to Use the Sequential Palette in the Chart – Color Palettes article.

Visualizing two parameters of interest
Visualizing two parameters of interest

Guidelines

General Guidelines

  • If you want to include a toolbar and/or show additional content on a map, use the SAP UI5 map container control.
  • Use the sequential color palette if there are no more than six different states. If you have more than three states, we recommend that you use the tooltip or legend in addition to the colors to provide detailed information. The reason for this is that the contrast of the colors for maps is too low to differentiate all colors at first glance. The sequential palette aims to highlight the most interesting states by using the darkest and the lightest color.
  • Use the qualitative color palette if you want to visualize various states that are independent of each other, such as election areas.
  • Use the semantic palette if you want to express good versus bad states, such as with revenue figures.
  • If you want to display two regions with specific parameters, a combination of coloring the regions and using circles would be the best choice. Avoid overlaps by providing different aggregation levels at different zoom levels. Note that there could be problems with relating a parameter to the radius of a circle because a user will compare the area and not the radius. The area has a quadratic relation to the radius. Consequently, a smaller number looks very small and cannot be visually compared with other values.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Object Handling – Copy

The copy pattern allows you to copy an object and then edit the newly created object.

Usage

Use the copy pattern if you want to copy an object and then edit the newly created object. If you want to reference to an existing object, use the create with reference pattern instead.

Layout

There are 4 use cases for copying an object:

  1. The object to be copied is part of the current table.
  2. The object to be copied is not part of the current table (for example, because it has been approved).
  3. The object to be copied is a template.
  4. The whole object is to be copied, for example, from an object page within a list-detail-detail view (flexible column layout).

For use cases 1–3, place the Copy function (a transparent button) in the relevant toolbar (for example, above the form or table control).

For use case 4, place the Copy function in the header toolbar of the object page (global actions). For more information about the interaction, read about the flexible column layout.

Behavior and Interaction

This section describes the interaction flow of the copy pattern for different use cases.

1) The copied object is part of the current table.

The user selects an item to be copied. Multiselection is not possible. Clicking the Copy button takes the user to the details page.

Copied object is part of a table
Copied object is part of a table

The form is prefilled with the data from the selected item on the previous page. The form remains in edit mode until the user clicks the Create button. If the user selects Cancel, a data loss message appears.

Details page after copying
Details page after copying

2 + 3) The copied object is not part of the current table or is to be copied from a template.

When the user clicks the Copy button, an action sheet appears. The user can choose one of three actions: CopyCopy from Object, or Copy from Template. You can also choose to show only one or two of these actions to the user.

Action sheet after clicking the 'Copy' button
Action sheet after clicking the 'Copy' button

When the user selects Copy from Object or Copy from Template, a dialog appears prompting the user to choose an object or a template. When the user chooses one of these and clicks the Create button, the details page appears.

Dialog appears after the user chooses a copy action
Dialog appears after the user chooses a copy action

The details page contains a prefilled form and remains in edit mode until the user clicks the Create button. If the user clicks Cancel, a data loss message appears.

Details page after copying
Details page after copying

4)    The copied object is located in the details view (flexible column layout)

The user selects the item to be copied from the list view, for instance list report or worklist. The Copy button appears in the header toolbar of the object page within the first detail view. Clicking the Copy button takes the user to edit mode of the new item within the second detail view of the flexible column layout, also known as list-detail-detail mode.

List-detail view, with the 'Copy' button in the header toolbar of the object page
List-detail view, with the 'Copy' button in the header toolbar of the object page

In edit mode, the form is prefilled with the data from the item selected on the previous page. The form remains in edit mode until the user clicks the Create button. If the user clicks Cancel, a data loss message appears.

List-detail-detail view in edit mode after copying
List-detail-detail view in edit mode after copying

Responsiveness

The responsiveness of this page depends on the responsive behavior of the controls being used.

Copy pattern adapted to smartphone
Copy pattern adapted to smartphone
Copy pattern adapted to tablet
Copy pattern adapted to tablet
Copy pattern adapted to desktop
Copy pattern adapted to desktop

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Object Handling – Create with Reference

Use the create with reference pattern if you want to create a new object and reference it to an existing object.

Usage

This pattern shows the relationship between two objects only, and does not copy the content from one object to another. If you would like to copy an object and edit it, have a look at the article on copying instead.

Layout

There are several ways to trigger the create with reference function:

  • Clicking the transparent Create button in the toolbar (for example, above a form or table control).
  • Clicking the Create ( ) icon in the toolbar of a worklist or a list report (for example, in a list-detail-detail pattern using the flexible column layout).

There are two ways to create an object with reference to support different use cases:

  • Using the dialog to create objects with no more than 8 editable fields.
  • Using the details page to display large amounts of data that cannot be displayed in a dialog, such as long forms.

Behavior and Interaction

This section describes the interaction flow of the create with reference pattern.

Create with Reference Using a Dialog

Clicking the Create button takes the user to a dialog. This dialog opens with an unchecked checkbox and several editable fields for creating the new object, such as a line item.

If the user wants to reference another object, such as a sales order, he or she must select the checkbox and then select the Reference Type and the Reference ID. We recommend offering the value help dialog for selecting the reference ID. However, the choice of control will also depend on the type of content being referenced.

Clicking the Create button saves the entries and adds the object (line item) to the current table. If the user chooses Cancel, a data loss warning appears.

'Create with Reference' using a dialog
'Create with Reference' using a dialog

Create with Reference on Details Page

Clicking the Create button takes the user to the details page. This page contains an unchecked checkbox and a large form with editable fields for creating the new object, such as a line item.

If the user wants to reference another object, such as a sales order, he or she must select the checkbox and then select the Reference Type and the Reference ID. We recommend offering the value help dialog for selecting the reference ID. However, the choice of control will also depend on the type of content being referenced.

Clicking the Create button in the footer toolbar saves the entries. The create page then switches into display mode. The Back button takes the user to the previous page. If the user chooses Cancel, a data loss warning appears.

'Create with Reference' on details page
'Create with Reference' on details page

Responsiveness

The responsiveness of this page depends on the responsive behavior of the controls being used.

Create with reference pattern adapted to desktop
Create with reference pattern adapted to desktop
Create with reference pattern adapted to tablet
Create with reference pattern adapted to tablet
Create with reference pattern adapted to smartphone
Create with reference pattern adapted to smartphone

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Calendar Date Interval

The calendar date interval displays a range of days in a single row. The control allows the user to select a single day, multiple days, or a range of days. Content corresponding to the date selection is usually displayed below the control. The user can navigate the date intervals by browsing through them (using the Previous and Next arrows), or by going directly to a specific month or year.

Compared to the regular date range selection control, this control offers a flexible date range and consumes very little vertical space. You can also adapt the width to fit the available horizontal space.

When to Use

  • The user simply needs a calendar. Use the calendar instead.
  • The user wants to pick a single date out of a calendar view. Use the date picker instead.
  • The user wants to pick a date and time. Use the date/time picker instead.
  • The user wants to pick a date range out of a calendar view. Use date range selection instead.
  • The user wants to set a dynamic date, such as “last x months”. Use the dynamic date instead.

Layout

The date interval control is divided into two main areas: date interval navigation, and date interval display and selection.

The navigation area contains two arrows (one to the left, one to the right), which allow the user to navigate easily to the previous and next date ranges. This area also contains month and year indicators, which display the currently selected month and year. These indicators trigger the month and year navigation mode of the control.

The display/selection area is primarily used to display the range of days in the current date interval. You can also display a second row to show the calendar week (property: showWeekNumbers). When the user triggers month or year navigation, a range of months or years is displayed in this section to enable easy interval navigation.

Schematic visualization of calendar date interval
Schematic visualization of calendar date interval

Components

Current Day

The current day is highlighted by a colored frame. Weekends are shaded in a slightly darker gray.

Calendar date interval
Calendar date interval

Special Days

You can mark special days, such as public holidays, with a colored line along the lower edge.

Color markings for special days
Color markings for special days

Behavior and Interaction

The behavior and interaction of the calendar date interval control can be divided into two parts: navigation and selection.

Navigation

Previous/Next

The user clicks the Previous or Next arrow to replace the currently displayed date interval with the previous or next date or period. Previous/Next navigation can be used while the user is in selection mode, as well as in month, year, or year interval navigation mode.

Navigation by Month

The user triggers month navigation mode by clicking the month link above the date range interval. The currently selected month is highlighted. Clicking a month switches the date range interval to the selected month. The user can browse the months by clicking the Previous and Next arrows.

Navigation by month
Navigation by month

Navigation by Year

The user triggers year navigation mode by clicking the year link above the date range interval. The currently selected year is highlighted. Clicking a year switches the date range interval to the selected year. The user can browse the years by clicking the Previous and Next arrows.

Navigation by year
Navigation by year

Navigation by Year Interval

The user triggers the year interval navigation mode by clicking the year interval above the year selection area. The year interval containing the currently selected year is highlighted. Clicking a year interval switches the year range to the selected set of years. The user can browse the year intervals with the Previous and Next arrows.

Navigation by year interval
Navigation by year interval

Selection

The calendar date interval control can be set up for single day selection, multiple day selection, or date range selection.

Single day

The user clicks an unselected day to select that particular day and deselect all previously selected days. Clicking a selected day a second time removes the selection. Only one day can be selected at a time. The selected day is highlighted.

Selection – Single day
Selection – Single day

Multiple days

The user clicks an unselected day to select that particular day. Clicking a selected day a second time removes the selection. Multiple days can be selected. Selected days are highlighted.

Selection – Multiple days
Selection – Multiple days

Date range

The user clicks an unselected day to select the start date. Clicking a second unselected day selects the end date. Both the start and end dates are highlighted. The days in between are highlighted in a lighter color. The minimum range is one day and only one range can be selected at a time.

Selection – Date range
Selection – Date range

Responsiveness

The horizontal space occupied by the control is already minimal, so the responsiveness is limited to the width of the control.

On small screens, the maximum number of days per range interval is automatically reduced to eight.

Cozy
Cozy
Compact
Compact

Examples

Calendar date interval displaying several weeks
Calendar date interval displaying several weeks
Calendar date interval with a selection
Calendar date interval with a selection

Related Links

Elements and Controls

Implementation

 

Message Strip

The message strip is a control that is used as an information bar. It contains information about an object or a status and can be embedded within the detail area of an object or page, or in the header of an object page.

Usage

Use the message strip if:

  • You want to provide information related to the object as a whole in the object header, such as the object status.
  • You want to provide information within the detail area of an object.
  • You want to inform your user about a status of an object.
  • You want to warn your user about an issue.

Do not use the message strip if:

  • You want to display information within a control, in the list of a list-detail layout, or above the page header.

Responsiveness

The message strip is fully responsive. Icons within the message strip are displayed to the left (custom icons) or right (Close action) of the message.  Text and links behave differently and wrap.

If you place the control within the detail area, it will always use 100% of the width and react to the responsiveness of the container.

Message strip on a smartphone (size S)
Message strip on a smartphone (size S)
Message strip on a desktop (size L)
Message strip on a desktop (size L)

Types

The following semantic types are available.

  • Information
  • Warning
  • Error
  • Success
Different semantic types and colors
Different semantic types and colors

Behavior and Interaction

Static behavior

The message strip acts as an information bar. If you want to display a status related to an object, keep the interaction static and do not show the Close button.

Static behavior used to display a status
Static behavior used to display a status

Interactive behavior

  • The app team can add a link in case more content is useful for the user to understand a situation.
  • Clicking the  Close button on the right-hand side hides the message strip. The app team can determine whether the message strip comes back on page reload, the next visit or never.
Interactive behavior with 'Close' function
Interactive behavior with 'Close' function

Accessibility

When an application adds a message strip dynamically, also notify screen reader users.

Use the following structure for the screen reader notification text:

“New information bar of type <Error / Warning / Success / Information>: <text of message>”

To avoid an endless screen reader announcement, send a short message summary with only the most relevant information.

Properties

sap.m.MessageStrip is limited to the following properties:

  • Property:showIcon – Allows you to display an icon before the text
  • Property:customIcon – Allows you to display an icon from the icon library
  • Property:type – Changes the semantic color and the icon in front of the message strip
  • Property:text – Adds text to the control
  • Property:link – Adds a link
  • Property:showCloseButton – Adds a Close button

Resources

Elements and Controls

Implementation

Chart – Value-Based Legend

The value-based legend is used to visually represent value ranges through color shades. It is currently available for the heatmap and treemap.

Value-based legend example on a heatmap
Value-based legend example on a heatmap

Layout and Responsiveness

By default, the value-based legend is positioned to the right of the data plot. If there isn’t enough space (for example, in portrait mode on a smartphone), it moves to the bottom. In this case, it is displayed in a condensed format.

Responsiveness on a smartphone - Portrait mode
Responsiveness on a smartphone - Portrait mode

Behavior

The default value-based legend comprises five segments and uses the first hue of the sequential color palette.

Default value-based legend
Default value-based legend

Customization

Number of Segments

You can change the number of segments from two to nine. The corresponding value ranges are automatically calculated and assigned to each shade. However, you need to assign the colors to the segments yourself.

Recommended Colors for the Sequential Palette

Recommended sequential value-based legend from two to nine items
Recommended sequential value-based legend from two to nine items
Color Name
2 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1
3 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark2
4 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
5 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
sapUiChartPaletteSequentialHue1Dark2
6 values sapUiChartPaletteSequentialHue1Light3
sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
sapUiChartPaletteSequentialHue1Dark2
7 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
sapUiChartPaletteSequentialHue2Light2
sapUiChartPaletteSequentialHue2Light1
sapUiChartPaletteSequentialHue2
8 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
sapUiChartPaletteSequentialHue2Light2
sapUiChartPaletteSequentialHue2Light1
sapUiChartPaletteSequentialHue2
sapUiChartPaletteSequentialHue2Dark1
9 values sapUiChartPaletteSequentialHue1Light2
sapUiChartPaletteSequentialHue1Light1
sapUiChartPaletteSequentialHue1
sapUiChartPaletteSequentialHue1Dark1
sapUiChartPaletteSequentialHue1Dark2
sapUiChartPaletteSequentialHue2Light2
sapUiChartPaletteSequentialHue2Light1
sapUiChartPaletteSequentialHue2
sapUiChartPaletteSequentialHue2Dark1
Example of a heatmap with an 5-segment sequential value-based legend
Example of a heatmap with an 5-segment sequential value-based legend

When you use the sequential color palette, you can also change the recommended hue illustrated above (still based on the SAP Fiori chart color palette). If you do so, follow this example for the choice of shades.

Recommended Colors for the Semantic Palette

Recommended semantic value-based legend from two to nine items
Recommended semantic value-based legend from two to nine items
Color Name
2 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGood
3 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark2
4 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGood1Light1
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark1
5 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGoodLight1
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark1
sapUiChartPaletteSemanticGoodDark2
6 values sapUiChartPaletteSemanticGoodLight3
sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGoodLight1
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark1
sapUiChartPaletteSemanticGoodDark2
7 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGoodLight1
sapUiChartPaletteSemanticGoodHue1
sapUiChartPaletteSemanticGoodDark1
sapUiChartPaletteSemanticBadLight2
sapUiChartPaletteSemanticBadLight1
sapUiChartPaletteSemanticBad
8 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGoodLight1
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark1
sapUiChartPaletteSemanticBadLight2
sapUiChartPaletteSemanticBadLight1
sapUiChartPaletteSemanticBad
sapUiChartPaletteSemanticBadDark1
9 values sapUiChartPaletteSemanticGoodLight2
sapUiChartPaletteSemanticGoodLight1
sapUiChartPaletteSemanticGood
sapUiChartPaletteSemanticGoodDark1
sapUiChartPaletteSemanticGoodDark2
sapUiChartPaletteSemanticBadLight2
sapUiChartPaletteSemanticBadLight1
sapUiChartPaletteSemanticBad
sapUiChartPaletteSemanticBadDark1
Example of a heatmap with an 5-segment semantic value-based legend
Example of a heatmap with an 5-segment semantic value-based legend

Range

Finally, you can manually set the range for each segment. Note that for a given segment number, “segment number + 1” values are needed (example: [0,8,9,10,11,20] for five segments).

If the overall range being defined is different from the real data range, the “>” and “<” signs are displayed in the legend.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

  • No links.

Chart – Time Axis

The time axis is compatible with a number of charts and is designed to show the variation of values through time. It can display years, quarters, months, weeks, days, hours, minutes, and seconds.

Time axis applied to a line chart
Time axis applied to a line chart

The time axis incorporates three valuable features:

  1. All the complexity involved with formatting the labels – including localization – is taken care of automatically
  2. The time unit labels behave responsively according to the zoom factor. As you can see below, the time unit labels in the top row change as the zoom increases, while the time unit label in the row below is only displayed once to prevent unnecessary repetition.
Fully zoomed out
Fully zoomed out
Medium zoom
Medium zoom
Fully zoomed in
Fully zoomed in

3. For certain chart types, the physical spacing between your data points accurately respects the time scale being displayed, as opposed to just rendering all your data points equidistantly. We can see what a difference this makes by comparing the charts below. The chart to the left uses the categorical axis and the chart to the right uses the time axis. Even though both charts were generated from exactly the same dataset; they tell completely different stories with respect to how the values have increased over time due to the high concentration of early data points.

Categorical axis (misleading)
Categorical axis (misleading)
Time axis (accurate)
Time axis (accurate)

Compatible Chart Types

A number of SAP Fiori charts can accommodate the time axis, such as the bubble chart, scatter chart, line chart, column chart, and more.

You can find the full list of charts that can accommodate the time axis in the chart types article.

Bubble chart with time axis
Bubble chart with time axis
Column chart with time axis
Column chart with time axis

Customization

Choosing Which Time Units are Displayed

By default, the time axis displays day, month, year. However, you can display different time units to suit your dataset using one of 18 recommended combinations:

  • Second, minute, hour
  • Second, minute, hour, day, month
  • Second, minute, hour, day, month, year
  • Minute, hour
  • Minute, hour, day, month
  • Minute, hour, day, month, year
  • Day, month
  • Day, month, quarter
  • Day, month, year
  • Week, year
  • Week
  • Month, year
  • Month, quarter, year
  • Month, quarter
  • Month
  • Quarter, year
  • Quarter
  • Year

Any other custom combinations will likely lead to undesirable results.

Developer Hint
Define which time units are displayed using the timeAxis.levels property.

Define the Layout of Your Time Unit Labels

By default, your time unit labels will be displayed in one or two rows depending on the zoom factor that is applied to the time axis at any given time. You will notice below that the time unit labels are not repeated in the bottom row so there is no unnecessary repetition of time unit labels.

Time axis with two rows of time unit labels
Time axis with two rows of time unit labels

It is technically possible to force the labels so that they are displayed in just one row as illustrated below, although this will only work in a satisfactory way for two time unit combinations: “year, month” and “quarter, year”.

Time axis with just one row of time unit labels
Time axis with just one row of time unit labels

If your chart is going to be displayed in a small space, you can choose to display the first date and the last date in your dataset as illustrated below.

Time axis displaying first date and last date only
Time axis displaying first date and last date only
Developer Hint
Define the number of time unit label rows using the timeAxis.levelConfig property. 

Just display the first date/time and the last date/time using the timeAxis.label.showFirstLastDateOnly property.

Formatting the Time Units

By default, the date unit labels follow SAP UI5 medium date formats which localizes the order of the time unit labels e.g. “7 Aug, 2016” (British) or “Aug 7, 2016” (American). However, three combinations will always be displayed in the same order: “year, quarter”, “year, week” and “quarter, week”. This is because these combinations are not supported by CLDR (Common Local Data Repository) localization standards.

You can use any of the other formats available in SAPUI5 such as “August”, “A” and “08”. However, due to the responsive behavior of the time axis, the zoom factor will affect the way that your time units are displayed.  Therefore, you must create and register a format for all potential permutations. For example; if you want to display ‘year, month, day’ you need to create and register separate formats for “year, month, day”, “month, day” and “year”.

Developer Hint
In order to apply standard SAPUI5 formatting to your dates and times, you must use the ChartFormatter and include the following lines of code:

var formatterInstance = sap.viz.ui5.format.ChartFormatter.getInstance(); sap.viz.ui5.api.env.Format.numericFormatter(formatterInstance).

This will apply the SAPUI5 Medium Time Format to your dates and times, for example Aug 7, 2017.

If you do not want to use the MediumTime Format, you need to create a custom format and register it using registerCustomFormatter and then apply it in timeAxis.levelConfig or timeAxis.CombinationConfig.

Defining the Initial View

By default, the time axis will render your chart from your first data point, with a scrollbar if necessary. However, you can decide which data points (or a specific time period) is initially displayed.

Developer Hint
In order to define the initial view, you must:

  • Set the window.start property to a specific date or time, or you can simply set it to firstDataPoint.
  • Set thewindow.end property to a specific date or time, or you can simply set it to lastDataPoint.

Managing Null or Missing Values in a Line Chart

If there are going to be null or missing values in your dataset, you can connect the available data points, or create a clear break between them.

Ignore missing values
Ignore missing values
Break missing values
Break missing values
Developer Hint
Set the plotArea.dataPoint.invalidity property to:

  •  Ignore, so it connects the data points that are available.
  • Break, so the line is broken between data points.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Mobile Integration

SAP Fiori applications can also use native mobile qualities, such as camera or GPS.

Guidelines

Here, we use the term “native mobile qualities” to refer to native device features that cannot be accessed using standard HTML or JavaScript code.

Examples of such features include:

  • Phone camera
  • Voice recording
  • Phone contacts
  • Phone calendar
  • Accelerometer
  • Compass
  • Vibration

In SAP Fiori, the general approach for embedding these features is to use native user interfaces triggered by an SAPUI5 control, wherever possible.

Advantages of using the native interfaces:

  • Any new features from native controls will be available immediately upon release.
  • Version maintenance for SAPUI5 controls is avoided.
  • Users are familiar with their respective platform interfaces.
  • Browsers will improve their access to mobile functionalities, making mobile features easier to access directly.

Although the use of native UI interfaces for mobile qualities should be the general direction for SAP Fiori apps, there will be cases where a specific custom user interface might be needed.

These exceptions should be discussed on a case-by-case basis to ensure as much consistency as possible across SAP Fiori interfaces.

Barcode Scanning

Information
Barcode scanning via the SAP Fiori Client is no longer supported. For details, see SAP Note 2992772.

Intro

This section contains guidelines for the mobile integration of a barcode scanner API in SAP Fiori applications. The general approach for dealing with native app capabilities is to use native user interfaces triggered by an SAPUI5 control whenever possible.

For more information, see mobile integration concept.

Usage

Only use the barcode button to read barcodes. For OCR, RFID, and other scanning methods, use independent controllers.

Behavior and interaction

Main Action

If the main interaction of the app is to scan, highlight the button as the main action.

Scan button in the header toolbar as the main interaction for an inventory app
Scan button in the header toolbar as the main interaction for an inventory app

Secondary Action

If scanning is not the main feature of the app, do not highlight the button.

 Scan button in the header toolbar as a secondary interaction
Scan button in the header toolbar as a secondary interaction
Scan button in a custom list item, available as an individual action for each item
Scan button in a custom list item, available as an individual action for each item

Scanner Unavailable

The barcode cannot be read if:

  • The scanner is disabled, not functioning, disconnected, or damaged.
  • The app is running in a “simple” browser (instead of the SAP Fiori client).
  • The SAP Mobile Platform server rendered the scan feature unavailable for the application.

Style

Icon

Font family: SAP icons (icon-bar-code). Unicode ID: e08d.

Barcode icon
Barcode icon

Guidelines

Guidelines for the Scan Button

  • Show the barcode button as a standalone button. Do not bundle it with input fields.
  • On the button, show an icon. Do not show a text.
  • Place the button in the header toolbar, or in the table toolbar for app-specific business actions. Only place the button in the content area if the scan action is available for individual items in the list.

Handling When the Barcode Cannot Be Read

Scanning Is the Main Action

Default to an alternative manual input option:

  • Offer a placeholder (input prompt) in the input field. For example: Enter barcode
  • Below the input field, explain the reason for the manual default: Scanner not available
  • Button for affirmative action: OK.
  • If the default is presented in a dialog box, offer a Cancel button.
 Scanner is not available - Users can enter the barcode manually
Scanner is not available - Users can enter the barcode manually

Scanning Is a Secondary Action

If scanning is not a main feature of the app and the barcode cannot be read, do not display the buttons. No warning is required, and a manual default input method is optional. This is also the case if the SAP Mobile Platform server has rendered the scan feature unavailable for the app.

Do
Barcode scanning is not the main interaction - Scan button is hidden when scanning is not available
Barcode scanning is not the main interaction - Scan button is hidden when scanning is not available
Don't
Do not show the scan button if scanning is not the main interaction
Do not show the scan button if scanning is not the main interaction

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Popover

The popover displays additional information for an object in a compact way and without leaving the page. The popover can contain various UI elements such as fields, tables, images, and charts. It can also include actions in the footer.

Note: The quick view is similar to a popover, but has a predefined structure, a fixed set of UI elements, and automatic UI rendering. Check first whether the quick view is appropriate for your use case.

Usage

Use a popover if:

  • You need to define your own structure.
  • You want to show UI elements that are not available with the quick view.

Do not use a popover if:

  • The quick view is more appropriate for your use case.
  • The objects are in the list in a list-detail layout (in this case, the details are shown in the details area).

Responsiveness

The popover can be used in the following ways:

  • Responsive and adaptive: sap.m.ResponsivePopover
    Shows a dialog on smartphones (to be closed with an X) and a popover on a tablet or desktop.
  • Non-responsive: sap.m.Popover
    Always shows a popover. Only use a non-responsive popover if it has very little content. On smartphones, the popover should not use more than a third of the phone’s real estate.

Layout

Structure of Popover

The header and footer are generally optional. The other elements are as follows:

Back (1) – optional
Needs to be implemented if the user can trigger further popovers. Always show popovers in place. Never place them on top of each other.

Title (2)
We recommend that you show an app-specific title for accessibility reasons. If you do not show a title, use the invisible text control (sap.ui.core.InvisibleText) to set a text for screen reader support.

Close function (3)
This feature closes the dialog. It is available for smartphones only and is set automatically (sap.m.ResponsivePopover).

Content (4)
Ensure that the content has a basic design and shows only the most important information. We recommend the following:

  • Use no more than two groups.
  • Limit the total number of fields to eight.
  • Use single-column tables.
  • Use micro charts.

Actions (5) – optional

Popover – General structure
Popover – General structure
Popover – Example
Popover – Example

Placement Types

The placement type defines how the popover will be positioned on the screen in relation to its trigger. The default placement is “Right”: the popover appears to the right of the object it relates to.

If you set the placement type to “Auto”, the position of the popover in relation to the reference control is determined automatically, depending on the available space.

Popover with default placement type - Right
Popover with default placement type - Right
Developer Hint
More information on the different placement types can be found here.

Modal Mode

The popover in modal mode opens in a modal window, which blocks the whole screen and attracts the user’s attention.

Use the modal mode only if you want to prompt the user to make a decision or confirm an action. Ensure that the user can close the popover, either by offering an action button in the footer or a Close button in the header.

Popover – Modal
Popover – Modal

Behavior and Interaction

Opening a Popover

The user opens a popover by clicking an object represented by a text link or an icon. To improve accessibility, we recommend using texts, such as the name or ID of an object.

Closing a Popover

The popover is closed when the user clicks outside the popover or selects an action within the popover.

Guidelines

  • Show status information as text fields in a content group. You can use semantic text colors.
  • You can define a height for the popover. If the content exceeds the height, a scrollbar is displayed.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Message Popover

The message popover control can display multiple messages of different types in one list. For example, it might show several messages related to entries in a form, or messages triggered by a finalizing action, such as Save.

The message popover is used in conjunction with a technical message manager, which populates the message list. If an error occurs at a validation point, the corresponding message is added to message popover automatically, without interrupting the user.

Users can browse messages by type and navigate to the message details. In some cases, they can also jump directly from the message to the affected field on the UI.

Message popover
Message popover

When to Use

Use the message popover if:

  • You want to display multiple messages to the user.
  • You do not want to interrupt users while they are performing an action.
  • Form fields are hidden when scrolling and issues may not be visible otherwise.

Do not use the message popover if:

  • You need to interrupt the user. In this case, use a message box.
    (Typically, interrupting the user is only necessary for technical problems, such as network errors and connection issues.)
  • You are using a small dialog. Showing a message popover would obscure important information, such as form fields that are in focus. In this case, rely on highlighting and inline messages to show issues with content fields. For more information, see Input Field.

Components

(1) Filter bar
(2) Short description
(3) Subtitle
(4) Section/subsection on the UI
(5) Message button
(6) Navigation to message details
(7) Counter for aggregated messages

Components of the message popover
Components of the message popover

Filter Bar

Initially, the filter bar shows all the different message types in the list (1).

Segmented buttons at the top of the message popover allow the user to filter the messages by type (error, warning, success, and information).

List

Short Description (2)

A simple and helpful short message text. It’s the same message as the one attached to the UI control where the issue occurred.

Subtitle (3)

You can use the subtitle to give your message an identifier. If the message relates to a specific field, show the label of the field where the error occurred. Based on the subtitle, the user should be able to identify the corresponding UI control on the UI (for example, the input field in a form).

When issues are in a table, the subtitle area can contain the identifiers of the row and column containing the issue (see Messaging for Tables).

Section/Subsection (4)

Messages in the list are grouped by the section and subsection on the UI. This helps the user to find the part of the UI that triggered the message.

Usually, the grouping reflects the hierarchy of the page. However, some messages relate to issues that do not belong to a particular field on a page, but result from an action. In this case, the group title is as follows:

  • Last Action: <Action Label> (Example: Last Action: Save)
  • Last Action (fallback solution)

When issues are in a table, the group header can contain the table name, along with title of the page section (see Messaging for Tables).

'Last Action' group in the message list
'Last Action' group in the message list

Navigation to Message Details (6)

If message details are provided, the message popover automatically provides a chevron on the right-hand side for navigating to the message details page.

If the popover contains only one message that also has message details, the message details page is displayed by default (see Behavior and Interaction).

Aggregated Messages (7)

If you want to aggregate messages, you can use the counter property of each list item.

  • The message popover only provides the counter property. The aggregation itself must be implemented by the app team.
  • When 2 or more messages are aggregated, the message short text cannot be a link because there would be multiple targets.

Message Button

If there are messages to display, the message button indicates the most critical message status in the list (5).

For example, if the list contains error messages, the message button inherits the error icon and semantic color. If the most critical message in the list is a warning, the message button shows the warning icon and corresponding semantic color, and so on.

In addition, the button contains a count indicating the number of messages of the most critical type.

Message button types - Error, warning, success, information
Message button types - Error, warning, success, information

If there are no messages to display, there is no message button. In this case, the footer toolbar contains only the “normal” actions for the task.

Message Details

The message details page shows:

  • The message short text (1).
  • A more detailed message text to explain the issue and propose a solution (2).
  • An optional link to more information, such as app documentation (3).
Details page of the message popover
Details page of the message popover

Messaging for Tables

The message popover includes information for locating issues in tables.

  • The group header contains the section name and table name (1). If the issue appears in a specific view, the group header also contains the view name.
  • The subtitle shows the identifiers of the row and column containing the issue (2).
    • If the row or column is currently hidden (for example, by table personalization), a “Hidden” text is shown.
    • If the field doesn’t show in the table itself but is part of a sub-object, only the row identifier is displayed (3).
Message popover displaying messages for a table
Message popover displaying messages for a table

Behavior and Interaction

When Does the Message Popover Open?

Form Field Validation

If one or more errors occur when the user fills out a form, the message button appears, indicating the message type of the most critical message. The message popover does not open automatically. For more information on the different validation points, see Form Field Validation.

Form field validation behavior
Form field validation behavior

Finalizing Actions

If the user activates a finalizing action (such as Create, Save, or Submit), the message popover opens automatically to inform the user about the errors on the UI that need to be resolved first.

Message popover triggered by a finalizing 'Save' action
Message popover triggered by a finalizing 'Save' action

If the popover contains only one message that also has message details, the message details page is displayed by default.

Message popover detailed view triggered by a finalizing 'Save' action
Message popover detailed view triggered by a finalizing 'Save' action

Navigation to Message Details

If the message provides a long text from the back-end system, the user can navigate to the message details. There, the user will typically find more information and help.

Navigation to message details
Navigation to message details

Navigation to the Relevant Field

In-Page Navigation

The navigation link takes users directly to the field on the UI that triggered the message. This can be a field in the visible area, a field somewhere else on the same page, or a field on another tab or screen.

Guidelines
Always add a navigation link, where possible.
Developer Hint
Set the navigation link with the activeTitlePress event. This allows users to click the message text in both the first and second page of the message popover.
Navigation from the message text to a field on the UI
Navigation from the message text to a field on the UI

Navigation to a Sub-Object or an External Page

Some errors are not visible on the page where the message popover is. They can be located on a sub-object page (an item of a table, for instance), or have a dependency in an external application.

If that’s the case, the navigation link leads to the target page with focus on the affected field.

If possible, provide a breadcrumb navigation on the target page. Also make sure that the back button of the shell bar leads back to the page where the message popover was.

Navigtion from the message text to a sub-object page
Navigtion from the message text to a sub-object page

Responsiveness

Size S (Smartphone)

On smartphones, the message popover is automatically shown in full screen mode.

Full screen message popover on a smartphone
Full screen message popover on a smartphone

Top Tips

  • Whenever possible, provide a navigation link from the message to the relevant field on the UI.
  • Use the message subtitle to indicate the field label.
  • In forms, also highlight the individual fields, and change their value state according to the type of message. For more information, see Form Field Validation.

Related Topics

Elements and Controls

Implementation

Chart – Zoom

x

The user can change the scale of an axis on a chart by using the zoom function. This function spreads or shrinks the scale of the horizontal or vertical axis. Both the categorical and continuous axes can be zoomed.

Example of zoom on a horizontal categorical axis
Example of zoom on a horizontal categorical axis
Example of zoom on a horizontal continuous axis
Example of zoom on a horizontal continuous axis

This type of zoom is called scale zoom (as opposed to optical zoom) because when the user zooms, only the scale and the encoding objects, such as bars, bubbles, and lines are changed, but all the text, the axis line, the legend, and icons remain identical.

Note that semantic zoom is not yet supported. Semantic zoom is only applicable if one dimension is hierarchical. It changes the level of the hierarchy currently displayed and aggregates data accordingly.

Zooming Direction

The zooming direction depends on the scrolling direction of the chart. The zooming direction cannot be changed since it is defined individually for each chart type.

For charts that scroll horizontally, the zoom changes the scale of the horizontal axis.

Zoom of a chart that scrolls horizontally
Zoom of a chart that scrolls horizontally

For charts that scroll vertically, the zoom changes the scale of the vertical axis.

Zoom of a chart that scrolls vertically
Zoom of a chart that scrolls vertically

For charts that do not have a specific scrolling direction, the zoom changes the scale of both axes.

Zoom of a chart that scrolls in both directions
Zoom of a chart that scrolls in both directions

How To Zoom

There are four ways of zooming:

  • Toolbar: Use the zoom icons in the chart toolbar.
  • Mouse wheel: Use Ctrl plus the mouse wheel to zoom in and out.
  • Gesture: On a touch screen, use the pinch and spread gesture.
  • Keyboard: Use the [+] and [-] keys to zoom in and out.

Toolbar Zoom Icons

The charts cannot be zoomed by default. This must be defined explicitly.

If you define the chart as zoomable, you must also declare the two zoom icons in the chart toolbar. These icons are correctly positioned in the toolbar and automatically pilot the zooming feature in the chart.

Zoom icons in the chart toolbar
Zoom icons in the chart toolbar

Zoom Settings

The user can control the zoom scale by defining the following settings:

  • Whether the zoom is enabled (property:interaction.zoom.enablement).
  • The initial range to be displayed (property:plotArea.window.start and property:plotArea.window.end).

No Initial Range

Zoomable Chart

This is the default setting of the charts.

The display starts with the first data point of the dataset, and the initial scale is calculated to avoid data points that are too small. A scrollbar is used if necessary. The user can zoom in to see more details or zoom out to see an overview of the dataset.

 

Non-Zoomable Chart

The first data point of the dataset is displayed. The scale is fixed and cannot be changed. A scrollbar is used if necessary.

Chart with no initial range
Chart with no initial range

Initial Range = Entire Dataset

Zoomable Chart

The chart is initialized to display the entire dataset, but the user can zoom in to see more details of the data points.

 

Non-Zoomable Chart

The chart always displays the entire overview of the dataset even when the chart is resized. The user cannot zoom the chart manually.

Chart with no initial range
Chart with no initial range

Initial Range = Subset of Dataset

Zoomable Chart

The chart is initialized to display the defined range. A scrollbar appears.

The user can zoom in to see more details of the data points or zoom out to see an overview of the dataset.

 

Non-Zoomable Chart

The chart is initialized to display the range. A scrollbar appears. As the user cannot zoom, the scale cannot be changed.

You must ensure that the data points are large enough to work on a touch screen. Therefore, this setting is only recommended if you know the size of the chart container in advance.

Chart with no initial range
Chart with no initial range

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

No links.

SAP Smart Business Framework

SAP Smart Business drilldown is an analytical app. It enables the user to view and analyze the data of one key performance indicator (KPI).

SAP Smart Business drilldown
SAP Smart Business drilldown

Responsiveness

SAP Smart Business pages are responsive, but work best on either desktop or tablet devices.

SAP Smart Business drilldown on desktop
SAP Smart Business drilldown on desktop
SAP Smart Business drilldown on tablet
SAP Smart Business drilldown on tablet
SAP Smart Business drilldown on phone
SAP Smart Business drilldown on phone

Layout

The page consists of a header and a chart area.

Behavior and Interaction

The header area (light blue bar) at the top contains a smart filter bar with KPI information and the facet filters. The facet filters act as a cross filter secondary to smart filters providing multiple dimensions. By clicking on the blue bar, you can open or close the filter area.

SAP Smart Business drilldown - Filter selection
SAP Smart Business drilldown - Filter selection
SAP Smart Business drilldown after filter selection
SAP Smart Business drilldown after filter selection

If the user clicks on the Show Mini Tiles button in the top right corner, the header expands and displays a set of tiles that contain KPIs and their corresponding micro charts. Tiles of the same KPI open a popover with KPI details as well as tiles with associated KPIs when clicked navigate to another dashboard.

SAP Smart Business drilldown with message popover on a KPI tile
SAP Smart Business drilldown with message popover on a KPI tile

When the header is collapsed and all the filters are set, maximum real estate is available for analysis of the content in the chart area below. The chart toolbar provides a number of standard interactions. You can switch between different views, chart types, and a table view. The chart can also be enlarged to full screen size.

 SAP Smart Business drilldown with one selected data point
SAP Smart Business drilldown with one selected data point
 SAP Smart Business drilldown with two selected data points
SAP Smart Business drilldown with two selected data points

Resources

Elements and Controls

Implementation

Table Toolbar

The table toolbar always appears above the table. The control is used for key actions that impact the entire table.

Usage

Use the table toolbar if:

  • There are multiple objects on your page and you need to edit only a single table.
  • You want to show actions as close to their corresponding controls as possible.
  • You need a title for your table.

Do not use the table toolbar if:

  • You are using single selection and have only one or two actions. In this case, place the actions on each line.

Responsiveness

To enable responsiveness, use the overflow toolbar control. For more information, see Toolbar Overview – Responsiveness.

Components

The table toolbar can contain several components, including a title and several types of button. Actions are grouped by the following action types:

  • Finalizing actions, such as Save or Cancel. Finalizing actions are app-specific and are used only if the table is editable.
  • Business actions, such as Edit or Create. Business actions can be app-specific or general object management actions.
  • Actions for managing the content, such as Sort or Filter. These settings are also known as “view settings”.
  • Generic actions, such as Export to Spreadsheet.

Between the groups, add a separator line.

The following content can be part of the table toolbar. Use only the content your users really need. For the remaining content, keep the order shown below:

  • Title
  • Variant management or content switch (for example, as used to switch between multiple views in a list report)
  • Search
  • Finalizing actions:
    • Save
    • Cancel
  • Business actions: Use this action type for app-specific actions. This group contains:
    • App-specific business actions
    • Actions for object management
      • Create (for new items) or Add (for existing items)
      • Edit
      • Delete (if the object itself is deleted) or Remove (if the reference to an item is removed)
    • Paste

The order of actions in this group is not “fixed”. Place all the business actions, except for Paste, in the order of their importance for the use case. Always keep Paste as the last business action in the group.

Try to keep Create/Add, Edit, and Delete/Remove together, but only if this is meaningful in your app.

All possible components in the correct order
All possible components in the correct order

Behavior and Interaction

App-Specific Business Actions

If needed, you can define your own actions for the app. In this case, use text-only buttons with a short, unambiguous text for the action the button performs. A button text is usually a single-word verb (for example, Share). Note that text strings can be longer in other languages.

Table toolbar with app-specific buttons
Table toolbar with app-specific buttons

Title

A title provides a short, meaningful summary of the content, mostly in a single word. To display a title, use the title control.

In addition, the title can be followed by an item counter (the number of items in parentheses). If no items are currently shown, remove the counter.

Use a title if you need the table toolbar, and if the title of the table is not indicated in the surrounding area. To avoid repeating text, you can use a generic text for the table title, such as Items. Note that the title is truncated if there is not enough space.

Title with item counter in the table toolbar
Title with item counter in the table toolbar

Variant Management

In tables, a variant stores all the settings that define the table view, such as the column layout, column visibility, sorting, filter settings, and grouping. The variant management control enables users to load, save, and change variants. In most cases, variant management replaces the title.

Variant management in the table toolbar
Variant management in the table toolbar

Title and Variant Management

If you need both a title and variant management, place the variant management control directly after the title. Use a separator between the title and variant management.

Since using both controls often leads to truncation problems, this pattern is not recommended.

Title with variant management
Title with variant management

Content Switch

To switch between different predefined views, use a select control or a segmented button. The content switch replaces the title and the variant management control. In the rare case that the content switch is shown together with a title, the content switch follows the title.

A predefined view contains settings for sorting, filtering, grouping, column layout, and column visibility. Nevertheless, in most cases, the content switch is just used for different filter settings like All, Mine, and Others. In this case, make sure that the content switch doesn’t interfere with other filter settings. For example, remove the corresponding filter from the filter bar. If possible, include an item counter per view.

Another common pattern for content switches are views like By X, and By Y, which are usually defined using group settings.

Use the segmented button and the select control as follows:

  • For a limited set of views (2-3), use the segmented button for desktop and tablet devices. Replace it with a select control if there is not enough screen space.
  • If the number of views can change or is larger than 3, use the select control.

For more information, see multiple views for list reports.

Segmented button with a counter
Segmented button with a counter
Segmented text button to switch content
Segmented text button to switch content
Select control to switch content
Select control to switch content

Search

For tables with a large number of items, consider adding a search field. Use a search field only if there is no other way to search within the table (for example, if there is no additional filter bar).

Place the search field on the right side of the toolbar. Since the search field cannot be moved into the overflow menu, always provide a minimum width.

Ideally, search for results in all columns. As a minimum, search in all currently visible columns.

For more information, see Search.

Search in the table toolbar
Search in the table toolbar

Edit

There are several options for editing a table:

Edit a Single Item

To allow the user to edit a single item, show an icon-only Edit button at the end of the item (depending on the table control, use sap.m.ListItemBase, property: type, value: sap.m.ListType.Detail or sap.m.ListType.DetailAndActive; or row actions). The user can click the button to trigger the edit event. Use this event to make the item editable.

Editing a single item
Editing a single item

Mass Editing

See: Mass Editing

Edit the Whole Table

To let the user edit a whole table, use a text-only Edit button. When the user triggers the edit action, switch the table to edit mode. In edit mode, do not show the Edit button and add the finalizing actions Save and Cancel instead. Remove any actions that are meaningless in edit mode. Keep the view settings available.

 Table in display mode with 'Edit' as the most important action
Table in display mode with 'Edit' as the most important action
Table in edit mode
Table in edit mode

Create / Add

Use a text button for Create or Add actions. If the Create or Add action is a main function, never move it into the overflow.

See also: Object Handling (Create, Edit, Delete).

Table toolbar with 'Create' button
Table toolbar with 'Create' button
Table toolbar with 'Add' button
Table toolbar with 'Add' button

Delete / Remove

Use a text button for Delete or Remove actions. In most cases, Delete is used together with Create, while Remove is used together with Add.

If the Delete or Remove action is a main function, never move it into the overflow.

See also: Object Handling (Create, Edit, Delete)

Table toolbar with 'Delete' button
Table toolbar with 'Delete' button
Table toolbar with 'Remove' button
Table toolbar with 'Remove' button

Show Details / Hide Details

Based on the responsive behavior of a table, data can be shown in the pop-in area. With the Hide Details / Show Details segmented button, users can switch between a full data set and a reduced data set.

The tooltip labels are as follows:

  • Hide: Show less per row
  • Show: Show more per row

This function is part of the view settings group and is displayed at the first position of this group.

For more information, see Smart Table.

'Show Details' function to show all data in pop-in area
'Show Details' function to show all data in pop-in area
'Hide Details' function to reduce data in the pop-in area
'Hide Details' function to reduce data in the pop-in area

Sort, Filter, Group

When the user chooses one of these actions, open the view settings dialog or the P13n Dialog with only the corresponding settings.

  • If sorting, filtering, and/or grouping is a common use case in your app, offer one, two, or all three of the corresponding features. Do not provide these features if the table is expected to have only a small number of entries (up to 20 in most cases).
  • If filtering is a main use case, do not offer filtering on the table toolbar; use the filter bar instead.

Always use only the view settings you really need. For example, do not offer grouping if it does not support your use case.

Ensure a consistent user experience. When a user reopens the app and if variant management is not used, show the table with the same view settings that were last defined by this user.

For more information, see Table Personalization.

Triggers for the different view settings (sort, filter, and group)
Triggers for the different view settings (sort, filter, and group)

Column Settings

Use the table personalization dialog or the P13n Dialog for adding, removing, and rearranging columns.

Offer column settings if you need more columns than those that fit on a tablet screen (which is usually five) to fulfill 80% of your main use cases. Before you do this, try to reduce the number of columns, for example, by using several lines per column or by using the pop-in feature.

Ensure a consistent user experience. When a user reopens the app and if variant management is not used, show the table with the same column settings that were last defined by this user.

For more information, see Table Personalization.

Table toolbar with 'Column Settings' button
Table toolbar with 'Column Settings' button

Export to Spreadsheet

The Export to Spreadsheet action allows the user to export table rows and is represented by an icon-only menu button.

Table toolbar with the 'Export to Spreadsheet' menu button
Table toolbar with the 'Export to Spreadsheet' menu button

Print

The action for printing table items is represented by an icon-only button.

Table toolbar with 'Print' button
Table toolbar with 'Print' button

Maximize / Minimize

To allow the user to show the table in full screen mode (property: ShowFullScreenButton), show the   Maximize button.  The user can exit the full screen by clicking the   Minimize button.

Table toolbar with 'Maximize/Minimize' button
Table toolbar with 'Maximize/Minimize' button

View Switch

View switches are right-aligned in the toolbar and allow the user to switch between different chart types and different controls for displaying items (for example list, responsive table, grid list). Provide the view switch if a chart relies on subtle color differences or gradients of color. In these cases, users with visual impairments can switch to the table view.

Switches are optional and do not have to be provided if there is no need to switch between different charts or tables.

Define the number of chart types and switches with care. Offer only chart types that are meaningful for visualizing the respective data and that best assist the user. Ideally, offer no more than three types of visualization.

The sequence of chart type switches is not fixed. Sort them in order of importance.

The chart type currently in use is highlighted. To show this, use a segmented button with icons.

For more information about the icons and the chart types they represent, see Chart Toolbar.

Styles

On the table toolbar, use the following button styles:

  • If the single primary action for the whole page is on the table toolbar, use the emphasized button style.
  • if the single primary action for the whole page is not on the table toolbar, you can still highlight the most important button of the table toolbar by using the ghost button style.
  • For secondary actions and negative path actions, use the transparent button style.
  • For split buttons and menu buttons, use the transparent button style.
  • Do not use semantic button styles on the table toolbar.

For more information, see Button and Action Placement.

Guidelines

To indicate if an action can be applied to the current selection:

  • Enable the action if it always works, regardless of whether or not items are selected.
  • Enable the action if it can be applied to all selected items.
  • Enable the action if it can be applied to some of the selected items. If the action is triggered, show a message that informs the user how many items will be affected. Let the user choose whether to apply the action anyway or cancel the action.
  • Only disable the action if:
    • The action can’t be applied to any of the selected items.
    • The number of selected items doesn’t match the action. For example, disable Compare if only one item is selected.

For more details, see UI Element States.

Message for an action that applies to a part of a selection
Message for an action that applies to a part of a selection

If the items are still available after the action was applied, keep them selected.

For further guidelines, see Toolbar Overview – Guidelines.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Tree Table

A tree table contains a hierarchical set of data structured in rows and columns and grouped into nodes. The analytical table (also know as ALV) can provide additional details in several non-hierarchical columns per line item. 

Usage

Trees are used to display and work with large amounts of hierarchical data. They have a high data density and therefore convey an immediate feeling of complexity. Ideally, you should only show trees with a lot of hierarchical data as a last resort. Try the following instead:

  • Break down the data into manageable chunks and allow the user to navigate or drill down between them.
  • Use charts with drilldown functionality until the amount of data is more manageable.

Responsiveness

A tree table is available for desktops and tablets, but not in smartphone sizes. It supports touch interaction devices, but is not optimized for small screens. For smartphones, you need to take an adaptive approach by offering an additional UI.

Possible solutions are as follows:

  • Use navigation to different pages instead of a tree structure. This works well for structures that are no more than four levels deep.
  • Remove levels until only one or two remain. Replace a single-level tree by a table, and a two-level tree by a grouped table or a split-screen layout.
  • Use filtering instead of a tree structure.

You can try to create a fallback based on these ideas, but a completely different solution, such as showing charts in a read-only case, might be more appropriate.

Tree table shown on a desktop
Tree table shown on a desktop
Tree table shown on a tablet
Tree table shown on a tablet

Types

Like all SAP Fiori controls, the tree table is shown in compact mode on a desktop and in cozy mode on tablets.

For a desktop, you can also display even more rows on the same screen height by adding the condensed mode in addition to the compact mode. This renders less white space for each item.

Note that the condensed content density has always to be set in addition to compact. Do not use condensed on its own. Do not mix condensed with cozy. Doing so could lead to unpredictable and / or unwanted results, e.g. cozy sized controls in condensed sized containers, missing paddings, etc.

Note that neither compact mode nor condensed mode can be interacted with touch. Even on a desktop with a touch screen, users will have difficulty selecting rows or using controls inside the cells when using their fingers.

Furthermore, condensed mode is not available for Internet Explorer 9. If condensed mode is to be used, please provide a fallback.

For more information on cozy and compact modes, see content density.

Compact Mode

Tree table – Compact mode
Tree table – Compact mode

Condensed Mode

Tree table – Condensed mode
Tree table – Condensed mode

Components

Column Header

The column header provides the label for the corresponding column and access to the column header menu.

Resizing columns works in the following ways:

  • Mouse interaction: Dragging the separator line between two columns (sap.ui.table. Column, property: Resizable). Double-clicking optimizes the column according to the length of the currently visible data and the label of the column header (sap.ui.table.Column, property: Autoresizable).
  • Touch interaction: The user taps the column header to reveal two buttons: one for showing the column header menu and one for resizing. Drag the latter to resize the column.
  • Keyboard interaction: The width of the focused column header can be increased with Shift+Right and decreased with Shift+Left.

After resizing a column, the adaptation of the column widths depends on how the column width is set:

  • If column widths are set in pixel-based units (px, em, rem), the corresponding column is adapted and following columns are moved accordingly. The width of all other columns is not affected.
    If all the columns together take up less width than the table control, an empty space is added. If all the columns together take up more width than the table control, a scrollbar appears.
  • If all column widths are set in percentage or “auto”, resizing one column might also lead to the automatic resizing of some or all other columns. The position of the resized column might also be affected. This is done to ensure that the whole table width is used and no white space is added. A scrollbar appears only, if all or most of the columns get very small. To avoid the unintended side effect of undersized columns, a minimum width can be set per column. Please be aware that this minimum width is only taken into account if columns are automatically resized. End users are still able to reduce the column width below the provided minimum. (sap.ui.table.Column, properties: width, minWidth)

Columns can be rearranged by dragging the column header to another position (sap.ui.table.TreeTable, property: enableColumnReordering). Keyboard: the focused column header can be moved by one position to the corresponding direction with Shift+Left / Shift+Right.

Tree table – Column header
Tree table – Column header
Opening the column header menu on touch devices
Opening the column header menu on touch devices
Fewer columns than space available
Fewer columns than space available

Line Item

A line item contains a set of cells and provides options for selecting the item.

To prevent adverse side effects when scrolling vertically, all line items must have the same height (sap.ui.table.TreeTable, property: rowHeight).

Tree table – Line item
Tree table – Line item

In rare cases, show the actions within the line item. One example would be an Add to Cart button in a shopping application. Since these actions are repeated in every line and thus use a lot of screen real estate, do this only for a maximum of one or two actions. Provide a separate column per action. Use a button, unless the action trigger belongs to a link. Hide the action in rows for which it is not applicable.

Tree Column

The first colum (tree column) provides the hierarchical structure.

Tree table – Tree column
Tree table – Tree column

Expand/Collapse Button

The expand/collapse button is offered on container nodes to allow the child items of the corresponding container to be shown or hidden.

Tree table – Collapse
Tree table – Collapse
Tree table – Expand
Tree table – Expand

Container Node

A container node is a line item that contains child elements.

Tree table – Container node
Tree table – Container node

Leaf Node

A leaf node is a line item that does not contain child elements.

Tree table – Leaf node
Tree table – Leaf node

Cell

Each cell provides one data point. It can contain one of the following controls to display the data point:

While it is technically possible to also use other controls, doing so could lead to issues in regards to alignment, condensed mode, screen reader support, and keyboard support.

If you use text, use only single-line text to keep the same row height. Truncate if necessary as this prevents adverse side effects when scrolling vertically (sap.m.Text, property: wrapping, value: false).

Tree table – Cell
Tree table – Cell

Tree Cell

A tree cell is a cell inside the tree column. Besides its data point, it provides a collapse/expand button on container nodes, and it indents the different hierarchy levels.

Tree table – Tree cell
Tree table – Tree cell

Column Header Menu

For the tree column, the column header menu can contain the menu item Freeze and a Filter field, in which the user enters free text.
For all other columns, only the free text filter is available.

Tree table – Tree column header menu
Tree table – Tree column header menu

Selection Cells

For multiselection tree tables, the first column contains checkboxes for selecting line items. Besides multiselection, the tree table offers a single-selection mode and also a read-only mode, in which line items are not selectable.

Tree table – Selection cells
Tree table – Selection cells

Select All

For multiselection tree tables, the column header can contain a checkbox above the selection cells for selecting or deselecting all line items.

Tree table – Select all
Tree table – Select all

Scrollbar

The tree table allows horizontal and vertical scrolling. You can add any number of line items to the tree table, which uses “lazy loading”.

To prevent adverse side effects when scrolling vertically, all line items must have the same height (sap.ui.table.TreeTable, property: rowHeight).

The tree table is optimized to allow faster scrolling within the first 1000 items.

Tree table – Vertical scrollbar
Tree table – Vertical scrollbar

Behavior and Interaction

Selection

The tree provides the following possibilities:

No selection: Items cannot be selected. (property: selectionMode = None)

Tree table – No selection
Tree table – No selection

Single selection: One item in the tree table can be selected. A row selector column is shown. (property: selectionMode = Single)

Tree table – Single selection
Tree table – Single selection

Multiple selection: One or more items can be selected. The tree table provides a column with checkboxes on the left-hand side. Clicking a checkbox toggles the state of the corresponding row from deselected to selected and back. The Shift key can be used to select a range.

For multiple selection, you can choose between two variants.

  • Multi-toggle mode (property: selectionMode = MultiToggle)
  • Multi-selection plug-in (sap.ui.table.plugins.MultiSelectionPlugin)

These variants behave differently when the user selects more items than are currently loaded in the front end.

Multi-toggle

In multi-toggle mode, you can offer a Select All checkbox to the left of the column header (property: enableSelectAll). Selecting this checkbox selects or deselects all items that are currently loaded in the front end (keyboard: Ctrl+A). All other items are not selected/deselected. If the application data is stored in the back end, scrolling down further can reveal additional unselected items. The same can happen with range selections if not all items in the selected range have been loaded to the front end.

Multi-selection plug-in

If you use this plug-in instead of the multi-toggle selection mode, the behavior for range selection and Select All changes:

  • By default, a dedicated Deselect All button replaces the Select All checkbox. There is no default UI element for selecting all items.
  • You can set a limit for the number of items that can be selected (sap.ui.table.plugins.MultiSelectionPlugin, property: limit). This limit has the following effect:
    • The range that can be selected using the Shift key is limited to the specified number of items (default = 200). The table automatically scrolls back to the last selected item and a message can appear (sap.ui.table.plugins.MultiSelectionPlugin, property: enableNotification). Users can select more items by selecting additional ranges (the specified limit applies each time).
    • If the selection limit is set to 0, a Select All checkbox is shown. There is also no limit on the number of items that can be selected in a range. All selected items are loaded, which can lead to performance issues for large data sets (Keyboard: Ctrl+A).
  • If selected items are not already available in the front end, they are loaded automatically by the plug-in and set as selected.
Information
When setting a limit for the number of items that can be selected, keep the following boundaries in mind:

  • The performance of your service: How many items can be loaded at once in a reasonable time? Does this also apply if an end-user shows all available columns?
  • The “minimum limit”: Internally, the grid table loads blocks of items as the user scrolls down. Because this block size (sap.ui.table.TreeTable, property: threshold) is usually also based on the performance of the service, it should be safe to assume that the minimum selection limit is twice this size. In this case, loading the data would take as long as scrolling down and loading exactly one more block. Nevertheless, we recommend using larger limits if your service allows.

Tree table – Multiple selection
Tree table – Multiple selection
Multi-selection plug-in with a limit
Multi-selection plug-in with a limit

Selection Behavior

An item can be selected in different ways, depending on the configuration of the tree table (sap.ui.table.Table, property: selectionBehavior):

  • Row: An item is selected by clicking the checkbox or the row. Use this option for multi-selection tree tables if clicking a row or a cell is not used for anything else.
  • RowSelector: An item is selected only by clicking the checkbox in the selector cell. Use this option if clicking the row (or a cell inside the row) is used for something else, such as navigation.
  • RowOnly: An item is selected only by clicking the row, and not using checkboxes in the selector cells. Use this for single-selection tree tables if clicking a row or a cell is not used for another purpose, such as navigation.

Set the property collapseRecursive to “false” in order to keep the selection on subnodes even after collapsing and expanding the root node.

Drag and Drop

One or several items can be repositioned within a table or moved to other UI elements using drag and drop operations (sap.ui.table.TreeTable, aggregation: dragDropConfig). While being dragged, the items are shown as ghost elements on the mouse cursor.

Drop targets can be on items, between items, or both (sap.ui.core.dnd.DropPosition). On a drop target, the mouse cursor changes to either a “copy”, “link”, “move”, or “none” cursor. “None” indicates that the dragged item cannot be dropped in the current position  (sap.ui.core.dnd.DropEffect).

Drag and drop is only available on supporting browsers.

Drag and drop
Drag and drop

Column Header Menu

Sort

The column header menu can provide two sort options (sap.ui.table.Column, properties: sortProperty, showSortMenuEntry):

  • Sort Ascending
  • Sort Descending

The user selects one of these options to sort the corresponding column accordingly (sap.ui.table.Column, properties: sorted, sortOrder, sortProperty).

Sort settings in column header menu
Sort settings in column header menu

Filter

The column header menu can provide a search field for entering free text. If the user enters a term in the input field and triggers the search by pressing Enter, the tree is filtered by the tree column and the corresponding value. If no items match the filter values, the filtered tree table may be empty.

Tree table – Filter
Tree table – Filter

Freeze Columns

The Freeze/Unfreeze option is provided in the column header menu of all columns. Using Freeze on one column freezes all columns from the first one to the selected one.

Tree table – Freeze
Tree table – Freeze

Column Handling

Show/Hide Columns

Columns can be shown and hidden. If the tree column is hidden, the following column is the tree column.

Rearrange Columns

The user rearranges columns by dragging and dropping the corresponding column header. The tree column is always the first column and cannot be dragged. Keyboard: the focused column header can be moved by one position to the corresponding direction with Ctrl+Left / Ctrl+Right.

Resize Columns

Columns are resized as follows:

  • Mouse interaction: The user drags the separator line between two columns (sap.ui.table. Column, property: Resizable). Double-clicking the line optimizes the column according to the length of the currently visible data and the label of the column header (sap.ui.table.Column, property: Autoresizable). Note that auto-resizing works only if the cells in this column contain one of the following controls: text, label, link, or input.
  • Touch interaction: The user clicks or taps the column header to reveal two buttons: One to show the column header menu, and one for resizing. The user drags the latter to resize the column.
  • Keyboard interaction: The width of the focused column header can be increased with Shift+Right and decreased with Shift+Left.

Context Menu

You can attach a context menu (sap.m.Menu) to a table. The context menu gives users an alternative way to modify the focused elements by giving them access to context-specific functions.

When opened, the context menu gets the row and column context, except for special columns (such as the selection column) or special rows (like group headers). Context menus can be implemented for a specific table, row, or cell (not recommended for editable cells).

Context menus are opened by right-clicking (desktop), long press (mobile), the context menu key, or Shift+F10.

Be aware that using the context menu overrides the browser context menu, which can no longer be opened.

If a control inside a table is the “click target”, and the control also provides a context menu, the control context menu “wins”.

Tree table with context menu
Tree table with context menu

Cell Content

The tree is traditional in that each cell can contain only one data point in one single line.

Apart from plain read-only text, cells can contain the following:

While it is technically possible to also use other controls, doing so could lead to issues in regards to alignment, condensed mode, screen reader support, and keyboard support.

If you use text, use only single-line text to keep the same row height. Truncate if necessary as this prevents adverse side effects when scrolling vertically (sap.m.Text, property: wrapping, value: false).

Guidelines

Filtering

What exactly needs to stay or be removed is highly dependent on the kind of structure and data your tree table displays. For many trees, the following approach works well if you want to apply filters only to the leaves of a tree:

  • Remove all leaves that don’t fit the filter criteria
  • Remove empty nodes

Where nodes need to be filtered, keep the following in mind:

  • A node may or may not fit the filter criteria.
  • A node can contain items (nodes and/or leaves) that fit the filter criteria.

Because of this, the results might contain more nodes than those that are relevant for the filter criteria.

Developer Hint
The tree table itself has no influence on the filter result. It sends a filter request and displays whatever comes back. Make sure that the result set is meaningful.

Sorting

First of all: Is sorting meaningful in your tree? If so, decide on a meaningful default sort order.

If sorting is meaningful, is it meaningful on all levels? Or does the tree structure need to be stable? In the latter case, sort only leaves, but not nodes.

Always sort the table in a meaningful way when it first loads. In most cases, this means sorting by the column that identifies the row. This is usually the tree column.

To display the current sort state, an icon is shown in the column header of the most recently sorted column. This icon indicates the sort direction (sap.ui.table.Column, properties: sorted, sortOrder, sortProperty).

The descending sort order must always be the exact reverse of the ascending sort order. For each column, provide a meaningful sort order. For example:

  • Sort text alphabetically
  • Sort numbers by their value
  • Sort status information by the severity of the status:
    • Ascending: Sort status information from positive to negative, with neutral last.
    • Descending: Sort status information from negative to positive, with neutral first.
    • Ascending with different values per severity level: Sort status information from positive to negative, with neutral last. Sort different values within a severity level (semantic color) alphabetically.
    • Descending with different values per severity level: Sort status information from negative to positive, with neutral first. Sort different values within a severity level (semantic color) alphabetically.

Loading Data

To indicate that the table is currently loading items, use the busy state (sap.ui.table.TreeTable, property: busy). Do not show any items or text. As soon as the data has been loaded, remove the busy state and show all items.

Initital Display

Think of the initial expand / collapse state of a tree: If your structure contains many items on the root level, it might make sense to collapse the whole tree in the beginning.

In contrast, if the main items to work with are displayed on a deeper level (e.g. the parent nodes are just some kind of categorization), the tree should be expanded up to the first level where the needed items appear.

Errors and Warnings

To indicate that the tree table contains items with errors or warnings, show a message strip above the tree table. On the message strip, provide information on errors or warnings. When issues are solved or when new issues appear, update the message strip accordingly.

For details on displaying errors, warnings, and other messages, see Message Handling.

Developer Hint
The sap.m.plugins.DataStateIndicator displays a message strip above the table, which shows binding-related messages.

Selection

  • We strongly recommend using the multi-selection plug-in. This ensures that all items selected using Select All or as part of a range are included – even if some items were not initially loaded in the front end. This is not the case if you use the multi-toggle option.
  • Do not limit the range selection for the multi-selection plug-in unless you have to.
    • If the dataset is small and/or completely available in the front-end, set the limit property to 0 to enable the Select All option and allow users to select any range.
    • If you have a large dataset, set a limit on the number of selected items to avoid performance issues. Also bear in mind that some actions won’t be helpful if the dataset is too big (for example, a delete operation on 2 million database entries).
  • When setting a limit, also display the corresponding message when the user selects more items at once than the limit allows (sap.ui.table.plugins.MultiSelectionPlugin, property: enableNotification).
  • For single-selection list-detail scenarios within the flexible column layout, do not show an additional “navigated” indicator.
  • In multiple selection mode, do not show checkboxes in the first data column in the default delivery to avoid confusion.
  • Never disable the selection checkbox. If an action can’t be performed on a specific item, inform the user after the corresponding action has been triggered. For more information, see Enabling/Disabling Actions.

Empty Table

Try to avoid empty tables. If necessary, provide instructions on how to fill the tree table with data.

Remove the item count in the table title if there are zero items.

Add Items

For adding items, place an Add or Create text button on the table toolbar.

  • Use Create if the button adds a brand new item that doesn’t yet exist on the database.
  • Use Add if the item already exists and is merely added or assigned to the current object.

Enable the shortcut Ctrl+Enter (and ideally Enter in addition) to trigger the Add or Create button.

Show new items as the first item of the tree table or node:

  • If nothing is selected, add the new item to the root.
  • If a single node is selected, add the new item to the selected node.
  • If a single leaf is selected, add the new item as child of this leaf. The original selected item becomes a node.

If your tree doesn’t support adding items to the root, selected node, or selected leaf, disable Create or Add for the corresponding levels.

Disable Create or Add if more than one item is selected.

There are three options for adding an item. In order of priority (most recommended first), these are:

  1. Add the item inline. Create an empty, editable row as the first item of the selected node. Show the Save button on the tree toolbar. This option is recommended for simple scenarios with just a few columns and no option to hide columns.
  2. Open a dialog for larger tree tables with up to 8 editable columns. Save the new item at dialog level.
  3. Navigate to a new page. This behavior should only be used for very complex scenarios that cannot be handled by a dialog (for example, tree tables with more than 8 columns). When the user presses Save in the footer toolbar of the create page, navigate back to the tree table.

Depending on the flow, an item can be in one of three different states:

  • New: The item was just created inline and is in edit mode (for example, after pressing the Create button). It is highlighted with a visual indicator (information state).
  • Recent: The item was just created and is in read-only mode (for example, if Create leads to a dialog, and Save was triggered within the dialog). In this case, keep the item highlighted and display it as the first item of the corresponding node. Ignore current sort, filter, and grouping criteria to keep the item visible.
  • Added: The item has been fully added. It follows the sort, filter, and grouping settings and also loses the visual highlight. This state is used after:
    • Inline creation: After Save was triggered on the tree toolbar or at page level.
    • Create with dialog: A tree table showing one or several items with the state “Recent” gets updated (for example, after sorting, filtering, or grouping, or when the browser is refreshed).

In the context of draft handling new items are not saved at tree table level, but rather with the entire draft.

For more details, see the guidelines for managing objects (including subarticles).

Columns

Minimize the number of columns. Avoid the need to scroll horizontally in the default delivery. In the first column, show the hierarchical data, which should identify the line item. Choose the name over the ID, but if both are needed, show the name first, then the ID.

The tree table assigns the same width to each column by default. It is recommended that you overwrite this default to provide optimal space for your content (sap.ui.table.Column, property: width).

If you define the column width in pixels or rems, resizing a column affects only the width of this specific column. Reducing the browser window size results in a scrollbar. After resizing a column, a scrollbar appears if the width of the table is not enough to show all columns. If the columns use less space than is available, white space appears on the right side of the last column.

If you define the column width as a percentage, resizing one column affects the width of several or all columns. Text becomes truncated when the browser window size is reduced. This is done to make sure that all columns together fill the space of the table. A scrollbar appears only in case the automatic change of the column widths is not enough to display all columns. To avoid the side effect of undersized columns, a minimum width can be set per column. Please be aware that this minimum width is only taken into account if columns are automatically resized. End users are still able to reduce the column width below the provided minimum. (sap.ui.table.Column, properties: width, minWidth)

If you define the column width as “auto”, the behavior is the same as for “percentage”. In contrast to percentage, “auto” distributes the columns equally.

To decide on how to set the column width (pixel/rem/em vs. percent/auto), keep the following tips in mind:

  • For tables with only 2 to 3 columns, use pixel-based units. This ensures that on wide screens the values in the columns are not spread over the whole screen, which improves readability of line items.
  • For tables with many columns, where a horizontal scrollbar is usually needed, use pixel-based units. This avoids unintended side effects when resizing columns.
  • For all other tables, use whatever fits your case better.

Be cautious with mixing columns with pixel-based and percentage-based widths. While this can be helpful in some cases, it could also cause even more unintended side effects when resizing a column. When using percentage-based widths for one or more columns, think of the possibility to not allow end users to resize columns at all.

Alignment of Cell Content

Align column headers according to their cell content:

  • Texts are left-aligned.
  • Numbers (except for IDs), dates, and times are right-aligned.
  • Icons are centered.
  • Micro charts are left-aligned.

In addition, align amounts with currencies to the decimal point. You can do this with the sap.ui.unified.Currency control.

Note that most currencies have two digits after the decimal point, but there are exceptions, for example:

  • The Tunisian dinar has three digits.
  • The Japanese yen has no digits.

In tree tables with mixed currencies, all amounts still have to be aligned to the decimal point.

To enable positive and negative values to be identified more easily, position the minus sign to the right of the number. It is placed in the same position in every row.

For more information, see currency.

Formatting Cell Content

  • Note that there are different locale formats, so show dates, times, and numbers in the correct format for the user’s language/country.
  • If you show both a a text and an ID, consider the requirements for sorting, grouping and filtering:
    • If users need to sort, group, and/or filter by both text and ID, show the text and ID in two separate columns.
    • If users only need to sort, group, and/or filter by either text or ID, show the ID in parentheses after the corresponding text.
  • If the unit of measurement is the same for all rows, show the unit of measurement in the column header. Otherwise, show the unit of measurement within the row.
  • If you want to let users sort, filter, or group by amount and by unit of measure independently, put both in different columns. If you combine them in one column, offer only sorting, filtering, and grouping by amount.

Tree vs. Table

Trees are more complex than tables due to their hierarchical view. Users tend to have more problems finding items in hierarchical views than in flat lists, except where the hierarchical view is natural. By natural we mean that every child node should be part of only one parent, and this relationship between the child and parent is clear and well known.

Do
Example of an acceptable use of tree tables
Example of an acceptable use of tree tables
Do
A clear parent-child relationship
A clear parent-child relationship

When you use trees, you should choose broad hierarchies over deep hierarchies. Deep hierarchies make finding items more complicated. So try to reduce hierarchical levels where possible, especially if the hierarchy is not natural. Ideally, a tree should have a maximum of four levels, the first two of which should contain the most important items.

Don't
Avoid unnecessary depth in the hierarchy
Avoid unnecessary depth in the hierarchy
Do
Favor breadth over depth in the hierarchy
Favor breadth over depth in the hierarchy

You can use the following methods to reduce hierarchy levels:

  • Avoid single root nodes. A single root node is often used to provide a Select All feature. Since the tree control provides an extra space for a Select All feature, the root node is not usually needed.
  • When you use only two levels, choose a grouped table or grouped ALV over a tree table control. Expand all groups for the default delivery.
  • Container nodes at the top level can usually be replaced by tabs or value pickers.
  • Eliminate unnecessary mid-level containers, for example, by combining redundant ones.
  • Exercise care when using a tree due to its overall complexity. The hierarchical structure of the data does not necessarily mean that a tree control is required.

Design Concepts

The tree table can be used to display large amounts of hierarchical data. Unfortunately, tree tables have a high data density and therefore convey an immediate feeling of complexity. Ideally, tree tables with large amounts of data should only be shown if there is no other option. You should instead try the following:

  • Flatten the data. A list, table, or ALV is still complex, but less so than a tree table.
  • Break down the data into manageable chunks. Allow the user to navigate or drill down between them.
  • Use charts with drilldown functionality until the amount of data is more manageable.

Try to avoid horizontal scrolling in the default delivery.

Navigation

To trigger navigation on line item level, choose one of the following options:

  • Use a link for the attribute that identifies the row. Clicking the link triggers the navigation. This is the preferred option.
  • Add the RowActions column and show the navigation arrow (  ) at the end of the row. No column header text is required. The navigation column is fixed and will not scroll away. Users also cannot personalize this column. The navigation arrow triggers the navigation.
    Do not use the RowActions column for actions other than navigation and deletion.

Special case: Multi-selection in a list-detail scenario
When a multi-selection table is used in a list-detail scenario, it is not clear which item was last opened (for example, which item is currently shown in the second column of a flexible column layout). In this case, you can display a “navigated” indicator to show which item is currently open.

Examples of Incorrect and Correct Usage

When you use trees:

  • Choose breadth over depth.
  • Emphasize important values. Do not let the user run into a wall of text without guidance. You can use bold text for this.
  • Try to minimize the number of columns, especially if there is a large number of rows.
  • Optimize column width for its initial visible content. Do not automatically adjust column width based on content changes.
  • Do not wrap content, truncate it. End users can easily change the column width to see the full text.
Don't
Avoid truncating the initial visible content in the default delivery
Avoid truncating the initial visible content in the default delivery
Don't
Never wrap texts
Never wrap texts
  • Maintain a fixed layout, except when the user wants to change it.
  • In the default layout, use the tree column for the item name or data that identifies the row. This helps the user to choose between different items.
  • Create a clear and immediately understandable hierarchy. Use clear parent-child relationships. If this is not possible, add a child in different nodes to help the user find the element.
Do
Acceptable: repeat entries to optimize finding items
Acceptable: repeat entries to optimize finding items
  • Consider persisting the layout settings. When a user reopens the app, show the tree table with the same column sizes, column order, and view settings as last defined by this user.
  • Use the Select All feature only if it makes sense. Note that selecting a lot of data also takes time and might not be appropriate for all use cases. For example, a delete operation on two million database entries might not be very helpful in many cases.
  • Set the property collapseRecursive to “false” in order to keep the selection on subnodes even after collapsing and expanding the root node.

Empty Tree Tables

Avoid empty tree tables. If necessary, provide instructions on how to fill the tree table with data (sap.ui.table.TreeTable, properties: noDataText, showNoData).

Examples:

  • If a tree table is initially empty, provide at least a basic text:
    No items available.
    Overwrite this whenever a hint can be provided on how to fill the tree table with data.
  • If a tree table is used together with a filter bar (as in the list report), and is initially empty, use the following text:
    No filters set. To start, enter your search and filter settings and run the search.
  • If a tree table is used together with a filter bar and the filter does not return results, use the following text:
    No items found. Check the search and filter settings.

Adapt the texts above if:

  • The standard text is not precise enough for your use case (for example, no search is offered, only the search is offered).
  • You are using the live search (no Go button in the filter bar). In this case, leave out “run the search”.
  • The standard text is misleading (for example, if the data is filled based on a list-detail pattern instead of search and filter settings).

Highlight Items

To show that an item needs attention, a highlight indicator can be shown in front of the item. The highlight indicator can be used to indicate:

  • A semantic state, such as red or orange for an error or warning. In this case, use semantic colors.
  • Additional information, such as blue to highlight newly added items. In this case, use semantic colors.
  • Industry-specific or process-specific states, such as “out of stock” or “excess of inventory”. In this case, use indication colors.

Be aware that the highlight is just an indication. It does not tell users exactly what is wrong. Make sure that you provide this information within the table row, ideally in the same color.

For details on the use of highlight colors, see How To Use Semantic Colors / Industry-Specific Colors.

(sap.ui.table.TreeTable, aggregation: rowSettingsTemplate)

Highlighted items
Highlighted items

Drag and Drop

Drag and drop is “invisible” on the UI: users can’t see where dragging is available and where it isn’t. In addition, there is no generic keyboard interaction. Drag and drop is also not available on all browsers. For these reasons, provide it only in addition to existing (and visible) UI elements that fulfill the same purpose. For example, offer (toolbar) buttons for moving or for copying and pasting items. These are keyboard operable and available on all browsers.

Use drag and drop only in addition to existing visible UI elements
Use drag and drop only in addition to existing visible UI elements

If you offer drag and drop for rearranging items within a tree table, use the following options:

  • For dropping items as a child, use whole nodes as drop targets (sap.ui.core.dnd.DropPosition.On).
  • For dropping items on the same level, use the space between items as drop targets (sap.ui.core.dnd.DropPosition.Between).
  • If you want to allow users to drop items as a child or sibling, offer both drop targets (sap.ui.core.dnd.DropPosition.OnOrBetween).

This provides better feedback on where the item will be inserted. Show the “move” mouse cursor (sap.ui.core.dnd.DropEffect.Move).

Drop target on an item
Drop target on an item

Do not combine rearranging items within one level and sorting. If you really need to do so, make sure there is a dedicated sort criterion for the user-defined sort order, and only offer options for rearranging items if this sort order is set.

Moving items from one node to another can be combined with sorting without any issues.

Don't
Do not combine rearranging items on the same level with sorting
Do not combine rearranging items on the same level with sorting

Visible Alternatives to Drag and Drop

Depending on the functionality you need, use one or more of the following alternatives:

  • To move items up or down within a node:
    Use the  Move Up and  Move Down buttons on the toolbar. These buttons move the selected items until the first selected item can’t be moved up / the last selected item can’t be moved down any further.
    Depending on your tree, this can make sense for both leaves and nodes, only for leaves, or only for nodes. When moving a node, move the whole node and (if applicable) all its children up or down to the next position within the parent node.
    Always make sure that when the user moves an item in one direction and then moves it back, the order is the same as it was before.
    Do not combine the option to move items up and down with sorting.
  • To move items to another node:
    Use Copy and Paste buttons on the toolbar.
    Alternatively, offer a Move To button. Clicking Move To opens a dialog that shows all the nodes of the tree, but no leaves. Selecting an item in this dialog closes the dialog and moves the corresponding items to the selected node.
  • To change the level of an item:
    In some trees, such as document structures, users can change the level of an item without affecting the level of parent or child items. In this case, use left and right arrow buttons (   ).

Context Menu

Use the context menu only to give users a quick way of accessing functions that are already available elsewhere (for example, as buttons in the toolbar). Don’t just offer actions in the context menu itself, as users might not realize that these actions are available at all.

The context menu can be triggered for the table, row, or cell. However, we do not recommend using context menus for cells: because the content of a cell is a different touch target than the cell itself, opening a cell context menu via touch is quite hard, even in cozy mode.

Do not combine context menus with condensed mode: editable controls fill the entire space inside a cell. Because of this, context menus cannot be opened at all with touch or mouse interaction.

Tables in Object Pages

In the object page, you can use a  responsive table or grid table and offer navigation to a list report with the previously mentioned table types. We advise you to use the analytical and tree tables in tab mode.

For more information on the use of tables within the object page, see the Tables section of the Object Page article.

Export to Spreadsheet

On the table toolbar, apps can provide a menu button for exporting table data to a spreadsheet. For the export, use the export to spreadsheet function.

'Export to Spreadsheet' menu button
'Export to Spreadsheet' menu button

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Micro Chart

Micro charts help you visualize a small number of data points in a small, non-interactive way. They can be embedded in tiles, SAP Smart Business drilldowns, and any SAPUI5 container (such as SAPUI5 tables).

Usage

Use the micro chart if:

  • You want to provide tracking at a glance.
  • You want to display changes in the data in an easy and condensed way.

Do not use the micro chart if:

  • You are looking for interactive analytics. Use the analytical card instead.
  • You want to display extensive data. Use the vizFrame chart instead.

Responsiveness

All micro charts are fully responsive. The size of the control adapts automatically to the size of the parent container and does not have a defined width or height.

Types

The following micro charts are currently available:



Choosing the Correct Chart Type

Charts are used to visually represent the relationships between numeric values. In order to choose the correct chart type, it’s important to define the type of relationship you want to illustrate.

Ranking

If you want to rank items from highest to lowest, or vice versa, we recommend using the comparison (bar) micro chart. For time-based categories, the column micro chart is more appropriate.

Micro charts for ranking
Micro charts for ranking

Comparison

To compare items that don’t have a particular order, you can use the comparison micro chart (offering category and value labels for each part) or the column micro chart.

Sometimes it can also be useful to show when a certain value reaches or exceeds a reference point (for example, when an actual value is compared to a target or forecast). In such cases, use a bullet micro chart. Keep in mind that the bullet micro chart shows data points for given points in time. Do not use it to show a time series.

To compare value totals within and across different categories, you can use the stacked bar micro chart.

Micro charts for comparison
Micro charts for comparison

Variation over Time

By convention, time is represented horizontally from left to right which means it’s best to use the horizontal axis to represent the time in chart visualizations.

To show changes in measures over time, you can use the line micro chart, the column micro chart, and the area micro chart. The exact chart type depends on the type of change you want to visualize.

If you want to emphasize the trend over time, use the area micro chart (which provides information for actual and target values, visualized and compared to threshold areas) or the line micro chart. If you want to emphasize the values themselves, use the column micro chart.

Micro charts for variation over time
Micro charts for variation over time

Part to Whole

You can use several chart types that depict the contribution of individual values to a whole.

The typical chart for visualizing part of a whole is the Harvey ball micro chart. This is most suitable if you want to display a single value compared to its total. To show a single percentage value, use the radial micro chart.

The stacked bar micro chart works best for visualizing different values as part of one whole; its bars are shown next to each other. The comparison micro chart is better if you want to compare parts to each other and display category labels and value labels associated with each part.

Micro charts for part to whole
Micro charts for part to whole

Deviation

These chart types visualize the difference or variance between two values (or two sets of values).

To show a time-related deviation between sets of values, use the area micro chart (for example, to show the difference between actual expenses and target expenses), or the line micro chart.

If you want to emphasize the deviating values, use the column micro chart (suitable for showing variances), or the comparison micro chart (offering category and value labels).

The bullet micro chart shows the difference between two values (actual and target) or three values (actual, target, and forecast) at a given point in time.

The delta micro chart helps to visualize a delta value (difference) between two main key figures, which can be time-related or category-based.

Micro charts for deviation
Micro charts for deviation

Distribution

To visualize how values are distributed within a set, we recommend using the column micro chart or the comparison micro chart (offering category and value labels). The stacked bar micro chart shows the distribution of values as part of a whole.

If you want to emphasize the shape of the distribution over time, use the line micro chart.

Micro charts for distribution
Micro charts for distribution

Behavior and Interaction

Clicking (Optional)

The micro charts include one interaction: a click event that can be switched on or off.

“No data” Text

When data is missing, a white rectangular placeholder with the text “No data” is shown instead of the chart. The size of the placeholder depends on the size of the chart. No labels and tooltips are shown. The “No data” placeholder can be focused, but it’s not possible to attach a click event to it.

Area micro chart without data
Area micro chart without data
Comparison micro chart without data
Comparison micro chart without data
Line micro chart without data
Line micro chart without data
Bullet micro chart without data
Bullet micro chart without data
Delta micro chart without data
Delta micro chart without data
Radial micro chart without data
Radial micro chart without data
Column micro chart without data
Column micro chart without data
Harvey Ball micro chart without data
Harvey Ball micro chart without data
Stacked bar micro chart without data
Stacked bar micro chart without data

Guidelines

Truncation

Never truncate numeric labels, as this could be misleading for the user. If there is not enough space for the label, hide it.

“No data” Text

If the micro chart is placed in the cell of a table and there is no data for the chart, leave the cell blank (empty).

Micro charts without data in table cells
Micro charts without data in table cells

If the chart is used in the micro chart facet of the object page header and data is missing, make sure the footer of the facet is removed as well if it doesn’t add any value for the user.

Micro charts without data in the object page header
Micro charts without data in the object page header

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Busy State

You can set a busy state for each SAPUI5 control. This function adapts to the space available on the UI.

When to Use

Use the busy state of the control if:

  • The operation takes more than one second (busy state set at control level)
  • You want to indicate that data is loading on a table or on a list after performing a search or filtering (set the busy state at table or list level).

Do not use the busy state if:

  • The operation lasts less than one second.
  • You expect several busy states at once. In this case, consider setting the busy state at a higher level or container.
  • You’re loading an app from the launchpad or navigating from an app to another. Use placeholder loading instead (when available in your framework).

Examples

Busy page
Busy page
Busy buttons
Busy buttons

Guidelines

Avoid showing multiple busy states at once. If you expect multiple busy states on various controls, you can set the busy state on a control or container above.

In some cases, however, it makes sense to allow multiple busy states. For example, a page could contain a form and several tables that load asynchronously. In this case, it does not make sense to set the busy state at page level until all the data is loaded as the user can start filling out the form which is already available. Response times may vary due to table data retrieval from different services.

Try to enable as much as possible on one screen, so the user can start working while the rest of the data is being loaded in the background. Set the busy state for those UI elements that will require some time to load.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Busy Dialog

The busy dialog informs the user about an ongoing operation. During the operation, the entire screen is blocked.

Usage

Use the busy dialog if:

  • The user should not be able to start any other activity during an operation, and the screen needs to be blocked while the operation is ongoing.
  • The operation lasts more than one second.
  • You want to indicate loading in a page-to-page navigation.

Do not use the busy dialog if:

  • The operation lasts less than one second.
  • The screen is not supposed to be blocked. In this case, use the busy indicator or busy state of the control instead.

Responsiveness

The busy dialog is fully responsive and can be shown in compact and cozy mode.

Busy dialog - Compact mode
Busy dialog - Compact mode
Busy dialog - Cozy mode
Busy dialog - Cozy mode
Busy dialog on smartphone
Busy dialog on smartphone
Developer Hint
To switch to compact mode for a dialog, you need to use:

jQuery.sap.syncStyleClass(“sapUiSizeCompact”, this.getView(), this._oDialog);

For more information, see the SAPUI5 Demo Kit.

Components

The busy dialog can consist of several components and is configurable. The following properties can be set:

  • Title: By default, it has no title. Define a title if you need to provide more context.
  • Text: Additional text can be added above the busy animation.
  • Cancel:(Property:showCancelButton) A Cancel button is displayed. There is no Cancel button by default. The label is also configurable via Property.cancelButtonText.
  • Icon: A custom animation icon can be set via Property:customIcon.

If no title, text, or Cancel button is set, the busy dialog displays only the busy icon (busy dialog, lightweight version).

Busy dialog with 'Cancel' button
Busy dialog with 'Cancel' button
Busy dialog without 'Cancel' button
Busy dialog without 'Cancel' button
Busy dialog - Lightweight version
Busy dialog - Lightweight version

Guidelines

Lightweight Version (No Title, Text, or Cancel Button)

  • Use the lightweight version for page navigation (see live example).
  • If you do not show a title or text, use the invisible text control (sap.ui.core.InvisibleText) to provide the reason for the busy state to users with assistive technologies.

Developer Hint

The additional text should be associated to the busy dialog using ariaLabelledBy association.

Busy Dialog with Text

  • Do not use the title of the busy dialog.
  • If a busy dialog is triggered directly by the user, provide a precise text describing the operation. The text can be as short as one verb:
    • Loading…
    • Refreshing…
    • Sending…
  • If the busy dialog is not directly initiated by the end user, use at least one sentence to describe the operation. Start either the first or the last sentence with Please wait. For example: The system is busy searching data. Please wait until data is loaded.
  • Recommendation: Do not use the invisible text control when you show text in the busy dialog.

Busy Dialog with Text and Cancel Button

  • Offer Cancel if you expect the process to run more than 10 seconds. In addition, always display text that precisely describes the ongoing operation.
  • Do not change the mouse cursor to indicate the ongoing operation.
  • Recommendation: Do not use the invisible text control when you show text in the busy dialog.

Timing and Duration

We recommend displaying the busy dialog one second after the process has been triggered and for a minimum time of 500 ms to avoid flickering. For processes that last less then one second, a busy dialog is not displayed at all.

Example: A process takes 1.3 s in total. After one second, the busy dialog is displayed. The process finishes in 1.3 seconds. To avoid flickering, you should display the busy dialog for at least 500 ms, so you will need to add 200 ms to avoid flickering.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Busy Indicator

The busy indicator informs the user about an ongoing operation.

Busy indicator - Medium and Large
Busy indicator - Medium and Large
Busy indicator - Small
Busy indicator - Small

Usage

Use the busy indicator if:

The ongoing operation covers only part of a screen that has multiple controls, and:

  • You need to display additional information, or,
  • The user needs to be able to cancel the operation.

Examples

  • File Upload: The file upload dialog contains multiple upload operations. The user must be able to cancel each operation. Since the operation is related only to one row and not to the full app, there is no need to block the whole screen. The user still needs to interact with the system, in this case to select the next file to be uploaded.
Example: Busy indicator for file upload
Example: Busy indicator for file upload
  • Table Rows: Each row in the table has an action related to the table item. Clicking the Run button in a specific row changes status of the current item. The user is still able to work on the other items or cancel the current operation.
    Since each SAPUI5 control provides a busy state by default, you could also set the busy state at row level. In this case, however, there would be no option to cancel the operation.
Example: Busy indicator in table rows
Example: Busy indicator in table rows

Do not use the busy indicator if:

  • The operation takes less than one second.
  • You need to block the screen because the user is not supposed to start another activity. In this case, use the busy dialog.

Components

The busy indicator is a blue circle and can also display a text description.

Busy indicator text
Busy indicator text

Guidelines

  • Do not change the mouse cursor to indicate the ongoing operation.
  • Do not use a custom progress indicator icon.
  • Try to avoid showing multiple busy indicators at once.

Properties

The size of the busy indicator can also be changed.

Busy indicator sizes
Busy indicator sizes

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Message Box

The message box (sap.m.MessageBox) is a special dialog that allows you to display messages to the user. Compared to the message popover (sap.m.MessagePopover), you can use the message box to display messages that are not related to a field on the UI, such as technical errors.

Formulate messages in plain language (no code), describe the issue precisely, and suggest a constructive solution. Always help your user to recognize, diagnose, and recover from messages. Bear in mind that no message is always preferable to even a good message. When you design your apps, aim to prevent problems from occurring in the first place.

Developer Hint
You can create a message box using the sap.m.MessageBox control or by using the sap.m.Dialog control with the type Message.

Usage

Use the message box if:

  • You want to display non-field-related messages.
  • You want to interrupt the user while he or she performs an action.
  • You want to display error, warning, success, confirmation, or information messages.
  • You need to interrupt the user for some other reason.
  • You need the user to acknowledge the message.
  • You need the user to make a decision.

Do not use the message box if:

  • You want to display a short success message. (Use a toast instead. For more information, see Message Toast.)
  • You can show the message directly in a form field.

Responsiveness

The sap.m.MessageBox control has the same responsive behavior as the sap.m.Dialog control. The message box should only be opened in modal mode. Its basic width is 25 rem. For more information, see Dialog.

Types

The following categories of messages are available:

  • Error
  • Warning
  • Success
  • Information
  • Confirmation

Error Message

Error messages can be triggered after the user has entered incorrect data or a system error has occurred. They should interrupt the user by displaying a dialog. A final action such as Submit cannot be carried out until the user has rectified the error.

Control: sap.m.MessageBox
Icon: sap-icon://message-error
Title: Error
Stretch: False (no full screen on all devices)

Error message with one action
Error message with one action
Error message with two actions
Error message with two actions

Text guidelines for an error message:

  • Do not just describe the problem; tell the user how to resolve it.
  • In the short text, speak the language of the end user. Do not include system or configuration details.
  • If the solution is more involved or technical, add a long text.
  • Do not repeat the short text in the long text. They both appear together on the screen.

Warning Message

Warning messages highlight potential issues, but the user can still continue. This includes unintended data loss scenarios.

Control: sap.m.MessageBox
Icon: sap-icon://alert
Title: Warning
Stretch: False (no full screen on all devices)

Use cases for warnings

a) No decision required: Formulate the message as a statement.
Button(s): OK

Warning message with 'OK' button
Warning message with 'OK' button

b) Decision to continue required: Formulate the message as a statement.

Button(s): OK, Cancel

Warning message with 'OK' and 'Cancel' buttons
Warning message with 'OK' and 'Cancel' buttons

c) Specific decision required, with one action

Use a relevant action button. The message may also be formulated as a question.
Button(s): Leave Page, Cancel

Warning message with action and 'Cancel' buttons
Warning message with action and 'Cancel' buttons

Success Message

Success messages give feedback to the user that an action has been executed. The user needs to acknowledge the message.

Guidelines
You should generally use a message toast (sap.m.MessageToast) to display success messages.

Only use a message box for success messages in exceptional cases.
Example: A success message contains key information that users must be able to copy.

Control: sap.m.MessageBox
Icon: sap-icon://message-success
Title: Success
Stretch: False (no full screen on all devices)
Button(s): OK

Success message
Success message

Information Message

Information messages provide information the user needs to acknowledge, but which does not involve a decision. The message provides information that is useful and relevant, but never critical.

Control: sap.m.MessageBox
Icon: sap-icon://message-information
Title: Information
Stretch: False (no full screen on all devices)

Button(s): OK

Information message
Information message

Confirmation Message

Confirmation messages prompt users to confirm an action that they have triggered. The title of the message box already includes the action that has to be confirmed, such as an intended deletion or an approval.

Control: sap.m.MessageBox
Icon: sap-icon://question-mark
Title:  (such as “Approve”, “Reject”, or “Delete”)
Stretch: False (no full screen on all devices)

Button(s): Approve, Cancel

Confirmation message
Confirmation message

Confirmation Message with “Note” Section

Developer Hint
The image belows shows a “Note” section which allows the user to add notes, for example in a “Reject” process. This feature is not provided by the sap.m.MessageBox. Instead, you can use a normal sap.m.Dialog and place those controls inside the confirmation message.

Confirmation messages prompt users to confirm an action that they have triggered. The title of the message box already includes the action that needs to be confirmed, such as an intended deletion or an approval.

Control: sap.m.Dialog
Type: Message
Icon: sap-icon://question-mark
Title:  Such as “Approve” or “Reject”
Stretch: False (no full screen on all devices)

Button(s): ApproveCancel

Confirmation message with note
Confirmation message with note

Confirmation for “Delete”

If the user clicks Delete, display a “Delete” dialog that confirms the delete action.

Control: sap.m.MessageBox
Icon: sap-icon://alert
Title: Delete
Stretch: False (no full screen on all devices)

Button(s): Delete, Cancel

 

Use cases for delete confirmation messages in object page and list reports

a) No context is available. For example, neither the ID nor the description of the business object are available at the time of deletion.
Body text: Delete this <object>?

Confirmation for 'Delete' action
Confirmation for 'Delete' action

b) The ID of the object is available.
Body text: Delete <object> <object ID>?

Confirmation for 'Delete' action with object ID
Confirmation for 'Delete' action with object ID

c) The object ID and description are both available at the time of deletion.
Body text: Delete <object> <object ID> “<object description>”?

Confirmation for 'Delete' action with object ID and description
Confirmation for 'Delete' action with object ID and description

Deleting several objects

If more than one object is being deleted, do not display the object ID and description.
Body text: Delete the <n = optional> selected <objects>?

Confirmation for 'Delete' action with several objects
Confirmation for 'Delete' action with several objects
Developer Hint
The default text in SAP Fiori elements will be slightly different, usually using the default term “object” to designate the item to be deleted. When using SAP Fiori elements, replace “object” with the correct business object name. For more information, see Introduction to SAP Fiori Elements – Adjustments.

Components

The message box contains the following sections and options:

Title: Title text appears in the message box header.

Content: This area contains the actual content of the message box.

Footer with actions: The footer can contain one or more buttons. We recommend limiting the number to two: A primary action and a negative path action.

Example of a message box structure
Example of a message box structure

Show Details button

The message displayed for the user should provide sufficient information to ensure that the user knows what has happened. A message box without an explicit details section should be sufficient. Therefore, the Show Details link is only shown if detailed information is available that differs from the message text and is important for the user.

If details are available, the application has three options to display the text. Text can be displayed as:

  • Plain
  • Formatted
  • The original code format
Message details - Plain text
Message details - Plain text
Message details - Formatted text
Message details - Formatted text
Message details with code excerpt
Message details with code excerpt

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Date Picker

The date picker lets users select a localized date using touch, mouse, or keyboard input. It consists of two parts: the date input field and the date picker.

Use this control if the user needs to enter a single date or a date range. The control also allows users to navigate directly from one month or year to another.

Usage

Use the date picker if:

  • You need a range and know that your user is a power user who has to input lots of data. If the keyboard is the primary device used for navigating the app, use two input fields. This allows the user to quickly jump from field to field. By selecting a date in one of the fields, the other field should know what is selected and jump to the same selection.

Responsiveness

The date picker provides responsive behavior that allows for simple operation on all devices. It is smaller in compact mode and provides a touch-friendly size in cozy mode.

Clicking the date picker button opens the popover in full screen. To close it, the user can select a date (which triggers the close event), or click Cancel without selecting a date. Clicking the date input field allows the user to type and does not open the date picker popover.

Date picker on a smartphone
Date picker on a smartphone
Date picker on a desktop device
Date picker on a desktop device

Components

The date picker has two components: the date input field (1) and the date picker button (2). On all devices users can either use the input field to type a date or use the date picker button to open the date picker calendar.

Date picker with input field and button
Date picker with input field and button

Date Input Field

In the input field, the user can enter a date directly or select it using the date picker. The system validates the entry and provides the user with feedback. You can also show placeholder text in the field.

It is possible to add additional descriptive texts to the input field (a unit of measurement, for example) by using a new association in the sap.m.InputBase control called ariaDescribedByThe association is responsible for referencing the elements that describe the control.

Date Picker

With the date picker, the user can see a day view, month view, year view, or year ranges.

The current day (1) and the selected date (2) are highlighted. The calendar week is also visible in the day view. The calendar closes when a final day is selected. The user can click the arrows to navigate to the previous and the next day (3), month (4), or year view (5), depending on the current view. To select a date the use can use the calendar (6).

The selected date is shown with a blue background. The current day is indicated with a purple border and owns the focus.

The date picker can also show special days, which are highlighted with a colored line at the bottom of the date cell. For more information about the colors and legend, see Legend for Highlighted Days.

Date picker with a selected date and the current date
Date picker with a selected date and the current date
Clickable areas of the date picker
Clickable areas of the date picker
Date picker with highlighted days
Date picker with highlighted days

You can change the default focus “today” to another date. This can save users several clicks when they create events. For an event end date, for example, the focus should propose a date in the future (after the start date).

Use case-specific focus date
Use case-specific focus date

Month and Year Views

The month and year views can be used separately in a month or year picker. The year ranges are related to the year view and are not used separately. Selecting a year range navigates back to the year view, not the day view.

Month view in the date picker
Month view in the date picker
Year view in the date picker
Year view in the date picker
Year ranges in the date picker
Year ranges in the date picker

Footer

You can add a footer with OK and Cancel buttons to the date picker popover. However, we advise against this unless it’s very important that the user can pick multiple values (day, month, year) without closing the popover.

The default and recommended behavior is to close the date picker popover upon selection of the day (or month/year for the month and year pickers).

Date picker with footer
Date picker with footer

Behavior and Interaction

Selecting a Date

The user selects a date by clicking it. After the user selects a day, the calendar closes and the date appears in the date input field.

Date selection
Date selection

Clicking the arrow shows the next day, month, or year view.

Navigating to the next month
Navigating to the next month

If the current month is clicked, the view changes to the month view and the user can change the month.

Switching to month view
Switching to month view

By clicking on a month, the user changes the month and the view changes to the day view.

Selecting another month
Selecting another month

The user can similarly change the year. By clicking the current year, the view changes to the year view. After the user selects a year, the view changes back to the day view.

Switching to year view
Switching to year view

After the user selects a year, the view changes back to the day view. The date in the date input field stays the same until the user selects a new date.

Selecting another year
Selecting another year

“Today” Button

You can offer a shortcut for navigating to the current date (sap.m.DatePicker, property: showCurrentDateButton). This displays an additional Today icon button ( ) in the navigation part of the calendar. Pressing this button sets the focus to the current date.

This feature is available for pickers that enable selection of individual days. For the others, the property has no effect.

Selecting the current date with the 'Today' button
Selecting the current date with the 'Today' button

Styles

Value States

The date picker supports the following value states:

  1. Regular
  2. Positive
  3. Warning
  4. Error
  5. Information

You can display a value state text for error, warning, and information states to provide hints for the user.

For more information on how to use the different semantic states, see How to Use Semantic Colors.

For more information about different value states, see UI Element States.

Date picker value states
Date picker value states

Guidelines

Date Formats

Long Date Format

Use the long date format for a list in a list-detail layout / object list item / title and object header / title. Here are some examples:

  • English (US): January 16, 2022
  • German (DE): 16. Januar 2022
  • Danish (DK): 16. Jan. 2022

Short Date Format

Use the short date format for a list in a list-detail layout / object list item / list of object attributes if space is a concern. For example, you might need to save space if there is a label with the date. Here are some examples of the short date format:

  • English (US): 1/16/22
  • German (DE): 16.01.22
  • Japanese (JP): 22/01/16

Relative and Medium Date Format

If appropriate, use a relative format for a list in a list-detail layout / object list item / list of object status. For example: today, 1 day ago, 2 days ago, and so on up to 6 days ago. After 6 days, use an absolute date with the medium format.

Use the absolute date with medium format in the corresponding object header in the details area. Do not use the relative format here.

Responsive Table

If screen space is at a premium (for example, if there are too many columns), use the short date format in table cells. Otherwise use the medium format.

If you need to display the weekday, use the full format. For example:

  • English (US): Sunday, January 16, 2022
  • German (DE): Sonntag, 16. Januar 2022
  • French (FR): dimanche 16 janvier 2022

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Message Toast

A message toast (sap.m.MessageToast) is a small, non-disruptive popup for success messages that disappears automatically after a few seconds.

Usage

Use the message toast if:

  • You want to display a short success message.
  • You do not want to interrupt users while they are performing an action.
  • You want to confirm a successful action.

Do not use the message toast if:

  • You want to display an error or warning message.
  • You want to interrupt users while they are performing an action.
  • You want to make sure that users read the message before they leave the page.
  • You want users to be able to copy the message content to the clipboard (such as a product or transaction number). In this case, use a success message dialog instead.

Responsiveness

The message toast has the same behavior on all devices.

Layout

Position

The message toast is always centered horizontally at the bottom of the screen.

Message toast on a desktop
Message toast on a desktop

Width

The standard width of the toast is 15 rem, and text that exceeds this width will wrap.

Behavior and Interaction

Choreography

When an action is successful, the message toast fades in and out automatically. The timing and duration of the message toast is defined by the application team.

Users can also keep the message toast on screen with the following keyboard shortcuts:

  • Ctrl + Shift + M (Windows)
  • Cmd + Shift + M (Mac OS)

Navigation

In some scenarios, the action that triggers the message toast also triggers navigation to a different page (for example, after a save or submit action).

In this case, always navigate first, and then show the message toast on the target page.

Only show the message toast on the same page if no navigation is involved.

Exception: success message dialog

If you need to interrupt users before they leave the current page, do not use the message toast, but a message box (sap.m.MessageBox, property: type – success), which includes a success message. For more information, see message box.

Information
Only put a success message in a message box if your use case requires explicit user interaction, such as copying an order number to process it. We strongly recommend using a message toast where possible.

Animation

Set the duration of the animation according to the length of the message text: the longer the text, the longer the duration should be. The message does not react to the user’s focus.

Guidelines

Message Toast Texts

To make the toast message easy to scan, keep the text as short as possible. Remember that the user will not have time to take in very much detail.

Do not use the word “successfully” in the message text. This is implicit in a success message.

Patterns

For standard actions (such as create, save, delete, or send), we recommend using the following patterns, depending on your use case.

Use Case Use Case Variant Pattern (EN) Example (EN)
Single item Object name is not needed.

Hint: If the name or ID is not crucial feedback in your context, leave it out.

[object] [action taken] Sales order created
Object name is needed.

Hint: If you mention the object name, you can often leave out the object type (usually obvious in the context).

[name] [action taken] SAP added to customer group
Multiple items [item count] [objects] [action taken] 2 sales orders were deleted.
Multiple actions Single items, object names are not needed 1 [object] [1st action taken], 1 [object] [2nd action taken] 1 product added, 1 product removed
Single items, object names are needed.

Hint: Only include object names if the user really needs the specific feedback.

[object] [name] [1st action taken], [object] [name] [2nd action taken] Product A was added, product B was removed.
Multiple items [item count] [objects] [1st action taken], [item count] [objects] [2nd action taken] 2 products added, 3 products removed

Notes:

  • The exact phrasing will depend on your target audience and the conventions in your app family. If an action is repeated regularly by a heavy users, be as brief as possible (for example, Order deleted). If your app is typically for occasional users, a full sentence might be more appropriate (for example, Your request has been sent to the support team.).
  • Bear in mind that long object names can increase the length of the message toast. Remember to allow for this when defining the toast duration. If long or multiple object names make the toast too cumbersome to read, leave them out. If you really need to list them in a success message, use the success message box instead.
Do
Toast without ID
Toast without ID
Don't
Do not use
Do not use "successfully"
Do
Toast with item count
Toast with item count
Don't
Do not list names of multiple items
Do not list names of multiple items

SAP Fiori Elements

If you are using SAP Fiori elements, remember to replace the “object” placeholder with your business object.

For more information, see SAP Fiori Elements – Mandatory Adjustments.

Do
Replace
Replace "object" with your specific business object
Don't
Do not leave the
Do not leave the "object" placeholder

Properties

You can change the values of the following properties. Only change the values if the standard values don’t work for your use case.

Position: We recommend that you always use the initial value (horizontally centered, at the bottom of the page).

Duration: The standard value is 3,000 ms. You can set a duration of more than 3,000 ms, but do not use less than 3,000 ms.

Offset: Do not change this value.

Auto-close: True/false

Example of a message toast
Example of a message toast

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Slider

A slider is a control that enables the user to adjust single values within a specified numerical range.

Slider example
Slider example

Usage

Use the slider to change values with graphical support.

Responsiveness

The slider itself is not responsive. It adjusts to the responsiveness of its parent container by recalculating and resizing the width of the control.

The slider supports the cozy and compact form factors. The compact form factor is used for apps that run on devices operated by a mouse and keyboard.

Types

Only a horizontal slider is available.

Behavior and Interaction

Changing the Value

If the slider is editable, the hand cursor appears when the user hovers over the grip.

The user can change the slider setting in two ways:

  • By using drag and drop to adjust the grip
  • By clicking the bar. The grip then moves to this new position.

The grip can be moved with or without increments based on the predefined steps.

Changing the value
Changing the value

Slider with Text Fields

The slider can be used with text fields instead of tooltips. In this case, the value of the grip is displayed.

Slider with text field
Slider with text field

Slider with Input Fields

The slider can be used with input fields instead of text fields. This allows the user to enter a specific value.

Slider with input field
Slider with input field

Slider with Tick Marks

You can apply tick marks to the slider. The tick marks are related to the step property, and are responsive. If the distance between 2 tick marks is less than 8 px, all tick marks except for the first and last disappear.

Slider with tick marks
Slider with tick marks

Slider with Tick Marks and Labels

If tick marks are set, you can define labels for the tick marks. The labels are displayed below the tick marks and show the corresponding value of the tick mark. The labels must always be numbers, and must never overlap. You can also define labels only for specific tick marks if you don’t need a label for every tick mark on the slider. The application developer is responsible for defining a reasonable set of tick marks.

If there is not enough horizontal space to display all the labels, a responsive mechanism is activated. The first and the last label are always visible.

Slider with tick marks and labels
Slider with tick marks and labels

Custom Values

You can define custom values as labels. This can be useful if your scenario requires descriptive intervals, such as as dates. Always keep the values as short and meaningful as possible.

Slider with custom values as labels
Slider with custom values as labels
Developer Hint
In order to use custom scales in a slider, you must map them to the floats for the slider scale.

Styles

The slider can be shown with or without a progress bar. By default, the progress bar is shown.

Examples

Slider without progress bar
Slider without progress bar
Slider with progress bar
Slider with progress bar

Properties

  • The step property must be positive. If a negative number is provided, the default value 1 is used instead.
  • The minimum, maximum, and value properties can be decimals (float values). The slider automatically sets the minimum value to 0 and maximum value to 100 by default.
  • The width of the control can be provided in %, em, px, and all possible CSS units. The slider automatically sets the width of the slider to 100% by default.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Label

A label is the name or title of a control or group of related controls.

Every field needs a label. If you use one label for a group of fields, use a combined label and invisible text to label the single fields.

Label 'Name'
Label 'Name'

Usage

Use the label control if:

  • You need a label for a control.
  • Always use labels for form controls.

Do not use the label control if:

  • You want to insert a heading in the column header of a table.
  • You want to use it as an alternative for the text control. Do not use the label control to display the data (for example, in display-only forms).

Required/Optional Fields

In edit mode, the label indicates whether an entry is mandatory (“required”) or optional.

If a field is required, an asterisk is shown after the label text. The asterisk is only visible in edit mode, and not in display mode.

In the image:

  1. Required, edit mode
  2. Required, display mode
  3. Optional, edit mode
  4. Optional, display mode
Information
To indicate that a field is required, set the required property to true.
Label for required and optional fields
Label for required and optional fields

Label Placement

In forms, you can place the label above the field value (recommended), or right-align the label next to the field value. For more information, see Label Alignment.

The position of a label can depend on the screen size. For example, the labels in a form can appear next to the input fields on larger screens, but move above the input fields when the screen size is reduced.

Labels next to the field and labels above the field (recommended)
Labels next to the field and labels above the field (recommended)

Styles

For better differentiation of labels and values, labels are displayed differently in a display-only environment than in an editable environment.

Wrapping

Automatic wrap only applies to labels within forms to avoid truncation.

Do not use wrapping to enable long labels. Instead, keep your labels short: a label is not a help text. It must be meaningful, succinct, short, and descriptive. For more information about the responsive behavior of text, see Wrapping and Truncating Text.

Developer Hint

The boolean wrapping property for the sap.m.Label control determines whether or not the text wraps .
Note: Only use this property in forms.

Labels in a form (edit and read-only modes, horizontal alignment)
Labels in a form (edit and read-only modes, horizontal alignment)

Hyphenation

The label control also supports hyphenation for wrapped texts (property: wrappingtype = Hyphenated). Switching on hyphenation activates it for all languages that have hyphenation support.

Guidelines

  • Always use a label for form controls.
  • Always set the vertical alignment for labels that display outside a form and flex box (property: VAlign). You can set the vertical alignment in tables and object page header facets, for example.
  • Use title case for labels.
  • Do not use a placeholder (input prompt) instead of a label.
  • You can display labels in bold text, but we recommend using the regular font weight.
  • A label is not a help text: it must be meaningful, succinct, short, and descriptive.
  • Reserve space for translation. For more information, see UI Text Space Calculator.

Exceptions

The layout can sometimes be simplified by using a placeholder instead of the label control. This exception can be applied in the following cases:

  • In search fields. For more information, see Search.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Size of the Chart Container

The property “autoAdjustHeight” helps to correctly manage the sizes of charts contained in a chart container.

Size

The width and height of the chart container are never defined explicitly by the app. They are always set by the container itself.

  • The width of the chart container is always resized to spread 100% of the width of its parent.
  • The height of the chart container depends on the property “autoAdjustHeight“, as explained below.

Width

The chart container automatically sets the width of the charts to 100%, regardless of the width manually set to each individual chart. That means when using the chart container, the app cannot change the width of the charts.

Height

You can choose to have the height of the chart automatically adjusted by the chart container, depending on the property autoAdjustHeight.

Use of autoAdjustHeight = false

Always use autoAdjustHeight = false when the charts are embedded in a vertically scrolled page.

When autoAdjustHeight = false, the size of each chart needs to be set manually and the height of the chart container will adapt to the height of each chart.

  • For charts that scroll horizontally, use a height in pixel.
  • For charts that scroll vertically, use a height in pixel big enough so that there is no vertical scrolling.
Chart in a vertically-scrolled page
Chart in a vertically-scrolled page

Use of autoAdjustHeight = true

Always use autoAdjustHeight = true when the charts are embedded in a frame.

When autoAdjustHeight = true, the height of the chart container is set to 100% of its parent.

Each chart is automatically resized so that it uses 100% of the chart container.

No setting is required on the chart level, since everything is done automatically.

Chart in a frame
Chart in a frame

Please consider:

  • The property autoAdjustHeight = true only works correctly if the page property enableScrolling is set to false.
  • Frames can be coded with the SAPUI5 control FixFlex.

For more details refer to the resources below.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Value Help Dialog

Intro

The value help dialog is a UI pattern that helps the user search and select single and multiple values. The user can also define conditions.

The value help dialog is generally called from an input field or a multi-input field by clicking the selection icon (value help icon) of the input field.

Clicking the value help icon opens the value help dialog
Clicking the value help icon opens the value help dialog

Usage

Use the value help dialog if:

  • The user is searching within a dataset that contains more than 1,000 items.
  • The user needs to use different attributes to find an object (such as city, company name, and so on).
  • The user needs to define conditions, such as ranges and exclusions.

Do not use the value help dialog if:

  • There is a simpler control that fits the use case. Always start with the least complex control. For example, use the select control if the user needs to select only one item from a short list.
Information
For more information on which selection control to choose, see the selection control overview.

Responsiveness

The behavior of the value help dialog on a phone differs from its behavior on a tablet or desktop device. Both the navigation and the positioning of the selection area differ depending on the device.

Value help dialog - Sizes L and XL
Value help dialog - Sizes L and XL
Value help dialog - Size M
Value help dialog - Size M
Value help dialog - Size S
Value help dialog - Size S

Components

The value help dialog contains the following components:

1) Header
2) Icon tab bar / list control (phone)
3) Search template (optional)
4) Basic search
5) Go button
6) Result list
7) Selected items and conditions
8) Footer toolbar
9) Filters
10) Area for defining conditions, such as ranges and exclusions

Header (1)

The header bar contains the dialog title. See the Guidelines section below.

Icon Tab Bar / List Control (Phone) (2)

Depending on the device, the following controls are used to display the content of the value help dialog:

  • Smartphones: The start dialog provides a list (sap.m.List) with the standard list items (sap.m.StandardListItem), Search and Select, and Define Conditions to navigate between the different dialogs.
  • Tablet and desktop devices: The value help dialog contains an icon tab bar (sap.m.IconTabBar) to navigate between the Search and Select and the Define Conditions tab.
  • Both controls have a counter in the title that indicates the number of items/conditions selected.

Search Template (3)

Search templates allow the user to display different or additional fields in the filter area and result list. Depending on the use case, the user can switch between the different search templates in order to use different fields when searching. For example, the search template “Customer (by Company Code)” displays the additional field “Company Code” in the filter area and result list.

Basic Search (4)

The basic search finds all results that are somehow related to the input. For example, the search term “A” returns all the results containing the letter “A”.

Always offer the basic search in the value help dialog. Position the basic search to the right of the search template control. If there is no search template control, left-align the basic search.

Go Button (5)

The Go button triggers the search and filters the result list.

Result List (6)

  • The result list is populated on initial load by default.
  • If you transferred values from the input field to the basic search field of the value help dialog, the results are filtered accordingly. Only the entered (or modified) value is transferred to the basic search. Type-ahead suggestions are ignored. The search is triggered automatically when the dialog opens.
  • If available, display the ID and description of the business object in the first and second columns. Display additional information in the next columns.
  • We recommend a maximum of five columns in the result list.

Selected Items and Conditions (7)

The selected items and conditions are displayed in a tokenizer (see Token for more information). Each selected item or condition is displayed as one token.

There is no longer a visual difference between included and excluded items and conditions. They are now differentiated using operators (see Using the Filters).

Footer Toolbar (8)

The footer bar offers the OK and Cancel buttons.

Filters (9)

The filter area offers a filter field for each column in the result list. In some cases, there can be specific filter fields that do not have a corresponding column on the UI. These fields typically come from the back-end service. Initially, the filter area is hidden.

Value help dialog - Filters
Value help dialog - Filters

For the basic search with filters, the filter bar (sap.ui.comp.filterbar.FilterBar) is implemented in advanced mode. Advanced mode differs from the basic mode in the following ways:

  • There is no Filters link or a dialog to make additional filter fields visible. All filter fields are added automatically to the filter area.
  • There is a toggle button to show and hide the filters.
  • In each of the filter fields, users can use operators like “between” or “lower than” to define conditions.

Always hide the filter area in the value help dialog by default. Only show the filter area by default if the basic search can’t be provided.

Note that the value help icon of the Product ID field in the current value help dialog will open only the Define Conditions screen. The full value help dialog is not shown in order to prevent endless loops. For example, the value help icon of the Product Name or Category field in the value help for a Product field will navigate directly to the Define Conditions: Product screen.


Using the Filters

Users can enter operators (such as “=“) to define the conditions directly within the field without opening the Define Conditions tab.


Operator Input Notation Example
between valuevalue 000100
equal to =value =0001
contains *value* *1*
starts with value* 001*
ends with *value *5
less than <value <100
less than or equal to <=value <=200
greater than >value >0300
greater than or equal to >=value >=0500
not between !(valuevalue) !(000100)
not equal to !(=value)  !(=0)
does not contain !(*value*)  !(*1*)
does not start with !(value*)  !(001*)
does not end with !(*value)  !(*5)
not less than !(<value) !(<100)
not less than or equal to !(<=value) !(<=200)
not greater than !(>value)  !(>0300)
not greater than or equal to !(>=value)  !(>=0500)
empty <empty>   <empty>
not empty !(<empty>)    !(<empty>)

Note:

Depending on the underlying field, the operators may be labeled differently in the Define Conditions area. This doesn’t affect the input notation, which is based on the operator logic and remains constant.

Example: Operators for Date Fields

Operator Label Input Notation
before <value
before or on <=value
after >value
after or on >=value

 


Users must use the following notation to get results:

Using an operator to filter the result list
Using an operator to filter the result list

Area for Defining Conditions (10)

In the Define Conditions tab, you can use the following operators to define single and multiple conditions:

  • between
  • equal to
  • contains
  • starts with
  • ends with
  • less than
  • less than or equal to
  • greater than
  • greater than or equal to
  • empty
  • not between
  • not equal to
  • does not contains
  • does not start with
  • does not end with
  • not less than
  • not less than or equal to
  • not greater than
  • not greater than or equal to
  • not empty

For convenience, the operators are grouped into two categories: Include and Exclude.

For Boolean attributes, where only two values are available, the operator dropdown in the condition panel is disabled. Users can pick one of the values from the combo box.

You can also use a combo box if the possible values for a condition are fixed. Users can then choose the value they need from the list.

Each condition is displayed as a token in the Selected Items and Conditions tokenizer.

Information
The operator dropdown list may not contain all the operators listed above. The type of field value determines which operators are available.

The type of field value also determines how the operators are labeled. For example, if the field is a date field, the operator labels “less than” and “greater than” change to “before” and “after”.

Developer Hint
For information on how to manage white space characters (blanks) when users copy and paste text into input controls, see Removing Leading and Trailing White Space.
'Define Conditions' - List of operators
'Define Conditions' - List of operators
Defining a condition for a Boolean attribute
Defining a condition for a Boolean attribute

Behavior and Interaction

Basic Search and Filters

  • The basic search (mandatory) and filters (optional) are triggered by clicking the Go button. The search results are shown in the result list.
  • If data was already entered in input field from which the user triggered the value help, this data is transferred to the basic search and the results are then filtered accordingly.
  • The basic search performs a search across all fields that are displayed in the filter area and the result list.

Selecting Items and Defining Conditions

Depending on your use case, the value help dialog can offer different selection options:

  • Select a single item
  • Define a single condition
  • Select multiple items
  • Define multiple conditions
  • Select multiple items and define multiple conditions

Users open the value help dialog by clicking the value help icon in the input field. The next steps depend on the use case and form factor (smartphone or desktop/tablet).

The different use cases are described in the sections below.

Select a Single Item (Smartphone)

Tapping the value help icon opens the dialog. As soon as an item is selected, the value help dialog closes automatically.

Single item selection on a smartphone
Single item selection on a smartphone

Select a Single Item (Desktop/Tablet)

Clicking the value help icon opens the value help dialog for single selection. The icon tab bar and the Selected Items and Conditions are hidden. As soon as an item is selected, the value help dialog closes automatically.

Single item selection on a desktop/tablet device
Single item selection on a desktop/tablet device

Define a Single Condition (Smartphone)

Tapping the value help icon opens the Define Condition tab. Users define a condition by choosing the relevant operator and entering the value or values in the corresponding input field(s).

In this example, we have defined a range.

Defining a single condition on a smartphone
Defining a single condition on a smartphone

Define a Single Condition (Desktop/Tablet)

Clicking the value help icon opens the Define Condition tab. Users define a condition by choosing the relevant operator and entering the value or values in the corresponding input field(s).

In this example, we have defined a range.

Defining a single condition (desktop/tablet)
Defining a single condition (desktop/tablet)

Select Multiple Items and Define Multiple Conditions (Smartphone)

Tapping the value help icon displays the start dialog.

  • The Search and Select tab is used to select multiple items.
  • The Define Conditions tab is used to define multiple conditions.
  • The counters in the titles of both tabs represent the number of selected items/defined conditions.

All selected items and conditions are added as tokens to the Selected Items and Conditions (n) field at the bottom of the start dialog. The counter n indicates the combined number of items selected and conditions defined.

Start dialog
Start dialog
Selecting multiple items on a smartphone
Selecting multiple items on a smartphone
Defining multiple conditions (smartphone)
Defining multiple conditions (smartphone)
Filters on a smartphone
Filters on a smartphone

Select Multiple Items and Define Multiple Conditions (Desktop/Tablet)

Clicking the value help icon displays the icon tab bar with the Search and Select and Define Conditions tabs.

  • The Search and Select tab is used to select multiple items
  • The Define Conditions tab is used to define multiple conditions.

All selected items and conditions are added as tokens to the Selected Items and Conditions (n) field at the bottom of the dialog. The counter n indicates the combined number of items selected and conditions defined.

Selecting multiple items and conditions on a desktop
Selecting multiple items and conditions on a desktop
Selecting multiple items and conditions on a desktop
Selecting multiple items and conditions on a desktop

Define Multiple Conditions (Smartphone)

Tapping the value help icon opens the start dialog with the Define Conditions tab.

The selected values are added as tokens to the Selected Conditions at the bottom of the start dialog.

Start dialog
Start dialog
Defining multiple conditions on a smartphone
Defining multiple conditions on a smartphone

Define Multiple Conditions (Desktop/Tablet)

Clicking the value help icon opens the Define Conditions tab.

The selected values are added as tokens to the Selected Conditions at the bottom of the start dialog.

Defining multiple conditions on a desktop
Defining multiple conditions on a desktop

Copying and Pasting Multiple Values

The area for defining conditions allows the user to enter multiple values at once (copied from the clipboard).

Users can paste more than one value into the value input field. In this case, the condition row repeats with the previously selected condition and shows one value per row.

If there is no vertical space for the conditions, vertical scrolling is added to the top of the dialog.

Copying and pasting multiple values
Copying and pasting multiple values

Guidelines

Dialog Title

The dialog title differs depending on the device and whether multiple or single selection is used.

For smartphones:

  • Start dialog: [Object] (for example, Company)
  • Search and Select Dialog: Search and Select
  • Filters dialog: Show Filters
  • Define single condition: Define Condition
  • Define multiple conditions: Define Conditions

For tablet and desktop devices:

  • Selection of multiple items combined with selection of multiple conditions: [Object] (for example, Company)
  • Single item selection: Select: [Object] (for example, Select: Company)
  • Define single condition: Define Condition: [Object] (for example, Define Condition: Company)
  • Define multiple conditions: Define Conditions: [Object] (for example, Define Conditions: Company)

Filtering

If necessary, also provide value help for fields offered in the filters. However, do not provide the full value help dialog for the ID and description fields of the business object that is being selected. For these two fields, make sure that the value help icon opens only the Define Conditions screen.

For example, in a value help dialog for selecting the customer, do not offer full value help for the Customer ID and Customer Name fields. Instead, try to use the value help in combination with a helpful suggestion.

Constant Parameters

You can use constant parameters to pre-filter suggestion lists, dropdowns, and the value help results list. Users can’t change these parameters.

Do not show parameters with constant values as filterable fields in the filter bar of the value help dialog or in the result table columns. Constant values should not be visible to users in any way.

Related Links

Elements and Controls

Implementation

Link

A link (also known as hyperlink) is an interactive text element.

Different links visualizing the various link types
Different links visualizing the various link types

Usage

Use a link if:

  • You want to navigate to another page.
  • You want to trigger an event.
  • You want to point to an object or person. If so, you can either navigate to the object’s/person’s details or display them in a quick view after the link is triggered.

Do not use a link if:

  • You could use a button to trigger the action instead.
  • The link text is the key identifier of an object. In this case, use an actionable object identifier instead.
  • There is no target or reference to be linked to.

Responsiveness

The link can either truncate or wrap. Favor wrapping over truncating and keep the link text as short and meaningful as possible.

For more information and guidelines on the responsive behavior of text, see Wrapping and Truncating Text.

Wrapped (first) and truncated (second) link
Wrapped (first) and truncated (second) link

Types

There are four different link types:

  • Default
  • Emphasized
  • Subtle
  • Link with icon
Guidelines
Use a meaningful link text that indicates what will happen when the user interacts with the link (for example, Open Sales Order). Avoid texts such as Click Here or Link, as these do not meet accessibility standards.
Default, emphasized, subtle link, and link with icon
Default, emphasized, subtle link, and link with icon

Default

Use a default link if you want to display a simple link.

Default links
Default links

Emphasized

Use an emphasized link for extraordinarily important links that need to attract the user’s attention quickly.

Emphasized links
Emphasized links

Subtle

Use subtle links to distinguish between important (default) and less important (subtle) links when the app page is full of various links (10+). Subtle links allow you to improve the visual hierarchy in large data lists and tables.

Subtle links
Subtle links

Link with Icon

Use the link with an icon when the user expects and profits from the icon in the UI context. Please note that the icon is supportive, which means that it supports the text next to it. Therefore, a tooltip is not required. Do not use the icon for additional information.

Guidelines
Use the link with icon only if the icon is internationally well-known and easily understood. For example,  (world),   (calendar), or (theater).
Links with icon
Links with icon

Behavior and Interaction

To trigger the event or navigation, the user clicks the link. It provides visual feedback for “hover” and “focused” states.

If the link cannot be triggered due to, for example, a disabled content area part, display the disabled state.

Default, hover, focused, and disabled link
Default, hover, focused, and disabled link

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Chart – Reference Lines

Intro

You can add reference lines to highlight certain values. Reference lines can be added to continuous axes, but not to categorical axes.

Single Reference Line

Bar chart with vertical reference line
Bar chart with vertical reference line

Multiple Reference Lines

Line chart with 3 horizontal reference lines
Line chart with 3 horizontal reference lines

Colors

Simple Reference Lines

Use simple reference lines if the area or limit they represent does not carry a semantic meaning. In this case, all the lines have the same color and only the labels differ.

Bar chart with 3 reference lines and no semantic colors
Bar chart with 3 reference lines and no semantic colors

Semantic Reference Lines

Use semantic reference lines if you want if you want to show easily distinguishable limits or areas in semantic categories. You can use between one and a maximum of all four semantic colors in one chart. The semantic colors are used as follows:

  • Negative (red)
  • Critical (orange)
  • Positive (green)
  • Neutral (gray)

 

Bar chart with 3 semantic reference lines
Bar chart with 3 semantic reference lines

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Chart – Legend

The legend explains the meaning of all the visual elements contained in the plot area.

Layout

You can decide where you want to legend to be positioned. By default, it is displayed to the right of the plot area, but it can also be displayed below it when the chart scrolls horizontally. However, we recommend displaying to the right of the plot area when you have many legend items.

Legend at the bottom
Legend at the bottom
Legend on the right
Legend on the right

Responsiveness

When the legend is displayed to the right of the plot area, it automatically moves to the bottom when the horizontal space is reduced as illustrated below.

Responsive legend
Responsive legend
Responsive legend 2
Responsive legend 2

Behavior and Interaction

Show/Hide Legend

The legend can be hidden or shown via a dedicated standard button in the chart toolbar (not a toggle button). The visibility of the legend changes each time the button is pressed.

Select Legend Item

Clicking a legend item selects or deselects all the associated data points. It does not show or hide them, although this functionality is in the roadmap for this control.

Custom Legend Items

By default, the chart component displays a legend based on the dataset and the colors used by the chart. All colors displayed in the chart are listed in the legend.

By default, the order of the legend item is the same as the order used to render the dataset, although the order and labels of legend items can be customized.

Order

The order of the legend items can be customized to help users read it. In the example below, the default order does not respect the chronological order (which makes the legend difficult to read). Changing the order helps users recognize the information better.

Legend with default order
Legend with default order
Legend with new order
Legend with new order

Text

It is not possible to customize the legend labels when colors are automatically assigned by the chart component. When the colors are set programmatically (such as by using value-based colors), it’s possible to customize the legend items in order to clearly describe the meaning of the color.

Legend with custom texts
Legend with custom texts

Titles

By default, the legend does not display a title, although a title can be displayed manually on top of the legend. However, we recommend only displaying a title if doing so will help users understand the legend items or make the legend item labels shorter.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

  • No links.

Chart Color Palettes – Values and Names

This page provides all the color token names that are intended for use in all SAP chart palettes.

Extended chart colors
Extended chart colors

Use of Tokens

Do

Use token/variable names.


Don't

Don’t use HEX values!

To support cross-technology chart implementation and theming capabilities, styles are defined by token names. Tokens ensure that values can be implemented centrally for multiple usages. This is explained in detail in the design token guidelines.

The associated HEX values shown on this page are for the Morning Horizon theme and should not be implemented directly in any implementation!

Values for the theming tokens for all themes are available within the directories of the open-sourced SAP Base Theming Content repository. Also check out the guidelines for design tokens and theming.

Qualitative Palette

Qualitative Palette with Base Chart Color Tokens

The base chart colors are intended to be used across all of the SAP technologies. The value of sapChart_OrderedColor_1 (and the corresponding sapChart_Sequence_1) is used as the default color across chart libraries. All of the ordered tokens are used as base values for all chart palettes. The technical ordering of the chart colors may vary between chart libraries depending on the context. It is, however, important that the correct theming tokens are used to ensure consistency.

Token Name Morning
Horizon
sapChart_OrderedColor_1 #3278be
sapChart_OrderedColor_2 #c87b00
sapChart_OrderedColor_3 #75980b
sapChart_OrderedColor_4 #df1278
sapChart_OrderedColor_5 #8b47d7
sapChart_OrderedColor_6 #049f9a
sapChart_OrderedColor_7 #0070f2
sapChart_OrderedColor_8 #cc00dc
sapChart_OrderedColor_9 #798c77
sapChart_OrderedColor_10 #da6c6c
sapChart_OrderedColor_11 #5d36ff
sapChart_OrderedColor_12 #a68a5b

Sequential Palette

Chart Sequence Colors

Chart sequence colors are connected to the main chart ordered colors. For example, sapChart_OrderedColor_1 is used as the value for sapChart_Sequence_1. The other sequence colors are then calculated to be either lighter (plus) or darker (minus) versions of sapChart_Sequence_1. This simple color relationship logic makes colors easy to modify for themeability, allowing SAP to update any token centrally and also provide future-friendly theme compatibility across all SAP technologies.


Chart Sequence Color 1

Color Name Morning Horizon
sapChart_Sequence_1_Plus3 #84b8eb
sapChart_Sequence_1_Plus3_TextColor #000000
sapChart_Sequence_1_Plus2 #468acd
sapChart_Sequence_1_Plus2_TextColor #000000
sapChart_Sequence_1_Plus1 #3c8cdd
sapChart_Sequence_1_Plus1_TextColor #000000
sapChart_Sequence_1 #3278be
sapChart_Sequence_1_TextColor #ffffff
sapChart_Sequence_1_Minus1 #31669c
sapChart_Sequence_1_Minus1_TextColor #ffffff
sapChart_Sequence_1_Minus2 #31669c
sapChart_Sequence_1_Minus2_TextColor #ffffff
sapChart_Sequence_1_Minus3 #204060
sapChart_Sequence_1_Minus3_TextColor #ffffff
sapChart_Sequence_1_Minus4 #19334e
sapChart_Sequence_1_Minus4_TextColor #ffffff
sapChart_Sequence_1_Minus5 #13263a
sapChart_Sequence_1_Minus5_TextColor #ffffff

Chart Sequence Color 2

Color Name Morning Horizon
sapChart_Sequence_2_Plus3 #efbf72
sapChart_Sequence_2_Plus3_TextColor #000000
sapChart_Sequence_2_Plus2 #eaaa44
sapChart_Sequence_2_Plus2_TextColor #000000
sapChart_Sequence_2_Plus1 #e29419
sapChart_Sequence_2_Plus1_TextColor #000000
sapChart_Sequence_2 #c87b00
sapChart_Sequence_2_TextColor #000000
sapChart_Sequence_2_Minus1 #9f6200
sapChart_Sequence_2_Minus1_TextColor #ffffff
sapChart_Sequence_2_Minus2 #7c4c00
sapChart_Sequence_2_Minus2_TextColor #ffffff
sapChart_Sequence_2_Minus3 #623c00
sapChart_Sequence_2_Minus3_TextColor #ffffff
sapChart_Sequence_2_Minus4 #623c00
sapChart_Sequence_2_Minus4_TextColor #ffffff
sapChart_Sequence_2_Minus5 #2f1d00
sapChart_Sequence_2_Minus5_TextColor #ffffff

Chart Sequence Color 3

Color Name Morning Horizon
sapChart_Sequence_3_Plus3 #b9d369
sapChart_Sequence_3_Plus3_TextColor #000000
sapChart_Sequence_3_Plus2 #a6c742
sapChart_Sequence_3_Plus2_TextColor #000000
sapChart_Sequence_3_Plus1 #8fad33
sapChart_Sequence_3_Plus1_TextColor #000000
sapChart_Sequence_3 #75980b
sapChart_Sequence_3_TextColor #000000
sapChart_Sequence_3_Minus1 #587208
sapChart_Sequence_3_Minus1_TextColor #ffffff
sapChart_Sequence_3_Minus2 #3e5106
sapChart_Sequence_3_Minus2_TextColor #ffffff
sapChart_Sequence_3_Minus3 #2c3904
sapChart_Sequence_3_Minus3_TextColor #ffffff
sapChart_Sequence_3_Minus4 #212b03
sapChart_Sequence_3_Minus4_TextColor #ffffff
sapChart_Sequence_3_Minus5 #161c02
sapChart_Sequence_3_Minus5_TextColor #ffffff

Chart Sequence Color 4

Color Name Morning Horizon
sapChart_Sequence_4_Plus3 #f473b3
sapChart_Sequence_4_Plus3_TextColor #000000
sapChart_Sequence_4_Plus2 #f14d9e
sapChart_Sequence_4_Plus2_TextColor #000000
sapChart_Sequence_4_Plus1 #ee278a
sapChart_Sequence_4_Plus1_TextColor #000000
sapChart_Sequence_4 #df1278
sapChart_Sequence_4_TextColor #ffffff
sapChart_Sequence_4_Minus1 #b90f64
sapChart_Sequence_4_Minus1_TextColor #ffffff
sapChart_Sequence_4_Minus2 #930c4f
sapChart_Sequence_4_Minus2_TextColor #ffffff
sapChart_Sequence_4_Minus3 #770a40
sapChart_Sequence_4_Minus3_TextColor #ffffff
sapChart_Sequence_4_Minus4 #51072c
sapChart_Sequence_4_Minus4_TextColor #ffffff
sapChart_Sequence_4_Minus5 #3a051f
sapChart_Sequence_4_Minus5_TextColor #ffffff

Chart Sequence Color 5

Color Name Morning Horizon
sapChart_Sequence_5_Plus3 #d5bcf0
sapChart_Sequence_5_Plus3_TextColor #000000
sapChart_Sequence_5_Plus2 #b994e0
sapChart_Sequence_5_Plus2_TextColor #000000
sapChart_Sequence_5_Plus1 #a679d8
sapChart_Sequence_5_Plus1_TextColor #000000
sapChart_Sequence_5 #8b47d7
sapChart_Sequence_5_TextColor #ffffff
sapChart_Sequence_5_Minus1 #7236b5
sapChart_Sequence_5_Minus1_TextColor #ffffff
sapChart_Sequence_5_Minus2 #5e2c96
sapChart_Sequence_5_Minus2_TextColor #ffffff
sapChart_Sequence_5_Minus3 #522682
sapChart_Sequence_5_Minus3_TextColor #ffffff
sapChart_Sequence_5_Minus4 #46216f
sapChart_Sequence_5_Minus4_TextColor #ffffff
sapChart_Sequence_5_Minus5 #341358
sapChart_Sequence_5_Minus5_TextColor #ffffff

Chart Sequence Color 6

Color Name Morning Horizon
sapChart_Sequence_6_Plus3 #64ede9
sapChart_Sequence_6_Plus3_TextColor #000000
sapChart_Sequence_6_Plus2 #2ee0da
sapChart_Sequence_6_Plus2_TextColor #000000
sapChart_Sequence_6_Plus1 #05c7c1
sapChart_Sequence_6_Plus1_TextColor #000000
sapChart_Sequence_6 #049f9a
sapChart_Sequence_6_TextColor #000000
sapChart_Sequence_6_Minus1 #02837f
sapChart_Sequence_6_Minus1_TextColor #ffffff
sapChart_Sequence_6_Minus2 #006663
sapChart_Sequence_6_Minus2_TextColor #ffffff
sapChart_Sequence_6_Minus3 #00514f
sapChart_Sequence_6_Minus3_TextColor #ffffff
sapChart_Sequence_6_Minus4 #003d3b
sapChart_Sequence_6_Minus4_TextColor #ffffff
sapChart_Sequence_6_Minus5 #002322
sapChart_Sequence_6_Minus5_TextColor #ffffff

Chart Sequence Color 7

Color Name Morning Horizon
sapChart_Sequence_7_Plus3 #68aeff
sapChart_Sequence_7_Plus3_TextColor #000000
sapChart_Sequence_7_Plus2 #4098ff
sapChart_Sequence_7_Plus2_TextColor #000000
sapChart_Sequence_7_Plus1 #1c85ff
sapChart_Sequence_7_Plus1_TextColor #000000
sapChart_Sequence_7 #0070f2
sapChart_Sequence_7_TextColor #ffffff
sapChart_Sequence_7_Minus1 #0062d3
sapChart_Sequence_7_Minus1_TextColor #ffffff
sapChart_Sequence_7_Minus2 #0054b5
sapChart_Sequence_7_Minus2_TextColor #ffffff
sapChart_Sequence_7_Minus3 #00418c
sapChart_Sequence_7_Minus3_TextColor #ffffff
sapChart_Sequence_7_Minus4 #00244f
sapChart_Sequence_7_Minus4_TextColor #ffffff
sapChart_Sequence_7_Minus5 #001b3a
sapChart_Sequence_7_Minus5_TextColor #ffffff

Chart Sequence Color 8

Color Name Morning Horizon
sapChart_Sequence_8_Plus3 #f462ff
sapChart_Sequence_8_Plus3_TextColor #000000
sapChart_Sequence_8_Plus2 #f034ff
sapChart_Sequence_8_Plus2_TextColor #000000
sapChart_Sequence_8_Plus1 #ed0bff
sapChart_Sequence_8_Plus1_TextColor #000000
sapChart_Sequence_8 #cc00dc
sapChart_Sequence_8_TextColor #ffffff
sapChart_Sequence_8_Minus1 #a600b3
sapChart_Sequence_8_Minus1_TextColor #ffffff
sapChart_Sequence_8_Minus2 #80008a
sapChart_Sequence_8_Minus2_TextColor #ffffff
sapChart_Sequence_8_Minus3 #6d0076
sapChart_Sequence_8_Minus3_TextColor #ffffff
sapChart_Sequence_8_Minus4 #56005d
sapChart_Sequence_8_Minus4_TextColor #ffffff
sapChart_Sequence_8_Minus5 #350039
sapChart_Sequence_8_Minus5_TextColor #ffffff

Chart Sequence Color 9

Color Name Morning Horizon
sapChart_Sequence_9_Plus3 #bdc6bc
sapChart_Sequence_9_Plus3_TextColor #000000
sapChart_Sequence_9_Plus2 #b5bfb4
sapChart_Sequence_9_Plus2_TextColor #000000
sapChart_Sequence_9_Plus1 #97a695
sapChart_Sequence_9_Plus1_TextColor #000000
sapChart_Sequence_9 #798c77
sapChart_Sequence_9_TextColor #000000
sapChart_Sequence_9_Minus1 #667664
sapChart_Sequence_9_Minus1_TextColor #ffffff
sapChart_Sequence_9_Minus2 #536051
sapChart_Sequence_9_Minus2_TextColor #ffffff
sapChart_Sequence_9_Minus3 #404a3f
sapChart_Sequence_9_Minus3_TextColor #ffffff
sapChart_Sequence_9_Minus4 #2d342c
sapChart_Sequence_9_Minus4_TextColor #ffffff
sapChart_Sequence_9_Minus5 #1e231e
sapChart_Sequence_9_Minus5_TextColor #ffffff

Chart Sequence Color 10

Color Name Morning Horizon
sapChart_Sequence_10_Plus3 #f1c6c6
sapChart_Sequence_10_Plus3_TextColor #000000
sapChart_Sequence_10_Plus2 #eaadad
sapChart_Sequence_10_Plus2_TextColor #000000
sapChart_Sequence_10_Plus1 #e28d8d
sapChart_Sequence_10_Plus1_TextColor #000000
sapChart_Sequence_10 #da6c6c
sapChart_Sequence_10_TextColor #000000
sapChart_Sequence_10_Minus1 #b75757
sapChart_Sequence_10_Minus1_TextColor #000000
sapChart_Sequence_10_Minus2 #9d4343
sapChart_Sequence_10_Minus2_TextColor #ffffff
sapChart_Sequence_10_Minus3 #803737
sapChart_Sequence_10_Minus3_TextColor #ffffff
sapChart_Sequence_10_Minus4 #672c2c
sapChart_Sequence_10_Minus4_TextColor #ffffff
sapChart_Sequence_10_Minus5 #562424
sapChart_Sequence_10_Minus5_TextColor #ffffff

Chart Sequence Color 11

Color Name Morning Horizon
sapChart_Sequence_11_Plus3 #c0b0ff
sapChart_Sequence_11_Plus3_TextColor #000000
sapChart_Sequence_11_Plus2 #9b83ff
sapChart_Sequence_11_Plus2_TextColor #000000
sapChart_Sequence_11_Plus1 #8669ff
sapChart_Sequence_11_Plus1_TextColor #000000
sapChart_Sequence_11 #5d36ff
sapChart_Sequence_11_TextColor #ffffff
sapChart_Sequence_11_Minus1 #4b25e7
sapChart_Sequence_11_Minus1_TextColor #ffffff
sapChart_Sequence_11_Minus2 #3a17cd
sapChart_Sequence_11_Minus2_TextColor #ffffff
sapChart_Sequence_11_Minus3 #2f13a8
sapChart_Sequence_11_Minus3_TextColor #ffffff
sapChart_Sequence_11_Minus4 #250f83
sapChart_Sequence_11_Minus4_TextColor #ffffff
sapChart_Sequence_11_Minus5 #2f13a8
sapChart_Sequence_11_Minus5_TextColor #ffffff

Chart Sequence Color 12

Color Name Morning Horizon
sapChart_Sequence_12_Plus3 #e4ddcf
sapChart_Sequence_12_Plus3_TextColor #000000
sapChart_Sequence_12_Plus2 #dacebb
sapChart_Sequence_12_Plus2_TextColor #000000
sapChart_Sequence_12_Plus1 #c4b293
sapChart_Sequence_12_Plus1_TextColor #000000
sapChart_Sequence_12 #a68a5b
sapChart_Sequence_12_TextColor #000000
sapChart_Sequence_12_Minus1 #8c744c
sapChart_Sequence_12_Minus1_TextColor #ffffff
sapChart_Sequence_12_Minus2 #786441
sapChart_Sequence_12_Minus2_TextColor #ffffff
sapChart_Sequence_12_Minus3 #5e4e33
sapChart_Sequence_12_Minus3_TextColor #ffffff
sapChart_Sequence_12_Minus4 #433825
sapChart_Sequence_12_Minus4_TextColor #ffffff
sapChart_Sequence_12_Minus5 #30271a
sapChart_Sequence_12_Minus5_TextColor #ffffff

Semantic Palette

Semantic Token Naming

The naming of the semantic tokens is generic and may not reflect usage within the charts. Application teams determine the contextual usage of chart colors.

Token Name Morning
Horizon
sapChart_Bad #f53232
sapChart_Critical #e26300
sapChart_Good #30914c
sapChart_Neutral #758ca4

Semantic Sequence Palette

Semantic Sequence Colors for Charts

Semantic sequence colors for charts are connected to the main semantic colors. For example, sapChart_Critical is used as the value for sapChart_Sequence_Critical. The other sequence colors are then calculated to be either lighter (plus) or darker (minus) versions of sapChart_Sequence_Critical. This simple color relationship logic makes colors easy to modify for themeability, allowing SAP to update any token centrally and also provide future-friendly theme compatibility across all SAP technologies.

The naming of semantic tokens is generic and may not reflect usage within the charts. Application teams determine the contextual usage of chart colors.

Chart Sequence Bad

Context examples: a bad or error value state context; heat; lifecycle contexts like negative, minus, overdue, or stopped

Chart Token Morning
Horizon
sapChart_Sequence_Bad_Plus3 #fdcece
sapChart_Sequence_Bad_Plus3_TextColor #000000
sapChart_Sequence_Bad_Plus2 #fa9d9d
sapChart_Sequence_Bad_Plus2_TextColor #000000
sapChart_Sequence_Bad_Plus1 #f86c6c
sapChart_Sequence_Bad_Plus1_TextColor #000000
sapChart_Sequence_Bad #f53232
sapChart_Sequence_Bad_TextColor #000000
sapChart_Sequence_Bad_Minus1 #d00a0a
sapChart_Sequence_Bad_Minus1_TextColor #ffffff
sapChart_Sequence_Bad_Minus2 #a90808
sapChart_Sequence_Bad_Minus2_TextColor #ffffff
sapChart_Sequence_Bad_Minus3 #830606
sapChart_Sequence_Bad_Minus3_TextColor #ffffff
sapChart_Sequence_Bad_Minus4 #570404
sapChart_Sequence_Bad_Minus4_TextColor #ffffff
sapChart_Sequence_Bad_Minus5 #320000
sapChart_Sequence_Bad_Minus5_TextColor #ffffff


Chart Sequence Critical

Context examples: a warning value state; lifecycle contexts like critical, reduced, borderline, or low stock levels

Chart Token Morning
Horizon
sapChart_Sequence_Critical_Plus3 #ffb881
sapChart_Sequence_Critical_Plus3_TextColor #000000
sapChart_Sequence_Critical_Plus2 #ff933f
sapChart_Sequence_Critical_Plus2_TextColor #000000
sapChart_Sequence_Critical_Plus1 #ff760c
sapChart_Sequence_Critical_Plus1_TextColor #000000
sapChart_Sequence_Critical #e26300
sapChart_Sequence_Critical_TextColor #000000
sapChart_Sequence_Critical_Minus1 #c35600
sapChart_Sequence_Critical_Minus1_TextColor #ffffff
sapChart_Sequence_Critical_Minus2 #aa4a00
sapChart_Sequence_Critical_Minus2_TextColor #ffffff
sapChart_Sequence_Critical_Minus3 #903f00
sapChart_Sequence_Critical_Minus3_TextColor #ffffff
sapChart_Sequence_Critical_Minus4 #6d3000
sapChart_Sequence_Critical_Minus4_TextColor #ffffff
sapChart_Sequence_Critical_Minus5 #492000
sapChart_Sequence_Critical_Minus5_TextColor #ffffff

Chart Sequence Good

Context examples: a successful or good value state; lifecycle contexts like positive, enhanced, healthy, or full stock levels

Chart Token Morning
Horizon
sapChart_Sequence_Good_Plus3 #88d79f
sapChart_Sequence_Good_Plus3_TextColor #000000
sapChart_Sequence_Good_Plus2 #56c776
sapChart_Sequence_Good_Plus2_TextColor #000000
sapChart_Sequence_Good_Plus1 #3ab05c
sapChart_Sequence_Good_Plus1_TextColor #000000
sapChart_Sequence_Good #30914c
sapChart_Sequence_Good_TextColor #000000
sapChart_Sequence_Good_Minus1 #287a40
sapChart_Sequence_Good_Minus1_TextColor #ffffff
sapChart_Sequence_Good_Minus2 #226736
sapChart_Sequence_Good_Minus2_TextColor #ffffff
sapChart_Sequence_Good_Minus3 #1c542c
sapChart_Sequence_Good_Minus3_TextColor #ffffff
sapChart_Sequence_Good_Minus4 #13391e
sapChart_Sequence_Good_Minus4_TextColor #ffffff
sapChart_Sequence_Good_Minus5 #0a1e10
sapChart_Sequence_Good_Minus5_TextColor #ffffff

Chart Sequence Neutral

Context examples: a null value state; lifecycle contexts like neutral, normal, regular, or medium stock levels.

Chart Token Morning
Horizon
sapChart_Sequence_Neutral_Plus3 #edf0f3
sapChart_Sequence_Neutral_Plus3_TextColor #000000
sapChart_Sequence_Neutral_Plus2 #c2ccd7
sapChart_Sequence_Neutral_Plus2_TextColor #000000
sapChart_Sequence_Neutral_Plus1 #9aabbc
sapChart_Sequence_Neutral_Plus1_TextColor #000000
sapChart_Sequence_Neutral #758ca4
sapChart_Sequence_Neutral_TextColor #000000
sapChart_Sequence_Neutral_Minus1 #5b728b
sapChart_Sequence_Neutral_Minus1_TextColor #ffffff
sapChart_Sequence_Neutral_Minus2 #495e74
sapChart_Sequence_Neutral_Minus2_TextColor #ffffff
sapChart_Sequence_Neutral_Minus3 #364a5f
sapChart_Sequence_Neutral_Minus3_TextColor #ffffff
sapChart_Sequence_Neutral_Minus4 #233649
sapChart_Sequence_Neutral_Minus4_TextColor #ffffff
sapChart_Sequence_Neutral_Minus5 #1a2633
sapChart_Sequence_Neutral_Minus5_TextColor #ffffff

Visual Accessibility

Enhancing Perceivable Contrast in Charts

The base set of chart colors has been tested for several color blindness types but can not cover all color blindness types.

Each color is defined with theming variables (tokens), which allow you to customize the color values using theming tools.

The extended chart sequence colors each have a corresponding text color and also a text shadow (halo) style that ensures sufficient text-to-background contrast. Additionally, built-in logic allows you to customize the chart tokens using theming tools. These provide an automatic switch between light and dark text and text shadow colors to enhance legibility.

All of the text shadow styles for each set of sequence text colors are provided as part of the SAP Theming Base Content repository.

Guidelines

  • Where possible, use a reduced set of chart color values to avoid information overload.
  • We strongly recommend providing additional means of interpreting chart values visually, such as labeling, tooltips, and patterns.

Example:

Chart Sequence Neutral color token:
sapChart_Sequence_Neutral: #758ca4
Non-text contrast to UI background (sapBackgroundColor): 3:1;

Text color token:
sapChart_Sequence_Neutral_TextColor: #000000;
Text contrast to neutral chart color (sapChart_Sequence_Neutral) color: 3:1;

Text shadow style token:
sapChart_Sequence_Neutral_TextShadow: 0 0 .125rem #fff;
A text shadow (halo) may be used to enhance text legibility.

Non-Text Contrast using Borders

Each set of sequence colors also has one border color that will ensure the correct contrast.

Border styles for each set of sequence colors are provided as part of the SAP Theming Base Content repository.

Guidelines

  • To ensure sufficient perceivable contrast for non-text elements, we recommend applying borders to any chart sequential values that fall below a 3:1 contrast measurement against the chart or user interface background.
  • The border must also have a 3:1 contrast against any chart interaction or highlight border colors.
  • It is also recommended that interaction borders differ in size as well as contrast.

Example:

Chart Sequence 1 border color token:
sapChart_Sequence_1_BorderColor: #3278BE
Non-text contrast to UI background (sapBackgroundColor): 4.2:1;
Non-text contrast to chart Interaction color (sapChart_Data_InteractiveColor): 4.5:1;

Chart color contrast measurements
Chart color contrast measurements

  1. Regular
  2. Interactive
  3. Chart border to UI/chart background: More than 3:1
  4. Chart border color (Sequence_1) to interactive border color: More than 3:1
Text shadow (halo) measurement
Text shadow (halo) measurement

  1. Dark text measured against light halo
  2. Light text measured against dark halo

The dark and light values for the text shadow ensure that text is always legible and never blurry.

Related Links

Elements and Controls

Implementation

SAP Theming Base Content
GitHub repository of SAP themes.

Combo Box

The combo box control allows users to select an item from a predefined list.

The control provides an editable input field for filtering the list, and a dropdown menu with a list of the available options.

If the entries are not validated by the application, users can also enter custom values.

Usage

Use the combo box if:

  • Users need to select a single item from a long list of items (minimum 13, maximum 200 entries).
  • The values of the option list are secondary information and do not need to be displayed right away.

Do not use the combo box if:

  • Users need to select from a list of two options, where one of the options can be implied as on and off or yes and no. Consider using a switch control instead.
  • Users need to pick one item from a small set of options with up to 12 entries. Consider using the select control instead.
  • Users need to pick one item from a large set of options with more than 200 entries. Consider using the input field control with a select dialog or value help dialog instead.
  • You need to display more than one attribute. Consider using the input field with select dialog or value help dialog.
  • Searching on multiple attributes is required. Consider using the input field with select dialog or value help dialog.
  • Your use cases require that all available options should be displayed right away without any user interaction. Consider using radio buttons or a radio button group.
Information
For more information on which selection control to choose, see the selection control overview.

Responsiveness

Size S

Size S
Size S

Size M

Size M
Size M

Size L

Size L
Size L

Also see the section on mobile handling below.

Components

Title

A descriptive heading (1).

Input Field

The input field (2) displays the selected value. Users can type any character to filter the option list.

Dropdown Arrow

The dropdown menu’s arrow (3) collapses and expands the option list.

Option List

The option list (4) contains a list of values (5) that users can choose from.

Size S
Size S
Size M/L
Size M/L

Two-Column Layout

Use the combo box with a two-column layout if you need to display additional information for the selection options, such as currencies, country abbreviations, or system abbreviations.

Users can filter both columns simultaneously showing only matching entries.

Combo box with two-column layout
Combo box with two-column layout

Grouping

You can group the items in the suggestion list by a specific attribute and separate them visually with a group header.

The group headers are not interactive.

Grouped suggestion list
Grouped suggestion list
Grouped suggestion list - Size S
Grouped suggestion list - Size S

Clear

You can add a  (Clear) icon to the combo box (property: showClearIcon). The icon appears as soon as the combo box has a value. Clicking the Clear icon removes the value from the field.

If you offer the Clear icon, make sure that the combo box is wide enough to show the icon in addition to the value.

'Clear' icon
'Clear' icon

Behavior and Interaction

Select a Value

There are three ways to select an item from the list:

  1. Select the item directly from the dropdown list.
  2. Type the item into the input field.
  3. Use the up and down arrows to navigate the list.

Clicking the input field places the cursor in the field (1). Clicking the arrow opens the option list (2). When the user starts typing, the list is filtered accordingly. The first item that starts with the characters entered is highlighted in the list and autocompleted in the input field (3). Up/down moves the highlight in the list and populates the value in the field (4). Selecting a value closes the list of options (5).

Developer Hint
With the showitems API, you can open the option list without having the dropdown arrow in a “pressed” state. Clicking the arrow again opens the full option list and changes the state to “pressed”. This allows you to show some items on focus and all items on click.

Autocomplete

When the first few letters are typed in the input field, the control performs autocomplete to help users to easily select one item from the option list.

Warning
The typeahead input feature is not available on Android devices.

Choose from Option List

The option list displays all the available items the user can choose from. The selection is always highlighted. Selecting another option from the list moves the highlight to the newly selected option.

Clicking the arrow opens the option list below the field. If there is not enough space, the list is displayed above the input field.

Selecting a value
Selecting a value

Filtering the Option List

When the user starts typing in the input field, the option list is filtered. Only items that match the characters entered are shown in the dropdown list. The default filtering method is “starts with per term”, which matches the beginning of each word in an item’s text.

In addition, application developers can set a custom filtering method “starts with” or “contains” (method: setFilterFunction). The “starts with” approach filters only for items where the beginning of the label matches the query entered. The “Contains” approach searches the full label for a match.

As a visual hint for the user, the matched characters are highlighted in the option list items. The highlighting works on the basis of “starts with per term”, regardless of the filtering method.

If the filtered option list contains items that start with the characters entered by the user, the first matching, unselected item is autocompleted in the input field.

Combo box - Default filtering and autocomplete
Combo box - Default filtering and autocomplete
Combo box - Default filtering in both columns and autocomplete
Combo box - Default filtering in both columns and autocomplete

Auto-Resize

The width of the option list adapts to its content. The minimum width is the input field plus the dropdown arrow. The maximum width is the part of the screen furthest to the right. If the option list content requires even more width, entries become truncated.

Option list – Minimum width
Option list – Minimum width
Option list adapts to long entries
Option list adapts to long entries

Mobile Handling

The user can enter text into the input field (supported by autocompletion). Clicking the dropdown arrow of the combo box (1) opens in a full-screen dialog (2). The user can now modify the selected entry by clicking the input field of the combo box. The mobile keyboard is then displayed, and the user can begin to enter a new term to filter the option list, also supported by autocompletion (3). The option list closes when the user clicks the OK button at the bottom of the list (4) or selects an item in the list (5).

Information
For information on how to manage leading and trailing white space (blanks) when copying and pasting text into input controls, please see removing leading and trailing white space.

Styles

A combo box has different styles for its different states. Here are some examples:

Unselected
Unselected
Unselected with predefined placeholder
Unselected with predefined placeholder
Unselected on hover
Unselected on hover
Arrow on hover
Arrow on hover
Focus
Focus
Expanded
Expanded
Autocomplete
Autocomplete

The combo box offers four value states:

  • Error
  • Warning
  • Success
  • Information

For error, warning, and information states, you can show an additional value state text message when the focus is on the combo box. The message can either be a plain text or a formatted text.

For more guidance on when to use which state, see How to Use Semantic Colors.

Error
Error
Warning
Warning
Success
Success
Information
Information
Warning message with long, wrapping text
Warning message with long, wrapping text

For more information on how to use the different semantic states of the control, see How to Use Semantic Colors.

Guidelines

Label

The combo box control can be displayed with or without a label. If the field is attached to another field, you do not need to define a second label. For more information, see the article on how to use labels in SAP Fiori.

Placeholder

Do not use the placeholder attribute as an alternative to a label. This is important because the placeholder text is overwritten as soon as the form is filled out. Labels are necessary to indicate the meaning of the form fields when the placeholders are no longer visible. Show a placeholder only if the user needs a hint on data entry. Do not repeat the content of the label. A hint could be a sample value or a brief description of the expected format. Read more about how to use placeholders.

 

Option List

The option list contains text values only. Keep the text values short because the list is represented using only single lines. Values that are too long might be truncated.

If you need to express that none of the selection options are selected, show a blank input field. Define a default selection whenever possible.

Don’t disable items in the option list. If an item can’t be selected, hide it.

Sorting

We recommend sorting options alphabetically to help users find the right option quickly. For more sorting rules, check out the guidelines for the select control.

Width

You can adjust the width of the option list to some extent.

The combo box control is usually used in forms, where the width is determined by the form element or container in which the combo box control is embedded. Therefore, we do not recommend defining a fixed width, but rather working with proper layout containers that have a defined width, such as the following properties: “form”, “simpleform”, “responsivegridlayout”, and “layoutdata” .

If you need to restrict the width to a defined value, set the width accordingly.

Keep in mind that there is no horizontal scrolling in the option list. Entries in the list that are too long become truncated and users may not be able to read them.

If localized text is not an issue, consider using a smaller width.

Unit of Measurement

You can use the layout options of the form to add the unit of measurement (UoM) after the combo box control. Apps can use the label-field ratio to show the UoM after the field. However, you must make sure that the UoM is properly visualized and doesn’t wrap to the next row.

Developer Hint

For accessibility purposes, you can use ariaDescribedBy from the input control.

Properties

Selection

When you select a value, there are two events:

  • Change: Occurs when the text in the input field is changed and the focus leaves the input field or the user presses the Enter key.
  • Selection change: Occurs when the user types something that matches an item in the list; also when the user clicks a list box item, or when navigating via keyboard.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

Column Chart

Column charts are used to compare multiple values over time, or values that have an intrinsic order (such as age, ranges, or ratings). The idea is to convey a progression or a trend, which is best represented by showing these values on the horizontal axis.

Column chart with a time category
Column chart with a time category
Column chart with a category that has an intrinsic order
Column chart with a category that has an intrinsic order

Column Chart vs. Bar Chart

Use a column chart if:

  • Category items represent a time series. The natural orientation for time is from left to right.
  • Category items have an intrinsic order.

Use a bar chart if:

  • Category items do not have an intrinsic order (such as products, projects, or countries).

If you use a column chart for categories that do not have an intrinsic order, there is a high probability that the labels will be displayed at 45°, forcing truncation and making them hard to read. However, this will not happen with a bar chart, as illustrated below.

Do
Bar chart with labels displayed correctly - Categories that do not have an intrinsic order
Bar chart with labels displayed correctly - Categories that do not have an intrinsic order
Don't
Column chart with labels at 45° - Categories that do not have an intrinsic order
Column chart with labels at 45° - Categories that do not have an intrinsic order

Time Axis

If the horizontal axis represents time, you can use the time axis.

The time axis has three main advantages:

  • It allows you to display dates and times in a responsive manner.
  • All the complexity involved with formatting the axis labels is automatically taken care of.
  • The physical spacing between the data points accurately represents the time scale, as opposed to being equidistant.

If you do not need the advantages offered by the time axis, you can use a horizontal categorical axis instead.

Labels

When space is limited, the labels are displayed at 45°, making them difficult to read. Here’s how to avoid this:

  • First, check that the category has an intrinsic order. If not, consider using a bar chart instead.
  • If the category is time-based, use a time axis.
  • If it is not possible to use a time axis, the only solution is to abbreviate the labels.

Resources

Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

Elements and Controls

Implementation

No links.

Message Handling – Overview

Intro

Carefully orchestrated messages are key to the user experience: they guide and validate user actions, and serve to both pre-empt and help resolve problems. But messages also distract users and interrupt their flow, so it’s important to always use messages consistently and optimize the interaction as a whole.

SAP Fiori comes with a range of different message types and controls. This article provides an overview of the message formats available and how to use them in common messaging scenarios.

Basic Principles

  • Indicate errors and warnings clearly on the UI.
  • Think carefully about how prominent your message needs to be and when you need to interrupt the user. Don’t interrupt users unnecessarily.
  • Help the user to recognize, diagnose, and resolve the issue.

Message Types

The following message types are available:

Icon Message Type When to Use Example
   Error An issue has occurred that prevents further processing. The user must resolve the issue to continue. A value has been entered in the wrong format.
   Warning A problem or inconsistency has arisen. Users can carry on working, but might run into an error later on. An action can’t be applied to some of the selected items, but can still be performed for the rest.
   Success An action has been performed without errors or warnings. A business partner has been created.
   Information You want to provide additional, non-critical information. Processing is not blocked. Highlight and explain a system recommendation.
   Confirmation You want to prompt the user to confirm an action before it is executed. Confirm approval of a vacation request.

Message Controls

SAP Fiori uses the following message controls and visualizations:

Message Box

The message box (sap.m.MessageBox) displays a message dialog that interrupts the user in the course of an action. It forces the user to acknowledge the information or make a decision.

Usage

Use the message box to display messages that are not related to a field on the UI, or when you require a user decision.

More information:
Message Box
Text Guidelines – Word Choice for Actions

Error message box
Error message box

Message Popover

The message popover (sap.m.messagePopover) can display multiple messages of different types (error, warning, information, or success).

Messages are added to the popover automatically, without interrupting the user.

Usage

The message popover is used to collect messages relating to form fields and table fields.

More information:
Message Popover
Form Field Validation

Message popover for a form
Message popover for a form

Message View

The message view can contain multiple messages of different types (error, warning, information, or success). It is typically embedded in a dialog and interrupts the user action.

Usage

Use a message view to collect messages that are triggered by a user action, but are not related to form or table fields.

More information: Message View

Message view
Message view

Message Toast

A message toast (sap.m.MessageToast) is a small, non-disruptive popup that disappears automatically after a few seconds.

Usage

The message toast is the standard message component for success messages.

More information: Message Toast

Message toast
Message toast

Message Strip

The message strip is an information bar that can be placed within the content area of a page. It can contain error, warning, success, or information messages. The message strip can be static or interactive.

Usage

You can use the message strip to display general information or inform about the status of an object.

More information: Message Strip

Message strip with warning message
Message strip with warning message

Illustrated Message

An illustrated message combines a message, a supportive illustration, and an (optional) call to action.

Usage

You can use illustrated messages to improve the user experience for empty states within UI elements. Illustrated messages adjust to the size of the container (such as a card, dialog, or full page).

More information: Illustrated Message

Illustrated message
Illustrated message

Value States for Input Fields

Value states give feedback on user entries at field level. After input validation, affected fields are highlighted using semantic colors for the message type (error, warning, success, information). Clicking a field displays a corresponding in-place message.

Usage

Value state messages are used for input fields, typically in forms.

More information:
UI Element States – Value States
Form Field Validation

Form fields with error value state
Form fields with error value state

Quick Confirmation Popover

The quick confirmation popover displays a confirmation prompt adjacent to the triggering action.

Usage

Use the quick confirmation popover when the user leaves the create or edit screen for an object by pressing Cancel.

Quick confirmation popover
Quick confirmation popover

Common Message Patterns

Standard message patterns have been defined for certain scenarios. Here’s an overview of the main patterns and where to find more information.

Message Pattern Summary More Information

Validation

For specific fields SAPUI5 provides a set of controls to guide users when completing forms, including in-place value state messages for fields and a full list of all messages in a popover. Form Field Validation
For actions (not field-related) In edit mode, messages that do not relate to a particular field on a page, but result from an action, appear in the message popover. Message Popover
For multiple selection scenarios If multiple items are selected, the user is made aware of all issues and warnings in one place. The exact format depends on the available messaging controls and infrastructure. Processing Multiple Items
Draft Handling

Data loss warning

Triggered by Cancel If there is a risk of losing unsaved data, a warning message is provided as soon as the Cancel action is triggered. Message Box
Triggered by navigation If there is a risk of losing unsaved data, a warning message is provided as soon as the user navigates away from the page using in-app controls. Message box

Intelligent systems

Situation handling Situation handling is a concept for bringing business issues to the attention of specific user groups. It helps the user to recognize, understand, and resolve the situation by gathering all relevant information and proposing solutions. Situation Handling
Recommendations Intelligent systems can help users by recommending appropriate content or suggesting an action or input the user may “prefer”. In this case, we speak of a recommendation pattern and its impact on the UI. Recommendations

Message Copy

When formulating message texts, keep the following principles in mind:

More Information:

Top Tips

  • Ask yourself if you really need a message. Can the message be avoided by improving the design?
  • Define and test messaging scenarios in the design phase.
  • Always get your message texts (including the titles and buttons) reviewed by a user assistance developer.

Related Links

Elements and Controls

Implementation

  • No links.
  • Multi-Input Field

    A multi-input field allows the user to enter multiple values, which are displayed as tokens. To help the user enter a valid value, you can enable the suggestions feature and the value help option.

    Usage

    Use the multi-input field if:

    • You want the user to select multiple ranges (with the value help option and the value help dialog).
    • The dataset to choose from is expected to increase over time (for example, to more than 200 values).
    • You need to provide the value help option to help users select or search multiple business objects.
    • You want to enable users to add custom values.

    Do not use the multi-input field if:

    • You want the user to select one entry only. In this case, use the input field or combo box instead.
    • You want the user to select from a pre-defined set of options only. In this case, use the multi-combo box instead.
    Information
    For more information on which selection control to choose, see the selection control overview.

    Responsiveness

    Size S

    • Cozy mode.
    • When the user clicks the multi-input field, a new full screen dialog opens. After clicking the input field and typing, the suggestions can be selected. When the user makes a selection, the dialog closes and the token is displayed.
    • The user can review the tokens by swiping them to the left or right.
    Multi-input field (size S)
    Multi-input field (size S)
    Suggestions on a smartphone (size S)
    Suggestions on a smartphone (size S)

    Size M

    • Cozy mode.
    • The suggestions appear below or above the multi-input field.
    • The user can review tokens by swiping them to the left or right.
    Suggestions on a tablet (size M)
    Suggestions on a tablet (size M)

    Size L

    • Compact mode.
    • The suggestions appear below or above the multi-input field.
    • The user can review tokens by pressing the right or left arrows on the keyboard.
    Suggestions on a desktop device (size L)
    Suggestions on a desktop device (size L)

    Types

    The input types of the multi-input field are identical to those of the input field.

    Behavior and Interaction

    Adding Tokens

    A token can be added using suggestions or value help. As the user types, the first suggestion item that matches the characters entered is autocompleted in the input field. The typed characters are matched against the beginning of the suggestion items, based on the “starts with” filter. The user can accept the autocompleted value by pressing ENTER. The autocomplete property is set by default if suggestions are available, but can also be switched off.

    When an item is selected from the suggestions dropdown, the corresponding token is created, and the input field is ready for the next entry. Tokens are placed next to each other on one line.

    The suggestions dropdown can be wider than the input field itself, but not wider than the current browser window (property: maxSuggestionWidth).

    Warning
    The typeahead input feature is not available for Android devices.
    Developer Hint
    Values that are entered can also be tokenized when the user presses ENTER. The app development team can perform a custom validation of the entered data and decide whether a token should be created.
    A token in a multi-input field
    A token in a multi-input field
    A multi-input field with two tokens while editing
    A multi-input field with two tokens while editing
    Information
    For information on how to manage leading and treading whitespace (blanks) when copying and pasting text into input controls, please see removing leading and trailing whitespace.

    Reviewing Tokens

    If tokens have been selected, and the input field is not in focus, the input field displays as many tokens as possible in the available space. If more tokens have been selected, an [n] More label indicates the number of hidden tokens. The tokens in the input field appear in the order in which they were selected.

    Clicking the [n] More label opens a popover below the input field, in which all selected items are shown. The user can deselect an item by clicking its delete icon.

    Multi-input field - 'n More' label (desktop)
    Multi-input field - 'n More' label (desktop)
    More items displayed (desktop)
    More items displayed (desktop)
    More items displayed (phone)
    More items displayed (phone)

    If the length of the last selected token exceeds the width of the input field, a label [n] Item/s is shown when the field is not in focus.

    Clicking the [n] Item/s label opens a popover below the input field, in which all selected items are shown. The user can deselect an item by clicking its delete icon.

    If there is only one token in the input field and its length exceeds the width of the input field, the text is truncated. Clicking the token opens a popover below the input field, in which the full text of the token is shown.

    Multi-input field - '1 Item' case (desktop)
    Multi-input field - '1 Item' case (desktop)
    Showing the compete item
    Showing the compete item
    Multi-input field - 'n Items' label (desktop)
    Multi-input field - 'n Items' label (desktop)
    Displaying all items
    Displaying all items

    In the input field itself, the user can review tokens using the left or right cursor keys on a desktop, or by swiping to the left or right on a smartphone or tablet. Tokens can be selected by either clicking/tapping them or by pressing Space (selects the focused token).

    Selected token
    Selected token

    Deleting Tokens

    The user can delete tokens by pressing the Backspace or Del button (when selected) on a desktop’s keyboard, or by tapping the Delete icon on a mobile device.

    Using Value Help

    You can enable the value help option to provide a more advanced dialog for finding the relevant business object. Two dialogs can be used at present:

    Value help icon on empty multi-input field
    Value help icon on empty multi-input field
    Select Dialog
    Select Dialog
    Selecting Items
    Selecting Items
    Displaying the selected items in the multi-input field
    Displaying the selected items in the multi-input field
    Value help icon on empty multi-input field
    Value help icon on empty multi-input field
    Value help dialog
    Value help dialog
    Selecting Items
    Selecting Items
    Displaying the selected items in the multi-input field
    Displaying the selected items in the multi-input field

    To give a better indication of the type of data that can be selected, you can exchange the value help icon.

    Custom value help icon
    Custom value help icon

    Filtering

    When the user starts typing in the input field, the list is filtered. Only items that match the character or characters entered are shown in the dropdown list. The default filtering method is “starts with per term”, which matches the beginning of each word in an item’s text.

    In addition, application developers can set a custom filtering method “starts with” or “contains” (method: setFilterFunction). The “starts with” approach filters only for items where the beginning of the label matches the query entered. The “contains” approach searches the full label for a match.

    As a visual hint for the user, the matched characters are highlighted (bold) in the option list items. The highlighting works on the basis of “starts with per term”, regardless of the filtering method.

    Multi-input field - Default filtering, autocomplete in the input field is switched off
    Multi-input field - Default filtering, autocomplete in the input field is switched off

    Copying and Pasting Data from a Spreadsheet or Text File

    The multi-input field can handle paste actions containing multiple items, such as items that have been selected in a column of a spreadsheet or text file. The user simply selects a whole column in the spreadsheet, copies it, and then pastes it from the clipboard into the multi-input field. Each item is represented as a token. If a single value is copied and pasted into the field, it is shown as a text value, as further editing might be required before it is converted into a token.

    Grouping

    You can group the items in a suggestion list by a specific attribute and separate each group visually with a group header. This feature is also available for tabular suggestion lists.

    The group headers are not interactive.

    The column headers within the tabular suggestion list remain in place when the list is scrolled (“sticky” behavior). Make sure the suggestion list has no more than 4 columns. If the columns don’t all fit on the screen or get too narrow on small screens, enable the responsive behavior to move columns into the pop-in area (property: enableTableAutoPopinMode).

    Multi-input with grouped suggestions
    Multi-input with grouped suggestions
    Multi-input with grouped tabular suggestions
    Multi-input with grouped tabular suggestions
    Multi-input field with grouped tabular suggestions making use of the table's pop-in behavior
    Multi-input field with grouped tabular suggestions making use of the table's pop-in behavior

    Due to a technical limitation, the group headers are not visible when clicking on the n More text. 

    Clear

    You can add a  (Clear) icon to the input field (property: showClearIcon). The icon appears as soon as the multi-input field has non-tokenized text. Clicking the Clear icon removes the non-tokenized text from the field.

    If you offer the Clear icon, make sure that the multi-input field is wide enough to show the icon in addition to the value.

    Multi input field with token
    Multi input field with token
    Multi input field with token, text, and 'Clear' icon
    Multi input field with token, text, and 'Clear' icon

    Styles

    The following images show how the states of the multi-input field are styled.

    Unselected
    Unselected
    Unselected with predefined placeholder
    Unselected with predefined placeholder
    Unselected on hover
    Unselected on hover
    In focus
    In focus
    Selected items shown as tokens
    Selected items shown as tokens
    Expanded multi-selection
    Expanded multi-selection

    When an error, warning, or information value state is displayed, the details can be provided as text or formatted text. The text is shown when the corresponding control has the focus. If using a formatted text, you can include one or several links.

    Error
    Error
    Warning
    Warning
    Success
    Success
    Information
    Information

    For details on the different states, see UI Element States.

    For more information on semantic colors for value states, see How to Use Semantic Colors.

    Guidelines

    • Give the control a width that is appropriate for the range of values that are going to be entered. Try to avoid setting a fixed width on this control. Instead, embed it in a proper layout (such as a form, simple form, or grid layout) and work with the layout data property.
    • Provide meaningful labels for all input fields. Do not use the placeholder as a replacement for the label. The placeholder should only provide an additional hint.
    • The multi-input field can currently contain tokens and one free text value. If you allow only validated values, display an error or warning when the user tries to leave the field to indicate that the value entered is invalid, or remove the value.
    • If users try to select an item that has been selected before, we recommend setting an error state and providing a meaningful message.
    Multi-input - Error state for an item that has already been selected
    Multi-input - Error state for an item that has already been selected
    • You can use the layout options of the form to add the unit of measurement (UoM) after the multi-input control. Apps can use the label-field ratio to show the UoM after the field. However, you must make sure that the UoM is properly visualized and doesn’t wrap to the next row.
    Developer Hint

    For accessibility purposes, you can use ariaDescribedBy from the input control.

    • The multi-input field can be used in the grid tableanalytical table and tree table as well, as condensed mode is already supported, both for desktop and mobile (tablets).
    Multi-input field in the grid table in condensed mode
    Multi-input field in the grid table in condensed mode
    • In display mode, use a text. Show the texts of the tokens, separated by bullet points. Provide an overflow for all texts that do not fit in one line.
    • In display mode, consider the following alternatives:
      • A bulleted list with a bullet per token text (for example, using formatted text)
      • A horizontal list with bullet separators between the individual token texts (for example, using text or formatted text)
      • If the display mode equivalent needs to be a single-line text (as required for the grid table, tree table, analytical table), provide an overflow for all texts that do not fit onto the line (for example, by adding a link, opening a popover, or using an expandable text).
    Recommend display-mode equivalent
    Recommend display-mode equivalent
    Recommended display-mode equivalent with overflow indicator
    Recommended display-mode equivalent with overflow indicator
    Recommended display mode equivalent with overflow opened
    Recommended display mode equivalent with overflow opened

    Properties

    Since the multi-input field is derived from the input field, refer to the properties in the input field article.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Select Dialog

    The select dialog enables users to select one or more items from a comprehensive list. The select dialog comes with a list of entries and a search field to filter the list.

    A more enhanced dialog for single selection and multiselection is the value help dialog as it offers range selection and excluding functions.

    Usage

    Use the select dialog if:

    • Users need to select one or more entries from a comprehensive list that contains multiple attributes or values.

    Do not use the select dialog if:

    • Users need to pick one item from a predefined set of options that contains one attribute or value only such as languages. In this case, consider using the combo box or select instead.
    • Your use case requires more enhanced functionalities such as a selection based on ranges. For the selection of values, consider using the value help dialog instead.
    • Your use case requires tabs, filters, or an Add New functionality in the select dialog. In this case, use a standard dialog instead.
    Information
    For more information on which selection control to choose, see the selection control overview.

    Responsiveness

    The display of the select control depends on the device. On phones, the selection list takes up the whole screen. On desktop and tablet devices it appears as a popover.

    Size S

    Single select dialog in full screen on smartphone
    Single select dialog in full screen on smartphone
    Multi-select dialog in full screen on smartphone
    Multi-select dialog in full screen on smartphone

    Size M

    Single select dialog on tablet
    Single select dialog on tablet
    Multi-select dialog on tablet
    Multi-select dialog on tablet

    Size L

    Single select dialog on desktop
    Single select dialog on desktop
    Multi-select dialog on desktop
    Multi-select dialog on desktop

    Components

    Dialog Header

    You need to set the title of the dialog header (1). We recommend the following form:

    Single selection

    Select

    Example: Select Product

    Multi-selection

    Select

    Example: Select Products

    Search

    The first element in the dialog is a standard search field (2).

    Info Toolbar

    The info toolbar (3) is only available in multi-selection mode. It shows the number of selected items in the following form:

    Selected :

    Example: Selected Products: 2

    Content

    The content area (4) can be filled with any list content inherited from the list item base, such as standard list items, display list items, and feed list items. You can set the content to be displayed as grouped.

    Button Toolbar

    The button toolbar (5) contains two buttonsSelect and Cancel. Select takes over the selection, while Cancel resets the selection to the state it was in when the dialog was opened.

    Components of the select dialog. Left: single select, right: multi-select
    Components of the select dialog. Left: single select, right: multi-select

    Behavior and Interaction

    The select dialog can be called from any control. The most common trigger is an input field with a selection icon, also known as a “value help field”, or F4. Alternative triggers are buttons or icons, which add items to an existing list.

    Single Select

    Once users select an entry, the select dialog is closed and the selected entry is taken over. If applicable, the entry is displayed in the field from which the dialog was triggered.

    Multi-Select

    In the multi-select version of the select dialog, checkboxes are provided for choosing multiple entries. The selection is taken over when the user chooses SelectCancel closes the dialog without taking over the selected values. An infobar indicates the number of selected items.

    Search

    The user can search items.

    Resize and Drag Dialog

    You can make the select dialog resizable and draggable by setting the corresponding properties (also called resizable and draggable) to “true”.

    A resizable dialog makes sense if the items inside have long names or descriptions.

    A draggable dialog allows users to see the app content behind the dialog.

    Guidelines
    Both features are optional. However, even if you only need one, always set both of them to “true” to ensure consistency.

    Guidelines

    List Options

    If you need to indicate that none of the selection options are selected, or you need to allow users to not select an option, offer an appropriate option, such as (Not Selected) or (No Values Selected). Show this option in parentheses and place it at the beginning of the list.

    Single selection list with '(Not Selected)' option
    Single selection list with '(Not Selected)' option

    Examples:

     (Not Selected)

     (Not Assigned)

     (No Product Selected)

     (None)

    When using the select dialog for selecting filters: If you need to indicate that all items apply as filter options, provide All as an option and place it at the beginning of the list.

    Filter list with 'All' option (no filters set)
    Filter list with 'All' option (no filters set)

    Search Behavior

    Two types of search behavior are available:

    (1) A live search, also known as “search-as-you-type” (property: liveChange), which is triggered by each character that the user enters or deletes.

    (2) A manual search, which is triggered explicitly after the user enters text in the search field and clicks the Search icon or presses the ENTER key.

    Although app developers need to decide themselves which search to use, we recommend implementing the live search whenever possible. Use the manual search only if the amount of data is too large and your app would otherwise run into performance issues. For more information, check out the article on search.

    Reset/Remember Selections

    By default, the selection is reset when the dialog is closed. This allows users to make a new selection when they reopen the dialog and makes sense when users need to add multiple items to a table.

    Selection is reset after the dialog is closed
    Selection is reset after the dialog is closed

    However, if your use case requires selections in a dialog to be remembered so that the user can make corrections, you can set the rememberSelections function in the select dialog to “true”. When users exit the dialog by clicking Cancel, the selection is then restored to the state it was in when the dialog was opened.

    Selection is remembered after the dialog is reopened
    Selection is remembered after the dialog is reopened

    This also works in single-select dialogs. There, if users click the remembered item again, the dialog closes and they do not have to explicitly click Cancel.

    Infobar

    In multi-selection mode, an infobar shows the number of selected items. Use the following format:

    Selected: [Number of selected items]
    Example: Selected: 2

    Note that the infobar is not “sticky”. When the user scrolls down the list, the infobar scrolls off the screen.

    Infobar States

    The infobar has two states – active and non-active (non-clickable). For more information see Infobar States.

    Infobar - Active state
    Infobar - Active state
    Infobar - Non-active state
    Infobar - Non-active state

    “Clear” Button

    The Clear button allows users to clear all the selected items. By default, the button is not shown. To display the button, set the showClearButton property to “true”.

    Select dialog with 'Clear' button
    Select dialog with 'Clear' button

    Content

    By default, the select dialog comes with a growing feature (property: growing = “true”). We recommend disabling the growing feature and setting this property to “false”. This ensures that all items in the table are loaded at once, and that the “Items selected” count, the search, and select/deselect features all work properly.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Select

    The select control (also known as a dropdown) is commonly used to enable users to select an item from a predefined list.

    Usage

    Use the select control if:

    • Users need to select one item exclusively from a short list of options (usually between 2 and 12 items).
    • The values of the option list are of secondary importance and do not need to be displayed right away.

    Do not use the select control if:

    • Users need to choose between two options, such as On or Off and Yes or No. In this case, consider using a switch control instead.
    • Users need to pick one item from a very large set of options. In this case, consider using the combo box instead.
    • You need to display more than one attribute. In this case, consider using the input field with a select dialog or a value help dialog instead.
    • The user needs to search on multiple attributes. In this case, consider using the input field with select dialog or value help dialog instead.
    • Your use case requires all available options to be displayed right away, without any user interaction. In this case, consider using radio buttons or a radio button group instead.
    Information
    For more information on which selection control to choose, see the selection control overview.

    Responsiveness

    The display of the select control depends on the device:

    • On smartphones, the selection list takes up the whole screen.
    • On desktop and tablet devices, it appears as a popover. If there is not enough space to show the option list below the field, it opens above the field.

    Size S

    Select option list in full screen - Size S
    Select option list in full screen - Size S

    Size M

    Select option list – Size M
    Select option list – Size M

    Size L

    Select option list – Size L
    Select option list – Size L

    Size XL

    Select option list – Size XL
    Select option list – Size XL

    Layout

    The select control can be placed in toolbars, such as chart toolbarsfooter toolbars, or header toolbars, as well as in forms or tables:

    Components

    Select Trigger

    The trigger to open the option list is either the Select field (1), which also displays the current selection, or an icon (3).

    Option List

    The option list (2) displays all the items available to the user. The selection is always highlighted. Selecting another option from the list moves the highlight to the selected option.

    Full Screen Title Bar for Size S

    Opening the select control on a smartphone brings up the option list in full screen mode. The full screen mode can be closed using the icon on the top right corner (5).

    You need to set a title for the full screen mode (4). We recommend the following format:

    Single selection

    Select [Entity]

    Example: Select Product

    Multi-selection

    Select [Entities]

    Example: Select Products

     

    Anatomy of the select control
    Anatomy of the select control
    Anatomy of the select control - Size S
    Anatomy of the select control - Size S

    Behavior and Interaction

    Clicking

    The Select field always displays the current selection. The user clicks the field to display a list of options to choose from. Once the user selects an option, the list box closes and the selected option is displayed in the field. If there is no Select field but an icon, the user clicks the icon to open the list of options. The currently selected item is always highlighted in the list to help the user identify what has been selected.

    Guidelines

    Option List

    The option list can contain either text-only values or text values with an icon in front. Keep the text values as short as possible.

    Only use icons if they help users better identify or understand the options. To set icons, use the icon property for each list entry.

    Do not disable values. In most cases, it is completely unclear how to enable them. Hide the values instead.

    If you need to indicate that none of the selection options are selected, or you need to allow users to not select an option, offer an appropriate option, such as (Not Selected) or (No Values Selected). Show this option in parentheses and place it at the beginning of the list. For more examples, see the UI text guidelines.

    When using the select control to select filter values: If you need to indicate that all items apply, provide All as an option and place it at the beginning of the list.

    If your use case requires a blank input field instead of (None), use a combo box instead.

    If the select control is placed in a toolbar with an icon as a trigger for sorting, grouping or filtering a set of items, use the texts below for the “not selected” option.

    Sort, Group, and Filter:

    • (Not Sorted)
      Note: In most cases, this option is not necessary; just show the default sort settings instead.
    • (Not Filtered)
    • (Not Grouped)

    For more information about the toolbar, see the toolbar overview.

    Define a default selection whenever possible. If the selected item is not specified, the first one is selected.

    Text only
    Text only
    Icon and text
    Icon and text
    Selection list with '(Not Selected)' option
    Selection list with '(Not Selected)' option

    Label

    The select control can be displayed with or without a label. If the field is attached to another field, you do not need to define a second label.

    Information

    Do not provide a blank value to indicate that nothing is selected.

    Sorting

    The sort option list contains all the items that are available to the user. Choose one of the following styles to order the content:

    Logical: Sort items into a meaningful order. Group related options together and show the most common options first, followed by less common options. Sort the options alphabetically if more than eight select options are available. This helps the user find the right option quickly.

    Example of logical sorting
    Example of logical sorting

    Alphabetical: Sort currencies, names, and similar content alphabetically.

    Example of alphabetical sorting
    Example of alphabetical sorting

    Numeric: Sort numeric values into a sequential order, with the lowest number first.

    Example of numeric sorting
    Example of numeric sorting

    Chronological: Sort time-related information into chronological order, with the most recent first.

    Example of chronological sorting
    Example of chronological sorting

    Width

    The select control is usually used in forms, where the width is determined by the form element or container in which the select control is embedded.

    If you need to restrict the width to a defined value, you can set the width accordingly. However, we do not recommend defining a fixed width. Where possible, use layout containers (such as a form, simple form, or responsive grid layout), and define the width via the layout data property.

    Do not allow the control to auto-adjust based on the selection.

    Information
    If the text length is fixed and doesn’t require localization (for example, currency codes), consider reducing the width.

    Width of the Option List

    By default, the width of the option list adapts to the width of the longest entry. The maximum width of the option list is set to 600 px.

    Maximum width of the option list
    Maximum width of the option list

    Text Wrap in the Option List

    The option list doesn’t support horizontal scrolling. By default, entries that exceed the maximum width of 600 px for the dropdown are truncated. If you expect the dropdown to contain longer entries, we recommend wrapping items in the option list to enable users to read the full text, (property: wrapItemsText). If wrapping is enabled, the text can wrap to multiple lines.

    Option list with wrapped text
    Option list with wrapped text

    Unit of Measurement

    You can use the layout options of the form to can add the unit of measurement (UoM) after select. Apps can use the label-field ratio to show the UoM after the field. However, you must make sure that the UoM is properly visualized and doesn’t wrap to the next row.

    Developer Hint

    For accessibility purposes, you can use “ariaDescribedBy” from the input control.

    Semantic Colors

    Different value states or meanings can be indicated by using semantic colors. The visual states are shown below in their regular state (left) and focused (right). Note that the positive/success state does not show a message on focus.

    For more details on the correct usage, see How To Use Semantic Colors.

    Neutral
    Neutral
    Neutral (focus)
    Neutral (focus)
    Information
    Information
    Information (focus)
    Information (focus)
    Success
    Success
    Success (focus)
    Success (focus)
    Error
    Error
    Error (focus)
    Error (focus)
    Warning
    Warning
    Warning (focus)
    Warning (focus)

    Value State Text

    The select control can display the value state text even if the dropdown is open. This ensures that the value states are shown in all situations and on all devices. When the user opens the dropdown, the value state sticks to the top and does not scroll away. The control also supports multi-line text for the value state.

    Value state text displayed when the dropdown is open
    Value state text displayed when the dropdown is open

    Read-Only

    The select control can be displayed as read-only (property: editable, default = “true”). If the editable property is set to “false”, the value of the select cannot be changed. The control remains focusable, but the background and border are changed to indicate that it is read-only.

    Select in read-only state
    Select in read-only state

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Carousel

    The carousel allows the user to browse through a set of items. It can display one or several items at a time. From the displayed item or items, the user can navigate to either the next or the previous item.

    Optionally, a paging indicator displays the user’s current position inside the set of items.

    The carousel control is best used for browsing through a set of images. Viewing images one by one helps users to distinguish between different items. In a comparison scenario, it can also be useful to display several items side by side. The carousel is not limited to displaying images; it can contain any sap.m control.

    Usage

    Use the carousel if:

    • You have strong visual representations of the items you want to display.
    • You want to display items sequentially or side by side.

    Do not use the carousel if:

    • The items you want to display are uniform.

    Responsiveness

    The size of the control’s content area is adjusted automatically, depending on the amount of space available.

    On non-touch devices, the user can navigate with the paging buttons displayed on the left and right of the control.

    On touch devices, users can navigate through the pages by swiping or by tapping the arrow buttons, which are always visible. The tap interaction is required as an alternative to swiping to comply with accessibility standards.

    The paging indicator (when activated) shows on all form factors. The paging indicator wraps if it is too long to fit onto one line.

    Carousel - Size S
    Carousel - Size S

    Carousel - Size M
    Carousel - Size M

    Carousel - Size L
    Carousel - Size L

    Layout

    The main component of the carousel control is the content area in which the different items are displayed.

    The (optional) paging indicator can float above or below the content area.

    On non-touch devices, paging buttons either float above the left and right sides of the content area, or appear in the paging indicator area. This is controlled by the arrowsPlacement property.

    Displaying multiple items

    The layout of the carousel does not change when multiple items are displayed in the content area.

    Behavior and Interaction

    The content area contains either the current item or a set of items.

    Navigation for Single Items

    When the user navigates from the current item to another item, the current item is moved out of the content area, and the next or previous item slides in (depending on the direction of navigation).

    On touch devices, users navigate with swipe gestures (swipe right or swipe left).

    On non-touch devices, users navigate with paging buttons.

    If the item set contains only one item, navigation is deactivated.

    Paging button – Previous page
    Paging button – Previous page
    Paging button – Next page (hover)
    Paging button – Next page (hover)

    Navigation for Multiple Items

    When the user clicks one of the paging buttons, the rightmost or leftmost item is moved out of the content area, and the next or previous item slides in (depending on the navigation direction).

    In addition, you can set the navigation to move through multiple items or an entire row with a single click on the paging button.

    Carousel with multiple items
    Carousel with multiple items

    Looping

    The carousel can be set to loop (property: loop). In this case, the carousel jumps back to the first item once all items have been displayed. If looping is not enabled, there is no forward navigation on the last item.

    Paging

    The current position inside the set of items is displayed using an optional paging indicator (properties: showPageIndicator, pageIndicatorPlacement).

    Paging indicator - Icons
    Paging indicator - Icons

    If there are more than 8 pages, the paging indicator changes from icons to numbers.

    Paging indicator - Count
    Paging indicator - Count

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Image (guidelines)

    Implementation

    Input Field

    A text input field allows users to enter and edit text or numeric values in one line. To help users enter a valid value, you can enable the autocomplete suggestion feature and the value help option.

    Usage

    Use the input field if:

    • The user needs to enter a short, single-line text or number.
    • The user needs to enter a password, URL, phone number, or email address.
    • The user needs to select a single item from a large amount of data (for example, more than 200 items).
    • The user needs to find an object by searching for more than one attribute, such as an ID, city, and customer name. Use this control in combination with the autocomplete suggestion feature and value help option. For a small set of values (for example, fewer than 20 items), consider using the select control. Otherwise, use the combo box (for 20-200 items).

    Do not use the input field if:

    Information
    For more information on which selection control to choose, see the selection control overview.

    Responsiveness

    In the examples below, the input field is shown in combination with the tabular autocomplete feature for different device sizes.

    Note that when tabular suggestions are used, the column headers stay sticky when scrolling within the suggestion list.

    Size S (Smartphones)

    Cozy mode:

    When the user clicks the input field, a new full screen dialog opens in which suggested items can be selected. Here, the pop-in feature of the responsive table is used.

    Tabular autocomplete suggestion feature on a smartphone
    Tabular autocomplete suggestion feature on a smartphone

    Size M (Tablets)

    Cozy mode:

    The pop-in feature of the responsive table is used here, and defined columns are wrapped into a new line due to the limited space available.

    Tabular autocomplete suggestion feature on a tablet
    Tabular autocomplete suggestion feature on a tablet
    Tabular autocomplete suggestion with sticky header
    Tabular autocomplete suggestion with sticky header

    Size L (Desktops)

    Compact mode:

    The full table is shown by the suggest feature.

    Tabular autocomplete suggestion feature on a desktop
    Tabular autocomplete suggestion feature on a desktop

    Types

    Six input types are currently supported (API). Be sure to select the correct type for your use case. Depending on the input type, a different keyboard layout is displayed on a mobile device (see some sample input types).

    Note: The control does not provide validation based on the type. The app development team must implement format validation. If binding is used, validation is carried out by the model, but error handling must still be implemented on the UI side.

    Text (default)

    Input type text – Keyboard layout on a smartphone
    Input type text – Keyboard layout on a smartphone

    Number

    Input type number – Keyboard layout on a smartphone
    Input type number – Keyboard layout on a smartphone

    Email

    Input type email – Keyboard layout on a smartphone
    Input type email – Keyboard layout on a smartphone

    URL

    Input type URL – Keyboard layout on a smartphone
    Input type URL – Keyboard layout on a smartphone

    Telephone Number

    Input type telephone number – Keyboard layout on a smartphone
    Input type telephone number – Keyboard layout on a smartphone

    Password

    Input type password – Keyboard layout on a smartphone
    Input type password – Keyboard layout on a smartphone

    Some types, such as number or telephone number, can be used together with mask input for better guidance.

    Examples of input with different number masks
    Examples of input with different number masks

    Behavior and Interaction

    Entering Text Using the Autocomplete Feature

    Have a look at the interaction flow below:

    Entering Text Using the Value Help Dialog

    Have a look at the interaction flow below:

    Information
    For information on how to manage leading and trailing white space (blanks) when copying and pasting text into input controls, see removing leading and trailing white space.

    Styles

    An input field can have the following styles. For more information, see UI Element States.

    Input field states
    Input field states

    Properties

    Value State and Value State Message

    The input control offers the four value states listed below, for which you can show an additional value state text message when the focus is on the input field.

    1. Error
    2. Warning
    3. Success (no message is available for this state)
    4. Information

    For more guidance on when to use which state, see How to Use Semantic Colors.

    Input field in semantic colors with value state message below
    Input field in semantic colors with value state message below

    The value state message can be either a plain text or a formatted text.

    Enabled, Read-only and Disabled states

    The input field has three states (see examples of input states):

    1. Enabled: This is the default setting.
    2. Read-only: The input field is shown in a read-only state, with a grey background.
    3. Disabled: The input field is shown with a visual indication that editing isn’t possible (for example, because the user isn’t authorized to make changes).
    Input field - Enabled
    Input field - Enabled
    Input field - Read only
    Input field - Read only
    Input field - Disabled
    Input field - Disabled

    Required

    Use this property to indicate that user input is required. Set the property for the specific input field to ensure that the asterisk is shown in front of the label.

    Required input field
    Required input field

    Maximum Length

    Use this property to set the maximum number of characters allowed. There is no limit by default.

    Placeholder

    The placeholder, or input prompt, is a short hint (a word or short phrase) to help the user with data entry. A hint can be a sample value or a brief description of the expected format.

    Placeholder
    Placeholder

    Description

    You can provide an additional description on the input field, for example, for units or currency. The width of the input field and description is distributed equally by default. Although the default setting is 50%, you can change this with the fieldWidth property.

    Input description
    Input description

    Width

    The width of the input field is set to 100% by default. Input fields are usually used in forms, where the width is determined by the form element or container that the input field is embedded in. Instead of defining a fixed width, we recommend working with proper layout containers, like the form, simple form, and responsive grid layout, and with the layout data property, where the width is defined by the 12-column approach.

    Text Alignment

    The input field offers six types of alignment for text values (API):

    • Begin
    • Center
    • End
    • Initial (default): Browser-configured alignment is used
    • Left
    • Right

    Value Help

    To help the user find the correct value, you can enable the value help option (property: showValueHelp). By enabling this option, a small value help icon ( )is displayed in the input field on the right-hand side. To give a better indication of the type of data that can be selected, you can exchange the value help icon (property: valueHelpIconSrc). Once the value help option is enabled, the click event can be registered and one of the following displayed:

    Warning
    Don’t use the “value help only” option (property: valueHelpOnly). This can result in inconsistencies for screen reader users.
    Input field with value help
    Input field with value help
    Custom value help icon
    Custom value help icon

    The values can also be pasted into the input field by copying and pasting, or dragging and dropping, if the user prefers. In this case, the values are automatically transformed into conditional expressions. For example: Copying values “1234” and “5678” leads to the token generation “=1234” and “=5678”. Additionally, these values are shown in the conditions tab of the value help dialog.

    Input Assistance

    Intelligent systems can help users by recommending appropriate content or suggesting an action or input the user may “prefer”. The system assists the user by entering data or filtering data. Typical examples might be a search phrase suggestion, an appropriate form template, or a set of suggested default values for certain fields, based on the user input and interaction history.

    For more information, see Designing Intelligent Systems – Input Assistance.

    Autocomplete Suggestions

    The input control offers three different types of autocomplete suggestions: single, two-value, and tabular. By default, the width of the suggestion box is the same as the width of the input field. You can change it with the maxSuggestionWidth property.
    Note: The maximum width of the suggestion box is always slightly smaller than the width of the screen or browser window (with 1 rem of free space on the left and right sides), regardless of the value you provide for maxSuggestionWidth.

    The position of the suggestion box depends on the space available below the control. If there is not enough space, the suggestion box is shown above the control.

    As the user types, the first suggestion item that matches the characters entered is autocompleted in the input field. The typed characters are matched against the beginning of the suggestion items, based on the “starts with” filter. As a visual hint for the user, the matched characters are highlighted (bold) in the option list items. The highlighting works on the basis of “starts with per term”, regardless of the filtering method. The user can accept the autocompleted value by pressing ENTER. 

    The autocomplete property is set by default if suggestions are available, but can also be switched off.

    Warning
    The typeahead input feature is not available on Android devices

    Single Value with Autocomplete

    Single-value autocomplete displays a list of suggestions with one left-aligned value. As a base for the aggregation suggestionItemssap.ui.core.Item is used.

    Use the single-value autocomplete feature if you want to search by only one attribute, such as an ID or a customer name.

    See this live example of single-value autocomplete suggestions.

    Single-value autocomplete suggestion feature
    Single-value autocomplete suggestion feature

    Two Values with Autocomplete

    The two-value autocomplete suggestion feature displays two attributes of a business object, such as a customer and an ID.  As a base for the aggregation of suggestionItemssap.ui.core.ListItem is used.

    The text property is displayed first, and is left-aligned. The additionalText property is right-aligned. The first text property is autocompleted in the input field.

    Use the two-value autocomplete feature if you want to search by two attributes. This ensures that the search is carried out for both attributes.

    See this live example of two-value autocomplete suggestions.

    Two-value autocomplete suggestion feature
    Two-value autocomplete suggestion feature

    Tabular Autocomplete

    This autocomplete feature displays the values in a table layout. Use the tabular autocomplete feature if you need to display more than two attributes.

    For input fields in a tabular view, we recommend using a maximum of 4 columns. Focus on columns that are really relevant for the use case. If there are too many columns for the available space, the width of the columns shrinks. Alternatively, you can enable the responsive behavior of the table (property: enableTableAutoPopinMode).

    To use the tabular suggestion feature, use the suggestionColumns aggregation to define the columns and the correct responsive behavior for the pop-in content. Define appropriate responsive behavior for sizes S and M. For more information, see the article on the responsive table.

    With the showTableSuggestionValueHelp property, you can offer a Show All Items button at the end of the suggest result list. Because the number of results in the suggest functionality is limited, this option helps the user find the relevant item via an alternative dialog:

    The width of the columns is distributed equally by default. To avoid truncation, accurately estimate the primary attribute length and set a minimum width for this column.

    The column headers remain in place when the user scrolls through the suggestion list (“sticky” behavior).

    See a live example of tabular autocomplete suggestions.

    Tabular autocomplete, suggestion box wider than the input field
    Tabular autocomplete, suggestion box wider than the input field

    Grouping

    You can group the items in a suggestion list by a specific attribute and separate each group visually with a group header. This feature is also available for tabular suggestion lists.

    The group headers are not interactive.

    Input with grouped suggestions
    Input with grouped suggestions
    Input with grouped tabular suggestions
    Input with grouped tabular suggestions

    Clear

    You can add a Clear icon to the input field (property: showClearIcon). It will appear as soon as the input field has a value. Clicking the Clear icon removes the value from the field. If used, make sure that the input field is wide enough to show the Clear icon in addition to the value.

    'Clear' icon
    'Clear' icon

    Accessibility

    • The property ariaDescribedBy links the input field to other controls to provide additional information for assistive technologies, such as screen readers. If you use this property, we recommend linking either to on-screen controls that provide additional context or to an invisible text.

    Guidelines

    Always provide a meaningful label for any input field, and use the least complex control (such as select instead of value help). Use more intricate controls only if the use case really requires it. Where appropriate, help users by providing mask input or placeholder texts.

    Maximum Columns

    For input fields in a tabular view, we recommend using a maximum of 4 columns.

    Maximum Length

    Limit the length of the input field. For example, if you don’t want users to enter more than 5 characters, set the maximum length to 5. The maximum permissible character length is not defined by default. If the back-end system has a limit, ensure that you set this property accordingly.

    Note that this parameter is not compatible with the input type sap.m.InputType.Number. If the input type is set to Number, the value of the maxLength property is ignored.

    Placeholder

    Avoid using the placeholder attribute as an alternative to a label. This is important because the placeholder text is overwritten as soon as the form is filled out. Labels are necessary to indicate the meaning of the form fields when the placeholders are no longer visible.

    Description

    The description field should be used, for example, for displaying units or currency. Do not use a description for help text or as a label replacement. Note that the description is not placed in a new line in size S. Therefore, only use the description property for small input fields with a short description.

    Width

    • Avoid setting a fixed width, but rather embed it in a proper layout (such as a form, simple form, or grid layout) and use the layout data property to define the responsive behavior for sizes S, M, and L:
    • Ensure an appropriate width for the range of values to be entered for the sizes S, M, and L. Keep in mind that word length can vary between languages, so take localization into account.

    Editable and Enabled States

    Editable

    Property settings: editable = true, enabled = true

    The input control is enabled and editable by default. Set the control to editable to allow the user to enter a value.

    Not Editable

    Property settings: editable = false, enabled = true

    Use this state, for example, to display data only.

    Disabled

    Property settings: editable = not relevant, enabled = false

    Set the control to disabled in an edit scenario to indicate that the user cannot change the control, for example, due to missing access rights or previous conditions not having been fulfilled or selected.

    Alignment

    The alignment rules are the same for display mode and edit mode.

    Align left if:

    • Text is used. Also use left alignment for a phone number, URL, password, and email address.

    Align right if:

    • Amounts and decimal numbers are used.
    • Values need to be added and compared.

    Value Help

    Show the value help option to help the user select the correct value (such as a customer ID) from a large dataset via the:

    Use this option in combination with the autocomplete suggestion feature.

    The value help dialog should tell users what values have already been entered into an input field.

    Creating and Editing Objects

    Sometimes a new object needs to be created if the user cannot find a specific item via autocomplete or value help. In this case, we recommend that you place the New action next to the input field.

    If you want the user to be able to edit a selected object directly, you should place the Edit link next to the input field.

    If both actions are needed, they should be toggled based on the content of the input field. If a valid object is selected, you should display Edit. If the input field is empty or the object is not valid, you should display New. This pattern can also be applied for the multi-input fieldcombo boxmulti-combo box, and select controls.

    Input field – 'New' action
    Input field – 'New' action
    Input field – 'Edit' action
    Input field – 'Edit' action

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Dialog

    The dialog control (sap.m.Dialog) interrupts the current app process to prompt the user for information or for a response. It forces a decision or a confirmation that needs to be signed off by the user.

    Usage

    Use the dialog if:

    • You want to display complex content (that is not a floorplan), but don’t want the user to navigate away from the current page.
    • You want to display an additional step or process that needs to be confirmed by a user action.
    • You want to enable the user to create an object with a small number of fields.

    Do not use the dialog if:

    • You want to display a simple message. Use the message box instead.
    • You just want to confirm a successful action.
    • You do not want to interrupt the user.
    • You want to enable users to create an object with a large number of fields. Use an object page instead.
    • You want to display a floorplan. Floorplans are not meant to be displayed inside a dialog.

    Responsiveness

    The dialog provides different behavior on a smartphone than on a tablet or desktop. We distinguish between “cozy” and “compact” dialogs. For more information, see content density.

    The buttons in the toolbar are aligned differently on the various devices. On a smartphone, they extend across the entire footer toolbar, but on a tablet or desktop device, they are right-aligned.

    Size S (Smartphone)

    Full Screen Dialog

    We recommend displaying dialogs in S size in full screen mode to help users focus on the content of the dialog (property stretch = “true”). The toolbar containing the actions is positioned at the bottom of the dialog.

    Position of the Action Buttons

    On smartphones, a dialog can have one or two actions, which are located in the footer and right-aligned.

    Full screen dialog - Size S
    Full screen dialog - Size S

    When to Open Full Screen or Modal

    Always display message dialogs as modals. There is no need to display a simple message in a full screen dialog. If you want to display a simple message, use the message box instead.

    If you use standard dialogs, such as value help, open them in full screen mode to help the user can focus on the content of the message. The dialog control offers a stretch property for full screen behavior.

    Size M (Tablet)

    By default, the dialog can have up to two action buttons in the footer. The action buttons in the toolbar are right-aligned. Use cozy mode on tablet devices.

    If the content height increases or is set to more than the screen height, the dialog height stops at 4 rem from the top and bottom. The user can then scroll through the content area.

    Size L (Desktop)

    By default, the dialog can have one or two actions. The action buttons on a desktop device are right-aligned. Use compact mode to ensure that the padding and margins are optimized for desktop devices.

    If the content height increases or is set to more than the screen height, the dialog height stops at 4 rem from the top and bottom. The user can then scroll through the content area.

    Dialog in compact mode - Size L
    Dialog in compact mode - Size L

    Layout

    Position on the Screen

    The dialog is positioned in the center of the screen. It opens in a modal window to ensure that it attracts the user’s attention when it displays emergency states.

    On a smartphone, the stretch property allows you to achieve full screen behavior.

    Behavior and Interaction

    Navigation in a Dialog

    You can let users navigate to another page within the dialog. On the second page, an arrow at the top of the dialog allows users to navigate back to the first page.

    Navigation pattern list - Size L
    Navigation pattern list - Size L
    Navigation pattern details - Size L
    Navigation pattern details - Size L

     

    Resizable

    You can let users change the size of the dialog (property resizable = “true). The resizable indicator then shows in the bottom-right corner of the dialog.

    Resizable indicator in the bottom right-hand corner - Size L
    Resizable indicator in the bottom right-hand corner - Size L

    Draggable

    By clicking and holding on the heading, users can drag the dialog to another position (property draggable = “true”).

    Dialog can be moved by dragging the title - Size L
    Dialog can be moved by dragging the title - Size L

     

    Messaging Within a Dialog

    If your dialog contains a scrollable form, use a message popover to help visualize any issues that are hidden when scrolling.

    Warning
    Don’t use a message popover in small dialogs where the popover might obscure form fields that are in focus.
    DIalog with message popover
    DIalog with message popover

     

    Editing and Saving Content

    If a dialog is used for editing, keep it simple. If you need more a large number of editable fields, consider other solutions instead, such as navigation to a details page.

    The data in the dialog is only saved when the user clicks Create or Save. Use form field validation within the dialog to make users aware of any errors.

    The data in the dialog is lost if the page is refreshed during the editing process (also in the draft scenario), or if the user chooses Cancel.

    Highlighted form fields in a dialog - Size S
    Highlighted form fields in a dialog - Size S

     

    Types

    Standard Dialog

    Use the standard dialog unless you need one of the specialized dialogs below. The standard dialog has a header with a grey background, and no icon.

    Message Box

    The message box is a special type of dialog that is used to display messages quickly. For each type of message, you can decide when to use a dialog. Use the message toast (sap.m.MessageToast) for success messages. For more information, see Message Box.

    Components

    The dialog contains the following sections and options:

    Title: The title text appears in the dialog header. By default, the title is left aligned.

    Subheader (optional): Subheaders appear below the main header. Since the subheader is not part of the content area, it is not scrollable.

    Content: This area contains the actual content of the dialog.

    Footer with actions: The footer can contain up to two buttons (optional). If no buttons are defined, the default Close button is shown.

    Example of a dialog structure (Cozy)
    Example of a dialog structure (Cozy)

    Emphasized Buttons in a Dialog

    Always use an emphasized button for the the standard action. Emphasizing the main action in the dialog toolbar helps users to focus on the most likely choice. This saves users time and gives new users a sense of orientation.

    Never use an emphasized button for Cancel.

    Emphasized button in the dialog footer
    Emphasized button in the dialog footer

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Chart – Value Display

    This article describes how value labels are displayed and how to customize them.

    Default Value Display

    By default, values of the data points are automatically displayed close to the data point, so that the user does not have to select each point to check its value.

    As a general rule:

    • Values never overlap.
    • Text can be truncated.
    • Numeric values are never truncated.

    Columns

    Values are displayed above the bar.

    Value display in column chart
    Value display in column chart

    Stacked Columns

    Values are displayed within each bar.

    If the height of the bar is too small so that the bar cannot hold the value itself (bar height < text height), the text is hidden.

    Bars

    Values are displayed on the right side of the bars.

    Value display in bar chart
    Value display in bar chart

    Stacked Bars

    Values are displayed within each bar.

    If the width of the bar is too small so that the bar cannot hold the value itself (bar width < text width), the value is hidden.

    Bubbles with Numeric Values

    Values are displayed within the bubbles. If the numeric value does not fit in the bubble, it is hidden.

    Value display in bubble charts
    Value display in bubble charts

    Bubbles with Text

    Text are displayed within the bubbles. If the text does not fit in the bubble, it is truncated until a minimum of 3 characters. Below 3 characters, the text is hidden.

    Value display in bubble charts
    Value display in bubble charts

    Line Chart

    Values are displayed to avoid overlapping with the line and with the data point. In general, values are displayed above the data point, except when the line has a “V” shape (for example, when the values just before and after are larger than the current value). When the value is displayed above the data point, it can be slightly moved to the left or to the right to avoid overlapping.

    Value display in line charts
    Value display in line charts

    Custom Value Display

    If there are too many data points, it is possible to hide all values or to hide some values.

    Hide Values for a Series (Combined Chart)

    When combining a line with bars, avoid displaying values for both series unless you are sure that both series will not overlap. Instead, please only show values for the most important series.

    Combined chart
    Combined chart

    Hide Values of a Series (Clustered Bars)

    In clustered bars, when a series is not the key focus of the chart, it may be better to hide its values.

    Clustered column chart
    Clustered column chart

    Hide Values for a Series (Multiple Lines)

    When multiple lines are displayed in a chart, avoid displaying values for all the lines. This leads to cluttered information. Instead, please show only values for the most important line.

    Line chart with multiple lines
    Line chart with multiple lines

    Hide Values for Categories

    If the focus of the chart is on one specific category and its comparison with other categories, it may be better to hide all the values except the key category.

    Column chart
    Column chart

    Hide Values Based on Condition (Min, Max)

    It is also possible to highlight the first and last values of a series, or the minimum and maximum value of a series.

    Maximum and minimum values are highlighted
    Maximum and minimum values are highlighted

    Formatting Values

    Quantity Formatters

    When values use quantity formatters such as short format or percentage, always display the formatters in the data point. For example, display 30M or 12% in the data point.

    When appropriate, also show the formatters in the vertical or horizontal axis. For example, the vertical axis will display 10%, 20%, 30%…10%.

    Quantity formatters
    Quantity formatters

    Locale

    Be locale aware: Display numbers in the format corresponding to the user’s locale settings. For that purpose, use SAPUI5 number formatters.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    No links.

    Multi-Combo Box

    The multi-combo box control is commonly used to enable users to select one or more options from a predefined list. The control provides an editable input field to filter the list, and a dropdown arrow to open the list of available options. The select options in the list have checkboxes that permit multi-selection.

    Usage

    Use the multi-combo box if:

    • The user needs to select one or more options from a long list of options (maximum of approximately 200).
    • The values of the option list contain secondary information that does not need to be displayed right away.

    Do not use the multi-combo box if:

    • The user needs to choose between two options, such as ON or OFF and YES or NO. In this case, consider using a switch control instead.
    • You need to display more than one attribute. In this case, consider using the select dialog or value help dialog instead.
    • The user needs to search on multiple attributes. In this case, consider using the select dialog or value help dialog instead.
    • Your use case requires all available options to be displayed right away, without any user interaction. In this case, consider using checkboxes instead.
    • You want to enable users to add custom values. In this case, consider using the multi-input field.
    • Your use case requires more options to choose from. In this case, consider using the multi-input field, either with the select dialog or value help dialog (for more than 1000 items).
    Information
    For more information on which selection control to choose, see the selection control overview.

    Responsiveness

    The multi-combo box is optimized for keyboard and mouse interaction.

    Size S

     Filter bar with multi-combo box - Size S
    Filter bar with multi-combo box - Size S
    Option list in full screen - Size S
    Option list in full screen - Size S

    Size M

    Filter bar with multi-combo box - Size M
    Filter bar with multi-combo box - Size M

    Size L

    Filter bar with multi-combo box - Size L
    Filter bar with multi-combo box - Size L

    Also see the section on behavior for mobile devices.

    Components

    Input Field

    The input field (2) can display a placeholder text (6) when it’s empty, or a token (1) if a value is selected.

    Dropdown Trigger

    The dropdown button (3) collapses and expands the dropdown list.

    Option List

    The option list (7) contains a list of selectable options (5). Clicking the label of an entry closes the option list and creates a token for the selected option. To enable multi-selection, every entry also has a checkbox (4). Clicking a checkbox creates a token. The option list remains open.

    Components of the multi-combo box
    Components of the multi-combo box

    Two-Column Layout

    Use the multi-combo box with a two-column layout if you need to display additional information for the selection options, such as currencies, country abbreviations, or system abbreviations.

    Multi-combo box with a two-column layout
    Multi-combo box with a two-column layout

    Behavior and Interaction

    Select a Value

    There are three ways to select an item from the list:

    • Tick the checkbox (option list remains open).
    • Click the label of a select option (option list is closed).
    • Use the keyboard (space bar or Enter).

    The user clicks the input field to place the cursor in the field (1). Clicking the down arrow displays the list (2). As the user types into the input field, the list is filtered accordingly (3). The arrow up and arrow down keys move the focus within the list (4), while the typed text remains in the input field. Selected options are automatically entered into the input field as tokens (5).

    If the user selects items from the filtered option list (3) by clicking the checkbox or by pressing the space bar on the keyboard, the text entered in the input field remains. The option list stays open. If the user selects items by clicking the label or by pressing Enter, the entered text is cleared and the option list is closed.

    The shift key can be used to select a range of items (shift+click marks the end of the range, shift+arrow up / shift+arrow down extends or narrows the selection range in the corresponding direction. Ctrl+A selects or deselects all items. If selecting all items is a common use case, you can also show a Select All checkbox at the top of the list (property: showSelectAll).

    Developer Hint
    With the showitems API, you can open the option list without having the dropdown arrow in a pressed state. Clicking the arrow again opens the full option list and sets it to pressed state. This way, you can show some items on focus and all items on click.

    Input Field

    Any character in the input field acts as a filter for the option list. The input field only allows users to type text that matches the items in the list. If the user tries to enter character combinations that are not in the option list, visual feedback is provided to indicate that the combination of characters is invalid, while the input field suppresses the characters entered.

    Behavior - Sizes M and L
    Behavior - Sizes M and L
    'Select All' check box (optional)
    'Select All' check box (optional)

    Choose from Option List

    The option list displays all the available items that the user can choose from. Clicking the arrow opens the option list below the field. If there is not enough space to display the dropdown list below the field, it is displayed above the field instead.

    Reviewing Tokens

    If tokens have been selected, and the multi-combo box is not in focus, the input field displays as many tokens as possible in the available space. If more tokens have been selected, an [n] More label indicates the number of hidden tokens. The tokens in the input field appear in the order in which they were selected.

    Clicking the [n] More label opens a popover below the input field, in which all selected items are shown. The user can deselect an item by clicking its checkbox or label.

    Multi-combo box - 'n More' label
    Multi-combo box - 'n More' label

    If the length of the last selected token exceeds the width of the input field, a label [n] Item/s is shown when the field is not in focus.

    Clicking the [n] Item/s label opens a popover below the input field, in which all selected items are shown. The user can deselect an item by clicking its checkbox or label.

    If there is only one token in the input field and its length exceeds the width of the input field, the text is truncated. Clicking the token opens a popover below the input field, in which the full text of the token is shown.

    Multi-combo box - '1 Item' case (desktop)
    Multi-combo box - '1 Item' case (desktop)
    Multi-combo box - 'n Items' label (Desktop)
    Multi-combo box - 'n Items' label (Desktop)

    Filtering the Option List

    When the user starts typing in the input field, the option list is filtered. Only items that match the characters entered are shown in the dropdown list. The default filtering method is “starts with per term”, which matches the beginning of each word in an item’s text.

    In addition, application developers can set a custom filtering method “starts with” or “contains” (method: setFilterFunction). The “starts with” approach filters only for items where the beginning of the label matches the query entered. The “Contains” approach searches the full label for a match.

    As a visual hint for the user, the matched characters are highlighted in the option list items. The highlighting works on the basis of “starts with per term”, regardless of the filtering method.

    If the filtered option list contains items that start with the characters entered by the user, the first matching, unselected item is auto-completed in the input field.

    Warning
    The typeahead input feature is not available for Android devices.
    Multi-combo box - Default filtering and auto-complete
    Multi-combo box - Default filtering and auto-complete

    Grouping

    Option list items can be grouped. Visually, the group header is a separate line above the items it groups. It does not currently provide an interaction of its own.

    Grouping
    Grouping
    Grouping on phones
    Grouping on phones

    Clear

    You can add a  (Clear) icon to the combo box (property: showClearIcon). The icon appears as soon as the combo box has non-tokenized text. Clicking the Clear icon removes the non-tokenized text from the field.

    If you offer the Clear icon, make sure that the multi-combo box is wide enough to show the icon in addition to the value.

    'Clear' icon
    'Clear' icon

    Behavior for Mobile Devices

    The following sections describe how the multi-combo box interacts on mobile devices.

    Clicking the Arrow

    Clicking the arrow opens the option list in a full screen dialog (1) with a title displayed in the header (2). The Close button (3) closes the dialog and cancels any selection changes in the option list. Clicking the label of an entry (4) closes the option list and creates a token of the selected option. By selecting a checkbox (5), the option list remains open and allows multi-selection. The OK button (6) takes over the selection and closes the dialog.

    Left: Filter bar with multi-combo box; Right: Full screen multi-combo box selection
    Left: Filter bar with multi-combo box; Right: Full screen multi-combo box selection
    Developer Hint

    The title of the full-screen dialog could be customized by adding a label as ariaLabelledBy to the multi-combo box. If no label is associated with the multi-combo box, the default title “Select” is set.

    As the user types into the input field (7), the list is filtered using the default “starts with per term” approach. Pressing the button next to the input field (8) toggles the view between all options and the selected options only.

    Left: Option list, filtered by user input; Right: Selected options from the list
    Left: Option list, filtered by user input; Right: Selected options from the list

    Input Field on Collapsed List

    If items have already been selected, the input field remains functional and the tokens remain visible (1). Clicking the Remove icon   in a token removes it (2). When the user clicks the input field, the list opens in full screen (3). Clicking the input field sets the focus on it (4) and the mobile device keyboard opens (5). When the user starts typing, the list is filtered (6) using the “starts with per term” approach. The input field only lets the user type characters that match the items in the list.

    Left: Multi-combo box with token in the input field; Right: List for selection filtered by a character
    Left: Multi-combo box with token in the input field; Right: List for selection filtered by a character

    Multiple Selected Items

    Not all the selected tokens can be displayed at the same time because the space is limited to the size of the input field (6). Swiping to the side scrolls horizontally to reveal a cropped token (7).

    Swiping to display tokens
    Swiping to display tokens

    Copying and Pasting Data from a Spreadsheet or Text File

    The control for the multi-combo box can handle paste actions containing, for example, multiple items that have been selected in a column of a spreadsheet or text file. The user simply selects an entire column in the spreadsheet and copies it. When items are entered into the multi-combo box, the user just pastes them from the clipboard and each item is then represented as a token. Only items that are part of the list are displayed as tokens.

    Information
    For information on how to manage leading and trailing whitespace (blanks) when copying and pasting text into input controls, please see removing leading and trailing whitespace.

    Styles

    The following images show how the states of the multi-combo box are styled.

    Unselected
    Unselected
    Unselected with predefined placeholder
    Unselected with predefined placeholder
    Unselected on hover
    Unselected on hover
    On focus
    On focus
    Expanded
    Expanded
    Hover highlighting in list
    Hover highlighting in list
    Expanded selection
    Expanded selection
    Expanded multi-selection
    Expanded multi-selection
    Selected items shown as tokens
    Selected items shown as tokens

    The multi-combo box offers four value states:

    • Error
    • Warning
    • Success
    • Information

    For error, warning, and information states, you can show an additional value state text message when the focus is on the combo box. The message can either be a plain text or a formatted text.

    For more guidance on when to use which state, see How to Use Semantic Colors.

    Error
    Error
    Warning
    Warning
    Success
    Success
    Information
    Information

    Guidelines

    Label

    The multi-combo box control can be displayed with or without a label. If the field is attached to another field, you don’t need to define a second label. For more information about labels in SAP Fiori, see the label guidelines.

    Placeholder

    Don’t use the placeholder attribute as an alternative to a label. This is important because the placeholder text will be overwritten as soon as the form is filled out. Labels are necessary because they indicate the meaning of the form fields if the placeholders are no longer visible. Show a placeholder only if the user needs a hint about what data to enter. Don’t repeat the content of the label. A hint could be a sample value or a brief description of the expected format. For more information about how to use the placeholder, see input field.

    Option List

    Keep the label of an entry in the select option list as short as possible because the list uses single lines only. Values that are too long may be truncated. If you need to indicate that none of the selection options are selected, show a blank input field. Define a default selection whenever possible. The multi-combo box cannot display columns. If you want to show two values in the option list, show the leading information first, followed by the secondary information in parentheses, such as Walldorf (Germany).

    Don’t disable items in the option list. If an item can’t be selected, hide it.

    Sorting

    The option list contains all available items that the user can choose from. Choose one of the following styles depending on how you want the content to be arranged:

    • Logical: Sort items into a meaningful order. Group related options together and show the most common options first followed by less common options.
    Logical multi-combo box
    Logical multi-combo box
    • Alphabetical: Sort currencies, names, and so on into alphabetical order. We recommend this for lists with more than eight items.
    Alphabetical multi-combo box
    Alphabetical multi-combo box
    • Numeric: Sort numeric values into a sequential order with the lowest number first.
    Numeric multi-combo box
    Numeric multi-combo box
    • Chronological: Sort time-related information into chronological order with the most recent first (if applicable).
    Chronological multi-combo box
    Chronological multi-combo box

    Width

    You can adjust the width of the option list to some extent. The multi-combo box control is usually used in forms, where the width is determined by the form element or container in which it is embedded. Therefore, we don’t recommend defining a fixed width, but rather working with proper layout containers such as the form, simple form, or responsive grid layout, and with the layout data property, where the width is defined. If you need to restrict the width to a defined value, set the width accordingly. Keep in mind that there’s no horizontal scrolling in the option list. Entries that are too long are truncated and users won’t be able to read them. To avoid this, you can enable wrapping (property: wrapping).

    Information
    If localized text isn’t an issue, such as with currency codes, use a smaller width.

    Unit of Measurement

    You can use the layout options of the form to add the unit of measurement (UoM) after the multi-combo box. Apps can use the label-field ratio to show the UoM after the field. However, you must make sure that the UoM is properly visualized and doesn’t wrap to the next row.

    Developer Hint

    For accessibility purposes, you can use ariaDescribedBy from the input control.

    Multi-Combo Box in a Filter Scenario

    The multi-combo box can serve as a filter. For example, if the multi-combo box is offered in a table toolbar, and is empty (no tokens selected), the table shows all items. If the user selects picks something in the multi-combo box, the table shows only the matching items.

    Alternatives for Display Mode

    If a form or table supports both display and edit mode, use the multi-combo box only in edit mode. In display mode, consider the following alternatives:

    • A horizontal list with bullet separators between the individual token texts (for example, using text or formatted text).
    • A bulleted list with a bullet per token text (for example, using formatted text).

    If the display mode equivalent needs to be a single-line text (as required for the grid table, tree table, analytical table), provide an overflow for all texts that do not fit onto the line (for example, by adding a link, opening a popover, or using an expandable text).

    Recommend display mode equivalent
    Recommend display mode equivalent
    Recommended display mode equivalent with overflow indicator
    Recommended display mode equivalent with overflow indicator
    Recommended display mode equivalent with overflow opened
    Recommended display mode equivalent with overflow opened

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Bullet Chart

    The bullet chart is used to compare primary and secondary (comparison) values.

    Encoded Values

    Primary Values

    Frequently used for actual values, primary values can also be used for any type of value that you want to compare to the secondary/comparison value.

    Secondary/Comparison Values

    Frequently used for target and plan values, comparison values can also be used to compare the primary value with any other value. There are use cases where the comparison value is used to express a forecast, a competitor, or a specific year.

    Additional Values

    The bullet chart can also express an additional value so long as it’s directly related to the primary value.

    Orientation

    The bullet chart can be orientated horizontally or vertically. It’s best to orientate it vertically for time series.

    Horizontal bullet chart
    Horizontal bullet chart
    Vertical bullet chart
    Vertical bullet chart

    Color Palette

    If nothing is customised, the bullet chart will automatically use colors from the qualitative palette.

    However, it is also possible to customize the colors (for example, if you want to differentiate between categories). For more information, check out the article on bullet chart colors.

    SAP Fiori chart palettes
    SAP Fiori chart palettes

    Selection and Popover

    Unlike other charts, when the user clicks on a bullet, all the associated values are displayed in the popover – primary value, comparison value along with additional value, projected value, and qualitative ranges (if used). The popover can also be customized to display other information and actions if you wish.

    Popover
    Popover

    Legend

    As with all other charts, when you customize the colors, the text of each legend item must also be manually maintained because the chart component cannot guess the meaning of each color.

    For more information, see legend.

    Legend
    Legend

    Negative Values

    The horizontal and the vertical bullet charts can support negative values. Negative values can be applied to both the primary and the secondary (comparison) values.

    Horizontal bullet chart with negative values
    Horizontal bullet chart with negative values

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Page Layouts and Floorplans

    This article provides an overview of how SAP Fiori layouts and floorplans are used to build application pages.

    Page Layouts vs. Floorplans

    The standard page layout in SAP Fiori is the dynamic page, which is made up of a header, content area, and footer toolbar.

    Floorplans are usually based on the dynamic page. Floorplans serve specific use cases and therefore come with a specific combination of UI elements in the header, content area, and footer toolbar.

    The following visual shows the composition of the dynamic page layout and how the elements of a list report floorplan are built into it. Never insert a whole floorplan into just the content area of the dynamic page layout.

    Page - Dynamic page - Floorplan
    Page - Dynamic page - Floorplan

    Full Screen vs. Flexible Column Layout

    You can decide whether your app uses a full screen layout (one page at a time) or a flexible column layout for list-detail relationships (up to three pages side by side). The flexible column layout enables fast and fluid navigation between pages.

    Full screen layout
    Full screen layout
    Flexible column layout
    Flexible column layout

    More Information

    Information
    To control and optimize the left and right spacing between header and content area and between UI elements (such as tables and forms), we offer a responsive spacing system.

    Additional Layouts

    The following layouts have been designed for special use cases:

    Layout Use Case
    Comparison Allows users to select items from a list and display them side-by-side. This makes it easier to compare the characteristics of multiple items.  
    Multi Instance Allows users to open multiple documents in a tabular view. After selecting items from a list, the user opens them in a tab container.

    Related Links

    The following frameworks are also used to design pages:

    Framework Characteristics
    SAP Fiori elements Generates the user interface automatically, thus making app development more efficient, available for nearly all floorplans (besides Wizard and Initial Page)
    Analysis Path Framework For creating interactive, chart-oriented analytical drilldown apps by configuration
    SAP Smart Business For viewing and analyzing the data for one key performance indicator (KPI)

    Views (Variant Management)

    Information
    Note on terminology:

    On the user interface, we now call variants “views”, which is better understood by end users. To describe the SAPUI5 controls, however, we still speak of “variants” and “variant management”.

    Intro

    Variants store view settings, such as filter settings or control parameters.

    The filter settings consist of filter parameters, selection fields, and the layout of filters. They are set within the filter bar.

    Control parameters are the sort order, filter and group settings, column visibility, and the layout of a table or chart. They are set within the toolbar of the control.

    The variant management control enables the user to load, save, change, and maintain variants.

    Usage

    Use the variant management control if:

    • The user needs to save and load different filter settings to find the relevant data.
    • The user needs to save and load different layouts (for example, a table) to display data in different views.
    • The user needs to save the settings for the whole page, including the filter settings and table layout.

    Responsiveness

    Size S (Smartphone)

    On phones, the My Views dialog for selecting variants, the Manage Views dialog, and the Save View dialog open in full screen mode.

    My Views
    My Views
    Manage Views
    Manage Views
    Save View
    Save View

    Size M (Tablet)

    My Views
    My Views
    Manage Views
    Manage Views
    Save View
    Save View

    Size L (Desktop)

    My Views
    My Views
    Manage Views
    Manage Views
    Save View
    Save View

    Components

    Variant management come with several components:

    • A clickable title with an icon
    • The My Views dialog for selecting variants
    • The Manage Views dialog for setting view parameters and deleting views
    • The Save View dialog for creating a new view

    Name of View

    The view name is the entry point for opening the My ViewsManage Views, and Save View dialogs.

    If the user has made changes to the user interface that affect the saved view, the view is marked with an asterisk (*) to indicate the unsaved changes. This happens when the user deletes or adds a filter to the filter bar, for example.

    Selecting a view
    Selecting a view

    My Views Dialog

    The My Views dialog contains all favorite views, including the default view, the pre-shipped standard views, and the views marked as favorites by the user. The default view and the pre-shipped standard views are marked as favorites automatically.

    Default View

    There can only be one default view, which the user can change in the Manage Views dialog. If the user sets a new default view, the last view remains as a favorite. The user can explicitly unfavorite the last view in the Manage Views dialog.

    Pre-Shipped Standard Views

    The standard view is the minimum set of filters delivered by SAP, and cannot be modified or deleted. It is flagged as a favorite and cannot be removed. There can be several pre-shipped standard views, depending on the use case.

    Favorite Views

    Users can mark views as favorites (or unfavorite them) in the Manage Views dialog. If more than 10 favorite views exist, a search option is displayed.

    The views created by users themselves are favorited automatically, while views created by other users are unfavorited by default. This prevents the My Views popover from becoming overcrowded with public variants that are not relevant for the user.

    The user can also mark public views as favourites.

    Public Views

    Public views are visible to all users who have access to the app. A view can be set to Public by individual users, key users, SAP (default delivery), or partners. All views that are set to Public are available within the Manage Views dialog.

    A public view can be edited by the user who created it and by key users. All other users can only display the public view.

    Actions in the My Views Dialog

    Users can open the Manage Views dialog using the Manage button in the footer bar of the My Views dialog. From this dialog, users can Save changes to the current view, or choose Save As to create a new view, which opens the Save View dialog.

    'My Views' dialog with a few views
    'My Views' dialog with a few views
    'My Views' dialog with more than 10 views and a search option
    'My Views' dialog with more than 10 views and a search option

    Manage Views Dialog

    In the Manage Views dialog, users can make the following changes:

    • Mark a view as a favorite
    • Change the name of a self-created view
    • Set a view as the default
    • Apply the view automatically
    • View the Sharing and Created By information of each view
    • Delete a self-created view

    In addition to the personal views users create for themselves, they can also see the pre-shipped and public views. A user can only modify his or her own views, and not public, pre-shipped, or third-party views created by other users. 
    Exception: Key users can also change and delete views created by others.

    'Manage Views' dialog
    'Manage Views' dialog

    Apply View Automatically

    Users can select or deselect this option. The control allows app teams to add an optional text next to the checkbox. This can be useful if you apply filter exceptions that overwrite the standard behavior.

    'Manage Views' dialog with additional text in
    'Manage Views' dialog with additional text in "Apply Automatically" set

    Save View Dialog

    The Save View dialog is for creating a new view. For each view, you can make the following settings:

    • View: Name of the new view (required field)
    • Set as Default: If checked, the new view is the new default view.
    • Public: If checked, the new view is available to everyone who has access to the app.
    • Apply Automatically: If checked, the view is applied immediately whenever it is selected. The user does not need to click the Go button in the filter bar.
      We do not recommend checking this option if the selection is likely to cause long loading times.
    'Save View' dialog
    'Save View' dialog

    Layout

    The variant management control is merged with the page title (or next to or merged with title of the respective control, such as a table).

    Filter Bar (Page Title)

    The variant management control is merged with the page title within the page header container, and saves the stored filter settings or both the filter and control settings.

    Variant management within the filter bar, merged with the page title
    Variant management within the filter bar, merged with the page title

    Table

    The variant management control can also store control settings like layout, table column visibility, sorting, or grouping independently of the filter settings.

    It is either merged with the control title or placed next to it.

    If you place the title or variant management control inside a toolbar, apply the following styles:

    • Set the toolbar height to 3 rem.
    • Use a transparent toolbar.
    • Use the title class “sapMH4Fontsize”.
    Variant management within the table toolbar
    Variant management within the table toolbar

    If the table has a separate title, place the title first.

    Variant management with table title
    Variant management with table title

    Behavior and Interaction

    This control allows the user to select, create, update, and delete variants for filter settings and control parameters such as layout, table column visibility, sorting and grouping.

    My Views dialog: Selecting a View

    The page title displays the active variant. Clicking the title dropdown opens a popover that displays all available variants. The currently active variant is highlighted. To load another variant, the user simply selects one from the list.

    Save

    Save can only be applied to variants that the user is allowed to save. Otherwise, this button is disabled. Save overwrites the active variant.

    Save As

    Save As enables the user to save the current filter settings as a new view. The Save As function can also be used to duplicate existing variants for later modification.

    Manage

    Manage opens the Manage Views dialog that allows the user to update, delete or favorite/unfavorite existing variants.

    Selecting a view
    Selecting a view

    Save View dialog

    The Save View dialog is for creating new views. Providing a name for the new view is mandatory. Clicking OK saves the new view.

    Save View
    Save View

    Manage Views dialog

    In the Manage Views dialog, the user can rename, delete, and change properties of existing views.

    Users can only modify or delete entries if they have the necessary permissions. By default, variants that a user has created can also be modified and deleted.

    Manage Views
    Manage Views

    Save as Tile

    The user can save the currently selected variant as a tile on the launchpad using the Save as Tile action in the Share menu.

    In the Save as Tile dialog, the user can define the tile title and subtitle, a description, and the launchpad group in which the tile should appear.

    Save as tile via 'Share' button
    Save as tile via 'Share' button
    'Save as Tile' dialog
    'Save as Tile' dialog

    Guidelines

    Save as Tile

    Use the name of a variant as the title of the application tile. Map this as a preset title that cannot be edited by the user.  In this case, whenever the variant is updated, the tile is updated accordingly.

    Exception: If the variant cannot be referenced directly due to technical limitations, offer the standard tile creation option where filter parameters and settings are only saved within the URL.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Chart Toolbar

    The chart toolbar acts as a container for charts.

    The width and height of the chart container are never defined by the app, but are always set by the container itself (as explained in Size of the Chart Container).

    The toolbar is mandatory. Small charts or micro charts, such as dashboards, table cells, and small frames are an exception to this rule. In these cases, the developer must provide a consistent UI to enable action on the chart.

    The toolbar is always placed on top of the chart. It provides actions such as multiple box selection for selecting dimensions, full screen format, personalization actions, and a toggle function for showing and hiding legends.

    Responsiveness

    The chart container uses the sap.m.OverflowToolbar control. It is a container based on sap.m.Toolbar that provides overflow when its content does not fit in the visible area. For more information, please refer to the toolbar overview article (under Responsiveness).

    Chart toolbar – Size L
    Chart toolbar – Size L
    Chart toolbar – Size S
    Chart toolbar – Size S

    Components

    The following content can be part of the chart toolbar. Use only the content your users really need and display them in the order shown below:

    • Title
    • Variant management or perspective switch
    • Business actions (app-specific)
    • Actions for content management
      • Show Legend / Hide Legend
      • Zoom In
      • Zoom Out
      • Settings
    • Minimize / Maximize
    • View switch (between different chart types or between chart and table)
    • Overflow
    Components of the chart toolbar
    Components of the chart toolbar

    Behavior and Interaction

    Business Actions (app-specific)

    If needed, you can define your own actions for the app using transparent text buttons only. If multiple actions are required, sort them, starting with the most important action (= primary action) on the left. You can emphasize the primary action using a ghost button.

    More information:

    Chart toolbar with business actions
    Chart toolbar with business actions
    Chart toolbar with emphasized primary business action
    Chart toolbar with emphasized primary business action

    Title

    A title provides a short, meaningful summary of the content, often in a single word. To display a title, use the title control.

    Use a title if you need the chart toolbar, and if the title of the chart is not indicated in the surrounding area. Note that the title is truncated if there is not enough space.

    Chart toolbar - Title
    Chart toolbar - Title

    Variant Management

    In charts, a variant stores all the settings that define the chart view (for example, the selected dimensions and the sort and filter settings). The variant management control enables users to load, save, and change variants. In most cases, variant management replaces the title.

    Chart toolbar - Variant management
    Chart toolbar - Variant management

    Title and Variant Management

    If you need both a title and variant management, place the variant management control directly after the title. Use a separator between the title and variant management.

    Since using both controls often leads to truncation problems, this pattern is not recommended.

    Chart toolbar - Title with variant management
    Chart toolbar - Title with variant management

    Perspective Switch

    Chart toolbar - Perspective switch
    Chart toolbar - Perspective switch

    The perspective switch is left-aligned in the toolbar. It can be used to switch between different dimensions. We recommend using a select control, but any other dropdown control can be used as well. The perspective switch replaces the title and the variant management control.

    For SAP Smart Business apps, the view incorporates and defines the chart description, the dimension, the measure, and the defaulted chart type. The various views are preconfigured and maintained by an SAP Smart Business administrator.

    Ensure that all switches have a meaningful title. We recommend using a short chart description followed by the dimensions:

    Simple perspective
    Simple perspective

    You also have the option of extending the perspective switch if the app needs to switch between specific subdimensions. The number of dimensions and subdimensions that are needed depends on the app.

    Perspective view with subdimension
    Perspective view with subdimension

    If the app does not need a perspective switch, use the chart title (property: title).

    Chart with title
    Chart with title

    Legend (Generic)

    Chart toolbar with legend button
    Chart toolbar with legend button

    The Legend button (property: ShowLegend) is the first generic action. The user clicks this button to hide or show the chart legend.

    The legend also allows the user to select or deselect data points.

    Zoom In/Zoom Out

    We recommend offering the zoom feature on the chart toolbar. Two icon buttons depicting a magnifying glass are then displayed. When the user clicks the Zoom In or Zoom Out button, the chart zooms accordingly.

    Chart with zoom in/out buttons
    Chart with zoom in/out buttons

    Settings

    You can add a Settings button to the chart toolbar to enable app-specific settings (property: ShowPersonalization). The corresponding popover or dialog must also be implemented by the app team.

    We do not recommend using this feature. If you do choose to use it, exercise caution. Bear in mind that the perspective switch feature already allows preconfiguration of several combinations of dimensions, measures, and chart type selections.

    When viewing charts, users do not usually want to think about which chart types, dimensions, or measures are most suitable in a particular use case. Instead, decide on the most valuable chart/dataset combinations for the end user beforehand and provide users with the most appropriate preconfigured chart view.

    Chart personalization action
    Chart personalization action

    View Switch (Generic)

    Chart toolbar with view switch
    Chart toolbar with view switch

    View switches are right-aligned in the toolbar. They allow the user to switch between different chart types or table layouts. You need to offer the view switch if the chart relies on subtle color differences or color gradients. Users with visual impairments can then use the table view.

    Switches are optional. The buttons can be hidden if there is no need to switch between different charts or tables.

    Be careful when choosing the chart types and the number of switches. For each app, decide which chart types are best suited to visualizing data in the user’s context.

    We recommend using no more than three types of visualization. The sequence of chart type switches is not fixed, but we recommend sorting them by importance and usage within the respective app.

    The segmented button control is used to display the chart types. The control highlights the chart that is currently displayed.

    View Switch – Switch Between Chart and Table

    The view switch allows you to switch easily between tables and charts.

    Some actions are only available in certain views. For example, the Legend icon is only visible in the chart view. If the user selects the table view, the Filter action is visible and the Legend icon is hidden.

    Icon Usage

    Each visualization of a chart is represented by an icon. The icon explorer helps you to find the most appropriate icon.

    Bar chart:
    Bar chart: "SAP-icons" font - Unicode: #e02c - Name: horizontal-bar-chart
    Horizontal bullet chart:
    Horizontal bullet chart: "SAP-icons" font - Unicode: #e215
    Vertical bullet chart:
    Vertical bullet chart: "SAP-icons" font - Unicode: #e216
    Combined column line chart:
    Combined column line chart: "SAP-icons" font - Unicode: #e11f - Name: business-objects-experience
    Stacked bar chart:
    Stacked bar chart: "SAP-icons" font - Unicode: #e183 - Name: horizontal-stacked-chart
    Stacked column 100% chart:
    Stacked column 100% chart: "SAP-icons" font - Unicode: #e180 - Name: full-stacked-column-chart
    Bar chart:
    Bar chart: "SAP-icons" font - Unicode: #e182 - Name: horizontal-bar-chart-2
    Column chart:
    Column chart: "SAP-icons" font - Unicode: #e0ef - Name: vertical-bar-chart
    Pie chart:
    Pie chart: "SAP-icons" font - Unicode: #e015 - Name: pie-chart
    Stacked bar 100% chart:
    Stacked bar 100% chart: "SAP-icons" font - Unicode: #e17f - Name: full-stacked-chart
    Table chart:
    Table chart: "SAP-icons" font - Unicode: #e0bb - Name: table-chart
    Heatmap:
    Heatmap: "SAP-icons" font - Unicode: #e214
    Bubble chart:
    Bubble chart: "SAP-icons" font - Unicode: #e18e - Name: bubble-chart
    Column chart:
    Column chart: "SAP-icons" font - Unicode:  - Name: vertical-bar-chart-2
    Donut chart:
    Donut chart: "SAP-icons" font - Unicode: #e213
    Scatter chart:
    Scatter chart: "SAP-icons" font - Unicode: & #xe18f; - Name: scatter-chart
    Stacked column chart:
    Stacked column chart: "SAP-icons" font - Unicode: #e184 - Name: vertical-stacked-chart
    Map:
    Map: "SAP-icons" font - Unicode: #e185 - Name: choropleth-chart

    Maximize / Minimize

    Chart toolbar with maximize button
    Chart toolbar with maximize button

    In addition to zooming, the app can use the full screen mode of the chart container (property: FullScreen).

    The user can open the chart in a full screen dialog via this toggle button. When the chart is maximized, the    Maximize button is replaced by a corresponding    Minimize button.

    Overflow (Generic)

    See Overflow in the Toolbar Overview article.

    Guidelines

    See the detailed Guidelines section in the Toolbar Overview article.

    Additional Guidelines

    • Think carefully about what actions you really need in the chart toolbar – do not overload the toolbar with actions.
    • Try to put the actions as close to the content as possible.
    • Use appropriate tooltips to label icon buttons in the chart toolbar.

    Resources

    Elements and Controls

    Implementation

    Footer Toolbar

    The footer toolbar always appears as floating footer at the bottom of the screen. The floating footer property creates some padding between screen and toolbar, improving visibility.

    The control is used for closing or finalizing actions that impact the whole page. It is only visible when actions appear, when message handling is visible, or when the draft indicator is displayed. One main advantage of the footer bar is that this bar is always visible and will not scroll away.

    Our general guideline is to use only icon buttons or text buttons. Icon and text should not be combined into one button. Buttons are always right-aligned.

    Buttons are sorted from frequently-used to seldom-used. This ensures that the most important buttons will go into the overflow last.

    Usage

    Use the footer toolbar:

    • If you have closing or finalizing actions on your page that apply to the whole page.

    Do not use the footer toolbar:

    • If you have different containers on your page (such as charts, tables, and forms) and the action influences only certain items. In this case, place the action as close to the corresponding item(s) as possible.
    • If you have global actions (such as Edit or Delete) that are not finalizing or closing actions. In this case, use the header toolbar instead.

    Responsiveness

    To enable responsiveness, use the OverflowToolbar control. For more information, please refer to the corresponding section in the toolbar overview article.

    The height of the toolbar changes on desktops (compact mode), tablets, and smartphones (cozy mode). For more information about cozy and compact modes, see content density.

    Footer toolbar - Size S
    Footer toolbar - Size S
    Footer toolbar - Size M
    Footer toolbar - Size M
    Footer toolbar - Size XL
    Footer toolbar - Size XL

    Components

    The footer toolbar can contain the following components:

    • Message indicator
    • Draft indicator
    • Finalizing/closing actions
    Examples of possible components
    Examples of possible components

    All closing or finalizing actions are placed on the right side of the toolbar.

    The footer toolbar can also include a message and draft indicator. For more information, see draft handling and messaging.

    Behavior and Interaction

    Our general guideline is to use only icon buttons or text buttons. Icon and text should not be combined into one button. Buttons are always right-aligned.

    The buttons are sorted from frequently-used to seldom-used. This ensures that the most important buttons go into the overflow last.

    App-Specific Actions

    If needed, you can define your own action for the app. Use text-only buttons with a short, unambiguous text for the action the button performs. A button text is usually a single-word verb (for example, Save). Note that text strings can be longer in other languages.

    Text vs. Icon Buttons

    Use text-only buttons for all finalizing/closing actions (such as Save).

    Styles

    • Use button styles only if they help the user, and not for decoration.
    • Use the emphasized button for primary actions, such as Save.
    • Use the ghost button style for secondary actions, such as Return, and the transparent button for negative path actions, such as Cancel.
    • Use the semantic button for positive/negative actions (property: typeaccept or reject).
    • Use only one emphasized button per toolbar and never mix emphasized and semantic buttons.
      Exception: Additional messaging button for the message popover.

    For more information, see Button and Action Placement.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Responsive Table

    The responsive table contains a set of line items and is fully responsive. Depending on the scenario, users can also navigate from the line items to further details.

    A line item contains several data points sorted into columns. A data point refers to a unit of information, such as a number, a text, a unit of measurement, and so on, which can be used to form the content of a tableform or other control. One data point is usually displayed by a control, such as a text, object status, or input field. A control can display more than one data point, for example, by concatenating text.

    In contrast to traditional tables, a “cell” of the responsive table is not limited to displaying only one control, and therefore a single cell can present far more than one data point.

    Responsive table
    Responsive table

    Usage

    Use the responsive table if:

    • You need a table to display a moderate amount of data. When your data is of average complexity, the responsive table can handle up to 200 items. However, more complex data lowers the limit, and less complex data raises it. Note that the limit is not on the number of items in the database or in the filtered results, but the volume of data loaded at any point. Factors that influence the exact limit include:
      • The number of loaded rows in the table
      • The number of displayed columns
      • The complexity of the cell content (for example, simple text vs. complex charts)
      • Other elements on the page (for example, multiple pages in a flexible column layout, or several tables/elements with more complex rendering on the page)
      • The browser used

      For loading large amounts of complex data, use a grid table instead, as it can handle higher volumes more efficiently.

    • You need to use various controls inside a line item, such as micro charts. By contrast, the analytical table supports only a very limited set of controls.
    • The focus is on line items, not on cells. The responsive table is optimized for viewing complete items on all devices.
    • Selecting one or more items is a main use case and details are needed to choose the correct item.
    • Line items are independent of each other and no operation across columns is needed.
    • You want a single implementation for all devices. As its name suggests, the table is responsive and adjusts its appearance to the screen size so you can use it on all devices. However, make sure you adapt the responsive table design to offer the best solution for the tasks performed on mobile devices. Sometimes, a solution without a table is more useful and usable.

    Do not use the responsive table if:

    • The main use case is to select one item from a very small number of items, without viewing additional details. In this case, a select or combo box might be more appropriate.
    • The main use case is to select one item from several items, with the possibility of viewing only a few details per item. In this case, a list might be more appropriate. Pay attention to the layout of the list item to ensure that it has a pleasant appearance.
    • The cell level and the spatial relationship between cells is more important than the line item. In this case, use the analytical table or grid table. Examples include spreadsheet analyses and waterfall charts. Note that neither the analytical table nor the grid table are fully responsive. Both are only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
    • You expect users to work with large amounts of complex data. Use the analytical table or grid table instead; they are optimized for those cases.
      Note that the analytical table and the grid table are not fully responsive, but available only for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
    • Comparing items is a major use case. In this case, the analytical table or grid table might be more appropriate because each cell contains only one data point. In contrast, the responsive table offers greater flexibility within line items, including the ability to add more data points per cell and the pop-in function. Both make comparisons more difficult. Note that neither the analytical table nor the grid table are fully responsive. Both are only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
    • Data needs to be structured in a hierarchical manner. In this case, a tree table might be more appropriate. Although the analytical table can have several grouping levels, it is not as flexible when nodes at several levels contain child nodes. Note that the analytical table isn’t fully responsive and is only available for desktops and tablets, so you will need to take an adaptive approach by offering an additional UI for smartphones.
    • You need an overview of a large amount of data. In this case, use a chart.
    • You just need it for layout reasons. In this case, use a layout container such as a horizontal layout or a vertical layout instead.
    • You need read-only or editable field-value pairs. In this case, use a form instead. The responsive table is not optimized for form-like input navigation.
    Don't
    Don't use a responsive table as a form
    Don't use a responsive table as a form

    See the table overview to decide which SAP Fiori table is most suitable for your needs.

    Responsiveness

    The responsive table is optimized for viewing one line item at a time with no scrolling or only vertical scrolling, irrespective of the display width.

    On smartphones, only the most important data remains in the one-column or two-column table, while all other data is moved to the space between two item rows, known as the “pop-in area”.

    In this area, data for the corresponding cell is provided as a label/value pair. The label is defined by the column header, and the value is taken from the corresponding cell. Labels can be displayed next to the value or above the value.

    Within the pop-in area, the label/value pairs can be displayed in the following ways (sap.m.Table, property: PopinLayout):

    • Block: Label/value pairs are listed one below the other.
    • GridSmall: Label/value pairs are displayed next to each other in equally spaced grid cells. An additional column is shown for each 13 rem of available width (208 px with default browser settings). If the number of grid cells exceeds the available width, the grid cells wrap. On S size, this layout transforms automatically to a block layout.
    • GridLarge: The display logic is the same as for GridSmall,, but grid columns come with a larger minimum width (26 rem instead of 13 rem).

    In all layouts, you can show the labels next to or above (recommended) the corresponding data.

    The responsive table uses all the available space, and does not provide any padding. If there is space around the table, it comes from the spacing defined for the surrounding layout container.

    Information
    The GridSmall and GridLarge layouts are not available in all browsers. If the chosen layout is not available, it is automatically changed to Block layout.
    Responsive table displayed on a smartphone (size S)
    Responsive table displayed on a smartphone (size S)
    Responsive table displayed on a tablet (size M)
    Responsive table displayed on a tablet (size M)
    Responsive table displayed in compact mode on a desktop computer (size L)
    Responsive table displayed in compact mode on a desktop computer (size L)

    The responsive behavior is optional. If it is not used, the responsive table minimizes all visible columns until they are no longer readable. The priority level assigned to columns also impacts the display of the responsive table. For more information on the priority levels, see: Smart Table

    There are two ways to configure responsiveness: auto pop-in mode and manual pop-in mode (sap.m.Table, property: autoPopinMode).

    The auto pop-in mode ensures responsiveness automatically and is sufficient in most cases. You can still influence the behavior per column, but only to a limited extent.

    The manual mode is more flexible, but needs are more configuration. This configuration becomes more cumbersome when table columns can be shown/hidden or re-ordered. On the other hand, only the manual mode allows you to:

    • Let more than one column stay in the tabular layout
    • Move more than one column into the pop-in area at once

    In both modes, the responsive table ensures that at least one column always remains in the table layout.

    Auto Pop-In Mode

    The auto pop-in mode handles responsiveness automatically. You can optimize this to a certain extent by adapting the behavior per column.

    Columns have a minimum width. As soon as the width of all the visible columns exceeds the table width, the right-most column moves to the pop-in area. The default minimum width per column is 8 rem. You can change this value for each column (sap.m.Column, property: autoPopinWidth).

    To further influence the behavior, you can assign columns a priority. Low-priority columns move to the pop-in area first (right-most low priority column first), medium-priority columns next, and high-priority columns last. The default priority is “none”, which is handled like the “medium” priority (sap.m.Column, property: importance).Instead of moving columns to the pop-in area, you can also hide columns of one or more priority levels (property: hiddenInPopin).

    In auto pop-in mode, all other pop-in-related column settings are ignored.

    Manual Pop-In Mode

    The manual pop-in mode allows more flexibility but also requires more effort if you want it to work in a meaningful way. You also need to invest additional effort if table columns can be shown/hidden or re-ordered.

    You need to configure each column manually. Depending on the width of the table (in pixels), the column needs to know which of the following responses is required:

    • Stay in the table layout (in auto pop-in mode, only one column stays in the table layout).
    • Move to the pop-in area (sap.m.Column, with the properties: demandPopin, minScreenWidth, popinHAlign, popinDisplay).
    • Hide

    By default, the table width is assumed to be the screen width. If the table does not use the full width of the screen, app developers must configure the table accordingly (sap.m.Table, property: contextualWidth).

    Because you configure the pop-in response for each column individually, you can also handle more than one column at a given breakpoint. This allows you to move several columns to the pop-in area at once, which isn’t possible in auto pop-in mode

    Each of the three device types has a predefined value for the screen width. However, you will get better results if you offer more breakpoints by using pixel values instead of the predefined values.

    For the smallest screen width, keep the following information in the table layout:

    • The identifier of the line item
    • The key attribute

    Example for Block Layout

    A typical responsive table.

    A typical responsive table
    A typical responsive table

    Hide the information column for a width smaller than 570 px.

    Hiding the information column
    Hiding the information column

    Move the column “vendor” to the pop-in area for a width smaller than 460 px (sap.m.Column, properties: demandPopin, minScreenWidth).

    Moving the vendor column to the pop-in area
    Moving the vendor column to the pop-in area

    Move the column “limit” to the pop-in area for a width smaller than 350 px (sap.m.Column, properties: demandPopin, minScreenWidth).

    Moving the limit column to the pop-in area
    Moving the limit column to the pop-in area

    Move the column “price” to the pop-in area for a width smaller than 270 px (sap.m.Column, properties: demandPopin, minScreenWidth).

    Moving the price column to the pop-in area
    Moving the price column to the pop-in area

    If you still need to support smaller screens, values can be moved below the corresponding labels inside the pop-in area. In these examples, this happens for a width smaller than 220 px (sap.m.Column, property: popinDisplay).

    Pop-in area: Moving the data below the labels
    Pop-in area: Moving the data below the labels

    Example for GridLarge Layout

    A more complex responsive table.

    A more complex responsive table (full screen without pop-in content)
    A more complex responsive table (full screen without pop-in content)

    In this example, the Average Occupancy Rate and Available In columns move to the pop-in area if the screen width is less than 1900 pixels.

    GridLarge layout - 'Average Occupancy Rate' and 'Available In' columns move to the pop-in area
    GridLarge layout - 'Average Occupancy Rate' and 'Available In' columns move to the pop-in area

    If the width is less than 1500 pixels, the Average Stay column moves to the pop-in area.

    GridLarge layout - 'Average Stay' column moves to the pop-in area
    GridLarge layout - 'Average Stay' column moves to the pop-in area

    If the width is less than 1100 pixels, the Description column moves to the pop-in area. Since all four columns in the pop-in area do not fit into one row, the pop-in content wraps.

    GridLarge layout - 'Description' column moves to the pop-in area
    GridLarge layout - 'Description' column moves to the pop-in area

    If the width is reduced even further, the Details column moves to the pop-in area. On this narrow screen, only one column fits into one pop-in row, so it looks exactly like the block layout.

    GridLarge layout - 'Details' column moves to the pop-in area
    GridLarge layout - 'Details' column moves to the pop-in area

    Layout

    The optional title bar consists of the title of the responsive table, an item counter, variant management, and the toolbar.

    The filter infobar appears when the responsive table is filtered, and shows information on the filter settings.

    The column header shows the label for each column. In addition, it allows the user to resize the column.

    The collection of items, or rows, occupies the main part of the responsive table.

    You can add aggregation information (such as totals) on the table footer.

    A More button can be shown if you do not want all items to be loaded at the start (known as “lazy loading”). Ideally, you should use scrolling to load more items instead of choosing the More button.

    Schematic visualization of the responsive table
    Schematic visualization of the responsive table

    Components

    The title bar contains the title of the responsive table, an item counter, variant management, and the toolbar.

    The toolbar can contain entry points for the view settings dialog and the table personalization dialog, as well as view switches in the form of a segmented button, and buttons for AddEdit, and other actions.
    Beneath the toolbar, display a filter infobar (which itself is a special toolbar) if the responsive table is filtered.
    To format within items, apply the guidelines for formatting data. Controls commonly used inside items are the object identifier and the object number. For more information about these controls, see object display components.
    You can use the table footer to display additional static information relating to the table content.
    The More button loads more items to the front end if not all items have yet been loaded.
    Components of the responsive table
    Components of the responsive table

    Behavior and Interaction

    The responsive table is quite flexible with regard to its content.

    Table Level

    Scroll

    The height of the table is defined by the number of items it contains. It does not have a scroll container on its own, but is scrolled together with the app (in contrast to the grid table and the analytical table).

    If the table works in “growing” mode, it only loads a few items at first. Additional items are only loaded (and rendered) on request. The “request” can either be triggered by scrolling (preferred), or by clicking the More button.

    Same table, different number of items
    Same table, different number of items

    When the user scrolls, the title bar, column headers, and filter infobar can stick to the top of the surrounding layout container (sap.m.Table, property: sticky).

    Information
    The “sticky” feature comes with some limitations:

    • It is not available on all browsers. In non-supporting browsers, the corresponding areas (title bar, column headers, filter infobar) are not fixed on top of the surrounding layout container while scrolling.
    • Certain layout containers suppress the sticky behavior, such as the grid layout. The same happens if the table is placed within the object page.
    • If focus is set to a fixed column header, the table is automatically scrolled to top.

    Sticky table title and sticky column header
    Sticky table title and sticky column header

    Merge Duplicates

    To simulate the behavior of row spanning, you can merge cells of consecutive rows inside one or more columns automatically if they contain the same value (sap.m.Column, properties: mergeDuplicates, mergeFunctionName).

    Use the merge feature if you expect the column to contain duplicate entries, and it makes sense to group them. In the example screenshot, the Supplier, Product, and Dimensions columns reflect a hierarchical structure: Suppliers have products, which in turn have dimensions. Because suppliers typically have multiple products, merging duplicate entries for the supplier column makes the table easier to read. Note, however, that when the user sorts the table by another field, the hierarchy changes and the merged items are regrouped accordingly.

    Do not use the merge feature:

    • If duplicate entries are not part of the design. If consecutive table rows happen to have the same values at runtime, this alone isn’t a valid reason to group them.
    • If the corresponding column can contain blank cells. Otherwise, it is cumbersome to differentiate between blank values and merged values.
    Supplier column merges duplicates in consecutive rows
    Supplier column merges duplicates in consecutive rows
    Merged columns with multiselection
    Merged columns with multiselection

    Select

    A responsive table can have one of the following selection modes (sap.m.Table/ sap.m.ListBase, property: mode):

    • None: Items cannot be selected (sap.m.ListMode.None).
      Note: Line items can still use the sap.m.ListType “navigation”, which allows click handling for specific line items. Only use this option if the click triggers navigation to a corresponding details page.
    • Single select master: One item in the responsive table can be selected. Items are selected by clicking the whole row. The single select master mode has no obvious visual cues, such as checkboxes or radio buttons. It only provides a light blue background for the selected state. Because of this, it can barely be differentiated from tables without selection (mode: None). Single select master is the preferred mode for single selection (sap.m.ListMode.SingleSelectMaster).
    • Single select left: One item in the responsive table can be selected. For this, the responsive table provides radio buttons on the left side of each line item. This mode is not recommended (sap.m.ListMode.SingleSelectLeft).
    • Multi select: Users can select one or more items using the checkboxes on the left of each line item. The Shift key can be used to select a range. Users can (de)select all items using the Select All checkbox to the left of the column header (or CTRL+A). Select All should (de)select all items that the user can reach by scrolling. (sap.m.ListMode.MultiSelect).
      Another multi select variant is to not provide a Select All option, but just a Clear All check box in the same place (property: multiSelectMode, value: ClearAll).

    Keyboard: If the focus is on a row, the space bar selects the corresponding item.

    Responsive table without selectable items
    Responsive table without selectable items
    Single select master
    Single select master
    SIngle select left, with radio buttons. Use only if row clicks are used for something else.
    SIngle select left, with radio buttons. Use only if row clicks are used for something else.
    Multi select with 'Select All' checkbox
    Multi select with 'Select All' checkbox
    Multi select with 'Clear All' button
    Multi select with 'Clear All' button

    Group

    When items are grouped, a group header is displayed. The group header is not interactive.

    Group headers
    Group headers

    Show Aggregations

    Show aggregations (such as totals) on the table footer (sap.m.Column, aggregation: footer).

    Don’t show aggregations in “growing” mode. In “growing” mode it isn’t clear which values are being aggregated; only the items currently loaded in the front end, or all items.

    Table footer displays aggregated total
    Table footer displays aggregated total

    Load Items

    When the responsive table fits the general requirements for your use case, always consider ways to reduce the amount of data loaded in the responsive table with, for example, filters, graphics, aggregation of information, and navigation. Keep in mind you should use it only to display moderate amounts of data, including factors like number of items and content complexity.

    To show more than 100 items, use the “growing” mode (sap.m.Table/ sap.m.ListBase, properties: growing, growingThreshold, growingScrollToLoad, growingTriggerText). The “growing” mode allows the user to load only the first few items. Additional items are only loaded (and rendered) on request, which improves performance. You decide whether the user triggers the request by scrolling (preferred) or by clicking the More button.

    If you use the More button, show the number of items already loaded and the total number items below the More text, if possible.

    Do not show aggregations in “growing” mode. Also, do not display an item count on the table toolbar if “growing” mode is used. Use the count on the More button instead.

    Guidelines
    If you expect users to work with large amounts of data, use the grid table because it is optimized for handling large data sets.

    The growing mode will only help to reduce the amount of data loaded at once but the limits to the overall amount of data still apply.

    Load on scroll
    Load on scroll

    Column Header Level

    The column header provides the label for the corresponding column. It also handles the functionality for resizing columns.

    Resizing Columns

    If you implement column resizing, users can resize the columns as follows:

    • Mouse interaction: The user drags the separator line between two columns. Double-clicking the line optimizes the column width based on the length of the currently visible data and the label of the column header.
    • Touch interaction: As for mouse interaction, but with a larger target touch area.
    • Keyboard interaction: When the focus is on the column header, Shift+Right increases the width of the focused column. Shift+Left decreases the width.

    When a column is resized, the other columns can keep their original width or adapt their width. This depends on the column width settings:

    • If column widths are set in pixel-based units (px, em, rem), the resized column is adapted and the columns that follow are moved accordingly. The width of all the other columns is not affected. If the visible columns don’t use the full width of the table control, empty space is added. If the visible columns exceed the width of the table control, one or more columns move to the pop-in area.
    • If all column widths are set as a percentage or as “auto”, resizing one column might also result in automatic resizing of some or all other columns. The position of the resized column might also be affected. This ensures that the full table width is used and no white space is added.
    Developer Hint
    To enable resizable columns, implement the plugin:
    sap.m.plugins.ColumnResizer.
    Resizing a column
    Resizing a column

    Line Item Level

    Delete Single Item Rows

    To delete single item rows, use the table in the mode “delete” (sap.m.Table/ sap.m.ListBase, property: mode, value: sap.m.ListMode.Delete). This adds Delete buttons to each line item. Clicking this button triggers the deletion of the corresponding line item. (Keyboard: If the focus is on the row itself, the Delete key can be used to trigger the Delete button.)

    Do not use this mode if deleting multiple lines at once is the preferred use case.

    Delete is a mode of the responsive table and therefore cannot be used together with single selection or multiselection.

    Responsive table in 'Delete' mode
    Responsive table in 'Delete' mode

    Highlight an Item

    To highlight an item, use the “highlight” indicator (sap.m.ColumnListItem, properties: highlight).

    Highlighted item
    Highlighted item

    Navigate

    To allow navigation from a line item, use an item with the type “navigation” (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Navigation). This creates an indicator at the end of the line (“>”) and the entire line item becomes clickable (keyboard: if the focus is on the row itself, the Enter key triggers navigation). If the user clicks on the line, navigate to a new page containing line item details. In rare cases, you can also use the navigation mode for category navigation, without navigating to another page.

    By contrast, clicking an interactive control within a line item does not trigger the navigation event. Instead, the corresponding control handles the click event.

    If no navigation is possible, set sap.m.ListType to “inactive”.

    “Navigation” is a list item type and therefore cannot be used together with “edit”, or in combination with click events for the entire item (“active”).

    Navigation indicator
    Navigation indicator

    Indicate Navigated Item

    When multi-selection is used in a list-detail scenario, it is not clear which item was last opened (for example, which item is currently shown in the second column of a flexible column layout). In this case only (multi-selection table with navigable items), you can display a “navigated” indicator to mark the item that is currently open (sap.m.ColumnListItem, property: navigated).

    Navigated item
    Navigated item

    Edit Line Items

    To allow editing for a line item, set sap.m.ListType to “detail” within the corresponding item (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Detail or sap.m.ListType.DetailAndActive). This will create an Edit button at the end of the line. Clicking the button triggers the edit event (keyboard: If the focus is on the row itself, the F2 key triggers the Edit button). Use this event to switch the corresponding line item to edit mode.

    Edit is a list item type and therefore cannot be used together with “navigation” or in combination with click events for the entire item (“active”).

    Edit button
    Edit button

    Click an Item

    Items as a whole can be clickable. An event is fired by clicking on the item (anywhere where there is no interactive control inside the item). Apps can react on the event, for example, by opening a dialog (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Active or sap.m.ListType.DetailAndActive).

    Active elements do not have a visual indication and can therefore not be differentiated from non-active elements.

    Active is a list item type and can therefore not be used together with “navigation” or “edit”. In addition, “active” uses the whole item as a clickable area and therefore cannot be used together with a single-selection table.

    Active element
    Active element

    Drag and Drop

    One or several items can be repositioned within a table or moved to other UI elements using drag and drop operations (sap.m.ListBase, aggregation: dragDropConfig). While being dragged, the items are shown as ghost elements on the mouse cursor.

    Drop targets can be on items, between items, or both (sap.ui.core.dnd.DropPosition). On a drop target, the mouse cursor changes to either a “copy”, “link”, “move”, or “none” cursor. “None” indicates that the dragged item cannot be dropped in the current position (sap.ui.core.dnd.DropEffect).

    Drag and drop is only available on supporting browsers.

    Drag and drop
    Drag and drop
    Whole item as drop target
    Whole item as drop target

    Context Menu

    You can attach a context menu (sap.m.Menu) to a table. The context menu gives users an alternative way to modify the focused elements by giving them access to context-specific functions.

    When opened, the context menu gets the row and column context, except for special columns (such as the selection column). Context menus can be implemented for a specific table or row.

    Context menus are opened by right-clicking (desktop), long press (mobile), the context menu key, or Shift+F10.

    Be aware that using the context menu overrides the browser context menu, which can no longer be opened.

    If a control inside a table is the “click target”, and the control also provides a context menu, the control context menu “wins”.

    Responsive table with a context menu
    Responsive table with a context menu

    Cell Level

    Showing Information

    In contrast to traditional tables (such as the analytical table or the tree table), a cell can contain more than just one line of text.

    Several lines of text within one cell
    Several lines of text within one cell

    Add Controls

    Alongside textual elements, you can also add any control to a table cell, such as input fields, microcharts, buttons, and so on.

    Controls inside cells
    Controls inside cells
    Any control can be placed inside cells
    Any control can be placed inside cells

    A cell can contain more than one control and more than one data point.

    With the View Settings dialog, users can sort, filter, and group by each of these data points.

    Several controls per cell
    Several controls per cell

    You can also have different controls in different rows in the same column. This could be the case if one item is locked, but another item is in edit mode, for example.

    Different controls per column
    Different controls per column

    Guidelines

    Responsiveness

    In most cases, the auto pop-in mode is sufficient. If you need to optimize further, first try to adapt the columns to influence the automatic behavior (sap.m.Column, properties: autoPopinWidth, importance). For example, set the priority for the two or three most important columns to “High” (identifying column, key attribute).

    While the pop-in layouts GridLarge and GridSmall make better use of the available width, they also only look good with content that is specifically designed for these pop-in layouts. If you have text-only tables with only one value per column, use the Block layout (sap.m.Table, property: popinLayout).

    Place the column header labels in the pop-in area above the corresponding values (sap.m.Column, property: popinDisplay, value: Block). This avoids alignment issues with different content. Be aware that the labels get top-aligned with the adjacent content.
    Only place the label next to the corresponding value under the following conditions (sap.m.Column, property: popinDisplay, value: Inline):

    • The values are text-only (no input fields, icons, images, micro charts, and so on)
    • The available space is at least the double the width of size S.

    This avoids truncation or “over-wrapping” of the labels and content.

    If a column does not have a column header text (for example, if it always contains the same button with its own label), do not show the header text as a label in the pop-in area either (sap.m.Column, property: popinDisplay, value: withoutHeader). If you forget this setting, you will see an empty space followed by a colon (“:”).

    Information
    The GridSmall and GridLarge layouts are not available in all browsers. If the chosen layout is not available, it is automatically changed to Block layout.

    Table Title

    Implement the table title by using a title control in a toolbar.

    Use a table title only if the title of the table is not indicated in the surrounding area. Do not use a table title if it simply repeats text that is already above the table. For example:

    • A pricing conditions table is the only control on a tab labeled Pricing Conditions.
    • A section or subsection on an object page contains only one table.

    Use a table title if you need the item count, table toolbar, or variant management. To avoid repeating text, feel free to use generic text as a table title, such as Items.
    Exception: If the surrounding area contains the table title, and both the item count and toolbar can be added to the surrounding area, no additional table title is needed.
    Example: An object page (sub-)section contains only one table. In this case, add the item count and the table toolbar to the (sub-)section header.

    Developer Hint
    Assistive technologies (such as screen readers) use the title to create a hierarchical site map for faster navigation. In addition, screen readers use the title as the label for the table.

    If you don’t use a title (for example, to avoid repetition), make sure that the table is connected to another meaningful on-screen text that can be used as a label for assistive technologies. You can do this using the method addAriaLabelledBy.

    If you use a table title, show either a title for the table, with or without variant management, or an item count in the following format:

    Items (2,534)

    The item count in the table title includes all the visible items that a user can reach by scrolling. Group headers are not included.

    Remove the item count in the table title if there are zero items. Do not use an item count together with “growing” mode.

    If possible, keep the title bar sticky (sap.m.Table, property: sticky).

    Table title with item count
    Table title with item count

    Selection

    For single selection cases, use the selection mode “single select master”. This is the recommended single-selection mode for list-detail scenarios within the flexible column layout. If you use it there, do not show a “navigated” indicator.

    In rare cases, you can also use the click area for the row for another purpose (for example, to open dialogs). As a result, the click area cannot be used for selecting the row. In these cases only, use the “single select left” selection mode to offer a radio button as an additional click area for each row. To avoid confusion, make sure that the first data column does not contain radio buttons in the default delivery.

    For all single selection modes, make sure that one item is initially selected. Otherwise, the user cannot return to the initial state. A selected item can only be deselected by selecting another item.

    In multiple selection mode:

    • Prefer Select All over Clear All
    • Use Clear All only for tables with a large number of items (more than recommended above), where loading all items to select them would harm performance.
    • To avoid confusion, don’t show checkboxes in the first data column in the default delivery.
    • Make sure that the Select All checkbox (de)selects all items the user can reach by scrolling. This is only possible if all items are rendered.
    • Never disable the selection checkbox. If an action can’t be performed on a specific item, inform the user after the corresponding action has been triggered. For more information, see Enabling/Disabling Actions.
    Don't
    Single selection left - Don't show radio buttons in the first column in the default delivery
    Single selection left - Don't show radio buttons in the first column in the default delivery
    Don't
    Multiple selection - Don't show checkboxes in the first column in the default delivery
    Multiple selection - Don't show checkboxes in the first column in the default delivery
    Do
    Use the selection mode
    Use the selection mode "single select left" if clicking the row is used for something else (such as navigation)
    Do
    Use the selection mode
    Use the selection mode "single select master" in all other single selection cases
    Developer Hint
    Select All is only applied to items that have already been loaded to the front-end server. All other items are not (de)selected before they are loaded, such as items added via lazy loading with growingScrollToLoad. This conflicts with the guideline that all items the user can reach by scrolling must be (de)selected.

    To process all items, listen to the selectionChange event and to its selectAll flag. This indicates whether the Select All checkbox was triggered. As soon as an action is triggered, process the items accordingly. Depending on the number of items, consider processing them in the back end.

    Loading Data

    To indicate that the table is currently loading items, use the busy state. (sap.m.Table, property: busy). Do not show any items or text. As soon as the data is loaded, remove the busy state and show all items.

    Table in busy state while loading data
    Table in busy state while loading data

    Errors and Warnings

    To indicate that the table contains items with errors or warnings, show a message strip above the table. On the message strip, provide information on errors or warnings. When issues are solved or when new issues appear, update the message strip accordingly.

    To indicate an error in a single row, see Item States below.

    For details on displaying errors, warnings, and other messages, see Message Handling.

    Developer Hint
    The sap.m.plugins.DataStateIndicator displays a message strip above the table, which shows binding-related messages.
    Table containing errors
    Table containing errors

    Columns – Best Practices

    Minimize the number of columns:

    • On a smartphone, use only one or two columns, depending on the content.
    • On a tablet or desktop, use three to five columns if the responsive table is shown within the flexible column layout. Use about eight columns if using the full screen width, depending on the content.

    If the responsive table does not fit into the width provided:

    • Hide columns to reduce the width of the table.
    • Use pop-in areas to show the whole content by increasing the height of the line items (sap.m.Column, properties: demandPopin, minScreenWidth).

    At the smallest size, keep the following information in the table layout:

    • The column that identifies the line item.
    • The column that contains the key attribute.

    If both of these do not fit into the width provided, keep just the column with the line item identifier in the tabular layout.

    The responsive table assigns the same width to each column by default. In doing so, it uses all the available space. We recommend overwriting this default to provide optimal space for your content (sap.m.Column, property: width).

    Especially for tables with just a few columns, we recommend assigning a fixed width to each column and to disabling automatic distribution of the remaining available space (property: fixedLayout, value: Strict). In this case, the rest of the table is filled with empty space.

    Optimize the column width for its initial content (sap.m.Column, property: width). If the content is dynamic, optimize the column width for typical content.

    When defining the column width, consider the implications when a column is resized:

    • If you define the column width in pixels or rem, resizing a column only affects the width of that particular column.
      • If the table isn’t wide enough to show all the columns after a column has been resized, one or more of follow-on columns move into the pop-in area.
      • If the columns don’t use up the available space, white space appears to the right of the last column (property: fixedLayout, value: strict).
      • If only one column remains, and the width of this column exceeds the width of the table itself, the width of the column is reduced to the width of the table.
    • If you define the column width as a percentage, resizing one column affects the width of several or all columns. Text wraps more when the browser window size is reduced. This ensures that all columns together make use of the full table width.
    • If you define the column width as “auto”, the behavior is the same as for “percentage”. However, unlike “percentage”, “auto” distributes the columns equally.
    • Be cautious of mixing columns with pixel-based and percentage-based widths. While this can be helpful in some cases, it could also cause even more unexpected side effects when columns are resized. If you are using percentage-based widths for one or more columns, consider not allowing end users to resize columns at all.

    If you need more columns than those that fit on a tablet screen (usually five) to fulfill 80% of your main use cases, offer an option to add, remove, and rearrange columns via the table personalization dialog. Before doing so, try to reduce the number of columns, for example, by using several lines per column or by utilizing the pop-in function. See the cheat sheet for an example.

    Don't
    Do not distribute just a few columns across the full width
    Do not distribute just a few columns across the full width
    Do
    Use a fixed column width instead
    Use a fixed column width instead

    Column Headers – Best Practices

    Within the column header, provide a label for each column (sap.m.Column, aggregation: header). The column header label is reused as a label in the pop-in area.

    Exception: If the column does not pop in, no column header label is needed as long as at least one column still has a column header label.

    To keep the column headers readable, wrap or truncate the texts as follows:

    • If columns are not resizable, use controls that wrap and support wrapping with hyphenation, such as text (with wrapping and hyphenation enabled). Do not use controls that truncate.
    • If columns are resizable, use controls that truncate.

    Keep column headers sticky.

    Do
    Wrap column headers if columns are not resizable
    Wrap column headers if columns are not resizable
    Do
    Truncate column headers if columns are resizable
    Truncate column headers if columns are resizable

    Column headers (sap.m.Column, aggregation: header) usually contain links or text-based controls.

    Column headers can also contain other kinds of SAP Fiori controls. However, the column header cannot be aligned vertically, making it difficult to use many controls in the column header. Using other kinds of controls also creates problems with pop-in behavior and could thus lead to accessibility issues. Therefore, exercise caution when using them in a column header.

    Accepted: Link as column header text (rarely used)
    Accepted: Link as column header text (rarely used)
    Accepted if responsiveness is taken into account: Text plus search field
    Accepted if responsiveness is taken into account: Text plus search field

    If a column cell contains several fields, use an umbrella term in the column header (such as Address for fields like Street, ZIP Code, and City).

    For text and ID fields, use a generic label (for example, Employee for Name and ID).

    If none of these are possible, separate the labels with “/” (for example, Name / Status).

    For boolean values, such as checkboxes, find a descriptive text for the column header.

    Horizontal Content Alignment

    For alignment of cell content, follow the guidelines below (sap.m.Column, properties: halgin, valign, sap.m.ColumnListItem, property: VAlign). Align the column header horizontally according to the content of the cell.

    Exception: Secondary information in a column always follows the alignment of the main information.

    Left-Align

    Left-align: Text, IDs, phone numbers, URLs, passwords, and email addresses.

    Left-align text
    Left-align text

    Left-align: Status information

    Left-align status information
    Left-align status information

    Right-Align

    Right-align: Dates and times (to ensure comparability for most formats and locales)

    Right-align dates
    Right-align dates

    Right-align: Numbers and amounts, except IDs, to ensure figures are comparable

    Right-align numbers
    Right-align numbers

    Center-Align

    Center-align: Icons, images, and avatars

    Keep the column name for center-aligned columns as short as possible to avoid excessive white space between columns. Alternatively, you can leave the column header empty on the visual UI, and use the invisible text control to provide information on the column content for screen reader listeners.

    Align buttons with the content hierarchically

    Always place buttons directly next to their content. Do not add an additional column for buttons. If you have more than one button, display them next to each other. Order the buttons based on importance. The most important button is on the left, the least important on the right. If there is not enough space to display them all in one line, move the buttons from the right onto the next line one by one. Do not use more than two buttons per line item.

    Vertical Content Alignment

    Top-align where possible to facilitate reading the content on one line.

    Do not use top-alignment if it results in a peculiar layout. This usually happens when controls that need more vertical space are combined with text-only controls, such as input fields. In this case, try center-alignment instead and fine tune it until the layout fits.

    Do
    Use top-alignment where possible
    Use top-alignment where possible
    Don't
    Don't use top alignment if it doesn't make sense
    Don't use top alignment if it doesn't make sense

    Content Formatting

    The responsive table provides flexibility, including multi-line cells, by enabling every control to be put into a cell.

    As a key identifier of an item, use an object identifier. Show the key identifier in the first column. For more information, see object display components.

    If the table width is small, do not hide this column or move it to the pop-in area.

    Object identifier
    Object identifier

    Strings with IDs: If the responsive table contains more single-line data, show the ID in brackets after the corresponding string.

    This minimizes the line height.

    For items with a small line height, place the ID in brackets after the corresponding string
    For items with a small line height, place the ID in brackets after the corresponding string
    If displayed as a link, use the whole text as the link
    If displayed as a link, use the whole text as the link

    Strings with IDs: If line height is already large, show the ID below the corresponding string. Use the object identifier to do so.

    For items with a large line height, place the ID below the corresponding string
    For items with a large line height, place the ID below the corresponding string
    Is displayed as a link, use only the first line as the link
    Is displayed as a link, use only the first line as the link

    If there is more than one key identifier (for example, First Name and Last Name), display these columns first and show the values in bold text.

    Several key identifiers
    Several key identifiers

    For status information, use semantic colors on the foreground elements.

    For status information on text: If the status is actionable, add a transparent icon button next to the text.

    Semantic colors on text
    Semantic colors on text

    Avoid truncation. Use controls that wrap the text and support hyphenation.

    For example, use text.

    Do
    Wrap text
    Wrap text
    Don't
    Don't truncate text
    Don't truncate text

    For editable content, use input fields and other interactive controls within the table cells. If you need to offer edit mode, change your text controls (labels, text, and links, to input fields or other appropriate controls) as soon as you switch to edit mode, but not before.

    You can do this by changing the control or, in more complex cases, by exchanging the whole responsive table.

    Interactive controls – Inline
    Interactive controls – Inline

    If there is no value for a cell, leave it blank. Do not display text as N/A.

    Leave empty fields blank
    Leave empty fields blank

    Numbering Items

    • If the item number has four digits/letters or less and is equally important as the corresponding description, concatenate the item number with the description and show it in one column.
    • If the item number has five digits/letters or more, or if it is more important than the corresponding description, for example, when no description is available, use a separate column for the item number.
    • If the item number is more like an ID in regards to its description, use ID formatting, like Description (ID).
    For short numbers, add the item number to the description
    For short numbers, add the item number to the description

    Flag and Favorite

    Place the flag or favorite marker in the first column (in the default delivery). To change the settings, users need to drill down into the object itself.

    Item marked as a favorite
    Item marked as a favorite

    Empty Tables

    Try not to display an empty responsive table. If there is no way around this, provide instructions on how to fill the table with data (sap.m.Table/ sap.m.ListBase, properties: showNoData, noDataText).

    Examples:

    • If a table is initially empty, provide at least a basic text:
      No items available.
      Overwrite this whenever a hint can be provided on how to fill the table with data.
    • If a table is used together with a filter bar (as in the list report), and is initially empty, use the following text:
      To start, set the relevant filters.
    • If a table is used together with a filter bar and the filter does not return results, use the following text:
      No data found. Try adjusting the filter settings.

    Adapt the texts above if:

    • The standard text is not precise enough for your use case (for example, a search is also offered, or only the search is offered).
    • The standard text is misleading (for example, if the data is filled based on a list-detail pattern instead of filter settings).

    Remove the item count in the table title if there are zero items.

    Provide meaningful instructions
    Provide meaningful instructions

    Displaying Boolean Values

    If a column contains Boolean values, such as “Yes” or “No”, show a read-only checkbox next to the texts.

    The supplementary checkbox makes it easier for users to see at a glance which items are “true” (checked) and which are “false” (unchecked).

     

    Developer Hint

    Use sap.m.checkbox with the Horizon theme and set the editable property to “false” to get the read-only variant. Add the checkbox next to the existing text value. The text itself should remain unchanged.

    Avoid showing only text for Boolean values
    Avoid showing only text for Boolean values
    Boolean values with read-only checkboxes for easier scanning
    Boolean values with read-only checkboxes for easier scanning

    Item States

    To show that an item is unread, use the corresponding flag (sap.m.Table, property: showUnread, sap.m.ColumnListItem/ sap.m.ListItemBase, property: unread). This shows most of the content in bold font.

    An unread item
    An unread item

    To show that an item has been modified, for example, within the global edit flow, add the string (Modified) at the bottom of the column that identifies the line item.

    A modified item
    A modified item

    To show that a modified item contains an error (for example, within the global edit flow), add the string (Contains errors) at the bottom of the column that identifies the line item. To do this, use an object status control with the error state (sap.m.ObjectStatus, property: state, value: sap.ui.core.ValueState.Error).

    In addition, highlight the row accordingly (sap.m.ListItemBase, property: highlight). A row with errors should be highlighted in all use cases – for example when the field is visible in the row in edit mode.

    A modified item with an error
    A modified item with an error

    To show that an item is locked, use a transparent button with the corresponding icon and the text Locked by [Name] at the bottom of the identifying column. The user can click the button to open a quick view of the person.

    A locked item
    A locked item

    To show that an item is in a draft state, use a transparent-style button with the text Draft at the bottom of the identifying column. The user can click the button to open a popover showing the timestamp of the last change.

    Item in draft state
    Item in draft state

    Show only one state at any one time.

    Highlight Items

    To show that an item needs attention, you can show a highlight indicator next to the item. The highlight indicator can indicate:

    • A semantic state, such as red or orange for an error or warning. In this case, use semantic colors.
    • Additional information, such as blue to highlight newly added items. In this case, use semantic colors.
    • Industry-specific or process-specific states, such as “out of stock” or “excess of inventory”. In this case, use indication colors.

    Be aware that the highlight is just an indication. It doesn’t tell users exactly what is wrong. Make sure that you provide this information within the table row, ideally in the same color.

    For details on the use of highlight colors, see How To Use Semantic Colors / Industry-Specific Colors.

    (sap.m.ListItemBase, property: highlight)

    Highlighted items using status colors
    Highlighted items using status colors
    Highlighted items using industry-specific (indication) colors
    Highlighted items using industry-specific (indication) colors

    Numbers and Units

    If the following conditions all apply, show the unit of measurement in the column header:

    • The unit of measurement is the same for all rows
    • A single cell contains only one amount with the unit of measurement
    • The column header does not scroll away

    In all other cases, show the unit of measurement together with the corresponding amount within the row.

    Show the unit of measurement in the same column as the corresponding amount.

    For numbers with units, show the correct formatting by using the object number control.

    Object number
    Object number

    For the most important number with its unit, show the correct formatting by using the object number control and the emphasized flag.
    Exception: If all numbers are of equal importance, emphasize none of them.

    If the table width is narrow, do not hide this column or move it to the pop-in area.
    Exception: If the column containing the object identifier and the column containing the key attribute do not fit together on the screen, move the column containing the key attribute to the pop-in area.

    Object number (emphasized)
    Object number (emphasized)

    Drag and Drop

    Drag and drop is “invisible” on the UI: users can’t see where dragging is available and where it isn’t. In addition there is no generic keyboard interaction. Drag and drop is also not available on all browsers. For these reasons, provide it only in addition to existing (and visible) UI elements that fulfill the same purpose and provide the corresponding keyboard support. For example, offer (toolbar) buttons for moving or for copying and pasting items. These are keyboard operable and available on all browsers.

    Currently, there is no keyboard support for drag and drop.

    Use drag and drop only in addition to existing visible UI elements
    Use drag and drop only in addition to existing visible UI elements

    If you offer drag and drop for rearranging items within the table, use drop targets that are between items (sap.ui.core.dnd.DropPosition.Between). This provides better feedback on where the item will be inserted. Show the “move” mouse cursor (sap.ui.core.dnd.DropEffect.Move).

    Drop targets in between items
    Drop targets in between items

    Do not combine rearranging items and sorting. If you really need to do so, make sure that there is a dedicated sort criterion for the user-defined sort order, and only offer options for rearranging items if this sort order is set.

    When combining rearranging items with grouping, be aware that moving items to another group also means that a value of the dropped item changes: because grouping is based on values in a column, the dropped item needs to take on the value of the target group for the corresponding column. If this is not wanted, do not allow users to rearrange items in grouped tables.

    Example:
    A table is grouped by availability. An item is moved from the group “Not Available” to the group “In Stock”. In this case, the moved item needs to change its availability to “In Stock” to match the target group. If changing the value doesn’t make sense, only allow users to rearrange the items within the same group, or don’t allow rearranging at all.

    Don't
    Don't combine rearranging items with grouping, unless you know exactly what you're doing.
    Don't combine rearranging items with grouping, unless you know exactly what you're doing.

    Context Menu

    Use the context menu only to give users a quick way of accessing functions that are already available elsewhere (for example, as buttons in the toolbar).

    Don’t just offer actions in the context menu itself, as users might not realize that these actions are available at all.

    The context menu can be triggered for the whole table or per row.

    Actions

    To trigger actions on multiple items, use a multiselection table (sap.m.Table, property: mode, value: sap.m.ListMode.MultiSelect), and offer the corresponding actions on the table toolbar. Keep the table toolbar sticky (sap.m.Table, property: sticky).

    Do not offer actions for multiple items if the table is expected to have fewer than 10 items in most cases.

    To trigger actions on a single item only (sap.m.Table, property: mode, value: sap.m.ListMode.SingleSelectMaster):

    • Show the actions on the table toolbar.
    • In rare cases, show the actions within the line item. Since these actions are repeated in every line and thus use a lot of screen real estate, do this only for a maximum of one or two actions. In this case, show the action trigger near the content to which it belongs. Do not add a specific column for actions. Use a button, unless the action trigger belongs to a link. Hide the action in rows for which it is not applicable.
    • Don’t bundle inline actions that don’t belong together under an unspecific label, such as Misc, Actions, , or similar.
    Do
    Inline actions
    Inline actions
    Don't
    Don't combine unrelated inline actions
    Don't combine unrelated inline actions

    The following actions on single items must always be in-line:

    Delete: Use “Delete” table mode (sap.m.Table/ sap.m.ListBase, property: mode, value: sap.m.ListMode.Delete). This places a Delete button at the end of each row.

    Delete button
    Delete button

    Navigation: Use the “Navigation” column list item type (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Navigation). This places a Navigation indicator at the end of each row.

    Use this to navigate to a new page containing line item details. In rare cases, you can also use this for navigation within the table without navigating to another page.

    Navigation indicator
    Navigation indicator

    Edit: Use the “Detail” column list item type (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Detail). This places an Edit icon at the end of each row.

    Edit button
    Edit button

    From these three actions (delete, navigation, and edit), you can combine delete and edit, or delete and navigation.

    Edit and navigation cannot be combined.

    To trigger actions that are independent of the selection, show the actions on the table toolbar. Examples of such actions are add, edit (in the sense of changing the whole table to edit mode), sort, filter, group (or view settings), and table personalization.

    To trigger a default action on the whole line item, use the “Active” or “DetailAndActive” column list item type (sap.m.ColumnListItem/ sap.m.ListItemBase, property: type, value: sap.m.ListType.Active).

    Active items trigger an event when clicked, which can be handled by apps (for example, to open a dialog). Clicks on interactive controls within the item do not trigger the event, but are handled by the interactive control. Do not use this for navigation, to switch the line item to an edit state, or to delete the item.

    Active can be combined with edit and delete, but not with navigation. Do not combine active with single selection.

    For information on enabling and disabling actions, see Enabling/Disabling Actions.

    Add Items

    For adding items, place an Add or Create text button on the table toolbar.

    • Use Create if the button adds a brand new item that doesn’t yet exist on the database.
    • Use Add if the item already exists and is merely added or assigned to the current object.

    Show new items as the first item of the table, with a visual highlight at the beginning of the row.

    Enable the shortcut Ctrl+Enter (and ideally Enter in addition) to trigger the Add or Create button.

    There are three options for adding an item. In order of priority (most recommended first), these are:

    1. Add the item inline. Create an empty, editable row as the first item of the table. Show the Save button on the table toolbar. This option is recommended for simple scenarios with just a few columns and no option to hide columns.
    2. Open a dialog for larger tables with up to 8 editable columns. Save the new item at the dialog level.
    3. Navigate to a new page. This behavior should only be used for very complex scenarios that cannot be handled by a dialog (for example, tables with more than 8 columns). When the user presses Save in the footer toolbar of the create page, navigate back to the table.

    Depending on the flow, an item can be in one of three different states:

    • New: The item was just created inline and is in edit mode (for example, after pressing the Create button). It is highlighted with a visual indicator (information state).
    • Recent: The item was just created and is in read-only mode (for example, if Create leads to a dialog, and Save was triggered within the dialog). In this case, keep the item highlighted and display it as the first item of the table. Ignore current sort, filter and grouping criteria to keep the item visible.
    • Added: The item has been fully added. It follows the sort, filter, and grouping settings and also loses the visual highlight. This state is used after:
      • Inline creation: After Save was triggered on the table toolbar or at page level
      • Create with dialog: A table showing one or several items with the state “Recent” gets updated (for example, after sorting, filtering, or grouping, or when the browser is refreshed).

    In the context of the draft handling new items are not saved on table level, but rather with the entire draft.

    For more details, see the guidelines for managing objects (including subarticles).

    Add button in table toolbar
    Add button in table toolbar
    New item as first row in edit mode
    New item as first row in edit mode
    Saved new item, still highlighted, still the first item
    Saved new item, still highlighted, still the first item

    Editable Content

    For editable content, use input fields and any other interactive controls within the table cells that meet your input needs.

    All SAPUI5 controls can be used.

    If you need edit mode, change your text controls, such as label, text, and link, to input fields, or other appropriate controls as soon as you switch to edit mode, but not before.

    You can do this by exchanging the control or, in more complex cases, by exchanging the entire responsive table.

    For mass editing items:

    • Provide multiselection (sap.m.Table/ sap.m.ListBase, property: mode, value: sap.m.ListMode.MultiSelect).
    • Provide an Edit button.
    • If several items are selected, choosing the Edit button opens a dialog in which the user edits the corresponding fields for all selected items.

    For details, see mass editing.

    View Settings: Sort, Filter, Group

    Sort, filter, and/or group settings are handled in the view settings dialog. This dialog can provide any combination of these three settings, including just one setting, such as sort only.

    • If sorting, filtering, and/or grouping are a common use case in your app, offer one, two, or all three of the corresponding features in one or more view settings dialogs. Note: Do not offer these features if the table is expected to have only a small number of entries (up to 20 in most cases).
    • If filtering is a main use case, do not offer filtering in the view settings dialog. Use the filter bar instead.

    To trigger the view settings dialog, provide several buttons, one for each of these view settings. Each button opens a view settings dialog that contains only the relevant page.

    You should always use only the view settings you really need. For example, do not offer grouping if it does not support your use case well.

    Using the view settings dialog allows you to define several sort, filter, and/or group settings per column. Therefore, you can sort, filter, and/or group a column with several data points independently by each data point.

    Several triggers for the different view settings (sort, filter, group)
    Several triggers for the different view settings (sort, filter, group)

    Sort

    Always sort the table in a meaningful way when it first loads. In most cases, this means sorting by the column that identifies the row. This is usually the first column in the default delivery. Use the primary data point from this column.

    If you offer sorting, offer it for each data point. In other words, allow sorting by both the primary and secondary information in a column. Allow sorting in both directions, ascending and descending. The descending sort order must always be the exact reverse of the ascending sort order.

    For each data point, provide a meaningful sort order. For example:

    • Sort text alphabetically
    • Sort numbers by their value
    • Sort status information by the severity of the status:
      • Ascending: Sort status information from positive to negative, with neutral last.
      • Descending: Sort status information from negative to positive, with neutral first.
    Object status sorted ascending, with neutral status last
    Object status sorted ascending, with neutral status last
    Object status sorted descending, with neutral status first
    Object status sorted descending, with neutral status first
      • Ascending with different values per severity level: Sort status information from positive to negative, with neutral last. Sort different values within a severity level (semantic color) alphabetically.
      • Descending with different values per severity level: Sort status information from negative to positive, with neutral first. Sort different values within a severity level (semantic color) alphabetically.
    Object status sorted ascending and alphabetically, from positive to negative with neutral last
    Object status sorted ascending and alphabetically, from positive to negative with neutral last
    Object status sorted descending and alphabetically, from negative to positive with neutral first
    Object status sorted descending and alphabetically, from negative to positive with neutral first

    Filter

    To display the current filter state, use the infobar below the table title. Clicking the infobar opens the view settings dialog on the filter page.

    Show the infobar only if the filter settings are not shown somewhere else. For example, do not show the infobar for settings taken in the filter bar or in a select placed in the table toolbar.

    If the infobar is shown, provide an option to reset all corresponding filters on the infobar.

    Keep the infobar sticky (sap.m.Table, property: sticky).

    Developer Hint
    To display the current filter settings on the infobar, consider using the list formatter (sap.ui.core.format.ListFormat).
    Filtered table
    Filtered table

    Group

    To display the current group state, group headers are shown.

    On the group header, show the following text (sap.m.GroupHeaderListItem, property: title):

    [Label of the grouped column]: [Grouping Value]

    Do not use several values on the group header.

    Grouped table
    Grouped table

    If there is no grouping value, show the following text:
    [Label of the grouped column]: (Not Available)

    This is the case if you have a group of items that don’t have a value for the grouped column.

    Grouped table, with missing grouping value
    Grouped table, with missing grouping value

    Persist the view settings. When a user reopens the app, show the responsive table with the same sort, filter, and group settings as last defined by this user.

    Personalization: Add, Remove, Rearrange Columns

    To enable users to add, remove, or rearrange columns, use the table personalization dialog. Trigger the dialog via a button in the table toolbar. Add the shortcut Ctrl+Comma.

    Offer personalization if you need more columns than those that fit on a tablet screen, which is usually five, to fulfill 80% of your main use cases. Before doing so, try to reduce the number of columns, for example, by using several lines per column or by utilizing the pop-in function. See the cheat sheet for an example.

    If all columns are hidden, the table shows a corresponding “no data” text.

    View settings and table personalization icons
    View settings and table personalization icons

    Persist the column layout settings. When a user reopens the app, show the responsive table with the same column layout as last defined by this user.

    Tables in Object Pages

    For more information on the use of tables within the object page, see the Tables section of the Object Page article.

    Export to Spreadsheet

    On the table toolbar, apps can provide a menu button for exporting table data to a spreadsheet. For the export, use the export to spreadsheet function.

    'Export to Spreadsheet' menu button
    'Export to Spreadsheet' menu button

    Paste

    The browser paste function can be used to paste data from the clipboard to the table if the focus is on an editable control within the table. The browser paste is triggered with the Ctrl + V keyboard shortcut, the table toolbar action, or actions in either the browser context menu or the table generic context menu.

    The pasting of a new row or cell follows the responsive table inline creation paradigm, where new items are created at the bottom of the table. The same happens when the data is pasted and a row is unselected or focused.

    Note

    Pasting via the browser context menu is unavailable if the table has its own context menu because table context menu takes precedence over the browser context menu.

    Paste (Overwrite)

    Pasting overwrites data present in the table only when a cell with data is selected prior to pasting. When a single cell is selected, all the data in the clipboard is pasted into the table, extending from that cell. The paste will overwrite the data contained in those additional cells, too.

    Note

    If a user has selected multiple cells to overwrite, but the focus is placed outside of the selection, pasting will follow the guidelines for inline creation as above. This can happen, for example, when the user uses the arrow keys on the keyboard to move the focus.

    Clipboard Selection behaviour

    If the clipboard has larger data set than the range selected for the paste, only the cells contained within the selection are updated.

    On the other hand, if the clipboard has a dataset too small to fill all the cells selected for the paste, the pasted data updates only the selected cells for which there is data.

    Read-Only

    The paste action does not update read-only cells, even if there is data in the clipboard corresponding to those cells. Instead, it updates only the surrounding write cells.

    Example

    If the clipboard contains a range of four columns, and that data is pasted into a table, where column 2 is read-only, only the cells in column 1, 3, and 4 are updated.

    Properties

    sap.m.Table

    The following additional properties are available for the responsive table:

    • The property: fixedLayout defines the algorithm the control uses to define column width. Setting it to “false” would perform automatic calculations for the column width, based on the longest non-breakable content. You should always set it to “true” for performance reasons. Exceptions are permissible if the table has only a few columns for a large width and fewer than 10 rows are displayed.
    • The property: backgroundDesign defines the background on which items are rendered. Use the default value.
    • The property: showOverlay provides an overlay on the whole table, which prevents use of the responsive table. This is used within the list report floorplan to mark the table as outdated after filter settings have been changed but the new filter settings have not yet been applied. Do not use it in other cases.
    • The property: inset adds a margin on all sides of the responsive table.
    • The property: headerText is a simple way to set the table title if you just need a title. However, do not use any of the following:
      • A separate toolbar
      • variantManagement
      • headerToolbar aggregation
    • The property: headerDesign affects the appearance of the header if the theme supports it. Leave the default value as it is.
    • The property: footerText adds a small additional row below the table footer or last item. This row can contain text only. Do not use this property.
    • The property: width defines the width of the whole table.
    • The property: includeItemInSelection uses a click on the whole line item to select the corresponding item if the responsive table is in a selection mode. This competes with other settings like “Navigation” or “Active” and should therefore not be used.
    • The property: enableBusyIndicator automatically shows a busy indicator while data is loaded. (In contrast to the property: busy, where the application can control when the table is set to busy state)
    • The property: modeAnimationOn does not have any effect. Do not use it.
    • The property: showSeparators allows you to show all, none, or some separators. The default setting, which is to show all separators, is to be used.
    • The property: swipeDirection allows you to define the direction in which to swipe if additional actions are hidden behind a table row. This works only on touch devices. Do not use this property.
    • The property: rememberSelections leaves items selected even if they are not currently visible, for example, through filtering. If this behavior is not wanted, set the flag to “false”, but you should do so only in exceptional cases.
    • The property: busy sets the table to a busy state. While in busy state, the whole table cannot be used and items cannot be read due to an overlay.
    • The property: busyIndicatorDelay defines the time after which a busy state is shown after the responsive table has been set to this state. Use the default value.
    • The property: visible shows the table (“true”) or hides it (“false”).
    • The property: tooltip does not have an effect. Do not use it.
    • The property: alternateRowColors displays the rows with alternating background colors (“banded rows”). Do not use it.

    sap.m.Column

    The following additional properties are available for sap.m.Column:

    • The property: width defines the width of the column in all units allowed by HTML, such as em, rem, %, and px.
    • The property: styleClass is used if you need to change the visual design of a column. Do not use this, but use the default style instead.
    • The property: visible shows or hides the column.
    • The property: tooltip does not have an effect. Do not use it.

    sap.m.ColumnListItem

    The following additional properties are available for sap.m.ColumnListItem:

    • The property: selected allows an item to be selected programmatically.
    • The property: counter does not have any effect. Do not use it.
    • Do not use the property: busy.
    • Do not use the property: busyIndicatorDelay.
    • The property: visible shows or hides the item.
    • The property: tooltip adds a tooltip to a whole row. The tooltip is only shown on mouse interaction. It will not work on tablets or smartphones. Do not use it.

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    Toolbar Overview

    The toolbar enables the user to change the UI or trigger an action. For example, the toolbar allows the user to change views, manipulate data or objects, navigate to another page, perform generic actions, and so on.

    This article gives an overview of what kind of different toolbars exist and when to use which one.

    Actions and Layout

    Actions can be used as follows:

    • They can be independent of the current selection and not related to a specific item or object.
    • They can be specific to the current object (user selects one item).
    • They can apply to a set of items (user selects two or more items).
    • They can control the settings for parts of the UI content. For example, an action can affect all items in a table.

    The toolbar is mostly used for buttons (with an icon or text). You can also place a title in the toolbar. The alignment of the title (left, center, right) depends on the settings for the theme.

    The buttons are always right-aligned. Sort your buttons according to their importance for the user, with the most frequently-used action first and the most seldom-used action last. All buttons go into the overflow from right to left, thus ensuring that the most important buttons are the last to be moved into the overflow menu. For more information, see Action Placement.

    Responsiveness

    To enable responsiveness, use the OverflowToolbar control. Based on the sap.m.Toolbar control, the OverflowToolbar control is a container that provides overflow when its content does not fit in the visible area. Controls that can overflow include the segmented button, select, toggle button, checkbox, input, search field, combo box, and date/time input.

    Only allow important actions to shrink and stay outside the overflow. The app team itself must decide which actions it considers to be sufficiently important.

    The height of the toolbar changes on desktops (compact mode), tablets, and smartphones (cozy mode). For more information, see the article on content density.

    Responsive toolbar – Size L
    Responsive toolbar – Size L
    Responsive toolbar – Size S
    Responsive toolbar – Size S

    Behavior and Interaction

    App teams should implement overflow behavior to ensure that all actions can be accessed at any time. Buttons are sorted by usage, with the most frequently used action first (on the left) and the most seldom-used action last (on the right). This ensures that the most important buttons are the last to be moved into the overflow menu. Our general guideline is to use only icon buttons or text buttons. Do not combine an icon and text into one button. Buttons are always right-aligned.

    Overflow (Generic)

    The overflow should be activated either when there is not enough space for all actions, or if some actions are less important than others. In this case, the app team might decide to have certain actions only appear in the overflow. Furthermore, the app team can also decide that some (important) actions should never be moved into the overflow.

    When you implement the overflow toolbar, the overflow behavior is generated automatically. The  “” (overflow) button is a toggle button and can be used to switch the overflow menu on and off.

    The user clicks the overflow button to open a popover. In this action sheet, all icon buttons are labeled with text. Overflow is supported for the following controls:

    All buttons go into the overflow from right to the left. This ensures that the most important buttons are the last to be moved into the overflow menu.

    The sap.m.ToolbarSeparator can also go into the overflow. The separator then changes from a vertical line into a horizontal line. If the control happens to be the first or the last item of the overflow area, the separator isn’t displayed.

    Prioritization

    You can also prioritize the actions in the toolbar by applying one of five statuses:

    • Always overflow: The action always goes into the overflow.
    • Disappear: An action that is not so relevant for the user can disappear if the space is limited (for example, a title).
    • Low: Assign the priority “Low” to an action if the user seldom needs it; this action will overflow first.
    • High: Actions set to “High” remain visible in the toolbar until all lower-priority actions have moved to the overflow. Lower-priority actions are those with the priorities “Disappear” or “Low”, and all unprioritized actions.
    • Never overflow: These actions are always visible in the toolbar.

    The priority of each item is high by default. If two items have equal priority, the item on the right side overflows first.

    Grouping

    Items can overflow together even if they are in different positions. This can be achieved using the group property in the overflow toolbar layout data. When the value of the property is 0, the element does not belong to any group. When two or more elements are given the same property value, they belong to the same group and will go into the overflow together. Elements that belong to a group are not allowed to have “always overflow” or “never overflow” as priorities, since these priorities force the items to remain either in the toolbar or in the overflow area. When group elements have different priorities, the priority of the group is defined by the maximum priority of its elements.

    Table toolbar on desktop without overflow
    Table toolbar on desktop without overflow
    Table toolbar on smartphone with overflow
    Table toolbar on smartphone with overflow
    Table toolbar on smartphone with open overflow
    Table toolbar on smartphone with open overflow

    Styles

    Header and Footer Toolbars

    Use the following button styles for the different action types in the header and footer toolbars:

    • Primary action: Use the emphasized button style.
    • Secondary action: Use the ghost button style. Note that the ghost button has a transparent background.
    • Semantic action: Use the semantic buttons for positive and negative actions. Use the “accept” style for positive actions, and the “reject” one for negative actions. Semantic actions must always be text buttons.
    • Negative path action: Use the transparent button style.

    Do not use any other style types.

    Content Toolbars

    Use the following button styles for the different action types in content toolbars (for example, in tables, forms, or charts):

    • Primary action: Use the emphasized button style. Usually, the primary action is positioned in the header or footer toolbar. Note that there can only be one primary action per page. If a page already has a primary action, but you also need to highlight the most important action in a content toolbar, use the ghost style for this one button in the content toolbar.
    • Secondary action: Use the transparent button style.

    The different button styles are designed to give appropriate feedback to users. Do not use them for decoration purposes.

    Button with different styles
    Button with different styles

    Styles and Toolbars

    Apply the following menu button styles for the different toolbars:

    • Header and footer toolbars: Use the ghost style.
    • Content toolbars: Use the transparent button style.

    Do not use any other style types.

    Emphasized and Semantic Buttons

    • Use a maximum of 1 emphasized button per toolbar.
    • Never mix emphasized and semantic buttons.
    • Ideally, there should be only one emphasized action per page. There can be valid exceptions, but we generally recommend using only one emphasized button.
    • For more information, see Buttons.

    Enumeration

    The toolbar style is an enumeration with two properties: Standard (default) and Clear.

    • Standard style results in linear design (with border) and is intended for standalone usage of the toolbar.
    • Clear style appears as a plain color without borders. This style visually groups the toolbar with a nearby control or controls.

    The toolbar style property is combined with the toolbar design property to create various visual styles.

    Types

    A variety of toolbars exist for different use cases (see examples below). The following types are used:

    • Header toolbar: Contains global actions that are important for the whole page
    • Footer toolbar: Contains only closing and finalizing actions
    • Table toolbar: Toolbar that is positioned above a table and contains table-specific actions
    • Chart toolbar: Toolbar that is positioned above a chart and contains chart-specific actions
    • Infobar: Toolbar that indicates what filters have been set, and how many items have been selected
    • Tree toolbar: Toolbar that appears above a tree or tree table, and is used for actions that impact the entire tree.

    Header toolbar with primary action (emphasized style) and secondary actions (ghost style)
    Header toolbar with primary action (emphasized style) and secondary actions (ghost style)

    Footer toolbar with standard actions: 'Save' (emphasized) and 'Cancel' (transparent)
    Footer toolbar with standard actions: 'Save' (emphasized) and 'Cancel' (transparent)

    Table toolbar with search field, text buttons (ghost and transparent style), icon buttons (transparent style), and segmented button
    Table toolbar with search field, text buttons (ghost and transparent style), icon buttons (transparent style), and segmented button

    Chart toolbar
    Chart toolbar

    Inactive infobar (not clickable)
    Inactive infobar (not clickable)
    Active infobar (clickable)
    Active infobar (clickable)

    Tree toolbar
    Tree toolbar

    Guidelines

    Order of Buttons

    To provide a consistent user experience for each app, we highly recommend using the following alignment for generic actions:

    • All buttons are right-aligned.
    • Text buttons should be grouped together, as should icon buttons.
    • Place semantic buttons side by side (for example, Accept and Reject).
    • App-specific text-only buttons and generic text-only buttons can be combined and arranged in a sequence defined by the app team. Remember to place the most frequently-used actions furthest to the left of the group of buttons. This ensures that these actions are the last to be moved into the overflow menu or are visible at all times.

    General Guidelines

    • Do not overload the toolbar with actions.
    • Place actions as close to the corresponding content as possible.
    • Place commands in the same location throughout the app. Each page should contain only the commands that are relevant to that page. If commands are shared between pages, they should be placed as close to the same location as possible on each page so that users can predict where the commands can be found when navigating.
    • Separate navigation and commands. Place commands as close to their corresponding items as possible.
    • Do not place Settings, Logout, or other account management commands in the footer toolbar. All these actions are shown in the Me Area.
    • Do not use icon buttons for app-specific actions (neither icon-only buttons, nor icon+text buttons).
    • Use only icon buttons or text buttons. Do not combine an icon and text into one button. Buttons are always right-aligned.
    • If you want to group buttons, use a menu button.
    • Actions that impact the entire page are placed in the header area.
    • Only closing or finalizing actions are placed in the footer toolbar (for example, Submit or Post).

    UI Text Guidelines

    Use tooltips such as Sort, Filter, and Group to label the icons in the footer toolbar. In the case of Sort, Group, and Filter, use the following text for the no selection made option:

    • (Not sorted)

    Note: In most cases, (Not sorted) is not necessary. Simply show the default sort settings instead:

    • (Not filtered)
    • (Not grouped)

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    SAP Fiori on SAPUI5

    SAPUI5 is the main framework for developing SAP Fiori web applications. Check out this 2-minute video below for a quick overview.

    SAPUI5 Development Toolkit for HTML 5

    The SAPUI5 Development Toolkit (SDK) is the primary resource for SAPUI5 development. And it’s helpful for designers, too.

    If you’re designing SAP Fiori apps that will be built with SAPUI5, you can try out UI control samples and check the available properties in the corresponding API documentation. You’ll also find the latest SAPUI5 features, full documentation on developing apps with SAP Fiori elements, demo apps, tutorials, and more.

    Download Fonts

    You can use the links below to download the following SAP fonts:

    Installing the 72 font family and the SAP icon font are prerequisites for using SAP web UI kits, such as the SAP S/4HANA Web UI Kit.

    Font 72



    Font 72 is SAP’s proprietary typeface and is the standard typeface for SAP Fiori apps.

    Procedure

    1. Download the desktop or web font families.
    2. Unpack the relevant ZIP files: 72_Desktop / 72_Web 72Mono_desktop 72Mono_webfonts.
    3. For desktop fonts: Double-click each .ttf file and click Install.

    The 72 font download is made available under the Apache 2.0 license.

    SAP Icon Font

    To use the UI kit, you need to install the standard SAP icon font. You’ll also need to install this font locally if you want to display SAP Fiori icons in other applications, such as PowerPoint. For more information about the SAP icon font, see the iconography guidelines for the Horizon and Quartz themes.

    SAP Icon Font Versions

    Separate icon font versions are available for the Horizon theme (version 5.10) and the Quartz theme (version 4.22). Both overwrite the standard sap-icons font file.

    If you need to work with both icon fonts in parallel, you can use the version 4 preview (instead of version 4.22) to install the Quartz icon font alongside the Horizon icon font. The icons are then stored in separate font files:

    • Horizon icon font: sap-icons.ttf
    • Quartz icon font: SAP-icons-v4-preview.ttf

    Procedure

    1. Depending on your operating system, we recommend uninstalling any previous SAP icon font version and rebooting your system before installing the latest icon font.
    2. Download and install the icon font version(s) you need:
      a) Unpack the ZIP file sap-icons… .zip.
      b) Double-click the SAP-icons… .ttf file and click Install.

    SAP Business Suite Icon Font (Optional)

    In some application areas, you may also need to use the SAP Business Suite Icon Font (BusinessSuiteInAppSymbols). This icon font contains application-specific icons primarily used in SAP S/4HANA apps.

    Separate icon font versions are available for Horizon theme (version 2.086) and the Quartz theme (version 1.086). Both overwrite the standard BusinessSuiteInAppSymbolsfont file.

    Important: To use the SAP Business Suite icon font in your app, it must be registered as a custom font in sap.ui.core.IconPool.

    Procedure

    1. Download and unpack the ZIP file BusinessSuiteInAppSymbols_...zip.
    2. Install the SAP Business Suite icon font: Double-click the BusinessSuiteInAppSymbols.ttf file and click Install.

    Related Links

    Launchpad Shell Bar

    The shell bar is a universal header element that appears at the top of all screens. It provides the product or application context and offers global functions, such as search, notifications, and the user profile.

    Launchpad shell bar - Home view
    Launchpad shell bar - Home view
    Launchpad shell bar - App view
    Launchpad shell bar - App view

    Components

    Mandatory

    Launchpad shell bar - Mandatory components
    Launchpad shell bar - Mandatory components

    The following components of the shell bar are mandatory:

    1. Logo: Visual branding elements like the SAP logo or a company logo.
      Optional: Clicking the logo can navigate back to the product’s home page.
    2. Title: Product name or application name.
      Optional: The title can offer access to a navigation menu.
    3. User profile: Provides access to user-specific settings.

    Optional

    Launchpad shell bar - Optional components
    Launchpad shell bar - Optional components

    The following elements of the shell bar are optional

    1. Back or side navigation button:
      • Back: Allows back navigation.
      • Side navigation button: Opens and closes a vertical navigation menu.
    2. Menu: Option to display a menu when clicking the title.
    3. Second title: Provides additional information on the context, such as the tenant name or scope.
    4. Search
    5. Notifications
    6. Container for additional shell bar actions

    Back and Branding Area

    When an app is launched, the Back icon is displayed next to the branding element.

    Back navigates to the previously visited screens. The branding element takes the user directly to the home page.

    The branding area usually shows the company logo, as defined by the administrator. The branding area cannot be left out.

    Guidelines

    • If the user is editing an object in an application without draft handling, and tries to navigate away via Back or Home, show a data loss message.
    • If a deep link to an application is called, and there are no SAP Fiori entries in the browser history, do not display the Back button.


    Shell bar with 'Back' button and branding area
    Shell bar with 'Back' button and branding area

    Title and Navigation Menu

    Title

    The title inside the shell always indicates the user’s position in the system. The navigation menu is a quick way to browse the hierarchical structure of applications.

    For the home page, the title is Home. In the app finder, it changes to App Finder.

    In the initial screen of an application, the title is usually the application name, such as Manage Products. This name must match the app name used on the launchpad tile.

    Initial page of an application - Page title is the app name
    Initial page of an application - Page title is the app name

    Exception: Flexible Column Layout

    In the flexible column layout, the shell bar displays the application name. The title only changes when the user switches to full screen mode or navigates. On size S, the title changes when the user navigates between the different panels.

    Developer Hint
    Use the following title formats for display, edit, create, create with copy, and drilldown scenarios:

    [Object] 

    [Subobject] (1 of 10)

    Use the drilldown format “[Subobject] (1 of 10)” only if the user can navigate to the previous or next item with the paging buttons on the UI.


    Navigation Menu

    Clicking the title in the shell bar opens the dropdown navigation menu. The height of the container depends on its content.

    To close the menu again, users can click the page title, the dropdown arrow, or anywhere outside the navigation menu.

    This interaction applies for all device types.

    Navigation Hierarchy

    The navigation menu displays the navigation path that led to the current page within an application. The current hierarchy level is represented by the page name only. Selecting a navigation entry opens the respective page in-place.

    The menu only shows hierarchy levels within the current application, and there is only one entry per hierarchy level.

    The entry page of an app always displays as “Home”, and is the first entry. Drill-in navigation adds further hierarchical entries to the navigation menu. If a user navigates to an app using a deep link, the navigation menu also shows the hierarchy levels for the previous app.

    The entries are ordered according to the hierarchy, starting with Home, down to the current hierarchy level (= page name). Each entry consists of a title, subtitle, and icon.

    Guidelines

    • Use the title to display the name of the previous page (mandatory).
    • Use the subtitle to describe the previous object (optional).
    • Use the application icon if the previous page was the application start page (mandatory if an application icon was defined).
    • Use the default icon for further navigation steps, or if no application icon was defined.

    All My Apps

    All My Apps lists the main applications assigned to a user’s role. These include apps from the home page group and the app finder (catalog).

    Enterprise Search

    The Search icon for the enterprise search is on the top right, to the very left of the group. You can use it to search across all apps and business objects, such as materials, customers, and maintenance plans. Users can access the search function from any screen within the SAP Fiori launchpad.

    Optional Actions

    In addition to the buttons for the enterprise search and notifications, key users or administrators can add more actions to the shell bar. The optional actions are placed to the right of the search button. If an action is placed in the shell bar, it is no longer available in the user actions menu.

    Since actions in the shell bar are very prominent, we only recommend placing additional actions in the shell bar if users need to access them frequently.

    User Actions Menu Button

    Clicking the profile picture opens the user actions menu. If no profile picture is set, a default icon is displayed.

    Shell bar - User actions menu
    Shell bar - User actions menu

    Responsiveness

    The launchpad shell bar is fully responsive.

    On size S, the search and notifications are displayed behind the overflow menu icon.

    Shell bar - Size XXL ( >=1920)
    Shell bar - Size XXL ( >=1920)
    Shell bar - Size M, L, XL (600-1919px)
    Shell bar - Size M, L, XL (600-1919px)
    Shell bar - Size S
    Shell bar - Size S

    Lean Mode

    The user can right-click a tile and choose Open Link in New Tab or Open Link in New Window from the context menu. In these cases, the app opens in lean mode, and its shell only shows contextual services for the app.

    The lean mode was introduced to avoid inconsistent behavior when working with different tabs or windows in parallel, and to improve performance.

    The following services do not appear in lean mode:

    • Shell: Home, Enterprise Search, Notifications
    • Navigation Menu: Related Apps, All My Apps, Home (from navigation hierarchy)
    • User Actions Menu: Settings, App Finder, Recent Activities, Frequently Used

    Related Links

    Elements and Controls

    Implementation

    SAP Fiori Launchpad Home Page

    Information
    With SAPUI5 1.75, we introduced SAP Fiori launchpad spaces in parallel to the launchpad home page. You can now use the launchpad with either a home page or a space.

    The SAP Fiori launchpad home page is the first page that users see after they have signed in. It is the main entry point to SAP Fiori apps on mobile and desktop devices.

    The launchpad home page displays tiles and links that allow the user to launch apps, and may also show additional information. The page can be personalized and apps can be added, removed, or bundled in groups.

    The SAP Fiori launchpad home page must be used for all SAP Fiori apps.

    Responsiveness

    The SAP Fiori launchpad home page is fully responsive. For smaller screens, the tiles are smaller so that at least two tiles can be always be shown side by side.

    Launchpad home page - Size S
    Launchpad home page - Size S
    Launchpad home page - Size L / XL
    Launchpad home page - Size L / XL

    Components

    Tiles

    The tiles provide direct access to apps or content. They are similar to large icons and have a rectangular shape.

    The launchpad home page comes with a predefined set of groups and tiles. However, the user can also personalize the launchpad home page to reflect their individual roles by choosing from a wide range of ready-to-use tiles from the app finder.

    Tiles differ in the content they display. They can contain an icon, a title, some informative text, numbers, and charts. The information that is shown depends on the function of the tile or app.

    The number of tiles visible on a page depends on the screen resolution. The tiles are placed below each other and are resized for smaller screens.

    Different types of tiles
    Different types of tiles

    Links

    Links are a different visual representation of a tile and always look the same: they consist of a title and an optional subtitle.

    Links are collected in a dedicated area below the tiles area within each group. As with tiles, the user can modify the order of the links at any time.

    Links are displayed inline, one after the other. It there is not enough space for the full link at the end of a row, the entire link moves to the next row. Links never break between rows.

    Links
    Links

    Anchor Bar and Tab Bar

    In the launchpad home page, tiles are usually clustered in groups. These groups are listed in an anchor bar or in a tab bar at the top of the page.

    The anchor bar is the default setting. Optionally, users can choose the tab bar instead. Note: Both types are only shown when users have more than one group.

    If you want to modify groups and tiles, select Edit Home Page from the user actions menu.

    Anchor Bar

    By default, all groups are displayed in the launchpad home page. These groups are listed in the anchor bar at the top of the page. When users select a group name, the page scrolls down to the selected group.

    Launchpad home page with anchor bar - All groups at a glance
    Launchpad home page with anchor bar - All groups at a glance

    Tab Bar

    When the tab bar is selected, the groups are separated into tabs. Only one group is displayed at a time.

    While this functionality reduces the overview of all groups, it allows the user to focus on a selection of tiles and improves the performance for users with a large number groups.

    Launchpad home page with tab bar - First group selected
    Launchpad home page with tab bar - First group selected

    Modifying the Home Page in Tab Bar Mode

    Users can personalize the home page in tab bar mode by choosing Edit Home Page in the user actions menu.

    In addition, they can use Short Drop and Long Drop functions to move apps from one tab to another.

    Short Drop

    Drag and quickly drop any app onto another tab. It disappears from your current tab and is added as the last app on the new tab.

    Note: The current tab stays in focus. The operation is invisible, but a message toast confirms that the app was moved.

    Long Drop

    Drag any app onto another tab and keep it there for a short while. The selected tab opens, and you can position the app where you want it.

    Note: The focus switches from the current tab to the selected tab. A message toast confirms that the app was moved.

    Behavior and Interaction

    Users can personalize their home page in a variety of ways. Tiles can be rearranged directly, but most actions require the user to activate the edit mode. For example, edit mode needs to be active to rearrange groups or customize tiles.

    To enable more enhanced personalization functions, the user needs to open the user actions menu, and then select Edit Home Page.

    To quit personalization, the user selects Done in the footer toolbar.

    User actions menu
    User actions menu
    Home page in edit mode
    Home page in edit mode

    Tile and Link Actions

    Converting Tiles and Links

    Unless the group is locked, users can rearrange apps at any time, and transform a tile to a link and vice versa.

    This is possible in both normal mode and edit mode using a simple drag and drop action. In edit mode, users can also make use of the action sheet (see below).

    Generic Actions

    (via Edit Home Page only)

    When Edit Home Page is activated and the user clicks a tile, an action sheet appears showing a list of generic actions:

    • Settings opens a dialog in which the user can change the information that is displayed on a tile, such as the title or description.
    • Move opens a dialog in which the user can move the selected tile to a different group.
    • Convert to Link transforms a tile into a link, while Convert to Tile transforms a link into a tile.

    Tile designers can also add further generic actions.

    Remove

    (via Edit Home Page only)

    Users can remove tiles and links with the Remove icon .

    Add

    Users can add apps with the Add icon ( ), either from an empty group in edit mode, or by selecting App Finder in the user actions menu.

    Move

    Users can rearrange tiles and links by dragging them to a new location in the same group, or by dragging them to a different group.

    Open

    Clicking a tile or link opens the underlying app or content item.

    Group Actions

    Via Edit Home Page, users can customize groups to their needs:

    Adding Groups

    Users can add a new group by clicking the + Add Group button. The user will be prompted to enter a new group name. If the user doesn’t immediately enter a name, the placeholder text Enter group name will appear as the default name. Once the group is created, it will appear below + Add Group on the launchpad home page.

    Moving Groups

    The user can rearrange a group by dragging it to a new location in the group panel.

    Renaming Groups

    Users can rename groups by clicking a group name. A text box appears in which the user can enter the new name, which is then saved automatically. To discard a change while the text box is visible, the user must press Escape.

    Deleting Groups

    Users can delete groups they have created (including all the tiles they contain) by pressing Delete. Note that predefined groups, such as My Home, or locked groups (as defined by customers) cannot be deleted.

    Resetting Groups

    By clicking Reset, a user can reset a predefined group to its initial state as defined by an administrator.

    Hiding Groups

    Users can temporarily hide one or more groups on the launchpad home page. Note: The My Home group and locked groups cannot be hidden.

    To hide a group, users go to Edit Home Page and select Hide on the top right corner of each group. The background of the hidden group is now shown with a darker transparency. To unhide a group, users select Show.

    Hiding and showing groups on the launchpad home page
    Hiding and showing groups on the launchpad home page

    Resources

    Want to dive deeper? Follow the links below to find out more about related controls, the SAPUI5 implementation, and the visual design.

    Elements and Controls

    Implementation

    • No links.

    Navigation

    Navigation in SAP Fiori follows standard navigation paradigms of various web applications. When a user navigates to a new screen, the user’s system default navigation is in place. Depending on individual browser settings and functionality, new screens can also be opened in a new tab or window by using a long tap or right-click (using a mouse).

    SAP Fiori combines the hub-and-spoke navigation model with an application network model. A central home page (the SAP Fiori launchpad home page or SAP Fiori launchpad spaces) is the center of all navigation paths. The user starts from the home page and navigates forward into the apps through multiple screens. Multiple apps can form a process. The ubiquitous back navigation function allows the user to go back to the previous screen. The user can always navigate back to the launchpad home page via logo. The logo navigates back to the first page of the launchpad. This is often My Home, if available.

    Hub and spoke and application network navigation model
    Hub and spoke and application network navigation model

    Navigation Between Apps

    The tiles on the home page of the SAP Fiori launchpad represent navigation anchors to the individual apps. By selecting a tile, the user navigates to the corresponding app. It is also possible to integrate legacy UI technology through these tiles. Non-SAP Fiori UI technologies open in a new tab or window (for supported desktop operating systems only).

    The home page on the SAP Fiori launchpad features tiles as navigation anchors to the individual apps
    The home page on the SAP Fiori launchpad features tiles as navigation anchors to the individual apps

    Individual apps can be connected to build up navigation flows. There are different ways to build a connection:

    • Navigation via links (to open other objects or lists)
    • Navigation via line items in a list or table (to display more details about the item in the list/table)
    • Navigation via other UI elements
    • Actions on buttons (to trigger transactional tasks)

    By transferring context between apps, one modular app can build on the input of the previous app(s). This way, individual apps can be reused in different contexts. More complex functionality can be combined using individual modules or apps. After each navigation step, the user can always navigate back using the browser’s back button or the back arrow icon in the shell bar.

    Forward navigation flow
    Forward navigation flow

    Back and Home

    The launchpad shell bar is always located at the top of each app. It displays the logo, which triggers navigation to the home page, and back button, which triggers navigation to the previously visited page.  An exception is made when a deep link to an application is called and there are no SAP Fiori entries in the browser history. No back button should be displayed.

    Launchpad shell bar with home and back arrow buttons
    Launchpad shell bar with home and back arrow buttons

    Navigation Within Apps

    Forward Navigation

    Forward navigation to other pages of the app or other apps is triggered by links, line items, buttons, or other UI elements. No distinction is made between navigation targets located within the same app or those located in other apps.

    Clicking a link can either trigger direct navigation, or open a quick view or smart link popover. With the quick view or smart link popover, further navigation targets can be reached. This behavior should be consistent within an app. For example, links in a table should consistently either open a quick view or navigate to another page.

    If in-place is not possible because data will be lost or user intended to open a new tab/window, an app (non-SAP Fiori apps only) can open in a new tab/window.

    Example: Navigation from legacy to SAP Fiori

    Legacy apps are always opened in a new tab/window from the SAP Fiori launchpad. The same applies to any URL that opens a non-SAP Fiori app.

    In-place navigation
    In-place navigation
    Pop-out navigation
    Pop-out navigation

    Back Navigation

    The user can always navigate back to the previous page with the back button in the upper left corner of the shell bar. In addition, the browser’s back arrow icon (  ) offers the same function. The browser history can be used to go back to previous steps. All pages can be bookmarked and the URL can be forwarded to give other users access to the same page.

    Exceptions

    Switching between display and edit mode is not a navigation step and therefore does not result in a new URL. An exception is made for the draft. Here, a unique number is added to the URL to distinguish drafts from active documents.

    More information:

    Navigation flow for full screen apps
    Navigation flow for full screen apps

    Flexible Column Layout

    In apps with a flexible column layout, the back navigation behaves slightly differently. When the app is initially started, Back takes the user back to the previous page. Any drill-in or forward navigation usually opens a new column in the flexible column layout. Back closes either the rightmost column (leftmost column in right-to-left languages) or the full screen mode, depending on the user’s last action.

    For more information, check out the navigation section of the flexible column layout article.

    Edit and Display

    Switching from display mode to edit mode is not a navigation step and the URL itself should therefore not change, except for the GUID which is added to the URL. Hence, no new entry is made in the browser history.

    Bookmarking draft version

    After switching to edit mode, a GUID is added to the URL to identify the current draft version. The user may bookmark the current changes as a draft version. If the user switches back to display mode via Save, the object will be shown with the saved changes. If the user switches back to display mode via Cancel, the object will be shown without the changes.

    Navigating to draft version

    When the user navigates to a bookmarked draft version, a dialog pops up prompting the user to decide whether the application should continue in edit mode with changes of the draft version, or whether the active version should be shown in display mode.

    • If no draft version exists, the active version is shown in display mode.
    • If the user rejects the edit mode, the draft version is deleted and the active version is shown in display mode.
    • If the bookmarked draft version does not contain any changes, no dialog (popup) is shown. The active version is shown in edit mode. 

    Exceptions

    • If another user is locking the object, the active version is shown with the status Locked by… in display mode.
    • If another user’s lock on an object has expired, the active version is shown with status Unsaved Changes in display mode.

    The behavior in edit scenarios is described in the article on managing objects. More information about deep linking and bookmarking can be found in the draft handling article.

    Entries in Browser History

    The state of an app is reflected in its URL. This allows the user to bookmark or send a link to the app in this specific state. But when does a new URL need to be created?

    In general, there are three cases:

    1. Always create a new entry in the browser history when the user opens a new app. When the user navigates to a different page within the same app, create a new entry to allow back navigation to the previous page. In these cases, users can return to the previous page using the back button or the browser’s back arrow icon.
    2. Replace the URL in the browser history if only parts of the page are changed. This is important to avoid unnecessarily long back chains when navigating back in the browser history. An example of this is when the user selects an item in the list column of a flexible column layout on a tablet or desktop device. On smartphones, the flexible column layout is divided into separate pages, and rule 1. above applies: a new entry needs to be added to the history. You will also need to replace the URL when the user navigates through a list of items using the up/down arrows, or applies a filter to a list.
    3. Keep the same URL if you don’t need to mark a new state for the app. This could be the case after choosing a selection. The URL also stays the same when switching between display and edit modes (see exception below).

    Exception

    There is an exception when working on a draft version (see Edit and Display). In this case, the URL stays unchanged and a GUID is added to identify the draft version.

    Tip: Learn more about bookmarking and deep linking in the draft handling article.

    Deep Links

    A page of an application that is not its entry page can be bookmarked or shared as a deep link. Ideally, the full UI state of the page is retrieved. Technically, this includes every part that is represented in the URL.

    For example, a list-detail app in a flexible column layout gets a new URL when another entry is selected in the list and shown in the details area. This state with the new item can be used as a deep link.

    If a deep link to an application is called and there are no SAP Fiori entries in the browser history, do not display a back button.

    Apps with draft handling functionality allow deep linking to a page in edit mode. Apps without draft handling allow deep linking only to the display mode of an object. In the latter case, the deep link always navigates to the display mode. For more information about deep linking and bookmarking for drafts, see Draft Handling.

    Calling a Deep Link

    Navigation to a deep link ideally restores every detail of the page. Technically, this includes all parts reflected in the URL. The use case and feasibility determine which changes are reflected in the URL, but the rules mentioned in this section must be fulfilled. If a deep link leads the user to an object that no longer exists or can’t be accessed, an empty page is shown. If a user calls a deep link that has been forwarded by another user, the results displayed may vary due depending on authorization levels.

    Deep Linking to Flexible Column Layouts

    A deep link to a flexible column layout shows the state of the layout when it was bookmarked or saved.

    Guidelines and Behavior:

    • Load the exact layout that was stored in the deep link. For example, if the user bookmarks a 3-column layout set to 25% + 50% + 25%, load this layout when the user opens the deep link.
    • If a deep link leads to an object page, scroll the list to the selected entry. If possible, show the entry as selected.
    • If the object is not yet loaded in the list (growing list), show the beginning of the list next to the details area. In this case, there is no selection in the list.
    • If a deep link leads to an object that no longer exists or can’t be accessed, show an empty page inside the layout panel in which the object resided.
    • If the deep link points to a line item in the details area, all the rules for the flexible column layout apply. The Back button above the line item details navigates to the previous page.
    • Since multiselection mode in the flexible column layout is not normally reflected in the URL, a deep link leads to the previously selected object. The same state is shown when closing the multiselection.
    • Depending on the use case, you can more information to the URL, such as a search term. In this way, you can ensure that the corresponding information is also restored when a deep link is called.

    For more information about deep linking and bookmarking for drafts, see the draft handling article. For the flexible column layout, see the flexible column layout article.

    Deep link navigation flow
    Deep link navigation flow

    Quick View

    Users can navigate from a quick view to those of the different users/objects. In this case, a back button is placed on the top left of the quick view box to allow the user to navigate back to the first or previous quick view. All other links lead to new pages and close the quick view.

    Example of a quick view
    Example of a quick view

    Smart Link

    The smart link opens a popover containing detailed information about the corresponding object, as well as links to related apps. Opening related apps follow the guidelines described in the section Navigation within Apps.

    Example of a quick view
    Example of a quick view

    Native Operating System

    How can SAP Fiori apps be embedded into the native operating system?

    Any SAP Fiori app should run in a standard HTML5 browser. Like with any other webpage, users can create shortcuts to either the launchpad or the individual app to support a more integrated experience. The user can save a reference to an app on the desktop or home page of the native OS. When this reference is followed, the app can be launched directly, bypassing the SAP Fiori launchpad home page. On smartphones, this hides the browser controls and displays the app in full-screen mode.

    Accessing an app directly from the native OS
    Accessing an app directly from the native OS

    The same applies to the SAP Fiori launchpad itself. The reference to the launchpad can also be stored on the desktop or home page of the native OS.

    Accessing the SAP Fiori launchpad from the native OS
    Accessing the SAP Fiori launchpad from the native OS

    Related Links

    Navigating the Guidelines

    Once you’re ready to take a more in-depth look at the SAP Fiori web design guidelines, you’ll want to get acquainted with our navigation structure (visible on the left of the screen, or by clicking the   icon on the top left).

    The guidelines cover a large number of topics, which are divided into different categories. The sections below summarize what you can expect to find under each category. Since we only mention the most important articles, be sure to check the navigation structure for a complete overview.



    SAP Fiori Design System

    What is SAP Fiori?

    Learn about the new user experience for SAP software.

    Design Principles

    Learn about the five core principles that underpin the SAP Fiori design philosophy.

    Design-Led Development Process

    Get to know the SAP Fiori design-led development process and the key milestones and activities.

    Responsiveness

    SAP Fiori apps work on various devices. Check out SAP Fiori's focus on responsive and adaptive design.

    Accessibility in SAP Fiori

    Learn how SAP Fiori supports you in designing accessible products.

    Look, Feel, and Wording

    Theming

    SAP Fiori user interfaces are constructed using SAPUI5 control sets that are meticulously styled with CSS.

    Colors

    Get to know the SAP Fiori color palette, including colors for different semantic states, such as 'critical' or 'positive'.

    Iconography

    Learn about the visual design of SAP icons and access SAP icon font files and related resources.

    Motion Design

    Learn about the different motion design principles, such as duration and direction, and their choreography.

    UI Texts

    Check out our conventions for UX writing, including which words to use for actions and how to write message texts.

    SAP Fiori Launchpad

    Overview Launchpad

    The SAP Fiori launchpad is the main entry point to SAP Fiori apps on mobile and desktop devices.

    Home Page / Spaces

    The SAP Fiori Launchpad is available in two flavors – the home page or the spaces. Apps are represented by tiles of various sizes.

    Shell Bar

    The shell bar on top is always visible and hosts a logo, navigation options, enterprise search, notifications, and other services.

    Designing Intelligent Systems

    Basics

    Get to know the core concepts and guiding principles for building intelligence into enterprise software.

    General AI Patterns

    Find out about the different design patterns for intelligent business systems and machine learning.

    General Patterns

    Action Placement

    Get to know where actions can be placed (typically in toolbars), and how to order and style them.

    Draft Handling

    Learn about the draft handling concept for SAP Fiori, including auto-save, locking, and preventing data loss.

    Message Handling

    Learn about common messaging patterns and the message components they use.

    Navigation

    Navigation in SAP Fiori follows the standard navigation paradigms of various web applications.

    Object Handling

    Find out about the different interaction flows for objects, including create, edit, and delete.

    Layouts and Floorplans

    Page Layouts

    Get to know the two basic page layouts used for most app designs, and check out other layout options.

    Floorplans

    Explore the predefined page layouts for specific use cases, known as 'floorplans' in SAP Fiori.

    UI Elements

    'Explore' Page

    Get an overview of all the UI elements available in SAP Fiori.

    Learn More

    To learn more, check out the UI Elements category in the navigation menu on the left.

    Frameworks

    SAP Fiori Elements Framework

    Learn about the technical capabilities and design options for apps developed with the SAP Fiori elements framework. Predefined templates are available for the most common floorplans.

    Analytical Frameworks

    Get insights into the analytical frameworks used by SAP Fiori.

    Designer Toolkit

    UI Kit

    Download the UI kit and start designing your own SAP Fiori app.

    SAP Icon Font

    Download and install the SAP icon font to create true-to-life mockups.

    SAP Fiori Community

    Ask questions on SAP Fiori design and share your design ideas in our SAP Fiori community.