LogoLogo
WEM ModelerWEM ReferenceTutorialsMyWEM
  • WEM Platform Documentation
  • Getting Started
    • Introducing WEM
    • Create WEM Account
    • WEM Login
    • MyWEM Portal
      • MyWEM Features
      • MyWEM Support
      • Allow Support Access
    • Partner Portal
  • WEM Modeler
    • Introducing the WEM Modeler
    • Modeler Start Page
    • Manage Projects & Workspaces
    • User Roles Scheme
    • Create a new Project
    • Modeler Application Overview
    • Project Settings
      • Project Configuration
      • Security Settings
      • Portal Settings
      • SMTP Settings
      • Mobile App Settings
    • Expression Editor
    • Flowcharts
      • User Interaction
      • End Node
      • Sub-flowchart
      • Navigation
      • Clear session
      • Decision
      • Assignment
      • List Action
      • Loop
      • Copy Data
      • Save and Discard
      • Import Data
      • Export Data
      • Invoke Webservice
      • HTTP Request
      • Execute Process
        • Different processes explained
        • Send Email
        • Change settings
        • Changing files
        • Generate File
      • Ping server
      • Authenticate
      • Comet Messages
      • OpenAI
      • Async Tasks
      • Note Node
    • Data Model
      • WEM Session Folder
    • Services and Integration
      • Webservices
      • Remote Data Sources
      • Authentication Providers
        • SAML 2.0
          • SAML App Registration in EntraID
        • OAuth 2.0
      • Comet - Real Time Messages
      • Certificates
    • Concepts and Concept Queries
      • Concepts
      • Concept Queries
      • Concept Relations
    • Navigation
      • HTTP Endpoints
      • Tasks
    • Files and Assets
      • Widget Libraries
      • Template Fragments
      • Files
      • Hyperlinks
    • Multilanguage Dictionary
    • Agentic AI
      • WEM AI Agent
      • AI Flowchart Nodes
      • AI User Interaction
    • WEM Preview
    • WEM Runtime
      • Publishing Process
      • Staging
      • Live
    • Debugging
  • Template Editor
    • Interaction Template Editor
      • Interaction Template Hotkeys
    • General and preview
    • Style
      • Heading Type
      • Paragraph Style
      • Text Styling
      • Alignment
      • Hyperlink
      • Tooltip
    • Layout
      • Adaptive columns
      • Div
      • Panel
      • Alert
      • Table
      • Image
      • Icon
      • Label
    • Interaction
      • Form
      • Validation
      • Required field
      • Button
      • Dropdown
      • Free form item
    • Miscellaneous
      • Tabbar
      • Google maps
      • Nested template
      • Script
      • Reference
      • Conditional
      • Data grid
      • Repeater
      • Rich text
      • Custom
    • WMT Tool
  • WEM Reference
    • WEM Expressions Reference
    • Functions
      • Aggregation
        • Average
        • Count
        • First
        • Last
        • Max
        • Min
        • Sum
      • Concepts
        • ConceptId
        • Description
        • FindConcepts
        • GetAncestors
        • GetChildren
        • GetDescendants
        • GetParent
        • Intersection
        • LocalName
        • Synonyms
        • ToConcept
        • Union
      • Date
        • Date
        • DateDiff
        • DateOnly
        • DatePart
        • DayOfWeek
        • FromUnixTimestamp
        • MoveDate
        • Now
        • TimeOfDay
        • Today
        • ToDuration
        • ToLocal
        • ToUnixTimestamp
        • ToUTC
        • UTCNow
        • UTCToday
      • Environment
        • ApplicationId
        • CountryCode
        • CountryName
        • Hostname
        • IpAddress
        • IsFirstRequest
        • IsHttps
        • IsPreview
        • IsStaging
        • IsLive
        • NodeTrail
        • PortalId
        • PortalName
        • ProjectId
        • ProjectName
        • ProjectVersion
        • Setting
        • UrlPath
      • Files
        • FileName
        • FileSize
        • FileUrl
        • MimeType
      • Lists
        • Distinct
        • IsNewRow
        • IsOnRow
        • List
        • NameOf
        • RowId
      • Math
        • Abs
        • Ceiling
        • Cos
        • Distance
        • Exp
        • Floor
        • Log
        • Log10
        • Pi
        • Pow
        • Random
        • Round
        • Sin
        • Sqrt
        • ToNumber
      • Security
        • AesDecrypt
        • AesEncrypt
        • AesIv
        • AesKey
        • CreateJsonWebTokenH256
        • HmacSha256
        • Md5
        • Password
        • PasswordStrength
        • Pbkdf2
        • Sha1
        • Sha256
        • Totp
      • Text
        • AsText
        • Base32ToText
        • Base64ToText
        • CompareFuzzy
        • Concat
        • Contains
        • FormatDate
        • FormatDuration
        • FormatNumber
        • Guid
        • HexToText
        • HtmlAttributeEncode
        • HtmlEncode
        • IndexOf
        • JavascriptEncode
        • JsonEncode
        • Length
        • Padl
        • Padr
        • RegExIsMatch
        • RegExMatches
        • RegExReplace
        • Replace
        • Split
        • StringPart
        • SubString
        • ToBase32
        • ToBase64
        • ToBase64Url
        • ToHex
        • ToLower
        • ToRichText
        • ToString
        • ToTitleCase
        • ToUpper
        • Trim
        • UrlDecode
        • UrlEncode
        • XmlAttributeEncode
        • XmlEncode
        • XPath
        • XPathList
        • XPathNumber
      • Validation
        • HasValue
        • IsEmpty
        • IsKnown
        • IsUnknown
        • IsValidBankaccount
        • IsValidBSN
        • IsValidBTW
        • IsValidEmailAddress
        • IsValidIBAN
        • IsValidPhonenumber
        • IsValidURL
      • Localization
        • AvailableLanguages
        • CurrentLanguage
        • CurrentTimezone
        • LanguageStrategy
        • Languages in WEM
    • Keywords
      • Contains
      • Concepts
        • Ancestor of
        • Child of
        • Concept
        • Descendant of
        • Overlaps
        • Range of
        • Parent of
        • Contains
      • Environment
        • ApplicationRoot
        • Platform
      • Lists
        • In
        • Of
        • Where
        • Contains
        • All
      • Logic
        • And
        • Not
        • Or
        • Choose
        • If Then Else
      • Mobile
        • BatteryLife
        • BuildVersion
        • ConnectivityTypes
        • DeviceId
        • DeviceName
        • IsDevelopmentBuild
        • IsDistributionBuild
      • Text
        • Contains
        • Ends with
        • NewLine
        • Starts with
    • Operators
      • Addition +
      • Division /
      • Equality =
      • Equality-strong ==
      • Greater-than >
      • Greater-than-or-equal >=
      • If-unknown ?
      • Inversion -
      • Less-than <
      • Less-than-or-equal <=
      • Logical-and &, and
      • Logical-not !, not
      • Logical-or |, or
      • Modulo %
      • Multiplication *
      • Power ^
      • Subtraction -
      • Unequality <>
    • Data Types
      • Text
      • Number
      • Yes / No (Boolean)
      • Date Time
      • Duration
      • File
      • Rich Text
      • Concept
      • Conceptset
      • Reference
    • SQL Compatibility
      • Functions
      • Keywords
      • Operators
    • Content Security Policy
    • WEMScript for Custom HTML
    • WEM Widgets
      • WEM Widget Structure
      • WEMScript for Widgets
      • Widget Editor
      • Content Placeholder
    • WMT
      • File Structure
      • Basic Functional Template
      • Styling
      • Font Icons
      • Reference
        • Breadcrumb
        • Button Bar Buttons
        • Common Scripts
        • Common Styles
        • Conditional
        • Content
        • CSP
        • CSP Nonce
        • Expression
        • Hidden Fields
        • Language Select
        • Navigation
        • Node ID
        • Node Name
        • Placeholder
        • Placeholder Conditional
        • Startup Scripts
        • Template Fragment
        • Uses
    • Regression Test Framework
      • WEM Test Script
  • Tutorials
    • Tutorials
      • Making a Change Log
      • Placeholders for end-users
    • First Application
      • Expand First Application
    • Video Tutorials
      • By Partners
      • Security
    • Building Widgets
      • Basics
        • 1. Introduction
        • 2. Hello, World!
        • 3. General
        • 4. Properties
        • 5. Events
        • 6. Styling
        • 7. View State
        • 8. Resources
        • 9. Placeholders
        • 10. Template Editor Script
        • 11. Global Scope
        • 12. Risks and Responsibilities
        • 13. Conclusion
      • In-depth
        • 1. Introduction
        • 2. Platform Availability
        • 3. Development Workflow
        • 4. Properties
        • 5. View state
          • 1. Runtime.viewState
          • 2. sessionStorage
          • 3. Summary
        • 6. Styling
        • 7. Events
          • 1. Navigation
          • 2. Row position
      • WEMscript
        • 1. Introduction
        • 2. Variables
        • 3. Properties
        • 4. OutputId()
        • 5. Register Input - Required
        • 6. Encoding
        • 7. Script Block - Introduction
        • 8. Types
          • 1. Boolean
          • 2. Concept
          • 3. ConceptSet
          • 4. Datetime
          • 5. Duration
          • 6. File
          • 7. Number
          • 8. Richtext
          • 9. Text
        • 9. Script Block - Global Scope
        • 10. Script Block - ES Modules
        • 11. CSS - attachShadow
      • Examples
  • Tips and Tricks
    • Tips and Tricks
      • Keyboard Shortcuts
      • Video's in WEM
      • Extracting text from File
    • Custom Hostnames
    • FAQ
    • Expressions
      • Order of Operators
    • Processes
      • Email Process
      • Tips for creating PDF's
      • ZIP Archive Process Node
    • Concepts
      • Concepts and Runtime
    • Working with data
      • The Power of the Calculated Field
      • Consuming your OData source with Excel 2016
      • Expose your data via OData
      • Using OData to transfer data between runtimes
      • WEM Storage Options
    • Integration
      • Integrating external systems
      • Json
      • Single Sign-on
      • Office365 Integration
    • Performance
      • Performance Tips
      • Performance Profiler
      • Template Performance Profiler
      • The Split Loop
    • Security
      • 2FA with TOTP
      • Blacklist or whitelist IP addresses
    • Widgets
      • Advanced Charts
        • Boxplot Chart
        • Brush Chart
        • Bubble Chart
        • Candlestick Chart
        • Card with Chart
        • Effect Scatter Chart
        • Heat Map
        • Line, Area and Bar Chart
        • Map-Bar Morph
        • Mix Time Line Chart
        • Nested Pie Chart
        • Polar Area Chart
        • Polar Bar Chart
        • Profit Chart
        • Radial Bar Chart
        • Radial Bar Gauge
        • Range Bar Chart
        • Rosetype Pie Chart
        • Sankey Energy Chart
        • Scatter Chart
        • Scatter-Aggregate-Bar Chart
        • Stacked Columns Chart
        • Stepline Chart
        • Treemap
      • Advanced Input
        • Color Picker
        • Conceptset Image Selector
        • Google maps locator
        • Multi select input button
        • MultiFile Upload
        • On/Off switch
        • Process Arrow Steps
        • Rate
        • Rating view
        • Single select input button
        • Slider
        • Tree
      • Template Actions
        • Follow exit
      • Global widgets
        • Agenda
        • Audio Player
        • Calendar
        • Draw Signature
        • Grid Widget
        • Image capture
        • Kanban Board
        • Path
        • Progress Bar
        • reCAPTCHA
        • Timeline
      • Document widgets
        • Json Viewer
        • PDF Viewer
    • Various
    • Go to MyWEM
Powered by GitBook
On this page
  • Introduction
  • Prerequisites
  • Properties
  • Illustration
  • Filter Concepts

Was this helpful?

Export as PDF
  1. Template Editor
  2. Miscellaneous

Tabbar

PreviousMiscellaneousNextGoogle maps

Last updated 1 year ago

Was this helpful?

Introduction

Adding a Tabbar allows you to organize your user interaction screen and divide it into different screens (tabs). When the user clicks on a tab, the information relevant to that tab can be displayed.

Prerequisites

To implement tabbar, you need to know about two things - Concept field (single select) and Conditionals.

Refer the pages for and if you would like to familiarize yourself with the topics.

Tabs are a graphical representation of a Concept field. Therefore, tabs require a Concept field (single select) to work with. Clicking on a tab in a Tabbar will select that specific Concept value. When you want to show the specific information corresponding to that tab, a Conditional widget is required that will contain an expression which relates to the tab concept. Therefore, for each tab that is used, a Conditional with the desired content in it (when condition is true) should be created.

Properties

Data field - This comes populated with the single-select session variable field that holds the information of the selected tab.

Filter tabs by - Here, you can write expressions that would show/hide certain tabs in certain scenarios. For example, you might want to hide a tab for a specific user role.

Default tab - As the name indicates, this is the tab that is open by default when you enter the screen. If this is not set, then it could happen that when you enter the page, the last tab that was clicked in the session is shown, which might not be desirable. Typically, you set the first tab as the default tab.

Behavior: On change flowchart - Here, you can select a flowchart that needs to be executed on clicking any tab.

Appearance: Tab label - By default, the local name in the Concepts are shown as the tab labels. You can add expressions to change the tab labels as per your requirement.

Appearance: Display mode - There are two ways in which tabs could be shown in the Tabbar - tabs or buttons.

Appearance: Justified - By default, the tabs are not justified and are left-aligned as you can see from the above screenshots. Turning on this toggle will justify the Tabbar to the width of the page as shown below.

Illustration

Consider a use case for an Employees Management System (EMS) where employees are assigned to one or more projects and each project maps to a client. Let us try to build a page with a Tabbar that consists of two tabs - Clients and Projects.

1. First, you need to create a Concept item with two children, corresponding to the two tabs needed in the tabbar - Clients and Projects.

2. Then, you need a single-select session variable with the root concept pointing to to the above Concept item.

3. Then, in the Template Editor, click on the 'Tabbar' icon and drag it to the canvas. This would prompt you to select a concept field. Select the session variable from the previous step.

Alternately, you could just drag the single-select session variable on to the canvas and select 'Create tabbar' from the prompt.

4. The canvas now shows the Tabbar. Set the default tab to 'Clients' and leave the other settings as-is. For further details on the Tabbar properties, go back to the previous section in the page.

5. Now that you have added a tabbar to your page, the next step is to define what should be shown on the screen when you click on each tab on the Tabbar. This is done by adding Conditionals as shown below.

6. The last step is to add details that need to be shown under each Conditional. For our example, add the Datagrid of 'Clients' and 'Projects' under the respective Conditionals.

You could do it like this....

or like this...

It is recommended to use the second approach. This will make the Template Editor look less cluttered; otherwise, when there are more number of tabs you will end up creating so many nested levels of Conditionals.

7. There is one important thing that you could have missed. Let's find out by previewing what you have built. This is the screen that you will see on Preview.

As you see, the tab 'Clients' is selected (because it was assigned as the default tab in Step 4 above), but the Datagrid of clients that you want under this tab is not shown.

Now, when the 'Projects' tab is clicked, this is what you get. This is as expected.

When the 'Clients' tab is clicked, this is what you get. This is also as expected.

So, you see that explicitly clicking on the tabs shows the details that are expected for the tab. However, the details are not shown in a new session. This is because the single-select session variable from Step 2, [Authentication.Session.Tabs], does not yet have a value assigned in a new session. Basically, it will be UnknownConcept. So, the condition in the first Conditional in Step 6, [Authentication.Session.Tabs] = 'Tabs'.'Clients', evaluates to False (and so does the second Conditional). And nothing is shown on the screen.

Therefore, you need to amend the condition in the first Conditional to one of the below two, which effectively mean the same.

Filter Concepts

It is possible to (dynamically) change the collection of items to display on the tabbar. This can be done by using the Filter tabs by- property of the tabbar. This filter works a little bit different than other filters where you can use any expression that results in a boolean. When filtering the tabbar the keyword concept is used as a variable that corresponds with the concepts in the collection.

As a result of this the expression should look like this:

concept in {a conceptset that can be dynamically created}

Example:

concept in (GetChildren('Tabbars'.'Tabs Onderzoeken') where concept:'Islive' = true)

In this example, the 'IsLive' is a concept property that is used to disable certain concepts from the tabbar by setting the property to false.

You can make use of expressions to build the conceptset dynamically for the tabs.

With +{} you can add tabs to the collection

With -{} you can remove tabs from the collection

the {} surrounding concepts make a concept set

Besides literally using concepts, you can also use ontology queries or calculated conceptset-datafields, anything that results in a set of concepts that is valid for the type of single select being used.

Example:

concept in
    {
        'Layout'.'Tabbars'.'Tab1',
        'Layout'.'Tabbars'.'Tab2',
        'Layout'.'Tabbars'.'Tab3'
    }
    +
    (
        if what you want here is true
        then {'Layout'.'Tabbars'.'Tab4'}
        else {}
    )
    +
    (
        if something else you want here is true
        then {'Layout'.'Tabbars'.'Tab5', 'Layout'.'Tabbars'.'Tab6'}
        else {}
    )
    
    -
    (
        if something you do not want here
        then {'Layout'.'Tabbars'.'Tab0'}
        else {}
    )
    +

/*finally, always the info as latest item*/
    {'Layout'.'Tabbars'.'TabInfo'}

Refer the page for if you would like to familiarize yourself with the topic.

Refer the page for if you would like to familiarize yourself with the operator.

Data grid
If-Unknown operator (?)
Concepts
Conditional
Tabs
Buttons
Tabs; Justified
Here, the conditionals are nested using 'Show when false' toggle on the conditional
Here, the conditionals are independent of each other and not nested