Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The WEM No-/Low-Code Platform, WEM in short (and Web Enterprise Modeler No-/Low-Code Platform in its longest form), is an all-round powerful rapid application building platform that can be used by any person without needing specific programming skills. A true no-coding development environment, which enables you to build enterprise-grade applications, for use in any browser (as a web application) or as a native app on mobile devices.
The WEM Modeler (or 'Modeler') has been designed to hide the complexity of software development and application deployment, enabling (business) users to visually create applications. At WEM, we call this 'Rapid Application Modeling'.
Before we dive into the WEM specific details, let’s look at what an application exactly is. According to Wikipedia: “An application program (application or app for short) is a computer program designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user.”
To build and use an application, there are several components that make up an application, and WEM supports them all:
All the user interface components, like buttons, forms, pictures, tables, input fields etc. These components exist in various application screens, or application pages and are the main interface for the user to work with. Within WEM we call these pages User Interactions
manifested by Interaction Nodes
in Flowcharts. The term Template
is also used often, as it is often a template for a page where you can put placeholders that will be replaced with actual data when used by the end-users.
All applications work with information, or data. Your application may need to store customer information, or enable users to add information to the system. In WEM, data can be stored using Database Lists
. The WEM Datamodel
provides many types of specific Fields
(e.g. text, numbers, date/time values, files and others) that can be part of a database list. These fields can be stored in and retrieved from a permanent storage, or that can be used to keep values just for the duration of the user-session (i.e. the period while a user is actively using the application - ends automatically when browser is closed or when user has not been active for a certain period).
Application logic: every application performs certain tasks and these tasks follow a certain application logic, or workflow. This is everything that happens ‘under the hood’, the engine that makes the thing work... To define how your application works, WEM uses Flowcharts
: functional nodes connected by lines.
Integration with external systems and applications is very important in modern applications. That can range from using Azure or Google to log into your application, to using complex data from ERP systems. Or even using public services to get information like ‘where is the nearest public restroom in Amsterdam’. WEM has been built with integration
in mind, so there are various ways to easily and visually integrate your application with other systems. SOAP, REST/JSON, Import/Export (csv, Excel, Json, XML), SAML, OAuth, OData all have a place in WEM for easy integration in both directions (WEM as Consumer as well as Provider of integration features).
In conclusion, WEM has just about everything in place to help you build your own application, whether this is an online web-application or a native mobile app.
With the WEM Modeler, building an application is quite easy: you visually "draw" the logic of your application in flowcharts using the available Nodes
and Connecting Lines
; organize your own specific data structure using folders, list and fields; and let WEM turn this into an application. This is what we call "Rapid Application Modeling".
You can design your pages or forms, define all the data fields you need, integrate your logic with external systems/data, etc.
All the applications that are built with WEM are HTML5 compliant, so they work with all modern browsers. Furthermore, all applications are fully responsive, so they also work on your mobile device.
Learn how to use the WEM Modeler, and you will be able to build any application you need!
When you have created your application, or at least some of it, you want to check how it works. For this, the WEM Platform offers the Preview
: you can start your portal or a specific flowchart from the Modeler to see your work in action as it would as a fully deployed application. Debugging options are part of the preview, as well as (almost) directly showing changes you make in the Modeler.
While the Preview environment is only available to you as user of the WEM Modeler, you may want to make your application available to other people to test and provide feedback before "going live". For this purpose, WEM offers the Staging Runtime
environment. You need a hostname (a web-address to point your browser to) and a valid License Key to start the Publish Process. This publish process takes care of your 'deployment' and pushes your project from the Modeler to the Staging Runtime Environment. This Runtime Environment is the part of the WEM Platform that provides access via internet to your application with all the appropriate security and availability measures in place. And the only thing you need to do to 'deploy' or update your application, is to push the Publish button in WEM Modeler! No worries about systems, configurations, servers, databases, networks, security. Just push that Publish button. The Staging runtime environment is the appropriate environment to pre-test or present your application to other users for acceptance before going live.
If you want to 'Go Live': another Push on the Publish button does the trick, this will push the version that is available on the Staging Runtime, to the Live Runtime
. You can even have your own hostname/domain linked to it!
Surely there are many more details to describe the specific Runtimes and all related processes, but at this point, the take-away is: deploying your application in the WEM Platform is only 1 or 2 publish actions, started by click on a button in the Modeler...
Next up is some information about MyWEM: the most important WEM User Portal (yes, it is created with the WEM Modeler!) where you can create your account, access your projects and the Modeler, exchange information with other WEM users on the Forum, get free online Training and Support, or even get Quick Starter Projects to get a flying start!
The MyWEM Portal is the central location where you can access all your WEM information. You can access it via the Sign In link at the top of our Public WEM Website, or just follow this link and add it to your favorites!
Most important parts on MyWEM:
Get Started (homepage): with links to useful resources, Free Online Training and Quick Start Projects, free to copy and study!
My Projects: the list of your projects so from here you can start them directly in the Modeler.
Forum: the WEM Forum where WEM Users and experts exchange information, answer questions and where updates and new features are first revealed! This now has been "promoted" to its own hostname at forum.wem.io.
App Store: The WEM App Store contains WEM Projects that give you a head start on your application. Here you can also find WEM Widgets for download to be imported to your own projects. These projects and widgets are provided by WEM and its partners.
Training: The dedicated Training Page, access to our Free Online Basic Training and the starting-projects for Exercises.
My Support: If you need specific help in your projects, the Support Team is available via our own ticket system.
My Details: Your personal page with account details, link to change Multi Factor Authentication options and even the option to be officially forgotten (GDPR compliant) via the edit-page.
Next up: details of the above mentioned features provided by the MyWEM Portal.
User Rights within the WEM Modeler
A WEM user has a specific role within a Workspace or Project. When you create a new Workspace, you automatically become the Owner of that Workspace.
Via button [Manage projects & workspaces] in the Modeler, you can (with the proper rights) manage user roles.
In future, a new WEM Account Management Portal will be launched, which will provide more fine-grained options to assign roles and rights to users.
(Working upwards in the list as displayed above)
User rights applied on Workspace level, will apply to all projects within the workspace, and will be applied to new projects created in this workspace in the future.
Any specific right is as described: there is no inheritance or implicitness. If you need to be able to publish to both staging and live, you need to have both specific rights. Publish to live does NOT give you the right to publish to staging implicitly.
For users that do not get Workspace-level rights, you can apply Project-only rights, applicable to only that project.
See the single "Project" label with some of the rights, as opposed to the plural "Projects" for the Workspace-level rights.
These Project-level rights can only be applied to users that do not have any Workspace-level rights. Any user either has rights on Workspace and therefore on all contained projects, or has rights on singular projects (and needs to get those specific project-rights assigned to every project).
----
Previous versions of Modeler used the following roles:
Rights | Features |
---|---|
Rights | Features |
---|---|
Rights | Features |
---|---|
User role | Description |
---|---|
Action | Project | Workspace | ||||||
---|---|---|---|---|---|---|---|---|
Manage workspace
create/copy/delete projects;
edit workspace settings;
manage workspace-level users.
Edit design (master) templates
add design template collections with a share-code.
Edit widgets
create/edit/delete widgets in Widget Editor.
Manage projects
manage all projects in workspace, specifically manage user-rights on project-level.
Configure projects
manage project-level settings (project configuration and security settings);
manage portals within project;
Debug live
*new* specific right to start debugger on the live portals.
Debug staging
*new* specific right to start debugger on the staging portals.
Publish to live
*new* specific right to publish to the live environment.
Publish to staging
*new* specific right to publish to the staging environment.
Edit projects
make changes to project contents, elements, flowcharts, datamodel.
Manage project
manage this project, specifically manage user-rights on project-level.
Configure project
manage project-level settings (project configuration and security settings);
manage portals within project;
Debug live
*new* specific right to start debugger on the live portals for this project.
Debug staging
*new* specific right to start debugger on the staging portals for this project.
Publish to live
*new* specific right to publish the portals of this project to the live environment.
Publish to staging
*new* specific right to publish the portals of this project to the staging environment.
Edit project
make changes to project contents, elements, flowcharts, datamodel.
Workspace User
A User on Workspace-level has the right to work on all projects in the Workspace (i.e. model and build an application)
Workspace Power User
A Power User has the same rights as a regular User, but can also: publish and configure all projects as well as edit widgets
Workspace Admin
An Admin has the same rights as a Power User, but can also: manage projects and workspace settings
Workspace Owner
An Owner has the same rights as an Admin, but can also change ownership. There can be only one
Project User
A User on project-level has the right to work in this specific project (i.e. model and build an application)
Project Power User
A Power User has the same rights as a regular User, but can also: publish and configure this project
Project Admin
An Admin has the same rights as a Power User, but can also: manage project
user
power user
admin
user
power user
admin
owner
Edit project
*
*
*
*
*
*
*
make changes to project elements, flowcharts, datamodel
Publish project
*
*
*
*
*
publish to staging and live environments to make the application available to end-users
Configure project
*
*
*
*
*
edit project settings, create/copy/delete portals
Manage project
*
*
*
manage project-level users
Edit widgets
*
*
*
create/edit/delete widgets
Manage workspace
*
*
create/copy/delete projects, edit workspace settings, manage workspace-level users
Change workspace owner
*
change the owner of the workspace
WEM works with Partners all over the world, in various sizes and business areas.
In the Partner Portal, WEM provides features to administer accounts, follow up on WEM-specific opportunities, check invoices and contracts.
Let The Fun Stuff Begin!
WEM uses Workspaces, Projects and Portals to organize applications on several levels:
Workspace
Projects
Portals
In a workspace you can group several projects that have things in common, like:
Collection of Design Templates (styling definitions for look and feel);
Runtime Environments (public shared cloud is standard, but private clouds can be made available);
Custom SMTP settings for mail sending;
Specific group of WEM Users that can work together in some or all projects contained in the Workspace.
A Project can be of a specific type:
Web (with either one shared database or separate databases for each portal);
App (native mobile).
Finally, a Portal is the entity that can be considered the Application, the actual website or the native app that users will be using to access your created functionality and features. Portals have specific settings and configurations that define how users can access the application (hostname or app-file), how it will appear (Design Template and its custom settings), how it starts (home page), which language strategy and timezone strategy will be applied.
It is possible to create multiple portals in a project. You would do this for several reasons, for example:
you want the same application to be available via different URLs, different look and feel, different starting points, different language or timezone strategies;
the application is used by different organizations ('multi-tenant'), that access the application through their own URL and their have own look and feel;
These portals within a project can share the data (Runtime) or each can have their own separated storage. If the various portals in a project all need their own data and/or prevent users from the other portals to access the data, you should choose to separate the databases (each portal its own storage). On the other hand, if the users of the various portals can/must share all the data, you share the database (this is the default).
More details will be explained later on, but you will encounter these terms (Workspace / Project / Portal) often, so basic understanding of their meaning is useful.
The access to your projects.
When you start the WEM Modeler, or go to the startpage by clicking on the button next to the WEM Modeler Title, you get an overview of your Projects, organized by Workspace, your recently accessed projects for quick access and some useful links.
To open a project, just find the project you want to work on and click on it to open;
The +New project
button starts a wizard to create a new project and go through the basic settings;
The Manage projects & Workspaces
button gives an overview of workspaces you have access to, the projects therein, provides features to create workspaces, projects in a workspace, some settings and allow role-based access to other WEM users; Just click on the [...]
to open a context-menu with the appropriate actions on the specific item.
When you have selected a project from My WEM or from the Modeler Start Page, the project opens in the WEM Modeler, and shows the Project Summary Page in the main container with information about the projects and its portals and last modified flowcharts and templates.
The WEM Modeler, or simply 'Modeler', is the "Build and Manage" environment that you use to create and model your application. This is your Online Development Environment to help bring your ideas to life (in the form of a web application that is...)
When you look at the Modeler, there are various sections that provide different functions, based on what you try to accomplish. Let’s look at the various components.
At the very top, on the right you find a menu bar with several options:
Here you can:
Go to Modeler Startpage
Manage Project settings
Preview your project from the starting point of a portal (Home Page)
Publish your project to the Runtimes
Open Documentation
Access your account information
My Account
Manage workspaces and projects
Log out
On the left is the Project Resources Pane, where you will find your projects resources grouped in several tabs and organized in a hierarchical tree. This is where you can navigate through all parts of your project and create new items or change existing items.
Directly below the tabbar is a search box, in which you can search for elements within that tab by name (supported with autocompletion), technical name or element-id. Projects can start small and grow big over time. Therefor, finding elements is a very necessary feature - and there are many ways to locate elements (find usages via context menu, [ctrl+click] on links where an element is a property of another element, autocompletion in Expression Editor)
From left to right these tabs are:
These topics are explained in their respective pages further on.
Remember: on each element in the tree you can use the Context Menu using right-mouse-button or the [...]
three-dot button. Using the context menu gives you access to actions such as:
Create new item;
Create new folder;
Edit item;
Rename item;
Delete item;
Find usages;
And more depending on the specific type of item you are on.
The modeler tabs also have a context menu that you can open with a right mouse click on a tab. With this menu you can:
Locate in tree/Open node in flowchart The locate in tree is a very useful function which lets you find the current tab in the resource pane tree, if you do this on a flowchart tab for example you will be taken to the flowchart tab in the resource pane with the current flowchart selected and highlighted. When you do this on an interaction node you will be taken to flowchart with the node selected and highlighted.
Rename The rename option lets you rename the current tab and its element.
Close This closes the current tab
Close others This closes all tabs except the current tab and the Project Summary tab
Close tab to right Closes all tabs on the right from the current tab excluding current tab.
Building an app with WEM Modeler is very straightforward:
Create a new project.
Complete all required settings.
Model your application using the WEM modeler. Specify the data your app needs to work with, the workflows that make the app work, integrate with external systems when needed and create the necessary user interactions.
Test your application using the Preview.
Publish the application to the Runtime so it is available for your targeted user-audience (Staging for acceptance testing and review, Live for the final real deal).
There is a lot more that can be explained about all these steps and detailed information can be found in the following pages and sections.
Projects are the basis of your application. Every application is created within a project. So to get started on a new application involves the creation of a new project. WEM provides a step-by-step wizard to create a new Project from scratch. On existing/copied projects you can change all those settings in the respective Project Settings and Portal Settings pages.
When you click on [+ New Project]
, you are presented with the following overlay, which is the start of a Wizard:
Enter your Project name;
Select type of project:
Web application with shared database (1 storage for all portals in this project);
Web application with separate databases (each portal its own storage);
Native App project (Android and iOS apps).
Select an existing workspace or create a new workspace.
NOTE: you can only specify the storage strategy (shared or separate), at the time when you create the project. This setting cannot be changed once the project is previewed or published - because either of those actions will create the database container based on the chosen strategy - and, once the container has been created, it cannot be changed.
Click the [Next]
button to go to the next step.
Select your Default Language (this can be changed later per portal);
Select your Time zone mode (this can be changed later per portal);
Option [From Client IP Address]
will lookup the timezone based on the runtime user's IP-address using a lookuptable with known registered ip-address ranges and their known timezones. This may be affected by IP-addresses provided by international providers or free-wifi connectors, and it may be that some ip-addresses are not available in the WEM lookup table if they have been added recently; With this option you can use the UTC timezone (and related functions) to store specific date+time values, and choose to display them as local time to the enduser - based on their timezone.
Option [Fixed] will give you the option to select one specific timezone which will be used for any and all date-time values (like the technical time function Now()
).
Click the [Next]
button to go to the next step.
Portals published to Runtime (staging/live) have to be made accessible using a hostname
, the address you enter in the browser's address bar. WEM offers a few choices here:
Hosting Zone: based on certain settings for your workspace, you may have multiple hosting zones available. Standard hosting zone is the Shared Cloud environment in the European zone. Other options may be the shared cloud in the APAC zone, or any private cloud which is made available to your workspace.
Hostnames: the wizard automatically generates a hostname based on the European hosting zone and your project name, ending with staging.wem.io and live.wem.io. These domains already exist and are defined with a wildcard in DNS settings, which makes it easy to just use any (unique) name without having to change DNS settings.
Any portal needs 1 hostname per runtime (staging/live), but can have more! It will just be a different name (address to enter in the browser address bar) for the same portal, but it can be useful. Click on [Add hostname]
to add more hostnames.
Adding a hostname using the fixed ".live.wem.io" or ".staging.wem.io" will be operational with SSL-certificate directly after publishing.
Adding your own custom hostname will require additional changes in the DNS management of the custom domain - this is out of WEM scope.
Read this forum post about linking your own custom hostname to your WEM portal and get SSL-certificates
Click the [Next]
button to go to the next step.
The final step in the Wizard, is to select the Design Template which will be used as the Layout for your Portal. The Design Template will arrange the position of your navigation menus, header and footer options and the standard fonts and colors. WEM provides a range of pre-defined Design Templates, and each of them has some (or many) additional settings to change to your needs.
The [Customizable Main]
Design Template is the template with the most options you can modify yourself (within limits) and is becoming the most-used Template.
If the available collection of Design Templates does not fit your needs, there are possibilities to get your own Custom Design Template. A WEM Design Template is a complex collection of files and definitions that have to be put together correctly. If you want to manage your own Design Templates, you need to have profound knowledge of LESS, CSS, HTML at least - but there are WEM Partners who can assist if you do not have this knowledge available.
Click the [Create project]
button, and your New Project will be created with the provided settings.
You need a WEM account to start building your own apps. This WEM Account is used for the Modeler (building applications) and the MyWEM portal (support, training, forum and other useful stuff around the WEM Platform).
Creating a WEM account is straightforward. Simply go to the WEM website and click Start for free
, or go directly to the WEM Create Account Page.
You are now presented with the page to create a new WEM account:
Fill in the form and hit the [Create account]
button.
You will receive an email asking you to activate your account. The link in that email is valid for 2 days. Please check your Junk or Spam folders in case this mail ends up there.
It is required to use this specific link once, to activate the account. If the account is not activated using this link within 2 days, you may need to request assistance from WEM Support (support@wem.io)
After activation, you are also asked to set up MFA (Multi Factor Authentication), just to make your account and the usage of Modeler features more secure.
WEM MFA offers 3 options:
Email (can be a different email address from your WEM Account)
SMS (mobile number)
Google Authenticator (mobile app generating random numbers every minute)
We advise to activate at least 2 of the 3 options, so you get a choice when you login to use the MFA option that is available to you at that time. You know, we all forget our phones sometimes, or transfer to a new phone - and then you need another option besides the Authenticator app which will not work anymore.
After setting up the MFA, next time when you login to MyWEM or Modeler, you need to use one of the activated authentication methods. At that time, you can check the option "Trust this computer (skip MFA for a week)
" to bypass the MFA option for 1 week; next time you access MyWEM or WEM Modeler, you only need to provide your Username and Password.
This only stays as long as you do not specifically logout but just close your browser when you're done working in the Modeler or MyWEM Portal. As soon as you explicitly logout, all settings (stored in local cookies) are removed and next time you'll need to provide your Username, Password and one of the MFA options again.
If you want to change your MFA settings at a later moment, you can access your "My details" in MyWEM and click on the [Change MFA information]
link below your personal information.
This will bring you to the WEM Login Portal where you can click the [Manage Multi Factor Authentication]
button near the bottom, that leads you to your MFA options so you can change your settings.
For security reasons, it is not possible to reset (to blank) your MFA options yourself once they are set. So it is highly recommended to have at least 2 MFA options setup, or even all 3 options, in case you have no access to your personal device (for SMS or Authenticator).
If you have absolutely no access to any options and need the MFA to be reset, you can send an email to support@wem.io (in English preferably) with the reason for this request to have MFA-options reset, and specifically your WEM account information.
Once you have activated your account and setup MFA, your account is ready and you can get started on that first app.
WEM is working on a new MyWEM / Accounts Portal, that will change the way you can manage account settings, workspaces, projects etc.
Until that new Portal is available, most management features are within Modeler itself.
From the Modeler Start Page, you can access your Projects in several ways:
From the list of Recent Projects that you've worked on
From the Workspace-ordered list showing all workspaces and projects that you have access to.
Search a project by name - this will filter the list of workspaces and show all projects matching the search value.
To create a new Project from scratch, click the button [+ New project]
- this will start a wizard to guide you step by step.
Click on button [Manage projects & Workspaces]
to access management features on your projects and workspaces - based on permissions you have.
The [...]
action buttons to the right, lead to the item-specific actions. The structure you see here, is:
User (you)
Workspace
Projects
Click the [...]
action button on the line of your user (the person-icon and your name). The Create Workspace
option appears. You only have to provide a name and you will automatically be the Owner of this workspace with all permissions.
The Edit account
option is there as well, with limited options (full name, receive notifications, change password).
Click the [...]
action button on a workspace line to see the Workspace Action menu (see picture).
Click the [...]
action button on a project line to see the Project Action menu (see picture).
Click the [Settings]
button in the top menu to access all Project and Portal settings.
Technical and Practical information about the WEM No-Code Platform, WEM Modeler and WEM Runtime.
The WEM Platform has been designed to hide the complexity of software development and deployment, enabling any person to visually create applications without need for specific programming skills. At WEM we call this Rapid Application Modeling.
The WEM No-Code Platform was first created in 2010 and has been growing and improving ever since...
Read on to learn about the technical and practical parts of the WEM Platform. Or use the [search...] feature to quickly find specific articles.
The WEM Modeler is the central point in the Platform, providing the No-/Low-Code environment to create and manage the applications.
The WEM Runtime is the other significant element in the Platform, where the applications built in the Modeler get published to become available to the end-users.
The WEM Expressions Reference is where you will find everything about WEM functions, keywords, operators and data types. It also provides information about WEMScript, the specific script-language to use in powerful custom widgets and custom script blocks.
Support staff does NOT have access to your project, so if it is necessary to investigate your project in the Modeler, you should provide access to Support. Here's how you do that:
Step 1: go to Manage Projects and Workspaces:
Step 2: find your project and access the Context Menu:
Step 3: Click [Grant support access] and confirm.
Support employees can now access your Project in the Modeler, until you disable the Support Access.
To disable the Support Access, go to the [i] tab and see the information about the Support Access being active (when and by who). Click the button [Disable support access]
when it is no longer needed.
Required Settings for sending E-mail messages
Using your own (corporate) mail server for handling emails has the additional advantage of logging and providing information:
when your messages cannot be delivered to recipients, the Non-Delivery-Reports will be available on your own mail server, so you can act on that information.
Also, all sent items can be found in the mailbox of the used sender – available for review, follow-up, or just evidence that a message has indeed been sent.
The sender you set on the e-mail process node (from-parameter) must have the same domain as the SMTP server, or the SMTP server must be allowed to send mails on behalf of the sender in the from-parameter.
Per portal you can select which SMTP Server you want to use to send e-mail messages from.
The list of available SMTP Servers is managed on Workspace Level (or in DevOps portal for Kubernetes Runtimes).
Go to Manage Projects & Workspaces.
On the specific Workspace, access the context-menu [...] and select SMTP Settings.
On the overlay for SMTP Servers, add or edit an entry.
Parameters to set, are:
Host (smtp server hostname, like smtp.gmail.com or smtp.office365.com).
Port (587 is the standard for secure SMTP via TLS).
Username (the account that can connect to the server and has sufficient rights to send messages on behalf of the from-address you want to use in your project's emails).
Password for that username to access the SMTP server.
After one or more SMTP server profiles have been set up, you can pick one on the Portal Settings to be used specifically for sending out E-mail messages using the Email Process Node.
It is possible to use a (free) Gmail account that you own, as SMTP server.
If you want to use IP-whitelisting on your SMTP-server, or use an Exchange Connector to allow incoming SMTP traffic from your WEM Application, you may need to know the IP-address for the WEM Server that sends out the SMTP traffic.
For portals running in EUR zone, use [185.3.209.154] as the IP-address from which WEM is sending the emails.
For portals running in APAC zone, the outbound mail will come from [52.189.211.222].
The account-username to be used in the WEM SMTP Profile must be an active account in Office365 - you may need to specifically login to Office365 with this account as Microsoft may require this for accounts to be activated and checked with additional information - also check Multi-Factor settings that may cause issues when an application acts as non-interactive-user. This account may be setup as a non-personal account (like smtpsender@yourdomain.com).
The Office365 Account must have a valid office license with a mailbox (so you can also see the Sent Items there and useful info like non-delivery-reports).
The Office365 Account has permissions or aliases to send on behalf of all the addresses used in the FROM parameter of the email nodes in your application (like noreply@yourdomain.com).
The Office365 Account must be setup using MFA and an App Password must be created. This App Password must be used in the WEM SMTP Profile Settings. This is necessary to work around the required Multi Factor Authentication and to enable another application like your WEM Runtime Portal to login to Office365 bypassing the MFA.
A Portal is the entity that can be considered the Application, defining the look & feel and the hostname where it can be accessed.
As mentioned in , a Project can have multiple Portals. But must have at least one, so when creating any project, a Default portal is automatically created for you.
In this Summary block, you can see the following information:
Name and type of the Portal: "Default" and Website;
Home page: the starting point of the portal, defined by a specific Navigation Point which is linked to a specific Flowchart; [click]
to change to a different item, or [Ctrl+Click]
to locate in tree;
Design Template: the selected design template that defines how the portal will look; [click]
to change the selected Template or to change the specific Template Configuration
Default Language; [click]
to change the Language Settings;
Timezone setting; [click]
to change;
SMTP Mail Sending Server Setting; [click]
to change; You will get a list of available SMTP Servers to use for sending mail - these SMTP Server Profiles need to be setup in Workspace or DevOps Portal.
Staging information: date+time last published and the configured hostnames; [click]
to change;
Live information: date+time last published and the configured hostnames; [click]
to change;
Basic Portal Settings is where you can change the Name of the Portal to something more meaningful than Default.
The Home page is the Navigation item that points to the flowchart that has to be executed when a user first accesses the portal (by hostname). The Home-Navigation Item and the Home Flowchart are automatically created and set as starting point for any new created project. You do have to add at least some nodes to the Home flow (at creation it only gets a start-node).
The Design Template is the definition for how your application will look. It defines the base setup for all your pages in the project, generating the necessary HTML that browsers need to present the results to the user. The Design Template defines certain standard "containers" - blocks where standard elements like the Menu's go, what the main container is where all your own Interaction Templates will be put, the standard styling for all elements, fonts and colors.
Any WEM Design Template may support and provide specific setting-properties which you can provide custom values for in the Design Template Settings overlay.
If the available collection of Design Templates does not fit your needs, there are possibilities to get your own Custom Design Template. A WEM Design Template is a complex collection of files and definitions that have to be put together correctly. If you want to manage your own Design Templates, you need to have profound knowledge of LESS, CSS, HTML at least - but there are WEM Partners who can assist if you do not have this knowledge available.
WEM supports multiple languages. On the Project level you can define which languages you want to be enabled. Thereafter, on each Portal you indicate which of those languages is the Default language. Just select one from the available languages, or click the gear-button next to it to add more. You will see an example of the formatting for numbers, dates and times that the selected language will use when presenting these types of fields.
Then, you select an option for the strategy: should the default language always be used, do you want to follow the user's browser-settings regarding the language, or do you want to let the user actively select the language? For the latter scenario, a dropdown with all available languages (as set on project level) will be displayed in the top-row of each page.
There are other options available to allow the user change a language, or you can even allow users select a language and store it into a preferences profile. You can manage (check and set) the selected language using the appropriate process-nodes.
There are three ways to determine the time zone for end-users:
Working with the WEM Modeler is free of charge, you can create an account and start getting to learn WEM and all its features without costs (just your time). You can also start your project in Preview, to test how it will work out for end-users.
This information is important, so please read and understand it to be able to configure hostnames correctly. In the Hostname Configuration page, the documentation is also linked, so you can access it easily when you need it the most.
On the Hostname Configuration, you can see the option [Force https]
. If you enable this option, the portal will force each request to run with https (secure, encrypted using SSL/TLS). We do suggest to use this option, but you do need to activate this setting yourself.
Portals can run under multiple hostnames: they are just different addresses pointing to the same application. This is useful when you want to develop and publish early using the wem.io hostnames, and only when you are ready and have a custom hostname properly set up, add that hostname and start using the new hostname. Another practical use for multiple hostnames, is to provide one application to several different user-groups and make small differentials based on the hostname that the user uses, with the WEM Environment Function Hostname()
.
In the Add Hostname dialog we added some useful links to information about DNS and related info.
Sometimes an applications runs into an unexpected situation. For several of these situations you want to specify what needs to happen. You can do this by specifying a particular flowchart to which the application should jump when one of these unexpected situations occur. That may be simply displaying a more user-friendly error message, but could also result in executing some workflow/application functionality.
There are 3 possible Error Handlers for which you can define your own specific flow:
Page Not Found: This can happen when a user tries to access a path that does not exist (for example a miss-typed address in the browser), no navigation item with a backing flowchart can be started > then the standard Page Not Found error will be displayed. OR if the portal has not yet been published and someone tries to access the hostname. This event can be caught and by selecting your own flowchart you can provide your own page and message, or redirect the user to the starting page.
Unauthorized:
Some elements in WEM have the property [Visible When] / [Allow Access When]
, for example on navigation items and files. When an item that a user is trying to access, is not visible or available, the Unauthorized situation is triggered, and you can use this custom error handler to determine what should happen (for example, send a mail to administrator to let it be known that unauthorized access was triggered - or just show your own friendly message). This Unauthorized flow can also be used manually in your flows, when you do your own custom check on access.
Whenever a value in these Project- or Portal-Settings has been changed, you need to publish the project, in order to get the changes available in the Staging and Live runtimes.
The MyWEM portal is your personal self-service WEM portal.
Providing a collection of blocks to give you starting points for useful WEM stuff.
Documentation - to read about WEM;
Quick Starters - get your copy of a WEM-built project with some features already available to get a jumpstart or to study and expand upon;
Upcoming Events - provided by WEM and Partners to share information and experiences within the WEM Partner Eco System;
Training - free online basic training as well as hosted sessions by Training Partners (if available);
Latest Forum Posts - quickly see if there is something new (and link to the );
My Support - your latest support tickets (and link to the support feature);
Community - a link to the LinkedIn Community;
Showcase - several videos on WEM, hosted on Vimeo platform.
An overview of your projects in the Modeler, grouped by Workspace. You can filter on Workspace or search for a particular project by name. Every projects also has a direct link to open that project in the Modeler. Also some Quick Starters are made available here.
The WEM Community Forum is the place to ask questions and find answers; share your ideas and discuss topics with other WEM users. It has been promoted to its own portal and hostname: find it at .
Please read the forum guidelines as provided in an overlay before posting.
Search feature - available in top-right corner at (almost) all times (using a Lucene implementation if you'd like to know).
Favorite Threads you can keep to easily and quickly find when you need to.
Overview of Popular threads.
Additional sorting options within thread: used to be chronological only, now you can choose between oldest first, latest first or by most votes;
Action Button on each post for post-related actions like: Vote (up or down), Reply with quote, Direct message to poster.
Interactive chat, powered by Crisp Chat - to chat directly with WEM HQ.
Easy management of your personal Forum settings and subscribed categories and threads.
The WEM App Store contains WEM Projects which you can install as a copy into your workspace to start with and modify to your own needs, as well as Widgets that you can download and then import into your own Widget Library to use in Interaction Templates.
These projects and widgets are provided by WEM and Partners.
The Quick Starters are provided as example projects with some specific features worked out to study and expand upon. They also provide guidance and tips using Notes on flowcharts and Comments in templates.
Click on any of the provided Project Tiles to open a detailed overview of the project and some screenshots on what it will look like. Click on the [Install]
button to choose the target workspace where you want your own copy of the project. It may take a short while for the project to be copied and then you may find it in the Modeler and start using it.
All available training material can be found here.
The WEM Essentials Online training takes you through the basics of building an application in WEM. The training is designed for all skill levels, provides examples and is accompanied by some Starting Point projects for exercises. An experienced developer can do it in about a day, while it may take a few days for someone new to building applications - but you can do it in your own tempo at your own convenience. If at some point you stop this training and want to continue later, just come back via the MyWEM Training Page and it will take you right back to where you left the training. WEM Certification will be introduced soon. Being WEM certified will show that you are proficient at building applications with the Modeler, this will help you stand out from the crowd. WEM has Training Partners that provide Instructor Hosted Trainings. Sessions which are open to public attendance will be displayed here.
Businesses and (potential) partners who want to have a "private" training for only a limited group of their intended WEM users can get in touch with WEM through the contact page, related WEM Partner or WEM Account Manager.
WEM Essentials Classroom covers the same subjects as the Online Training, with more personal focus and interaction to go deeper into details. This training is provided by our Training Partners and can be followed online, onsite or at a training center.
The WEM Pro: Integration is a next-level training on integration features in WEM using webservices (SOAP/REST), OData, SAML and more. Basic knowledge and some experience in creating WEM projects is required.
WEM Pro: Widgets allows you to create Custom Widgets to enhance the User Experience. Javascript knowledge is required - this is the low code part.
All support issues and questions, as well as feature requests can be addressed through My Support. You can create new support tickets, get an overview of the tickets you have submitted or see the details of an existing ticket. Because we have much to share about My Support, it is available in its own page:
My Settings provides information about your WEM-account and - if applicable - your company. At the top of the screen you will find your personal information:
Click on [Edit account information]
to:
Change your personal information;
Add/change your Profile Picture;
Change the information which is displayed on the Forum when you submit posts (which can be viewed by other WEM users in the Forum);
Remove your personal information (GDPR): the action [Forget me]
will disable your account in MyWEM and the WEM Modeler, and it will replace all your personal information (email address, name, phone) with random characters. This way we make sure that your account is no longer identifiable as any personal information, while we still can uphold our required business administration.
In the next block, your company's information is displayed. If applicable - that is, your Company has some kind of business agreement with WEM - MyWEM can link co-workers together, make workspaces and projects available to co-workers within the same licensed company and include information on the license that is used by your company.
If you have the authority (proper role attached to your account in MyWEM) to manage the company's information, you can change the basic information and manage the contacts for the Company within the context of the WEM Platform. The role you need to access this information, is either 'Business', 'License', 'Technical' or 'Security'. This role can be assigned to you by any other person in the company that already has this role, or your WEM Partner (or WEM itself).
You can send us a request for a Personal Demo on WEM.
Please provide all necessary information in the form, and most importantly: let us know in the Demo Details if you have a specific case in mind and describe it a bit. That way we can prepare a specific demo addressing your case.
We will personally get in touch first to finalize any appointment.
WEM allows you to manage several kinds of Security Certificates in your project. These are certificates you typically use to either authenticate your portal to an external service, or to define whose certificates you trust and allow to access your portal.
Client Certificates: These are certificates you use to authenticate your portal to an external service. This certificate must be provided (uploaded or by using the self-signed option) including the private key, because that is the part that makes sure that the external party (who only gets the public part) can be sure that you are who you say you are.
Server Certificates: These are certificates again including the private key, which are used on a server level to indicate that the server providing the Portal can be trusted. This is also typically used when you use a Client Certificate that is provided or signed by a different server or authentication provider that may not be a global trusted Certificate Authority - in that case, providing that specific certificate including the private key, makes sure that when you use the Client Certificate - the external party can trust that Certificate because the server certificate is also provided with private key - indicating that you are you you say you are.
Trusted Clients: These are the certificates that contain only the public part of external clients, that you choose to trust, for example when they access your custom endpoints or webservices that you can make secured using Client Certificates. The external clients that you want to trust and give access, should provide the public parts of their certificates to you so you can add them to your Project. When these clients then access the endpoint of your portal that is secured with certificates, they need to use their certificate (wiprivate key) to sign the request.
Trusted Servers: These Trusted Server certificates hold the public parts of certificates that may be part of the Certificate Chain of a Trusted Client Certificate - and they also need to be trusted if they are "custom" (not on global trust lists). These are typically certificates that are used as Certificate Authority or Intermediate. In the case when a Trusted Client Certificate uses Custom Certificates in its Chain, it can only be fully trusted if all certificates in the chain are added to the Trusted Servers.
WEM offers a way to allow or deny access to your project based on the IP-address of the client trying to gain access. This is also known as Whitelisting (allow specific IP addresses) or Blacklisting (block specific IP addresses).
Each rule is checked in the order as displayed. If the order needs to be changed, select a row by clicking the left-most edge of the row and see it highlighted or indicated, then use the Move Up or Move Down buttons in the toolbar.
Each rule has the following properties:
Action: either allow or deny;
Name: the name you give the rule to identify it;
Start IP address: the starting IP-address of a possible range;
End IP address: the ending IP-address of a possible range;
if both Start and End IP are the same, that indicates that one specific IP address;
Ranges should have the same first segments and only differ in the last segment to make a correct range;
Portal: you can define for which specific portal this rule must be checked, or apply it to all portals;
Runtimes: you can define for which Runtime environments this rule must be checked: preview/staging/live, or apply it to all runtimes;
Endpoint: you can define for which Endpoint this rule must be checked: OData service endpoints, Webservice endpoints, or WEM (normal portal usage via browser).
If you want to have rules applied properly, and only the rules that you have defined, you need to add a final rule to close:
Use the Allow all remaining connections if you are using a Blacklist approach - all other rules before this one are Deny-rules.
Use the Deny all remaining connections if you are using a Whitelist approach - all other rules before this one are Allow-rules;
When these rules are set up or changed, you need to Publish the project to the targeted Runtimes for the rules to come in effect. These rules will then be applied just before the portal is actually reached.
There is also another option to specifically check the IP-address of the user trying to access your portal. In case you want to do something even more finegrained: use the function IpAddress()
in an expression. The value will be something like "123.12.12.125" in text form, so you can use any available text-based comparison function to decide what to do.
You start by creating a username and password. NOTE: the password is encrypted and not retrievable, so make sure you store it somewhere safe!
Next, you specify on which portal the access should be granted (any specific portal, or all portals).
Finally you define to which resources this login has access and which actions are allowed:
The expression editor is what comes closest to actual code in WEM. The expression editor can be used to create conditionals, make decisions, calculate values, create the logic for different components or fields, and create filters.
This is a field that is used for an expression:
The expression editor will open in a new window in the modeler as you click on the field. The new editor window is shown below.
The expression editor has a few important components. In the top right you can control the size of the editor and make it full screen or close it without saving the changes. When you change or add content in the expression editor you have to close it with the green "Ok" button so it is saved. If you choose cancel, you remove the changes and go back to the original. When closing the editor the expression is checked on its validity. If the expression is not valid, a pop up appears asking if you want to save anyway.
With the validate button your expression is checked on its validity and whether the right data types are used. When an expression is valid a green bar appears on the bottom of the editor. When an expression is found invalid a red bar will appear with the reason and the location of the failure.
The show functions toggle on the top right of the editor is where you find a library with every function, keyword and operator you can use in the editor. The functions are sorted in categories by use-case and have a dot as icon if its a value instead of a function.
When a function is selected, an explanation field appears on the bottom. Here you find the syntax of the expression with the datatype of the parameters and a short explanation of what the function does. When a function has different forms with different parameters, you can switch between versions with the arrows below the function syntax. This will give you the new syntax and a new explanation. The question mark on the right is a hyperlink to the documentation of this function, where you find a more complete explanation with examples.
You can directly use the functions from this list by double clicking them. This will place the function with syntax in the editor.
In the editor you can make comments or disable certain parts of your expressions with the use of the /*
tag. When a text or function is a comment the editor completely ignores it. To start a comment you use front slash followed by a star /*
, to end a comment you use the star first followed by the front slash */
. When you want to comment out everything from a certain point you can use just the start of comment tag without closing it.
When a field or list from the datamodel is used you can use ctrl+click to navigate directly to that field in the datamodel.
has useful information and some characteristics of a native mobile app.
The WEM modeler supports creating apps for both android and IOS. Making an app in WEM works just like an Web app, with a few different settings and different portals. When creating an app you first give your project a name and select the App as project type, after that you get the localization settings just like with a Web app.
The portal settings are the different for Apps. Instead of one default portal, you start with an Android and an IOS portal which each have their own settings. As with web application settings, the portal actions can be found in the top right corner of the portal settings canvas.
The first one portal action is "Basic settings" for both Android and IOS portals. This allows you to change the portal name and the homepage of the portal. Thereafter, you have the android app settings and the IOS app settings. Here you fill in the Application ID setting, the version setting and the Permissions the app requires.
Both portals have an app icon setting. For Android, a simple PNG picture of your preferred icon sufficient. However, for the IOS icon setting multiple files are required for different sizes of the icon. To add these icons click on the icon size you want to change and a pop up will let you select the file.
The app splash screen is the image that appears when you start up the app. This is a temporary loading screen and does not have any content. You can upload a PNG and choose the background color with hex color codes for both portals.
For now we have one master template per portal (for Android and IOS) with each their own design configuration. Just like web apps you can choose your own design, or a design from the WEM library and personalize it in the design configurations.
Certificates for works a bit different with mobile apps.
You can only manage your certificates in the security settings not in the web service tab. Mobile apps only support consuming webservices so you will only find those under the webservice tab.
Project variables work just like the web app and allows you to add variables per portal. When you add a variable, the first column represents the android portal and the second one the IOS portal.
The project configuration tab is also where you can configure the languages which your project supports. When you select the languages settings a pop up appears. There you can find the available languages and add more languages to your project.
The Storage strategy allows you to define the database strategy. That is, either all portals use the same database, or each portal has its own database. This setting cannot be changed after the project has been published.
Processes settings for the mobile app is similar to the web app processes settings, and allows you to find process nodes by searching on a process.
Different from the web app project configuration is the absence of Google Analytics, and Query string configuration in the mobile app project settings.
On the project level you manage all kinds of settings and configurations that will be available to all contained portals. These settings will be explained in more detail in the pages. Also, all other elements (flows, datamodel and more as explained in detail below) will be part of the Project and as such available to all portals that fall under this Project.
Web services and Comet ()
Templates, Widgets, Files and Hyperlinks ()
Every time you open a Flowchart or an Interaction Template, it is opened in a new tab in the main edit pane. This way you can easily switch between the various Flowcharts or Interaction Templates that you are working on. When you close a tab, all information has already been saved, unless it is an Interaction Template: if you have made changes to an Interaction Template that has not yet been saved when you close that tab, the Modeler will ask if you want to save or discard the changes (or cancel the close-action and keep the tab available and continue work). Most tabs can be closed with the (x) button, using the middle mouse button or trough the context menu. The only tab that cannot be closed is the first ‘Home’ tab. This tab is always available and shows the .
Action | Description |
---|---|
Action | Description |
---|---|
about how to set up App Password.
Using the "hamburger menu", you get access to the Portal Context Menu, to change all settings.
Read this for information about the accessibility of the Home page navigation item.
Click on the "colour palette" icon to open the list of available Design Templates. WEM provides a range of predefined Design Templates. Each of them has some (or many) additional settings to change to your needs. The[Customizable Main]
Design Template is the template with the most options you can set and modify yourself (within limits) and is becoming the most-used template of all.
For licensed customers with proper experience, WEM provides a specific tool to create and synchronize your own WEM Master Templates:
Use a specific time zone: With this option, you can select one specific time zone from the available list of ; then all times in the application are based on that time zone, and localization to end-users time zone is not useful.
Derive from client IP: This option is the default when new projects are created. With this option selected, the runtime environment will lookup the end-user's time zone based on the IP-address, using a global lookup table with known registered IP-address ranges and their known time zones. You can use the UTC time zone (and related functions) to store specific date+time values, and choose to display them as local time to the end-user based on their time zone. This approach should be used when displaying date+time values for events that are not location-bound (like an online meeting, but not for a local concert at a certain venue - that time is linked to that location specifically).
Use time zone from device: This is only available in Native Mobile Apps and can get the known time zone from the device. With this option you can also work with specific times translated to the user's local time zone.
When you want to publish your project to Staging or Live, to make your application available to your targeted end-users, you will need a License Key. This License Key is obtainable via WEM Partners or WEM HQ when an official business license has been agreed upon. Click , and fill in the form on that page to contact WEM for detailed options and prices.
Hostnames are the addresses by which your application (Portal) can be accessed. .
There is a specific post on the about this feature, as well as a .
For the option [Force https]
to work, there needs to be a valid SSL certificate in place for the hostname of the portal. When the hostname is part of the wem.io domain (*.staging.wem.io or *.live.wem.io), it works immediately because those hostnames are automatically covered by our wildcard certificates. But if you use a custom hostname, it is recommended that you first take care of the CNAME DNS setting (as described in the forum post), then go to MyWEM Support and use the [Request SSL Certificate] button to start a request for SSL certificate for your hostname. WEM uses the free Certificates, and after initial setup, this certificate will automatically renew each 3 months.
Session Expired: This can happen when a user has been active in your application, but then decides to start doing other things, keeping the browser and the application open. Web Applications are typically "disconnected" applications, and sessions are kept alive by sending messages back-and-forth (request from user to server, response from server back to user). When at some point - after the Session Timeout Value has been reached - the server does not receive another follow-up request from the user, the session is regarded as no longer active and will be discarded and disconnected by the server to free up resources for other requests. This may also be regarded as a Security Risk (if users leave their browsers open and computer active and unlocked, other people may dive in). We have a forum post about the Session Timeout Setting, . In conclusion, when this situation occurs, you can catch this using the Session Expired error handler. For example by redirect the user to the login page, or show a friendly message as to why the application is no longer active.
The Publish Process will be described further down...
WEM provides integration according to the . This way, any data that you have in staging or live runtime environment, can be made available to external applications that are able to retrieve data using OData, like Excel or BI tools. The WEM OData Logins security settings allow you to specifically define which data can be accessed with certain logins and what they can do.
Modeler | Description |
---|
More information about the expression editor functions, keywords, operators and data types can be found in our documentation on the .
To be able to deploy an Apple app you need to create Apple specific certificates and a provisioning profiles in the developer portal of Apple. In , you will find a small guide on how to get your IOS app to distribution.
Create project
Creates a new project within this workspace - starts the step-by-step wizard.
Rename
Rename the workspace
Add design template collection
Add a collection of Design Templates to make them available to the portals in the projects within the workspace. This requires a Token that can be created using the WMT tool.
SMTP settings
You can add and manage specific SMTP servers which then can be used within the Portal Settings of the Projects within this workspace. See SMTP Settings.
Manage users
Add other users (by their Modeler account-email) via Invite and manage permissions. See User Roles Scheme. On this level you can manage user's Workspace Permissions that apply to all projects in workspace.
Leave workspace
Remove yourself from the workspace. There always has to be an Owner of the workspace, so if you are the owner, you first need to change the ownership to another account before you can leave.
Delete workspace
This will mark the workspace as deleted and will make all projects unavailable in Modeler. NOTE: This will NOT remove any portal from the Runtime! The applications in the Runtime will continue to work. Read our forum post on how to take a portal offline.
Rename
Rename the project.
Manage users
Add other users (by their Modeler account-email) via Invite and manage permissions. See User Roles Scheme. This will affect the users' permissions on specific project level (workspace-level permissions supersede).
Grant Support Access
With this option you can grant access to WEM Support, to allow WEM Support team members to access your project and all its assets. See allow support access.
Copy Project
This action creates a new Project (you provide a name) within the same Workspace. It will then copy all assets in the source project. This option is often used to manually create a backup (point-in-time snapshot) of a project during ongoing development so you can look back to see what was done before major changes were done. It is also often used to branch-off a base functional project and expand upon as a new main project. NOTE: you can not copy and move parts of an existing project into another project. You can only copy one complete project and then the copy is a separate project - no active links to the source.
Move project to workspace
To move a project from current workspace to another workspace. You need admin permissions on both workspaces to be able to execute the move. It is not possible to move projects with custom widgets. Read more in this forum post.
Leave project
To remove yourself from this project. This can only be done if you are not a user on the Workspace level.
Delete project
This will mark the project as deleted and will make it unavailable to all users in WEM Modeler. NOTE: This will NOT remove any portal from the Runtime! The applications in the Runtime will continue to work. Read our forum post on how to take a portal offline.
This is text without a function in the editor and will not be recognized. |
This is text with double quotes around it. This can be used for labels. |
This is a data model field. The square brackets are used to classify it as data-field. Data-fields can be dragged onto the editor if you want to use the field in the expression. Furthermore, you can locate a field in the datamodel from the expression editor through a Ctrl-click on the text in the editor. |
This is a concept field., which can be recognized by the single quotes. In the text, the parent is the first single quoted word and child the second, separated by a period. |
Functions are shown in blue. Its syntax and parameters is in parentheses, when you add the function trough the function library. |
There are also values which are static. You can find these in the function lists, and will be shown in grey in the editor. |
Keywords are also shown in blue (same as functions). The parameters are shown in black text when the keyword is added from the library. |
Operators are black. The parameters are shown in black text when the operator is added from the library. |
The end node signals the end of the flowchart. When the end node is reached, the application will return to the spot where the current flowchart was started. Usually this means an interaction node that contains a button that started the flowchart or it continues in the previous flowchart.
Most flowcharts will contain 1 end node but it is not required. A flowchart can end in an interaction node with no exits rendering an end node not necessary. A flowchart can also contain multiple end nodes. A flowchart that does not end in an interaction node or a End node will produce an error.
The properties pane of the end node contains only 1 field: the name of the node. The default name is ‘End’. Usually the default name is sufficient but it can be changed if needed. This is especially usefull if multiple end nodes in one flowchart are used.
In the example below 2 End nodes are added to the flowchart. When this flowchart is triggered from an interaction node it doesn't matter which End node is reached. In both scenarios it will return to the interaction node. If this flowchart is used as a sub-flowchart in another flowchart it will have 2 possible exits. 1 called "Save" and 1 called "Cancel"
When the flowchart reaches the navigation node, the application will open the specified navigation point and continue from there.
There are no exits and there is only one property: the Name. The name is the specified Navigation Point and cannot be changed in the flowchart. To learn more about Navigation Points, read the specific article on Navigation.
Important to keep in mind for the security of your applications is that navigation nodes bypass a navigation items visible when property. A decision node with the same expression as the navigation point can be used to reinstate the pages access protection.
Best practice: Use the visible when property only for controlling who can see menu items, and manage access control at the start of your flowchart. Using a calculated field in a decision node, as shown in the image below, is the most effective way to protect certain flowcharts from unauthorized access.
When a user has the correct authorizations, they will continue through the normal flow via the "yes" exit, while unauthorized users will be sent to the unauthorized flow.
The user interaction node is used when there is an interaction with the user. These nodes translate into forms or pages where a wide range of user interaction components can be used (forms, lists, buttons, images, charts, etc.).
The properties are accessed by selecting the node. The properties of the selected node are shown in the properties pane on the right hand side of the screen.
The Edit template
button at the bottom of the properties form works the same as double-clicking the node: it opens the user interaction template editor.
The editor is where you create the form / interaction that is needed to communicate with users of the application. This editor is also referred to as the "template editor". This template editor has to many features to explain in this chapter. Therefore a seperate section in this documentation is dedicated to the template editor.
A sub-flowchart makes it possible to use a flowchart in a flowchart. When the sub-flowchart node in a flowchart is reached, the flowchart that is defined as sub-flowchart will start. Any flowchart can be used as a sub-flowchart. This allows you to create and use flowcharts as reusable functions that can be used in multiple other flowcharts.
When you drag and drop a flowchart node from the toolbar to the canvas, WEM shows a popup window that allowes you to select an existing flowchart to be added as a sub-flowchart. It is also possible to drag and drop a flowchart directly from the flowchart tab to the canvas.
A sub-flowchart node has no properties. The property panel on the right does provide some information on the name of the flowchart and which exits it contains.
Sub-flowcharts can have multiple exits. Every End node in a (sub-)flowchart is also an exit of that (sub-)flowchart.
This is the place to change your project's name.
The Project Variables section allows you to define your own Setting fields. Then, within each Portal you can give this Setting its own Portal-related value.
The Value you give Setting fields for each portal, can be retrieved in the logic of your project using an expression with the function Setting("fieldname")
, which at that point will yield the value for the active portal.
TIP: The project variables are text-only and usages can not be found easily.
With the introduction of Calculated Fields it is better to use that option for settings, because then you can use specifically typed fields (text, date-time, numeric etc) and with Find Usages see where they are used. Use the expression-function PortalId() to distinguish settings per portal and use a default value for all portals that are not specifically mentioned.
So in a way a Project Variable is a variable setting you can define yourself, to hold a value per portal within the project. Its type is always text, and its value is read-only within the logic of the project.
To remove a Project Variable (and all its Portal-level values), click to the left edge of the item to select it and make [x Delete]
button becomes available. Then click on the [x Delete]
button to remove the project variable.
Portals within a project can either share the data (in the Runtime) or have each their own separated storage.
If the various portals in a project all need their own data and/or prevent users from the other portals to access the data (like with a multi-tenant solution), you should choose to separate the databases (each portal its own storage). On the other hand, if the users of the various portals can or even must share the data, you share the database (this is the default setting when creating a new project).
NOTE: you can only specify the storage strategy (shared or separate), at the time when you create the project or shortly thereafter.
This setting cannot be changed once the project is previewed or published - because either of those actions will create the database container based on the chosen strategy - and, once the container has been created, it cannot be changed.
Here you can add and manage languages to be available in your project.
An overlay shows the languages already in your project and a button to add more.
Clicking [+ Add Language]
shows another screen with a dropdown of available languages and a formatting example of the selected option.
If you hover over an already available language, an [x]
button appears on the right. Click that [x]
to remove the language from the list of available languages.
This part allows you to make changes to certain Project Features. This is introduced to support specific features available to WEM Kubernetes Runtimes (mostly Private Clouds), but which are not yet available on the standard shared clouds for EUR and APAC - also known as Legacy Features.
When you create navigation items, a path will be created using the name of the navigation item that will be added to the staging and live hostnames, so it can be used as a direct link to that specific navigation item. Navigation Items can be nested to a few levels, and the "old - legacy" way to generate URL Paths is "absolute", where only one path-level was created - a combination of hostname + navigation item name, without using the other levels. The new way, which is also standard for new projects, is to create relative paths, which creates several levels. Changing this setting for old projects (and then publish to Runtimes) may cause previously used links to stop working as their paths may have changed - so be careful when changing this setting.
Kubernetes Runtimes only!
From the beginning, Navigation Items added to the Menus in WEM are generated using HTTP POST requests to work properly with WEM User Sessions. The new Kubernetes-powered WEM Runtime can now also support GET requests for Navigation Items, from within the menus. But - this also requires to activate the new "automatic" Session Folder - as the GET requests need this specific Session Folder to keep connected to the user session.
Kubernetes Runtimes only!
This Session Folder Setting is only available when there is no WEM-Session folder created yet. Once this setting is activated, the Session Folder will be created and that action can not be undone (though you can choose not to put fields into that folder). This Project Feature will not be visible anymore when the Session Folder is created.
If your project already has a folder with the same name ("Session") - this folder will either be renamed to "Session Version" or you will be presented with a warning and asked to change its name.
The technical workings of this Session Folder is explained in more detail on the following page:
Query string parameters are name+value pairs added to the URL (https://en.wikipedia.org/wiki/URL) in the browser address bar (or to a link you click on) after the questionmark [?]
indicating the end of the path and the start of the parameters. Check this wiki for information.
Let's look at this URL:
http://yourportal.live.wem.io/queryparam?
uid
=admin&
action
=resetpw
This URL contains two parameters: uid
and action
. The values are associated (passed) with the parameters you may want to use in your project.
Using the Project Configuration for Query String Parameters, you can define which parameters your project expects and to which fields in the Project's Data model the values are mapped. These can only be fields of type Text and may not be part of a list (because at the point of mapping from the request, there cannot be an active row on that list to put the values in).
Any parameter that is provided in the URL, but not defined as parameter in the WEM Project, will be ignored.
When the parameters are mapped to fields in the Data model, you can use these fields in your expressions and flows (and be smart to check if they have a value when you do - using the HasValue()
function).
Query string Parameters can also be defined on specific Navigation Items (that have a URL-path defined and a deeplink with a flowchart linked) - of course via the context-menu on the navigation item.
The difference between the Parameters on Project level and the Navigation Item level, is that the Parameters on Project level can be used with every path within the Portal. The Parameters defined on a specific Navigation Item will only work when they are combined with the specific path of that navigation item, and then only in the Flowchart linked to this navigation item; not anywhere else.
WEM used to support an old version of Google Analytics. This was the basic version of Google Analytics (not the more advanced AdWords or other features). For information about GA, visit support.google.com. This setting is still available for old projects that have not yet migrated to newer versions.
This implementation for Google Analytics will no longer be supported by Google from July 2024!
A better approach - if you want to support the latest Google Analytics - is to use a Design Template that has the support for the current Google Analytics (or Tag Manager) embedded with a parameterized property for the Google Account ID.
The Design Template Customizable Main has this feature available (it is the only Design Template with this option), so if you use that Design Template, set the Google - Enable Tag Manager
option to true (or based on hostname or other situations) and set the Google - Tag ID
value accordingly.
If you want to use this feature in your own Custom Design Template, use the WMT tool to get a copy of the Customizable Main template to see the implementation and implement it into your own Custom Template. You will need the correct script to insert from Google, depending on your chosen service from Google Analytics. Use the example in the Customizable Main file mastertemplate.bwmt
to see the proper way to make the parameters for the script itself and the Google Account ID.
An example:
The Flowcharts area of the WEM Modeler is where you model the way your application should work. Here you define the workflows, processes and all other functionality that make up your application. This also includes the use of user interaction screens (the screens or pages that are the application to its users).
When you look at the flowcharts of a new project, you will always find the default Home
flowchart. This is the starting point for your project. When you create a new flowchart, you can choose between two types of flowcharts:
Regular flowchart: These are the flowcharts that can include user interaction (forms, pages, overlays, etc.). Most of the flowcharts are regular flowcharts.
Action flowchart: When a flowchart is needed that does not require any user interaction (e.g. a calculation, some background process that needs to run, etc.), you use an action flowchart. If your action flowchart contains sub-flowcharts there can not be any user interaction in one of the sub-flowcharts. In some situations, for example exposing webservice functionality, you can ONLY use action flowcharts. Action flowcharts can be distinguised from regular flowcharts by the lightning bolt in the icon.
Flowcharts can be organized in folders. When you have a small application with just a few flowcharts this is probably not necessary. But when you have an application that consists of hundreds (or even thousands) of flowcharts, it is important to have a structured list of folders to organize flowcharts. The way you want to organize flowcharts is up to you, there are no restrictions on the WEM Modeler side. Below is an example of flowcharts that have been organized in multiple folders.
When you select a flowchart or map you can see three dots appear. When you click the dots or right click a flowchart or folder the context menu appears.
When you open the context menu on a folder you will get the menu in the left picture. Here you can choose to make a new flowchart or a new folder to be placed in the selected folder.
On the right you see the menu when a flowchart is selected. From there you can open flowcharts, Open a preview of just one flowchart or copy a complete flowchart inside your project. It is not possible to copy flowcharts to other projects.
Both of them give you the option to rename your flowchart, delete it or find its usages. Renaming it will change the name in your whole project without breaking its functions.
The Find usages option is a useful tool to quickly see where a certain flowchart is used.
When you open a flowchart, you see the canvas on which you will draw the actual workflow. It contains a toolbar (top), the Nodes-toolbar (left) and the Properties and Exits pane on the right (when a node is selected).
Working in the editor mainly consists of drag-and-drop actions with nodes and exits or arrows. Nodes can be selected from the Nodes-toolbar and dragged onto the editor pane. Nodes are connected with exits or arrows by either dragging arrows from one node to the other when you press and hold the ctrl-key, or from the edge of a node to the other without the ctrl-key. What these nodes and exits represent will be addressed later in this section.
Moving on the flowchart editor pane can be done in several ways. Zooming in and out can be done via the buttons in the toolbar at the top of the editor, or through scrolling with your mouse or track-pad. Zooming focus is determined by the location of the mouse on the editor pane. Furthermore, you can move the pane with drag-and-drop when you click and hold the space bar. This allows you to move around your flowchart without zooming.
Flowcharts are the heart of your applications. With flowcharts you model the way your application works:
Model your business process(es)
Model the flow of your application
Create the User Interaction (forms, pages, overlays)
Integrate with external systems
Etc.
Creating a flowchart is pretty straightforward: You select flowchart nodes from the toolbar on the left side of the canvas and drag them onto the canvas. WEM also allows you to add nodes by selecting various elements from the Project Resources pane on the left of the screen. By connecting the various nodes you create a certain flow: you basically tell the system what should happen in what order. Every node is used for a specific action, like showing a form or retrieving data from an external system. With a node exit, you tell the system what to do next. This way you can use the WEM Modeler to graphically model your application.
In the example above we are adding a new case type, as part of a case management system. The steps:
The flow always starts with the Start
node;
The next step is to add a new row in the Case Type list, using the List action node
, where the selected action is "Add row";
After creation of the new row, the user is presented with a form to enter the specific Case Type information. This is done using an Interaction node
;
In the form the user has two options: save all the information or cancel the addition of a new Case Type. Both options are visible in the flowchart.
When the user wants to save the new Case Type, the Save database list changes node
is executed, and when this node exits, the flowchart also exits by pointing to the End node
;
When the user decides to cancel the addition of a new Case Type, theDiscard all database list changes node
is executed. When this node exits, the flowchart also exits by pointing to the End
node;
The example above is a very simple flowchart that shows how the different flowchart nodes can be combined to model a certain function. In this example the addition of a new Case Type.
You can delete nodes by selecting them and using the delete key, this will immediately delete the node from the flowchart. When deleting an interaction node or when you have multiple nodes selected you are asked for confirmation. Make sure you have the right nodes selected, there is no way back.
An important concept in flowcharts are the ‘Exits’. An exit is one of the possible ways a node can exit and is depicted by the arrows on the flowchart that connect the nodes. For example, a ‘Save’ button on a form can be an exit of a User Interaction node; information is stored and the form is closed.
Nodes can have multiple exits, depending on what happens within that node. In the example above there are two exits for the ‘New Case Type’ Interaction Node: Save and Cancel, which both refer to buttons on the form. When no specific exits are defined, the ‘Default exit’ is available.
An exit not only specifies how you can exit a node, but is also used to create your workflow. Every exit can be connected to another node and thus creating a certain workflow. When you model your application, but forget to specify an exit for a certain node, the application will show an error message because it is not clear what should happen. The only exception is the ‘End’ node. When this node is entered, the flowchart has completed and the application returns to the spot where this flowchart started.
Exits on an Interaction Node can have the option activated. It is off by default.
The effect of this option, should be understood as follows:
It cancels any and all changes made within the context of the Interaction Node and those actions leading up to the Interaction Node, starting from the latest "commit-to-server" action, like a [Save All Database Changes]
listnode or a [Confirm Session Changes]
processnode.
It ignores any input changes made by users and prevents any Validation to occur on those input changes.
This also includes actions like Add Row to a list just before the Interaction Node, and setting field values for that new row in the Interaction Node.
The feature to Ignore User Input is typically used with exits that provide the [Cancel]
feature for users. But it does more than just "ignore user input" (the values a user has entered in form or input fields) and prevent validation on these fields.
If you are working on a multi-step process where records should be created and certain steps in the process should be able to be skipped by the user, you should NOT use the Ignore Option on exits within these steps, but rather you should move all necessary validations towards the end of the process and return user to the step to be remedied.
We will improve the visibility of this setting in future, because at this moment it is a bit obscure (in the past, there were more options available at this point, which have been replaced by options in the Template Editor).
On the left-hand side of the flowchart editor canvas, you find all the available nodes that you can use to create the flowchart and functionality you need. Simple drag and drop nodes on the canvas, and draw lines between the nodes to create the flow that is needed. The following nodes are available:
All support issues and questions, as well as feature requests can be addressed through My Support. You can create new support tickets, get an overview of the tickets you have submitted or see the details of an existing ticket.
Support staff does NOT have access to your project, so if it is necessary to investigate your project in the Modeler, you should provide access to Support.
My Support is the main self-service environment for your specific issues in WEM. The Forum is a close second, although you will use the Forum for more generic questions and discussions with all WEM users, while you will use the Support for help with project-specific Modeling problems or occurring error messages.
There are buttons for Special Tickets - please use these buttons if your situation matches its purpose - because they will start specific flows to make things easy.
... check following blocks ...
Received a 500 Internal Server Error message?
Got a message like this? Select and copy the Error ID value!
Click button [Check Server 500 Error Code]
and paste the Error ID to pre-fill a ticket with all relevant information, then enter information how you got to this point.
Please provide the error code in plain text in the appropriate field, because that will be used by the system to retrieve the technical information from the logging service. A screenshot of this code like above is in absolutely no way useful!
SSL Certificate needed?
When you have your own hostname (not ending in .wem.io) and you want to run it in secure https:
Check This Forum Post
Click the [Request SSL Certificate]
button to start the SSL Certificate Request procedure.
When you create a new ticket you are requested to fill in information in specific fields.
The more specific and complete the provided information is, the better the Support Team will be able to help. So make sure you read the tips and provide correct and complete information, as much as may be needed for Support to understand your situation (be aware that support staff may not know your project or business, so detailed information and specific steps may help a lot).
To create a new ticket, hit the [Create a new ticket]
button.
Select the Element for which you want to create a ticket. An element is a specific part of the WEM Platform and gives the Support Team the first clue to where the issue may be (can be used to assign it quickly to the designated specialists if applicable).
Generic: a no matter what, anything fits, I don't know where else to put it choice;
my.WEM.io: for issues related to MyWEM;
Modeler: for issues with the Modeler itself;
License Key: for questions about requiring, changing or extending a license key to publish >> please use the special [License Key Request]
button;
Workspace, Project or Portal: for issues with one of your specific project (or workspace or portal);
URL: for issues regarding a specific url (web-address);
SSL Certificate: for issues regarding SSL certificates to have your portal running in secure https; for new custom SSL certificates please use the special [Request SSL Certificate]
button;
Native Mobile, Android or iOS: for issues regarding native mobile apps development in WEM;
To help Support Staff to handle your ticket better and faster, please provide as much relevant information as possible. When applicable, be sure to provide:
Your WEM project name or id - information can be found in the [i] tab.
Particularly the node id will enable Support to quickly find the specific situation. The node id can be found in the flowchart editor, in the top-right corner, when a specific node is selected and its properties are displayed.
Next give a meaningful subject, short description or title for easy reference of the issue or question in the Subject field - this will be displayed in the list of tickets. Then select the ticket type. You can choose one of the following:
Bug – wrong behavior
Bug – error message
Feature request
Network issue
Question
Complaint
Data Breach
Once all the information "about the issue" has been provided, you can write a more elaborate description of the issue:
You can attach files to a ticket with screenshots to help clarify the situation.
When you’re done, hit the [Submit]
button and the ticket is created. You will receive an email confirming the new ticket and Support Staff will be notified.
The system automatically takes you back to the ticket overview, where you can open your tickets to check the status, or add information (only for tickets that are open and have not yet been assigned to a member of the Support staff).
The process of handling tickets, may go through several stages, which is depicted with the Status (in the list and the details). The most important stages are:
New: you've just created the issue, support staff is notified;
Assigned: support staff has assigned the issue to a specific staff member;
Status Update: support staff has made changes, which can be read in the history of the ticket details;
Needs more info: support staff needs more information from you, the requested information will be in the history section of the ticket details;
Ready for Review: support staff provided information for you to review;
Resolved: support staff deems issue to be resolved, which may also be by having explained a specific situation or provided information to help you take the appropriate actions to remedy the issue.
When the status of a ticket is set to Resolved, the ticket is hidden from the list of active tickets. You can then close the ticket if you agree to the provided resolution, workaround or information. If you still need help on the same issue, you may Decline the proposed solution and add additional information why you declined, so the ticket will re-appear in the list of active tickets.
The clear session node is used to delete the current session and all related states (temporary data, flowchart stack, view state, comet listeners, et cetera). When a session is cleared, it will redirect you to the home page where it will create a new empty session. You can also specify another navigation item to return to.
The clear session node is an important safety measure that should, for example, be used in a log-out flowchart. This will make the logout permanent and prevents someone from returning to a logged in session by using the browsers back button.
The loop node makes it possible to loop through all the rows in a list or a multi-select field. When a loop node is dragged onto the canvas, a popup appears where you can select the list or multi-select field over which we need to loop.
When the node is selected the following properties can be specified:
A loop node has two different exits:
Next row
When a new row has been reached, the node exits with the Next row
exit. In the flowchart the user has to make sure to return to the loop node, in order to loop over the remaining rows.
End of loop
When all rows have been looped over, the node exits with the End of loop
exit.
The list node is used to work with lists. When a list node is reached an action can be performed on the list defined by the list node.
When a list node is created, WEM presents a popup where the list for which the action should take place is selected:
The properties and exits of a list node depend on the type of action that should be performed. The property table below presents all options:
The assignment node is used to assign a value to an item, like a data field, or an input field of a webservice. When the flowchart reaches the assignment node, that value will be set.
Starting from June 27 2022, the Assignment Node can be used to make assignments to multiple fields. This allows you to make multiple assignment very fast and easy and your Flowchart less cramped with all the assignment nodes when you need to update all fields from a list (for example).
When the node is added to the flowchart, the following popup appears:
From this popup you select the (writable) fields for which a value needs to be assigned and click the ok button.
It is also possible to add an Assignment Node to the canvas by dragging one or more (writable) fields from the Data Model to the canvas and selection the "Assignment" option.
When the assignment node on the canvas is selected the properties pane becomes visible on the right side of the screen. Through the assignment node properties pane a value can be assigned. Assigning a field from the Data Model can be done by selecting the "Advanced" action and dragging the required field in the expression editor. There is also an easier way that works by dragging the field directly from the Project resources pane and dropping it on the Action dropdown. This will change the Action to Advanced and sets the Expression to the dropped Field (its technical name).
The properties pane consist of the following elements:
When multiple fields are selected (or added later) to the Assignment node, each field gets its own Assignment Action in this overlay. The overlay is accessible via the button [Edit Assignments] in the property pane or by double-clicking on the Assignment Node (when it contains multiple assignments). The actions and operands are the same as per single assignment node, specific to each fields data type.
The order in which these assignments are displayed is important! It reflects also the order in which the assignments are executed. So you can actually assign a value to a field which then can be used in the assignment expressions in next fields. Use the buttons Move up and Move down to change the order of assignments. The assignment node itself cannot validate the order - you need to make sure the order is correct.
The list of actions that can be selected in the dropdown depends on which type of field is assigned. Almost all actions are very easy to understand based on the action name. In the overview below only the most common and most used are mentioned or those that could use some explanation. Add assignment nodes for different field types to the canvas to see all the possibilities.
When dragging and dropping a field to the Operand column the Action of that row is changed to the Advanced... option even when there is no input field shown. Fields that are non writable will be showing a red box in the drop-zone.
When the save database changes node is reached, all changes to all database lists that have not yet been saved, are saved.
This node has only 1 property, the Name. The value is set by WEM and cannot be changed by the user. The value is Save all database list changes
.
There is also only 1 exit: Changes saved exit
.
When the Discard database changes node is reached, all changes to all database lists that have not yet been saved, are discarded.
This node has only 1 property, the Name. The value is set by WEM and cannot be changed by the user. The value is Discard all database list changes
There is also only 1 exit: Changes discarded
.
The decision node is a very powerfull node that can be used to model bussiness rules in your application. In the decision node a certain condition is specified by using the WEM expression builder. When a flowchart reaches the decision node, the condition is evaluated and based on the outcome (the exit) the flowchart will take a certain route.
The properties pane of the decision node has only 2 elements: The Expression and a list of the available exits. Therefore it is easy to overlook the versatility of the decision node.
In the expression field it is possible to create incredibly complex statements combining multiple different expressions (like If Then Else, Choose, AND, OR). Allowing the evaluation of complex business rules.
Decision nodes have several exits, based on what the decision node needs to evaluate. Most people will only use a decision node which evaluates to True or False. However WEM also allowes decision nodes that evaluates to all other Data types. If the Data Type that the decision node returns is Text, Concept or Number, a button appears that allows you to create multiple exits. This opens a lot of possibilities. Some examples are given further down this chapter.
In the table below the most common exits are listed. Not all exits are available for every Data Type.
Users have a tendency to only choose the exits that apply in the scenarios they expect. For example in a decision node with a boolean Data type only the Yes and No exits are used. Therefore the default exit is often times overlooked. In reality there are often edge cases that cause an error because the none of the exits used is suitable. Therefore it is advisory to always use the Default exit.
In the example below a decision node is used to evaluate if the user role of the current user is equal to administrator. If Yes then the user should be guided to an administrator screen. If No then the user needs to be guided to the main screen. In this scenario using the Yes and No exit would probably work just fine. But maybe a situation can arise where the expression can't be evaluated. In that case the user would see an error. To prevent that it is better to use the "Default exit" exit instead of the "No" exit.
[Authentication.Session.Refcurrentuser] -> [Authentication.Users.Role] = 'Role'.'Admin'
When a list of Languages is made available in the Project level, you can set the language strategy (default language and how to select) on each portal. In the Multilanguage Dictionary tab, you can add specific labels and translations for each available language. When you remove a language, all translation items in the Dictionary for that language will also be removed.
WEM provides certain special features that perform combined, complex or specific actions by these Processes. In this overlay you can see the list of all available processes, a short description of their purpose, and a button to find their usages. These processes can be used on Flowcharts, using the Process Node. This will be explained in more detail later. The [Send Email]
and [Generate PDF document]
are probably the most used Processes.
Icon | Description |
---|---|
Property | Description |
---|
Action | Datafield Type | Description |
---|
Item
Description
Name
Enter the name of the user interaction node This name also appears beneath the node on the flowchart canvas.
Default button exit
This dropdown list shows al defined button exits for this user interaction. When selected, this exit will be used when the user hits the 'enter' anywhere on the page. It is possible that this feature is disabled in the design template. This feature can also be enabled by using the "SetEnterKeyAction" widget.
Show as overlay
When this checkbox is checked, the user interaction is shown as an overlay. An overlay is a form that resides on top of you application (like a popup). You cannot access the rest of the application without closing the overlay.
Exits
These are the exits that are triggered by a button in the user interaction form itself (e.g. `Save` or `Cancel`). Whenever a button is added to the interaction node with a "Follow exit" event an exit is added to this list. Another option is adding an exit via the "New button exit" button. Exits added using this method will be visible when a button is dragged to the Template editor canvas.
Event Flowcharts
This is only visible if the interaction template contains buttons that Execute a flowchart
Toolbar button
Description
Preview
Starts this flowchart in preview.
Breakpoint
Puts a breakpoint on selected node (a condition can be added) - application will stop here in preview-mode.
Find usages
Find out where this flowchart is used.
Cut
When one or more nodes are selected, this will cut them out of current flowchart and you can paste them on another flowchart. After paste-action, nodes will be deleted from current flowchart.
Copy
When one or more nodes are selected, this will copy the selection and you can paste them on the same or on another flowchart.
Paste
When one or more nodes are selected and Cut or Copied, this will paste them on the current flowchart.
100%
This will reset the view of the flowchart to 100% and centered.
Zoom in
Zoom in on the flowchart (see less nodes but bigger).
Zoom out
Zoom out of the flowchart (see more nodes but smaller).
Item | Description |
Data List | This is the list or field that is used for the loop. This property is set by WEM and cannot be changed. |
Loop over rows that match | Specify over which rows we need to loop. There are two possibilities: 1. All rows in the list or field 2. A selection of rows that match a certain condition. This condition can be specified using the WEM Expression Editor |
Edit loop order | It is possible to create an expression that defines the order in which the application should loop over the rows. You can do this by clicking the |
Item | Description | Exits |
Name | This is set to the action that is performed on the specified list. This property is set by WEM and cannot be changed. | N/A |
Action | Add Row This adds a new row in the specified list | Default exit |
Delete current row Deletes the current row of the list that is specified | Default exit |
Delete multiple rows This deletes multiple rows of a list. This property requires a second property: Delete rows that match Two possibilities: 1. Delete all rows of the list (this is the default value) 2. Specify the rows to delete by building an expression with the WEM expression builder | Default exit |
Goto first row… Go to the first row that matches a certain condition. When this option is used, a second property is required: Goto first row that matches Two possibilities: 1. The first row that was added to the list 2. Specify the first row using an expression. When this action is selected, there is also the possibility to create an expression that defines the order of the rows in the list. You can do this by clicking the | Default exit |
Goto last row… Go to the last row that matches a certain condition. When this option is used, a second property is required: Goto last row that matches Two possibilities: 1. The last row that was added to the list 2. Specify the last row using an expression When this action is selected, there is also the possibility to create an expression that define the order of the rows in the list. You can do this by clicking the | Default exit |
Goto next row… Go to the next row that matches a certain condition. When this option is used, a second property is required: Goto next row that matches Specify the next row using an expression. When this action is selected, there is also the possibility to create an expression that defines the order of the rows in the list. You can do this by clicking the | Default exit |
Goto previous row… Go to the previous row that matches a certain condition. When this option is used, a second property is required: Goto previous row that matches Specify the previous row using an expression. When this action is selected, there is also the possibility to create an expression that defines the order of the rows in the list. You can do this by clicking the | Default exit |
Reset row position This action clears the row position, so no row is selected after this action | Default exit |
Data field (single assignment) | A hyperlink is shown with the name of the field. Clicking it will make the Project resources pane jump to the corresponding field. This is only available when only 1 field is used as the target for the assignment. |
Name | When the Assignment Node contains assignments for more fields, you can set a custom name for the Node, like "Setting values for all User Fields". If you leave this Name field empty, the Node name will display as "Assignment: x fields" where x is the number of fields to be assigned. |
Action | The action dropdown is used to define which action needs to be performed. The contents of the action dropdown depends on what type of datafield is selected. More information on the possible actions can be found further down this article. |
Operand/Expression | This name of this input field and if it is visible depends on which action is selected and which type of field is assigned by this node. Try selecting various actions in different assignment nodes to see what happens. |
Assign more fields | Using this button allows you to add more fields into the assignment list - in an overlay. |
Edit assignments | When the Assignment Node has multiple assignments, these can be managed in an overlay - click on this button [Edit assignments] to show that overlay. The number of assignments is displayed below the button. |
Exits | The assignment node has only 2 possible exits. The default exit is followed when the value is assigned. This exit should always be connected to a next node. The error exit is followed when the assignment node is not able to perform the assignment. The error exit in this node is rarely used because an error in this node is rarely acceptable in a working application. |
Clear value | All | This action is used to clear a data field of its value. |
Advanced | All | Gives you the ability to assigned a value set by an expression. The expression needs to match the Data type of the Data field. |
Set to current row | Reference | This action is used to assign the rowid of the active row of the list the field is referencing to. |
New value | (Rich) Text Number Concept | Assign a static new value to a (rich) Text field, a Number field or a Single Select Concept field. |
Append value | (Rich) Text | append a value to a textfield (add characters to existing value) |
No | Boolean/YesNo | Set a yes/no field to no (false) |
Yes | Boolean/YesNo | Set a yes/no field to yes (true) |
Switch | Boolean/YesNo | Switch a YesNo field (yes becomes no, no becomes yes, unknown stays unknown) |
Move days/months/weeks/years | Date time | Moves the date of the in the datafield with the number specified in the Operand. Adding a "-" before the number will move the date to the past. |
Current date (and time) | Date time | This action sets the current date to the datafield. If the "and time" is selected the time is also added. If not the time is set to 00:00 on that date. If the UTC option is selected a UTC time is selected. If not the date and time depends on the selected timezone. |
Add, Divide, Multiply, Subtract | Number | Directly add/divide/multiply/subtract with specific static value |
New value in ... | Duration | Sets a duration value in seconds, minutes, hours or days with a static numeric value |
Add ... | Duration | Adds a statuc numeric value in seconds, minutes, hours or days to a Duration |
Add/Remove/Replace concepts | Multi-Select (concept set) | Uses static concept values to be added/removed/replaced on a multi-select concept set. |
Exit | Description |
Default exit | When none of the other exits apply, this is the exit that is used. The Default exit is always available. |
Unknown value | This is the exit when the condition returns no value. This exit is always available. |
HasValue | This is the exit van the data field contains a value. This exit is available for a limited set of Data types. |
Yes | This is the exit when the condition evaluates to ‘true’. This exit is only available when the return Data Type is boolean. |
No | This is the exit when the condition evaluates to ‘false’. This exit is only available when the return Data Type is boolean. |
In this page we go over all the different processes you can do with the process node
The process nodes are distributed into 3 categories. Some processes change the settings of your project, confirm changes or affect flowchart flows, there can be found in the change settings category.
Other processes change files or change how documents work or change the document types. These can be found in the changing files categories.
Generate files is reserved for processes that generates new files or components for your project. Here you can find processes that; generate images, sends emails and much more.
The different processes:
Change language
Change timezone
Confirm session changes
Sleep
Redirect
Web request**
Resize Image
Flatten CSV document
Extract text from document
Rename file
Create data matrix
Generate Word document
Generate PDF document
Generate file from text
Generate Image
Generate HTML from rich text
Create QR code
Create ZIP archive
Coming soon or Deprecated:
Send email*
Print template*
Write template to rich text field*
"*" Under construction will soon be available
"**" Legacy process, check the Web services page.
A collection of nodes to provide Async Task features
The Async Tasks feature is currently being developed for a future Feature Release (3.14) and not yet available.
The Async Tasks feature will only available in the WEM Kubernetes Private Cloud Runtime (not on current Shared Cloud for EUR/APAC zones).
When released, we will be able to add some screenshots and further information if needed.
With the async task nodes you can run tasks in a background process. Async Tasks can be started, stopped and monitored with specific nodes. This can be useful if you want to start long running tasks without having to wait for them to finish. Users can continue their processes and work while the Async Tasks work in the background.
Use this node to start a task created in the project as a background process. Every process has a unique job ID that can be stored in a text dossier item to be used later.
Properties
(Optional) Store job instance ID: Text dossier item to store the ID.
(Optional) Task arguments: A list of optional arguments that can be provided as input for the task. The parameters are declared in the input folder under the task.
Exits
Task queued: The task has been queued to run anytime now.
Task queue limit reached: The task has not been queued because the limit has been reached.
Use this node to stop a running task with a specific ID.
Properties
(Required) Job instance ID: Stop running task with this ID.
Exits
Default exit: Task has been successful stopped.
Error: An error occurred whilst stopping the task.
Use this node to retrieve the status of a running task on demand.
Properties
(Required) Job instance ID: The running task instance ID to retrieve the status from.
Store status: Text dossier item to store general status information.
Store feedback: Text dossier item to store custom feedback from the running task. For more information see the Task feedback node.
Store error: Text dossier item to store general error information.
Exits
Task queued: Task has been queued to run later.
Task running: Task is running.
Task stopped: Task has been stopped.
Task stopping: Task is in the process to be stopped.
Task error: Task has an error.
Task completed: Task is completed.
Task not found: Task has not been found.
Default exit: The exit when other exits are not handled.
Store any information of this running task instance to be read from other WEM runtime sessions.
Properties
Feedback expressions: The shared information to stored.
Append feedback: Should the extra information be appended?
Is a dossier folder of parameters for the current task. The arguments are given by the Start task node. Note that no lists or calculated fields can be created as input parameter.
The user interaction node is used wherever there is interaction with the user. These nodes translate into pages where a wide range of user interaction components can be used (forms, lists, buttons, images, charts, etc.).
When an end node is reached it means that this flowchart has ended. The system will go back to the place where the flowchart was started. If there is no point to go back to in the flowchart-stack, a page will be displayed with the message An end node has been reached
.
Flowchart Node This node specifies another flowchart to be started. Very often an application consists of reusable functionality or processes. By modeling these in separate flowcharts, you can refer to these reusable functions by specifying the sub-flowchart node. This will also help to keep your flowcharts tidy.
Navigation node This node is used to jump to a specific navigation point.
Clear session node The clear session node deletes the current session and all related states. By default it will redirect you to the home page where it will create a new session, but you can specify another navigation item.
Decision Node This node is used to decide what should happen within a workflow, based on the condition specified in the node. This condition evaluates to a specific exit which can be customized depending on the condition. For example, a single select datafield can be in a decision where the concepts are the node exits.
Assignment Node The assignment node is used to assign a value to an item in the project like a data field, or an input field of a webservice.
List Node The list node makes it possible to define an action that should take place on a list. Actions include (but are not limited to) finding, adding or deleting a row in a list.
Loop Node When it is necessary to loop through a list or a multi-select field, the loop node can be used. This makes it possible to apply certain functionality to every row in the list.
Save Node When a save node is reached, all changes since the last save action will be saved to the database.
Discard Node When a discard node is reached, all changes since the last save are discarded.
Import Node The import node makes it possible to import data from a file (Excel, CSV) or from a JSON stream.
Export Node Export data to a file (CSV, Excel).
Invoke Webservice When a webservice is needed, the service request node is used to specify the webservice that needs to be called. When this node is reached, the designated webservice is actually called with the input parameters (that should be set in advance using assignment nodes). When the node exits, the output of the webservice is available for further use.
HTTP Request The web request node can be used to execute HTTP requests. Rest/JSON services can be called using this node.
Process Node A process node is used to use one of the pre-defined functionalities of the processes that are activated on the project level. These functionalities include e.g. sending email, printing a document, PDF document generation and many more.
Realtime Message Node These nodes are used to send real time messages between a sender and a listener.
Authentication Node The authentication node is used if you want to authenticate a user through either SAML or OAuth2. It basically means that through this node, you realize single sign-on with your enterprise network, or you authenticate a user through e.g. Facebook, Twitter or LinkedIn
Note Node A note is not an actionable node as the ones before, but can be used to place informative remarks on the flowchart. A note does not offer any functionality, nor does it affect anything in the flowchart.
The data import node is used to import data into a specified list. The data that is imported is either in CSV, Excel, JSON or XML format. To use this node, simply drag it onto you flowchart and choose the right file format, JSON, XML or CSV/ Excel. Next thing you have to do is change.
Property | Description |
---|---|
This node has two exits:
Error
- this exit is used when the import produces an error;
Default exit
- this exit is used when the data import does not produce any errors.
The Edit Mappings
screen is used to map fields from a source (like a CSV, Excel, Json or XML file) to fields that exist in WEM. Depending on the file format the mapping tool works differently.
Map CSV or Excel fields
The easiest way to create the mapping, is to hit the Create mapping from example
button on the right hand side of the toolbar.
You can now select the CSV or Excel file you want to import, so WEM can learn which columns exist. Once the file is selected, WEM will show a list of all columns from the source file. You can now specify per column to which target field in WEM the data should be mapped / imported. Simply double click on the target field column for the specific CSV/Excel column and WEM will bring up the popup so you can select the actual target field. If needed you can also specify whether this should be a mandatory field and what do do when WEM encounters an invalid value in the source file.
Map Json or XML
To map Json or XML to WEM data, hit the Create mapping from example
button on the right hand side of the toolbar to open the mapping tool.
When you do this the first time you will get an emtpy screen: no mapping is available. You can create your own mapping by add
ing your own entities and map these to WEM fields. But it is far easier to use some sample Json or XML and let the WEM modeler do a lot of the work for you. Click on the Create mapping from example
button in the toolbar en paste your sample Json on XML into this form. You can verify if you are using correct XML or Json and then click on Ok
to let the system create the basic mapping.
When you use Json, you get something that looks like this:
For every array
, object
, text field
, numeric field
and boolean
you can now specify:
Is this a mandatory component;
Do you want to skip an object if the data is invalid.
You can specify this by simply clicking on the component in the tree on the left hand side. You will then see the properties on the right hand side (see ths picture above).
Te map a component to a WEM field, simply select the Json field, and in the properties area on the right click on the button of the Map to
field. You will get a popup where you can select the WEM field to which you want the map the Json component.
Once you have done this for the entire Json message, you are done with the mapping: click on Save
and your mapping is ready to use.
If you want to import XML, you get something that looks like the screen below, after you have created the mapping from an example:
The actual mapping works very similar to the Json mapping described above. The main difference is that the various XML elements can have different properties, based on the value of other properties of the same element. But in essence it works like Json mapping: you can create the entire mapping manually, or you simple import an XML example of the XML you want to import, so you can let the system create the basic mapping. Next, you go over each element and specify:
The Name
(you usually don't change what the system created);
The Namespace
of the XML element. If you use namespaces, you can select them here or create a new namespace;
Is it a repeating element? If so, you will get another property:
You can now specify the Target collection
Specify whether the element contains:
a single value. In this case you can specify where you want to Map the content to
. You can select a field that is defined in WEM;
nested values (<catalog>
or <book>
in the example above). When this element contains nested values, you can't specify a mapping, because you should specify the mapping of the elements that are contained in this element.
The data export node is used to export data. When this node is dragged onto the workflow, you will automatically get a popup window where you have to select a list or list filter as the source from which you want to export the data. Next you edit the properties, so you can control the data export. The following properties are available:
This node has two exits:
Error
- this exit is used when the export produces an error;
Default exit
- this exit is used when the data export does not produce any errors.
When you want to export to Json
or XML
, you need to specify a mapping to map the exported data to either Json
or XML
. This works the same as specifying the mappong for data import (see above for a description of how to create a mapping). The only difference is that the mapping will now be used to export data from your WEM application to Json
or XML
instead of importing data into your WEM application.
When this node is reached, an HTTP request will be executed. The HTTP request node supports:
All common request methods (GET
, POST
, PUT
, DELETE
, PATCH
, etc.);
Query parameters (expressions);
Basic authentication and Client certificate authentication;
Custom request headers (expressions);
Custom response headers (mapped to fields);
If applicable, a request body (text, file or richtext);
Response body (text, file or richtext).
The type of request, and the HTTP request details are all specified in the node’s properties. Some properties are only needed for certain request types, as is displayed in the example below.
The properties:
The Web request node can have several exits. There are two pre-defined exits:
Default exit
Error
This is the standard error exit for every WEM Node to catch technical code issues within the node itself to prevent showing technical error-details to end users. In this case it should not be used to handle Fault Messages from the Response (which are correct results within the HTTP Request Process - not errors - and have specific HTTP Response Codes which can be handled specifically)
Besides these pre-defined exits, it is possible to define an exit for every possible status code the HTTP Request returns. This includes any "error messages" or "fault messages" that the remote endpoint can provide.
List of HTTP Status Codes:
The HTTP Request Node allows you to add exits for specific HTTP Status Codes (or response codes) that the resulting Response can provide. A link to a list of possible HTTP status codes and types/grouping is provided above and here: (wiki).
You should check with the provider of the remote endpoint to understand which Response Codes you may expect and could handle specifically.
When you define the Exit by HTTP Code, you currently have to define the specific code (there is no option for "wildcards" like 4xx and 5xx - but this may be provided in future). Then, following the specific HTTP Code Exit, you can handle it accordingly, and the Response Body can contain details of the specific situation so you may want to use that Response Body information as well when displaying feedback to user.
HTTP Status Code Exit or Error Exit?
Basically, you will not use the Error Exit to handle errors that occur on the Remote side - the Error Exit should only be used for situations where the Response is not received (there is no HTTP Status Code) - typically this is for when the Request itself is malformed and causes issues in the WEM Runtime. You should leave the Error Exit unlinked to show the technical information from the WEM Runtime that may indicate a bug or another issue that needs to be fixed. To make things confusing: that error may be displayed as a Server 500 (HTTP Status code 500) error, but this may be the status code from the WEM Runtime, and not from the remote endpoint...
HTTP Status Codes in the 4xx range are considered "client errors" and the 5xx range are considered "server errors" - in any case - if this status code is received in the Response object and there is a corresponding exit, this exit is followed and the Response Body will contain the detailed results from the remote endpoint. As this is mapped to a field in your model, you can just display that information or work some logic on its contents.
HTTP Status Codes 4xx and 5xx as received from the remote endpoint are valid Response Status Codes and are NOT considered Errors that will follow the Error Exit.
If you need to keep changed settings, it may be necessary to use the Confirm Session Changes process node...
With the change language process you can change the language of the user's session in the runtime. You can choose languages from the available languages configured in the project settings. You can find a list of all supported languages and their names in the available languages section.
For the change language node, we have the following properties:
There are different ways in which we can implement and use this node, here we will show a basic example that you can later modify according to the need, and the ideas, that you want to implement in your project.
One of the easiest ways to use it:
Create a field with the Default Language. In this case we use en-US
2. Inside the properties of the change language process node you insert the datafield you just made.
Create an interaction that triggers the change language process, in this case we will use a button that activates the process
For the flowchart, connect from the start node to the interaction node where you want to change the language from. Next is to add the button exit "change" to the process node and connect the default exit back to the interaction screen.
Inside the node properties; put which language the project is going to change into, as the example below shows.
Note: before any languages can be used, they must be available in the project languages in the configuration part of the project.
This process is to change the timezone in the current project. It is important when we handle several timezones within our project. WEM supports the IANA Standard Time zones and uses the tz identifier to name the timezones.
For the change timezone node, we have the following properties:
For the flowchart, connect from the interaction node to the change language node. In the following example we will be using the start node by default; an interaction node, and the change timezone node as shown below.
For the flowchart, connect from the start to the interaction node, from interaction to the change timezone node and back to the interaction again for the result.
Use an interaction node, and put the change timezone node next to the interaction node in the flowchart.
Create a field that hold a the timezone you want to change to or put the name in the process node properties.
Create an exit that will go to the node to execute the process and use the default exit to go back to your interaction node.
Add a button that triggers the exit in your interaction node and a label that shows the current timezone.
Its function is to confirm if a session fields is changed and keep its information during this session without specifically making a post or other update (following an exit from a page). The node can be linked to an exit from another node and needs the default exit to have a next step. It will send the changes in session fields at the client/browser to store them on the server in the current session. Very useful in cases where a change in fields on a page can trigger an execute flowchart (containing the confirm session) but return back to the main page - in which case the session on server is not updated (that would only be when user follows an Exit) and the user wants to navigate away using a Navigation Item (without the Confirm Session, the changes will be lost to this session).
This function is to set a wait time before the runtime goes to the next node.
The properties allow us to connect the elements of our project to the process options. For this sleep node, we have the following propertie:
The following example will show the time in seconds it takes to execute the action of the sleep node.
The objective of this project is basically to visually show the time that the process takes to execute the "sleep" time that is part of the configuration; The process is explained in detail below. For this example project, two values, one initial and one final, are compared, using the assignment of a function type date to give a parameter between both fields. Initial date that starts from one point and ends at another; between this space the time of the sleep node process is calculated.
The interaction node.
Add an assignment node with the advanced function "now()" that will compare the first number.
Add an assignment node with the advanced function "datePart", that will have the start date day, which will compare the first number.
An overlay is added to show the executed process in progress.
The sleep node has been added with 3 seconds in its property max time.
Add an assignment node with the advanced function "now()", that will compare the second number.
Add an assignment node with the advanced function "datePart", that will have the end date day, which will compare the second number.
The next assignment node will receive the information of the time.
Describing the process of the flowchart in the preview. Detailed after executing the project.
Before clicking the sleep button.
The processed overlay, while the node is been executed.
The result of the compared fields within the time and sleep process node.
This processes is to redirect the user/browser to a specific url - without the need to let user click a link to go there. In this use case, we will be showing a simple way to use it, just as an illustration.
The properties allow us to connect the elements of our project to the different process parameters of their function. For this redirect node, we have the following:
For the flowchart, connect from the interaction node to the redirect node as shown below.
One of the easiest ways to use it:
Use an interaction node, and put the redirect node on the canvas.
Create an exit that will go to the node to execute the process.
Set up the redirect node properties to a string with the url you want to point to. The property field is a expression and can be used with a text datafield, with expressions or directly with an url string. This example uses "www.google.com"
as string.
Before clicking the "redirect" button, which also is shown as button most of the time.
Then, you will go to the URL set, in this case, "google.com"
Webrequest, is the legacy version of the "HTTP" node , which connects with any action of request, get, put, post, delete, etc... This node is updated to a more user-friendly way, for more information about its improvement, you can visit the documentation page with more details.
Find out more information about web-requests.
Function
This node is to change the size of an image. When the image is resized, it is scaled to the size best representing the given size property keeping the original scale. This process can be used to decrease image sizes before you add them to files like pdf's or to lessen the file size to restrict impact on performance.
Properties
For this resize node, we have the following properties:
Property name | Type | Description |
---|---|---|
For the flowchart, connect from the interaction node to the change language node and use the default exit to go to the next or back to the same interaction node.
an example:
Create a temporary file field to put the image you want to change and a field for the result.
Use an interaction node where you select the image, then we put the Resize Image node.
Create an exit that will go to the node to execute the process and use the default exit to go back.
Set the node properties,
1. Before clicking the resize button, the image set is shown with the original size. We can see that the image is quite large at the beginning before executing the resize image node.
2. After clicking the resize button, the image gets the sizes set and the label shows the result. This image has take the size and height fitting closest to the node properties.
This node is to Transpose CSV data into a new CSV that contains 3 columns: RowNumber, Column and Value for every "fieldvalue" in the original CSV.
In the example we have a TEMP 1 field, this holds the resulting csv file, a overlay interaction node where we select the file we want to flatten and give us the resulting file and the process node.
One of the ways to use it:
Use an interaction node, then we put the convert Flatten CSV document node.
Create a temporary file field that will be the one that receives the converted file.
Create an exit that will go to the node to execute the process and connect back to the interaction node to show the result.
Node operation process.
Before clicking the flatten CSV button select the file.
After executing the process, the temporary field appears with the resulting file.
The extract text process node is for extracting text from readable text files. The process works for .pdf and .docx files with properly made text. Images of text (in documents) instead of readable text can not be extracted.
Create a transient file field that holds the source file and create a text field for the return text.
Open or create the flowchart that performs the process.
Add an interaction node for selecting the source file and to show the result.
Add the process node and select the extract text process.
Connect the start node to the interaction node, then create an exit "extract text" for the interaction node and connect it to the process node.
Use the default exit of the process node to return to the interaction screen that now shows the result.
Now open the interaction node to design a quick screen like the image below. On the left a window for selecting the source file and trigger the process, and on the right a label with the respons text.
When you run this in the preview, this is the result:
The rename file process is a feature to change the filename of a single file field. The input is an expression for the new name. You can use this for a static name by just putting some text in, or use an expression to generate a filename based on other information. The rename file process can be used to change the filename of multiple files in a list, using a loopnode You should add a check if the filefield to be renamed exists, before entering the process node.
The File Property (a WEM File Field) is used for both Input as well as Output: it is the same field, the same file that will get the new Name as its FileName property after the change.
In this example I will be changing the name of all the files to the [ID] name of their respective row.
Open or create the flowchart that perform the process
Add a interaction node for starting the process to show the return
Add the process node and select the change file name process and add a loop node to go trough all the items in a list containing a file field. Fill in the properties of the node. In this case the file field from the datalist "webshop" for the input and output of the file.
Connect the start node first to the interaction node, then create an exit "rename file" for the interaction node and connect it to the loop node and that to the process node.
Use the default exit of the process node to return to the loop node and the end of loop exit to return to the process node.
The interaction node only activates the process, this does not need any user input besides running it. If you are not sure every row has a file, you should add a decision node between the loop and the process that goes back to the loop if there is no value (use HasValue or IsEmpty functions).
If your project has Webservices defined (consume and/or expose), you can access these services through the Service request node. The Service request node sends or retrieves data using a web service. The node itself does not handle any data, so you will need e.g. assignment nodes to store and work with the data. To use the node, you drag it onto the flowchart and a selection popup appears.
Here you select the webservice you want to use.
There are only two properties for this node:
The Name, which is set by WEM and cannot be changed;
The possibility to clear all input after the call to the webservice is finished. This is done through checking the checkbox for this option.
The node has a number of exits:
Error
- this exit is used if an error occurs using the node;
Default exit
- the regular exit when there are no errors
Additional exits are possible if the webservice has predefined faults. If so, these are also exits for this node. And these exits help to better identify a problem if the node produces an error.
Example: when you want to call a webservice to retrieve data, you call that webservice through the node, and the data that is returned is stored in either data fields or list fields. Often a call requires input, in that case you start with one or more assignment nodes to set the input, than the service request node does the call to the webservice, and finally you use one or more assignment nodes to store the data that was retrieved using the service request node.
A complete documention on webservices can be found here:
WEM comes with a large number of pre-defined processes that you can use in your workflow. These processes range from generating documents to sending email or sending data to Google Analytics. When this process node is dragged to the flowchart, a popup window appears where you select the process that you want to use. If you select a particular process you will immediately see which input parameters are availble/necessary for this proces. An example:
Note: By default, no processes are available: you need to define which processes are available through the Project settings for Processes
Once you have selected the process you need in your flowchart, the specific properties become available to configure.
The properties are similar for all processes:
Name of the node, this is set by WEM and cannot be changed.
The specific Input parameters for this process.
The specific Output parameters (for example when a PDF is created, in which File Field to store the result).
The template that is specific for this process (e.g. the email body in case you want to send an email. You can edit the template by clicking on Edit template
. Not all processes have a template, so you will only see this button when a template is available.
An example of the input parameters for the "Send email" process:
On the left is the input parameter name, in the middle column the data type and the right column shows the value, mapped field or expression when entered. On the far right is a button that takes you to the expression editor where you can enter the value for the parameter.
This node has two exits:
Error
- this exit is used when the process results in an error;
Default exit
- this exit is used when the process does not produce any errors.
You can find a few tips about sending emails with this node on this page: Email Process Tips
The data export node is used to export data. When this node is dragged onto the workflow, you will automatically get a popup window where you have to select a list or list filter as the source from which you want to export the data. Next you edit the properties, so you can control the data export. The following properties are available:
Property | Options | Description |
---|---|---|
This node has two exits:
Error
– this exit is used when the export produces an error;
Default exit
– this exit is used when the data export does not produce any errors.
When you want to export to Json
or XML
, you need to specify a mapping to map the exported data to either Json
or XML
. This works the same as specifying the mappong for data import (see above for a description of how to create a mapping). The only difference is that the mapping will now be used to export data from your WEM application to Json
or XML
instead of importing data into your WEM application.
The ping server node is just what is sounds like. You can use the ping server node to ping a specific server and look for the right response. This can be used to check if a specific server is reachable and responding for example.
In WEM it is possible to generate messages, and listen to message. Based on these messages a specific action can be taken (e.g. write to a log or display popup on all user's screens). This happens in realtime. And to use this functionlity, you need the realtime message node:
You need a node to send a message;
You need one or more nodes to listen to messages ("Chanels");
You can use a node to stop listening.
The properties of the node define how the node will behave: as a sender or a listener. Let's look at the various properties. For the various node "Actions", there is a different set of properties. Three properties are always available:
Name
: the name of the node, which is set by WEM and cannot be changed;
Channel name
: this is the name of the messaging channel you want to use. You are free to give it any name you want, as long as it is unique within the application. When you are listening to messages, or want to stop listening to messages, you need to specify the name of an existing channel;
Action
: This property defines how the node will behave:
Start listening
- the node will behave as a listener on a particular channel;
Send message
- the node will now behave as a sender on a particular channel;
Stop listening
- the node will stop the the listening on a particular channel.
Depending on the action, the remaining properties vary.
Start listening
Send message
Stop listening
This node has two exits:
Error
- this exit is used when the node produces an error;
Default exit
- this exit is used when there are no errors.
A note is not a node like the ones described before. a note is exactly that: a notation that you can drop on you flowchart. You could use this to explain the flow, place it behind a part of the flowchart to highlight that part, etc.
You can have multiple notes on you flowchart.
Using this node is the way to realize single sign-on in WEM. Let's say the authentication provider is Microsoft Active Directory. When the user is already logged into the company network, the authentication node will recognize this and won't ask for a username/password. If the user has not been logged in, he/she will be asked to log in. When this is done, the user is logged onto the company network, so all other applications that use Active Directory will recognize this as well.
The authentication node can be used to authenticate a user, using a pre-defined authentication provider ().
Using this node is simple: drag it to the workflow where the authentication needs to take place (e.g. the Home
flowchart) and make sure the workflow passes this node. Once the node has been reached, the pre-defined authentication provider does the user authentication. There are a few properties:
The node has three possible exits:
Authenticated - in this case the user is authenticated
Not authenticated - the authentication failed or the user is logged out
Error - the authentication resulted in an error
Property name | Type | Description |
---|---|---|
Property name | Type | description |
---|---|---|
Property name | Type | Description |
---|---|---|
Property name | Type | Description |
---|---|---|
Property | Type | Description |
---|---|---|
Property | Type | Description |
---|---|---|
All of this is done through the realtime message node. But before you can use this node, you need to . Once this has been done you can use the node.
Property | Options | Description |
---|
Property
Options
Description
Name
The name of the node. The name is automatically set and cannot be changed.
Format
There are five options: - CSV
- Excel (*.xlsx)
- this is for the most recent Excel versions - Excel 97-2003 (*.xls)
- this is for the older Excel versions - Json
- XML
Select how you want to export the data
Source list '
Specify the list that is the source for the data export. This does not apply to XML
or Json
exports.
Filter by
If you need to filter the data that wil be exported, you can add an expression that defines that filter.
Target field
Here you select the field where you want to store the exported data. This field has to be of the type File
or Text
(in case of XML
or Json
).
Delimiter
There are four delimiters you can use: - Comma
- Colon
- Semicolon
- Tab
This property is only available (and needed) when the format of the export is CSV. This property defines which delimiter should be used to separate the data.
Encoding
You can choose between 6 different character encodings: - ASCII
- Windows-1252
- Latin 1
- ISO 8859-1
- UTF-8
- UTF-16 LE
- UTF-16 BE
This property is only available (and needed) when the format of the export is CSV. The property makes it possible to select the character encoding you want to use for the data export
Include BOM
Sort by
When you click on this button you get to the Sorting popup where you can add expressions that make it possible to sort the exported data.
Edit Columns
The Edit Columns
button takes you to the Data Export Maps editor.
Item
Options
Description
Name
Name of the node. This name is generated by WEM and describes the HTTP request that will be performed. The property cannot be edited by hand.
URL
The URL that is used for the HTTP request (the server to which the request is sent)
Method
GET
,POST
, PUT
, PATCH
, DELETE
, HEAD
, TRACE
, OPTIONS
The HTTP request method that is used in this node
Follow Redirect
Yes/No (checkbox)
Authentication
- None - Basic Authentication - Client Certificate
Specifies if authentication is needed for the request. And if so, what type of authentication. When the ‘Basic Authentication’ is specified, a simple username/password suthentication is used. In this case the Username and Password properties are displayed. When the ‘Client Certificatie’ authentication is used, the user is asked to specify the client certificate. The certificate must be available in WEM.
Request Body
A custom request body can be defined
Response Body
A custom response body can be defined
Edit Query fields
Edit Request Headers
Edit Response Headers
Language
Expression, text
Language you want to change to.
Timezone
Expression, text
Set the timezone in the expression. This can be a text datafield a expression or a string. Use the tzidentifier from the IANA list.
Seconds (max 5)
Expressions, number
Set the time in the node that will take to sleep the process.
Property name
Type
Description
Url
Expressions, text
Set the url address where the user will be redirected to.
input CSV file
Expressions, file
Set a file field that holds the original csv.
Flattened CSV File
Datafield, file
Location of the resulting csv file.
File
Expression, file
The source file with the text that needs to be extracted.
Plain text
Datafield, text
Field that holds the plain output text found in the file
New name
Expression, text
The new name for the file. This can be text or an expression.
File
Datafield, file
The field containing the file that needs a new name.
Property | Options | Description |
Start listening to: | - Any message - Specific message | Listen to any message that is send on a particular channel or listen to a particular message. This distinction is only needed if more than one (1) message has been defined. When there are multiple messages, you need to select the message you want to listen to in case you are not listening to all the messages |
Response action: | - Refresh screen - Execute flowchart - Navigate to | When a message arrives, you need to tell the node which action must be executed. When you select |
Property | Options | Description |
Security | When this checkbox is checked, the message is encrypted |
Message folder | This is used to select the folder from which the message will be sent (the folders are defined when the messages are defined) |
Property | Options | Description |
Stop listening at: | - All message - A specific message | Specify whether you want to stop listening to all messages or to a specific message (if the are multiple messages defined) |
Authentication Provider | You can select the authentication provider that should be used by this node. You can only select providers that have been previously defined |
Action | - SignOn -Logout | Here you specify the action the node should pass on to the authentication provider. You can choose between signing on the user, or logging out the user |
In the image you see the properties used to reduce a image to a quarter of its size. At the top you see the field that holds the original image. We want to make the image to a quarter of its original size and use percentages, the absolute pixels property should be false. Don't forget to set a output field to store the resulting image.
Basic documentation to get you started with the OpenAI node
With the OpenAI Node, you can tap into the advanced natural language processing capabilities of the OpenAI API, which utilizes cutting-edge machine learning techniques to generate responses to a variety of different inputs. The OpenAI Node has a few different versions for different uses, such as transcribing or translating audio, creating images, completing and editing text, and chat completion.
The Node has two exits: the default exit is used when the API returns a good response, and the Error exit is used when the OpenAI API does not return a proper response. This can happen for a lot of reasons, for example, if the API is used too much, if the prompt or response is too long, or if it is not accepted.
The usefulness and experienced quality of AI and its different models are dependent on how you use it and what you expect. The model generates text responses based on patterns and information it has learned from a dataset of responses created by humans. This means it will respond to the text but not to its meaning. This is especially evident when asking mathematical questions; it will confidently respond with numbers not knowing if it is the actual result of the math problem.
Here are a few tips to get the best results
Provide plenty of context or details to help it better understand what you want as response.
Be specific in your request and provide as much detail as possible. This will yield more precise answers.
Cross-check information from other reliable sources, especially for critical or factual information.
Provide context to your question; this will help recieve more tailored responses.
Do not combine questions; instead, break them up into multiple requests. This will result in more focused responses.
If you want to learn more about how to get most out of the OpenAI models, visit the OpenAI documentation here. They offer excellent tips and guides to help you use it as a powerfull tool rather than a gimmick. There are also very useful examples on this page.
The most recent version of the GPT model is called "GPT-3", and it is currently available in several different sizes or "variants" ranging from 125 million to 175 billion parameters. The names of the specific API endpoints that correspond to the different GPT-3 variants are as follows:
"ada" (with 0.6 billion parameters) (default)
"babbage" (with 1.5 billion parameters)
"curie" (with 6.7 billion parameters)
"davinci" (the largest and most powerful variant, with 175 billion parameters)
So, if you were to use the GPT-3 API, you would specify the variant you want to use by specifying the corresponding API endpoint, such as "davinci" for the largest variant.
The text version is trained specifically on large amounts of natural language text, and is particularly adept at generating high-quality, human-like responses to prompts. It can be used for a wide range of natural language processing tasks, such as language translation, summarization, and sentiment analysis.
The code version of the Davinci model is specifically designed to work with programming languages and code. It can be used to generate code snippets based on natural language prompts, and can also be used for code completion and other related tasks. This model is particularly useful for developers and anyone working with code who needs help generating complex code structures quickly.
The image generator uses the DALL-E model, this is a version of GPT-3 trained to generate images from text descriptions, using a dataset of text-image pairs.
Properties starting with with a * are required inputs.
This node allows you to create a conversational chatbot that can respond to user input. It uses OpenAI's language model to generate responses based on user input, making it ideal for customer service or other types of conversational applications.
The Text version allows you to input a text prompt, and OpenAI will generate an edited version of that text based on the input parameters you provide. This can be useful for tasks such as copy, editing or generating variations of marketing messages.
The Code version, on the other hand, allows you to input a code snippet, and OpenAI will generate an edited version of that code. This can be useful for tasks such as optimizing code or generating new ideas for algorithms.
This Node allows you to generate a complete text based on a given prompt. This is useful for generating text for various applications like customer service responses and content creation. This Node uses a model that is less powerful for chatbots than the Chat Completion Node.
This node enables you to generate images using OpenAI's generative model. You can input a text prompt and the node will generate an image based on that text. This is useful for generating graphics, logos, and other types of images.
This node enables you to translate audio from one language to another. It uses OpenAI's GPT-3 natural language processing capabilities to recognize and translate the spoken language.
This node transcribes audio files into written text using OpenAI's speech-to-text technology. This is useful for transcribing audio notes, podcasts, or videos. You can find some great tips on how to get better responses here.
We all have become accustomed to having fields in the Data Model that are not part of a Persistent List - so they are not saved to a database and their values are only available to one specific user in one specific user-session. Also known as temp(orary) fields, or transient fields. Many WEM-users have created a folder "Session" within their projects to store some (or most) of these fields, to make clear what these fields were used for: to store user-selected filter options, logged-in user information, keep track of certain progress in certain processes.
Once a user would close the browser, all these values would be lost and a new session could be started. Also it was not possible to have multiple tabs open for a specific application and share the same data and the same progress over these multiple tabs. You could duplicate an active tab and then have 2 tabs with momentarily the same situation - but as soon as you would change a thing in one tab - it would go on with its own session unaware of the situation in the other tab.
Summary of characteristics for the "old" Session Transient Fields:
Values for fields only available in one Single Tab (not shareable).
Same fields may have different values in multiple tabs.
All values are lost when closing browser.
One situation to consider: when a user closes the browser, and shortly thereafter opens the browser and uses a link from the application, it MAY very well be that the user continues exactly where user left off, INCLUDING transient fields and even unsafed data changes.
HOW?
Browsers stay active in the background even when closing all tabs - for user-benefit, easy and fast startup and continue where you left off.
Browsers may auto-complete your most recent address, so when typing in the hostname of the application, the browser may autocomplete it including the ?sv=..... value - which is actually specifically asking for that Session Version on the server - if it still exists and has not expired, you will pick up the situation exactly where you closed your browser. You may not even notice this....
But anyway - as this is all to make it more user-friendly from the browsers, it is not a security issue, as it is still linked to your active device-user-browser-session.
Unless you leave your device behind unattended and unlocked so someone else can start your browser, this is all still safe and secure.
Though you may always choose to add some re-authentication flows if you think it is necessary in your application.
With the new Kubernetes environments, WEM Runtime can now support a more powerful WEM Session using the specialized WEM Session Folder. This special Session Folder can be activated from the Project Features page in Project Configuration:
Activating the Session Folder setting will create a specific Session Folder below your Data Model tree:
The fields you put in this Session Folder will behave different from what you may have become accustomed to in the old way.
Once you have activated the Session folder Feature, the Session folder is created and this can not be undone. The setting will disappear from the Project Features Page. Not to worry - you can (and have to) choose what fields to put in this special Session folder, and only those fields in this folder can be used in the new way.
You can - and will - use the Transient Fields in the same way you are accustomed to. You will only put fields in this special Session Folder that may - or should - be used in the more powerful way we will describe in more detail.
New Session Characteristics
The new Session works more like how a Web Application Session is expected to work.
Values for Session Fields are available in multiple browser Tabs (shareable).
A Session Field value changed in one tab will also be changed in the other tabs:
A Session Field has only one single value at any one time within a user's session in possibly multiple tabs.
A Session Field's Value only changes "forward" - by getting assigned a new value (or gets cleared).
Browser's Back Button has no more effect on these Session Fields (forward changes only).
Values for Session Fields may stay available when user closes the browser - and if the user restarts the application, these values can be picked up again to continue where user left off. Only after the Session Timeout threshold has been reached, the user session will be removed. Only the same user on the same device using the same browser can re-attach to this session (which is also standard Web-Session technology - not WEM-specific).
Clear Session Node will clear all values in the Session Folder (as well as the other transient fields in the Data Model). This node should be specifically used when you provide a specific Logout flow.
Obviously - lists within this Session can only be Transient - you will not be able to create Persistent Lists - those can only be part of the Data Model.
Typical use of Session Folder fields
Use transient collections (Lists) for selected items - like products for a shopping cart - or any selection of items to be handled in a process going forward.
Use fields that may be shared (as a single value) over multiple tabs for the same user, eg Reference Field to current logged on user (to be cleared at the start of the portal to trigger authentication).
Use fields for user-selectable portal/application-level settings that can or should be shared over multiple tabs, like Selected Language or Preferred Colors.
---
Keep search and filter fields in the Data Model tree - as user may want to search for different results in different tabs and then add some of those results to the same list that does reside in the Session Folder.
Keep fields that are used to change how a specific page may be displayed in the Data Model - like fields used to show or hide elements - - unless you are sure about being able to share the same value across multiple tabs or are part of a broader context within the application.
For most fields and most situations, you will just keep using the "old" way - use transient fields in the Data Model.
Only when you are sure you need the specific new Session way-of-work, you put those fields specifically in the Session Folder.
when using the browser-back-button should not affect the value;
value (or collection) should always be the same when shared over multiple tabs;
if value is changed in 1 tab, it should also change in the other tab;
Setup SSO-integration using SAML 2.0
To best explain what to do here, we will use a Microsoft Azure Active Directory
as authentication provider. If you need to integrate with another provider, it should work similar.
We have added a very extensive guide how to register an App for SAML SSO in Microsoft Entra ID.
Summary:
Register app (WEM Portal) in the Identity Provider (like MS Azure AD);
Get settings from Identity Provider;
Setup registration in WEM following 4-step wizard;
Name of Authentication Provider as it will be used in WEM flows/nodes
Identity Provider settings;
WEM Application settings (Service Provider settings);
Map fields;
First step is to set up an Application Registration or Business Application in Azure Active Directory
(or your Identity Provider). Microsoft has changed the routes and ways to set up App Registrations (or Business Apps) in the past, so our guide may be slightly different. Point is, there needs to be an App Registration (Enterprise Application it is called now in Entra ID) in the Identity Provider holding the details of your WEM Application, and link the users/groups to this application that are allowed to login there. The App Registration will get a specific EntityID in a form of https:// or urn:// (and then a globally unique value that could be like a hostname and/or could contain a guid).
The easiest and safest way to get these settings right, is to start with metadata from the Identity Provider. Most providers will have the option to display or export the Metadata as xml, containing the necessary information to set up the provider in WEM for the Registered App. WEM can read and import this xml information and convert it into the settings for the Authentication Provider.
The Application Registration in AzureAD provides several links to be used in different places. Most important (or easy to use) would be the Federation Metadata link. Using this link will allow you to import most settings into WEM Modeler, including correct ID's, login urls to AzureAD and certificates.
If there is no metadata link or file to import, the option to configure manually can be selected. Following screenshots will show at least some recognizable fields that you can fill with the information as provided by the Identity Provider in the Application Registration.
The Entity ID in this page, is the Entity ID which identifies the Identity Provider (with MS AzureAD it would contain the Tenant ID).
The NameID Format is important: this defines in which form the Name ID (the subject, the user-identifier) is returned by the Identity Provider. The Identity Provider should properly defined this, or you can see the result in the SAML Response (see Map data below). Start with Unspecified if you are not sure and check the SAMP Response for the correct definition if you can not find it in the information as provided by the Identity Provider.
The Authentication fields should be copied from the Identity Provider settings (unles imported from the Metadata - then this information should not be altered manually).
Security settings: With Microsoft Azure AD, we know they renew certificates often and to support that integration without disruption, WEM provides the feature to "Fetch certificates at runtime". So, if you are also using MS AzureAD, you should really activate this option. If you use another Identity Provider, you should check if it also supports this option.
If the Identity Provider is not MS AzureAD or does not support fetching certificates at runtime, keep the Fetch-at-runtime switch turned off and add the certificates manually and keep them updated if necessary. If setup is done with the Metadata Import, the certificates should have been provided and automatically put here. If not, you should add the certificates as they are provided by the Identity Provider in the Trusted Server folder in the Certificates section. If certificates have to be renewed, the project also needs to be published to get the updated certificates in the Runtime (or - if certificates are managed in the WEM DevOps Dashboard, you should change them there and then there is no need to publish).
Following the SAML naming conventions, the application that is using the Identity Provider to authenticate users, is called the Service Provider. Don't let this confuse you - the Identity Provider is the environment where the Identities are managed and the credentials are kept and checked. The "Service Provider" is any application that wants to use the Identity Provider to authenticate users (providing services to end-users).
The most important field here, is the Entity ID - the ID of the application as it will be used in the App Registration in the Identity Provider (using either urn:// or https:// and then some globally unique code or hostname - the Identity Provider will have some guidelines or rules on how to name this App Registration). It may also be something like Relying Party Trust Identifier in the Identity Provider management.
Initially, you should consider to keep these fields as shown in the screenshot: no certificates, no requirement to sign.
In the screenshot, you can see the label "Default". This refers to the Portal in this WEM Project. As you may know, any WEM Project can have multiple portals, with different designs and hostnames. For each WEM Portal you can set up a specific SAML configuration (they will all be visible on the SAML Service Provider settings overlay). Portals may connect to other App Registrations in the Identity Provider (while the Identity Provider is still the same, so the same specific Tenant). This can be useful if you want to allow different sets of users to be able to use/access each Portal. The Identity Provider can set this up as different App Registrations.
In the Service Provider settings page you can see the button [Get metadata]
. Clicking this button will provide the option to get information (metadata) for each Runtime of the portal. You should NOT use the Preview option (we will remove this in a future update) - as Preview will not be able to work with SAML integration. So only use the Staging and Live options, and if the Identity Provider supports importing service provider metadata, you can choose to download the metadata file.
If the Identity Provider does not support importing Service Provider metadata, you can choose to copy the metadata to clipboard, paste it into a text editor (or mail to send to IP-administrator).
The most important part of this bit, is to provide the URLs for the App Registration for the Location of the Consumer Service. The pasted information will show you something like:
It is the Location Value that you need to share with the Identity Provider admin. WEM Portals will generate URLs (SAML endpoints) in the following form (where the portal hostname and the SAML Name are the variables defined in your project):
This is the information that needs to be entered into the Identity Provider app registration, probably in fields named something like Assertion Consumer, Reply Url, or Relying Party Trust.
A great thing of these Reply Urls (at least in Azure AD) is that you can enter multiple urls so you need only 1 App Registration that can service your Portal(s) for both Staging (test) and Live (production) situations, and multiple portals/hostnames - as long as the situation allows the same set of users for all occurrences of these urls. You should NOT need to create separate App Registrations in any Identity Provider to service each Portal in Staging or Live separately. The systems are smart enough to accept requests from staging and return the authentication result to staging - or based on the hostname another portal or runtime.
The final step is to map the results from the SAML message to the appropriate fields in your WEM project.
The Response from the Identity Provider via SAML is in XML form, which you can map to a Text Field (so you can see/display the total response in testing). The NameID field is the specific field that identifies the user according to the NameID Format in the Identity Provider Settings.
SAML has a lot of standard "Attributes" - fields in Azure that hold information about user-accounts. The Identity Provider will expose some of those fields, and the WEM SAML Attributes part shows most standard Attributes which you can map to fields in your Project. Again, while setting up the application and testing the connection, use the full Response XML information to check what fields and values are provided by the Identity Provider, so you can find which fields to map.
The Identity Provider can also introduce custom attributes, so WEM provides the option to add these using the New Attribute button so you can map this info to your Project fields. Again - check the Response XML.
After you've finished these steps and clicked [Create], the SAML Authentication settings are available via context menu in the project tree:
Double-clicking the SAML Provider will open the Data Mapping overlay, so if you need to access, check or change the Service Provider settings or the Identity Provider settings at a later stage, use the context menu.
Now that you've seen all the parts for a SAML Authentication, and understand that there are 2 main players in this situation (Identity Provider and your WEM Project as Service Provider), we can address a more advanced part - regarding the Signing and Security and the correct usage of fields/settings related to this subject.
Encryption Certificate: this setting is provided because it is part of the SAML Standard, but we have not yet seen the need to explicitly set this and use it. So, unless you are absolutely sure that you are required to use a custom Encryption Certificate, you can provide it here - otherwise leave empty. If used, it is a Client Certificate with Private Key of which the public part should be shared with the Identity Provider.
Signature Certificate: Adding a Signature Certificate here, means that the WEM Application itself will sign the Requests towards the Identity Provider. You will need a Certificate with a Private Key within the Client Certificates collection (if accepted by the Identity Provider, it can be a Self-Signed Certificate that you can quickly create in WEM Modeler). The Public Certificate part of this Client Certificate should then be sent to the Identity Provider so the Identity Provider can verify that the Requests are properly signed by your Application. Because this certificate can not be "fetched at runtime", it is always a manual process - creating the certificate (with an expiration date), linking it to the SAML configuration, providing the Public Certificate to the Identity Provider, who has to install and link the certificate to the proper application configuration, and when this certificate reaches the expiration date, it usually causes the application to fail and will take some time before people realize it is caused by the expired certificate, so yes it is a hassle that should not be taken lightly: if this bit of additional signing is required, make sure the management of the certificate exchange is clearly addressed with reminders and notifications to handle the expiration in time. Also - when this Signature Certificate is used at the Service Provider side, you may need to switch the option at the Identity Provider Settings side - see below, to indicate that the Identity Provider Requires that the request is signed.
Hash Algorithm: if the Identity Provider explicitly claims that Signatures must be provided with SHA256 hashing, you can set that here - otherwise leave it at the SAML 2.0 standard SHA-1.
Setting Require that the assertions are signed: This means that WEM only accepts a SAML Response that has a signature from the Identity Provider. The Identity Provider must share the public certificate that you can add to the Trusted Server Certificates OR, and even better, if the Identity Provider supports the fetching of certificates at runtime (like MS Azure AD), you only have to switch the option Fetch Certificates At Runtime to ON and provide the link to the certificate location (to be provided by the Identity Provider). With MS AzureAD it is usually the federation metatada link and an id - but this should be clearly indicated in the Azure AD App Registration pages. This is a standard way to at least secure the application ensuring that the incoming SAML response is indeed from the Identity Provider so you should use this if possible.
The fact that fields Signature Certificate
and Require that assertions are signed
are so close together, may lead you to think that these 2 fields belong together and should be changed together.
This is NOT the case! Please read on...
Requires that the request is signed: This indicates whether the Identity Provider only accepts Requests that are Signed by the application. For this to work, the WEM Application needs to use a Signature Certificate (as described under the Service Provider Settings * Signature certificate). The Public part of the application's signature certificate needs to be shared with the Identity Provider. This option is requires a partly manual process to create and renew the certificate (there is always an expiration date on this kind of certificate) and exchange the public part with the Identity Provider. It is an option that can be used, but do not use this lightly (because of the problems to be expected when expiration dates have passed).
Fetch certificates at runtime: Microsoft Azure AD changes and renews certificates dynamically so WEM decided to implement the easy option to fetch certificates at runtime and use the certificate information in the Response. Other Identity Providers may or may not support this option, but if you are using Microsoft Azure AD as Identity Provider, you'd best activate this option (if you leave this option deactivated, you may experience login-failures when certificates have been renewed). The fields for the certificates will then be hidden - no longer needed. If you are working with another type of Identity Provider - please check with them if they also support this option (would be very nice and easy for all parties involved). If not, leave this option deactivated and make sure the appropriate Certificates are selected. When the Identity Provider information is loaded/imported using a (Federation) XML (read metadata from URL, XML File or XML Text), the public certificate will be recognized and added to the Trusted Servers certificate collection in your project. If you are going to configure manually, you will need to retrieve the certificates and import them to the Trusted Servers collection yourself, and then select them in this configuration part. Which certificate and for what purpose should be indicated by the Identity Provider.
So, to summarize: it is very likely that the Owner for your Project, the Identity Provider, wants the optimal security and compels you to at least actively check the Signature the Identity Providers uses to sign the response with.
To do this:
Activate the option Require that the assertions are signed in the Service Provider Settings;
Check the Signature Certificate in the Identity Provider Settings, and use the option Fetch Certificates at Runtime if possible.
The Service Provider Require .assertions. signed
setting therefore corresponds to the Signature certificate in the Identity Provider settings - and not to the Signature certificate directly above the setting itself...
This is a CROSSED reference situation... settings on both parts need to be considered!
If the customer/Identity Provider wants even more security and demands that also the Requests from your Application are Signed by the Application, you need to:
Create/upload a Client Certificate with Private Key to be used by the application to sign the requests (mind and manage the expiration date...);
Share the public part of the certificate with the Identity Provider (you can download the public part of the certificate in WEM);
Select this certificate in the Service Provider Settings, at the Signing Certificate;
Switch the option Requires that the request is signed on the Identity Provider Settings.
The Identity Provider Require .request. signed
setting therefore corresponds to the Signature certificate in the Service Provider and not to the signature certificate directly below the setting itself or the fetch at runtime situation...
This is a CROSSED reference situation... settings on both parts need to be considered!
An introduction to the WEM Modeler Ontology and use of Concepts.
Let's start with the question: what is Ontology. According to Wikipedia: "In computer science and information science, an ontology is a formal naming and definition of the types, properties, and interrelationships of the entities that really or fundamentally exist for a particular domain of discourse. It is thus a practical application of philosophical ontology, with a taxonomy". Sounds complex? Well, it can be. Ontology within WEM is one of the most powerful, but also complex concepts. In this article we will cover the basics, and we'll discuss the more complex aspects of the WEM Ontology in another article.
Many people use the Ontology to define and maintain picklists that are static. Some examples:
A list of all US states;
A list of the situations you have to use in your application;
A list of every possible status of a ticket in a helpdesk system;
Etc.
If you need a field in your WEM list from which you need to select pre-defined options (a single select
or multi-select
data field), you need to point that field to a list of values that is stored in the Ontology.
And this is the most basic use of the Ontology. It is also the way most modelers use the Ontology.
You can also have a hierarchy within a picklist. You could e.g. have a list of "Car brands" (BMW, Ford, Infinity, Nissan, Volkswagen, etc.), and for each car brand the car models (children of the parent Concept "Car brands"). You now have a simple hierarchy of car brands and car models.
Items in the Ontology are called Concept
s. So in the Ontology you find relations between Concepts
.
Every item in the Ontology is a Concept
. So when you want to maintain car brands, "Ford" would be a Concept. If there is a hierarchy, "Ford"."Mustang"
is also a Concept.
Note: "Mustang" is called a child
of "Ford". But it is still a Concept.
A Concept has information associated with it:
Local name
: This is the name of the name of the Concept;
Display Names
: If you have a multi-lingual application, you can specify what the Concept name is in the various languages you want to support;
Concept type
: Specify a new Concept type or select one from a list of existing Concept types. See below for an explanation of Concept types;
Description
: You can briefly describe a Concept;
Synonyms
: you can add one or more synonyms for a car. You can use this e.g. if you want to user to be able to search for a Concept, but you want "Volkswagen" and "VW" to point to the same Concept. You would add the Synonym "VW" to the "Volkswagen" Concept.
A Concept Type
is used to distinguish between Concepts. This is not limited to children of a single Concept. You could look at a Concept Type as being a label. Example: Let's say you want to be able to find all car models dat are SUVs. You could easily realize this by adding the Concept Type "SUV" to the car models that are SUVs. You now have created new relationship between the various Concepts, based on the Concept Type "SUV". In a list you could create a single-select field that would only show the car models of concept type "SUV".
The Concept Type is a very powerful way of adding an extra layer of relationships between Concepts.
To add a new Concept, first, go to the Ontology
section of your Project. Here you get an overview of all Concepts created in this project. To add a new Concept, simply select New child concept
from the context-menu:
Since you start at 'the top' of the Ontology hierarchy you start with creating a new child. Give this Concept a name (e.g. "Cars") and fill in the Concept details on the right hand side of the screen:
Besides the basic information that is associated with a Concept (see above), it is also possible to add one or more properties to a Concept. You can use these properties for whatever you want. E.g. maybe you want to add a car brand logo image to a Concept: just add a property of the type file
to the Concept. You can also use concept properties in expressions in labels or template properties this allows you to show a logo depending on sign in for example you can find a guide here.
To add a property to a Concept, select the Concept and click on the Properties
button in the menu-bar. You now get a list of all defined properties (this list is empty for a new Concept, of course), and you can New
, Edit
or Delete
a property.
Click on add
. You now get the properties form for the new property:
Once a property has been defined, you can change the details or value of that property through the detailed information of the descendant Concept Properties in the context menu. Now you can also assign a value to the added property by editing or adding a descendants (child) of the original concept by double clicking the concept or select edit from its context menu.
Concept properties and the value a concept property holds can be used in expressions throughout your application. You can use this by adding a colon (:
) and the name of the property in single quotes, here is an example of a concept with a property called 'Image'
and holds a file with a image belonging to the march property: 'Month'.'March':'Image'
Towards the end of this article, you can find simple steps on how to display a custom logo based on the signed-in user.
To add a children to a Concept, simply select New child
. A new child is now created as part of a Concept. All properties of the parent Concept are available, and the information details you needed to enter for the parent must/can also be specified for the child.
If you want to create a picklist that is rather long (e.g. all the Countries in the world, or all the US states), you may want to impor4t that data to create a list. To use the Import function you first select the Concept where you want to add all the children. Let's say you have a Concept called "Cars" and want to add a list of all car brands. Select "Cars" and click on the Import
button. You get the import screen:
Here you copy the list of car brands in the main container (see example above). This container has a dropdown list where you specify how you want to use this list. nN our example we select Local name
because we want all the children to use the name of the car brand as the local name. Other import options are:
Content type
Description
Synonym
Display name - you can select multiple display name if your application support multiple languages
Any property you may have defined for the Concept "Car"
You can also specify whether the copied list has a header or not. Is a separator used and if so: which one? What is the qualifier you want to use.
Now simply click on ok
, and the list is imported and your Concept "Cars" now has a complete list of child Concepts that each represent a car brand.
Concept properties can also be used in your template settings, in this example we will use the "Menu logo" setting to show a logo fitting the account.
Upload the different Logo image files to the file folder in the modeler.
Create a concept folder called Companies for example and add a property called 'Logo file'
Add the different Companies as concepts and add the logo files in their Logo File property.
Add a concept data field to select and hold the information for which Company a user works for in this case we can call it 'Company'. (You also need a field that holds the current user information)
There are 2 ways to execute the last part:
Create a calculated field that calculates the current logo and uses the calculated field in the template settings directly.
Add the expression directly to the template expressions.
All template settings are text fields this means you need to use the FileUrl() expression to convert the return type from a file to the direct Url from the file. This is not needed when you use property files in template interactions for example.
There are two areas that are for advanced use: Ontology Queries and Ontology Relations. These topics will be discussed in the next pages and makes concepts more powerful.
Name
The name of the node. This cannot be changed .
Data source
When you click the button on the right hand side, you can select either a file or a text field from which the data has to be imported. This can be a field from another list, a field you access trough OData or through a Webservice.
Destination
Here you select the list into which the data has to be imported. When you click the list button, you can select the target list. This only applies to the CSV or Excel
format.
Edit Mappings
When you click the Edit Mappings
button, a new popup appears where you can define the mapping of the source to the target
Original Image
Datafield, File
Set the image that will be converted.
Resize by absolute pixels
Expressions, Boolean
True: resize by width and height in pixels, False: resize by percentage Default: width and height in pixels.
Percentage of original
Expressions, Number
Set the percentage of the original image. Between 1 and 99
New width (px)
Expressions, Number
Set the goal width of the image by pixels.
New Height (px)
Expressions, Number
Set the goal height of the image by pixels.
Output: resized Image
Datafield, File
The new file generated after resized process.
Name
The name of the node. The name is automatically set and cannot be changed.
Format
There are five options:
– CSV
– Excel (*.xlsx)
– this is for the most recent Excel versions
– Excel 97-2003 (*.xls)
– this is for the older Excel versions
– Json
– XML
Select how you want to export the data
Source list ‘
Specify the list that is the source for the data export. This does not apply to XML
or Json
exports.
Filter by
If you need to filter the data that wil be exported, you can add an expression that defines that filter.
Target field
Here you select the field where you want to store the exported data. This field has to be of the type File
or Text
(in case of XML
or Json
).
Delimiter
There are four delimiters you can use:
– Comma
– Colon
– Semicolon
– Tab
This property is only available (and needed) when the format of the export is CSV. This property defines which delimiter should be used to separate the data.
Encoding
You can choose between 6 different character encodings:
– ASCII
– Windows-1252
– Latin 1
– ISO 8859-1
– UTF-8
– UTF-16 LE
– UTF-16 BE
This property is only available (and needed) when the format of the export is CSV. The property makes it possible to select the character encoding you want to use for the data export
Include BOM
Sort by
When you click on this button you get to the Sorting popup where you can add expressions that make it possible to sort the exported data.
Edit Columns
The Edit Columns
button takes you to the Data Export Maps editor.
You can find the situation in the images in the Quick Starters found in the MyWEM app store. There we provide example project for a Consumer and a Provider webservice that can be added to your workspace. Looking for Custom HTTP Endpoints? This feature is provided in the Navigation Tab.
You can find more information there.
This page is about setting up a webservice in your project, to use the webservice you need to implement it in your flowcharts. You can find more about using the webservice nodes here: Invoke Webservice, HTTP Request, Import & Export Data.
WEM applications can use SOAP to integrate with external systems. SOAP “Simple Object Access Protocol” is a highly standardized and self-documenting messaging framework, where everything you can do is strictly defined in a WSDL “Web Service Description/Definition Language” document. SOAP is a very rigid integration standard, which makes it especially easy to use for novice or non-technical users, because both systems integrating with each other have a pre-defined way of communicating. When using SOAP, the data exchanged is always in the XML format, but you’ll never know, as WEM does all the translation from and to XML into the familiar WEM datamodels. WEM can both expose from (let others integrate with your WEM Project) and consume (integrate with other systems) SOAP web services with a minimum of technical skills.Before you can use SOAP services in your flowcharts, you need to configure the webservices that you want to be available. The same is true if you want to expose your application to external systems: you need to define the service that external systems can access.
In order to consume external SOAP services you need to specify those services in the WEM Modeler. To do this, you need to take the following steps:
In the project resources, click on Web services and comet
to get the following screen where you manage the webservices:
Click on the three dots next to Add web service
or use a right-click. When you select import webservice a window opens where you can give it a Service name
and choose to import From web
or From file
. Select what applies. You pick From web
if you have a URL from which you can load the service's WSDL (Web Services Description Language) file. This file contains the description of the web service you want to use. If the URL points towards a .asmx or .svc file, WEM will assume this refers to a .Net webservice and WEM then knows how to access the wsdl file. If you pick From file
you either have to specify a wsdl file to upload or a zipfile in case you need multiple wsdl files (plus the xsd file) to specify the webservice.
When the webservice has been successfully defined, you can see the service being added to the resource pane on the left hand side.
The webservice is now ready to be used in the workflows of the application.
In order to use the webservice, WEM needs to know the web service URL. By defaults this URL is the same for preview, staging and live environments. But if you want, you can change that. In the webservice overview simply open the context menu of the webservice, select service configuration
and change the URL that needs to be changed. Changes in the configuration screen are automatically saved.
External webservices might require some kind of authentication in order to access them. These authentication requirements have to be defined in the WSDL. WEM supports Basic Authentication (username/password) and Client Certificate authentication. When consuming the WSDL in WEM, it should automatically recognize these requirements. In the service configuration
window you can enter the required information (client certificate or username/password).
***If WEM does not seem to recognize the requirements (this can happen because of custom non-standard definitions that WEM does not yet recognize), you won't see the authentication fields in tab endpoint configuration. If you are sure there should be authentication, create a ticket and provide the WSDL as URL or file attachment so we can investigate how WEM should interpret this specific definition.
In the Project resource pane, the newly added webservice is visible:
Here you can also find the service operation, but you can drill down into the details. For every service operation you find:
Input
: if you click on this/open the node, you can see which fields are needed as input for the service operation to be executed successfully
Output
: these are the fields that contain the result of the webservice operation
Faults
: The fields that are available in case there are any errors
Using the webservice is done in flowcharts, where the same information is available, since that is where you work with the actual data.
When you want your application to expose data to other systems, you can set up a webservice that other systems can access. To expose your application, you need to take the following steps:
Create the webservice that other systems can use to access your application by opening the context menu (three dots, right click) and select new webservice.
Create the operation(s) that other systems can use to access data and/or functionality that you want to expose to the outside world with the context menu and add new operation;
For every operation you need to specify the input and output fields that are needed. When you added a operation, you can find a input and output where you can add a field with the context menu;
For every operation you create a flowchart that takes care of processing input data as well as generating the output data is created. In this flowchart you add a bit of logic to handle the requests.
Document the webservice and operations, to provide all necessary information to the people that use your webservice. This option is available for the webservice and the different operations by using the context menu.
All these steps are explained in a bit more detail in the next sections
When you want your application to expose data to other systems, you can set up a webservice that other systems can access. To do this, you go to Web services and comet
in the project resource pane and select Webservice (expose)
. You are now able to create a web service, by opening the context menu and clicking on New web service
. You are then presented with the following form:
You only need to enter a name to create a webservices. This will create the webservice under the chosen name and a default URL (http(s)://{portal-hostname}/webservices/expose) with portal-hostname
as placeholder. The form also has a lot of other options to customize the webservice. You can change the following settings:
Enable WEM 2.7 compatibility mode Legacy option to make it make the service compatible with WEM 2.7. Only use this for this compatibility issues with old projects.
Enable JSON fields renaming
Publishing specific settings(covered in later sections):
Metadata exposure
Authentication method
You have can now find the created webservice in the resource pane under Web service (expose). With the context lets you can add operations, change the settings or edit the documentation and get the service working.
Operations
Now that you have created a webservice, you can start to create one or more operations. These operations define what data or functionality is being shared with external systems. To create a new operation, simply click on New Operation
in the context menu. You have to specify the operation name (you cannot use any spaces or special charatars). and you can add documentation.
Edit Settings When you click on this button the edit Web Service Window opens giving you the options to change the same settings as when you created the webservice.
Edit Documentation Allows you to add specific documentation that is shown when the public URL of the web service is entered in a browser.
A operation shown in the project tree:
The next step to take is to define which information is needed as input for the webservice, and which information will be returned to the external system using the webservice.
Every operation can define which input is needed, which output will be returned and what fault information is available. The input detail is input information that the operation needs in order to successfully execute the operation. All output that is returned is stored in the output details. And in case something goes wrong during the execution of the operation, fault information is available through the fault details. In order to define all the necessary information, every new operation creates an action flowchart and three empty folders in the operation tree:
When all data is specified, the final step is needed: create the flowchart that processes the request and make sure the correct data is returned.
To process the input for the exposed webservice and return the correct data, you need to create a flowchart for every operation that is available in the webservice. First you have to define the input and output (and fault) fields, as explained above. Next you create the logic for the processing in the created action flowchart. This flowchart was already created when the new operation was defined, so you can immediately start to work with this flowchart.
Click on the operation in the Project tree. You are now in the webservice details overview where you will find all defined operations.
Double-click on the operation to open the flowchart. When the flowchart is opened it initially only shows two nodes: a Start
and a End: Succes
node.
Complete the flowchart where you use the input fields in your flowchart. The flowchart also assigns values to the output fields, to make sure the webservice can return the requested data. In case you run into an error situation, the flowchart can also assign data to the defined fault fields.
The exposed webservice will be used by developers (or WEM Modelers) that want their systems to communicate/integrate with your application. In order to make that as easy as possible you can document your webservice and every individual operation. This documentation can be used to describe the webservice in general, to explain what an operation does, what input is needed, what output can be expected, etc. You can document whatever you want.
Documenting your webservice is done using the Edit documentation
button that is in the context menu of your webservice and on every operation you defined. When you click on this option, you will get a documentation form:
Just hit the Save
button to save the documentation.
To document an operation, simply click on the Edit documentation
button in the operation overview screen. You get a similar documentation window as the service documentation:
This documentation is available from the Edit webservice menu when you opened from the context menu of a webservice. When you open this window, and the Metadata exposure
has been set to Public URL there is a link called Open public URL in new window link
, next to the Metadata exposure
field. This is the URL to the webservice documentation page, which will look like this:
You will find the following information here:
At the top is the service documentation, as you have specified it;
A Resources section with links to information that is valuable for developers:
a link to the Full WEM WSDL best for WEM consumers (so developers can use that WSDL file to set up communication from their system to your WEM application);
a link to the Basic WSDL for non-WEM consumers
a link to a JavaScript file that can be used as the client JavaScript proxy;
a link to a Typescript definition file for a client proxy;
An Operations section with a link to:
a page that contains Request and Response examples for
SOAP 1.1 & SOAP 1.2
JavaScript
JSON
These example show how based on one of the mentioned protocols your webservice can be used
At the bottom is the specific Operation documentation, as you have specified it.
You are now ready to expose this webservice to external systems: publish and share the endpoint links.
When you are ready building your webservice, you need to publish the project to make it available for consumers. Your webservice will be available at 3 different endpoints for preview, staging and live:
http(s)://{portal-hostname}/webservice/[webservicename]
You can find the correct links in the Edit Webservice
window for each separate environment. There are two ways to find the links: Double selecting the webservice you want to see the details of or with the context menu and selecting edit settings
. You will get de webservice details, including links to the correct endpoint URLs.
The second way to exposing a webservice is through the Metadata exposure
setting. You can change this by selecting the Public URL link. This setting offers two options to deal with the webservice metadata:
Public URL: This will expose all metadata information that is available through the Go to documentation page
link that will appear next to the dropdown box. This links to a page that is described in the previous section.
By WSDL file: Only WSDL metadata is exposed. When this is selected, the user can click on the link on WSDL
link that appears beneath the dropdown box. This will open an new browser window with a link to the webservice WSDL file;
It is possible to specify how the communication with the webservice is encrypted. There are three possible methods:
None: there will be no encryption;
Transport: the communication will be encrypted. When this option is selected, you need to specify the authentication method:
None No authentication
Client certificate The SOAP procotol validates certificates
Username/password (build-in) The SOAP protocol validates client credentials
Username/password (flowchart) Check the client credentials in the flowchart of a web service operation
Message: use this when the actual message itself (the content) needs to be encrypted. When this option is selected, you must:
Choose /upload a client certificate;
Specify the authentication method:
None No authentication
Client certificate The SOAP procotol validates certificates
Username/password (build-in) The SOAP protocol validates client credentials
Username/password (flowchart) Check the client credentials in the flowchart of a web service operation
You can specify the encryption method for each of the three environments: preview, staging and live. And each environment can have a different encryption approach.
If you change your exposed webservice and publish it to staging/live environments, the consumers need to be updated. If your consumer is another WEM-project, just go to the webservices (consume) in the resource pane, open the webservice context menu and hit Update web service
. This is necessary when:
Input fields change;
Output fields change;
Faults change;
Security settings changed;
Operations change;
Concepts in the Ontology change, which are used in any of the input/output single/multi-select fields (ontology-concepts are made part of the webservice definition)
Any of these changes results in a change of the contract
, the definition of the webservice.
Your application needs an efficient and structured way to store data. WEM allows you to do this at the Data Model area of the WEM Modeler. Here, you specify the data you need, what type of data you need, and how all the data should be organized. Just like the other resource tabs the datamodel tab has a search function that can use the name and technical name to look for a specific folder, list or field from your model. When hovering over the results the name and its technical name are shown in a tool-tip.
When you are modelling a large application, it is not unusual to have many different types of data stored in your application. In order to keep the lists manageable, the WEM Modeler has the ability to create folders and store data in lists, in these folders. This way you can create a hierarchy of folders that reflect your application.
For example, you are building a product management application. When you start out, you realize you need to store product management data, but also data that is used for user authentication. You could end up with a very simple folder structure that looks like this:
Folders do not offer specific functionality. Their function is to help you structure the way you work with lists (and flowcharts as well).
The way WEM organizes data, is through lists. A list is a model of an entity that describes the properties of that entity. For example, the entity "Customer" has properties such as Company name, Company address, URL, Telephone number, etc. To use such an entity in WEM you would create a list
in the datamodel, and in this list create fields
that represent the properties of the entity.
There are two types of lists:
Database list - this type of list stores the data in a database, and therefore all data is remains available when you stop using the application and come back at a later time
Transient list - this type of list does not store data permanently. Instead it only stores data as long as the application session lasts. You would store data in a transient list when you only need temporarily. A good example is a shopping cart of an online store: you can add items to the shopping cart, but once you leave the online store or you close your browser, the data is deleted. You no longer need the data (the items) in the shopping cart so you do not need to store that data permanently.
When you right-click or use the context menu button [...] on items in the Data model-tab
, you get to all the data model functionalities. You will also see a menu with several options:
After you select New list
, you get a popup where you can enter the following:
Name
: this is the name you want to give the list. It must be a unique name;
Technical name
: the technical name is an automatically generated field. This is the name WEM uses to reference this field. You will see this name when you are, for example, using expressions where you need to access this field.
List type
: You can choose whether you want a transient list
or a database list
. The rows of a database list are stored in the database of the project. The data in a transient list have the lifetime of the client session.
Hit the Save
button and the list is created.
Introduced 2022-06-27, you can define a Default Label on a List (entity), using an expression that can use fields from the list to generate a Label-Field for one (and each) specific row when it is used as Reference Input Field in a form (and you do not specify a custom Option Label).
Fields are where the data-elements are stored. For example if you want to store information about an order, you may want to store information such as order number, order data, customer name, product ordered, price per product, number of products in the order, etc. Each of these items is a field in a list (for example in the "Order" list).
You can create Fields outside a list - in that case, the Field can hold only one piece of information during each user-session. These are also called Session Fields.
In WEM you can create fields for every Data Type WEM supports:
Boolean (Yes/No)
Single select (concept)
Multi select (concept set)
Date Time
Duration (time-span)
File
Number (numeric)
Reference
Rich Text
Text
When a new database list is created, two field are always created with the list:
ID
: this is the unique identifier for a row in a list. This field is required and cannot be changed;
Last modified
: this field contains the date of when a specific row is last modified. As with the ÌD
field, you cannot change or delete the Last modified
field.
To add a field to a list, right-click on the list and select New field
pop-up window. You can now select the type of field you want to add. The list is the same as the data types mentioned above. After you have selected the type of field you need, you get a popup where you can add additional information that is needed for the field.
A number of properties are available for all fields:
Name
: The name you want to give a field;
Technical name
: The technical name that WEM uses throughout the Modeler;
Save this field to the database
: This checkbox is checked by default. In some cases you may want a field that you want to use temporarily so no data needs to be stored. But normally this box is always checked;
Default value
: the default value that you want to give this field every time e new row for a list is added.
There are also a number of properties that are dependent on the type of field:
Text field
Validation
: A number of pre-defined validation rules can be applied. For example when the validation e-mail
is used, WEM checks whether the entered value is a correct email address;
Max length
: The maximum number of characters that can be stored in this field; it is set to 50 by default. If you enter a value larger than 2048, the value will show 2048, but this will technically be changed to nvarchar(max)
in the database (approx. 1 billion characters). **
Numeric
Minimum value
: this is the minimum value this Numeric field will accept;
Maximum value
: the maximum value this Numeric field will accept;
File
Validation
: Allows you to select one (1) file-type that is allowed for this field. So if you want to store, let's say, only pdf files, you can specify that here;
Maximum file size
: if the file that is stored can only have a maximum size, then you can specify that here. The file size is specified in kilobytes;
Allow access when
: this is where you can restrict access to this field. You can define the access rule using the expression editor. This field is required when you create a File
field, and should be put to True
when used without any constraints;
Single select
& Multi select
Root concept
: you need to specify which concept you want to use for the single select field. Check the Ontology/Concept section for more information on 'concepts';
Depth
: if a concept has multiple levels, you have the possibility to specify whether you only want to be able to select the direct children of the concept, or the children of all levels of this concept. Again, check the Ontology/Concept section for more information on 'concepts';
Only concepts with type
: you can restrict the available concepts to concepts that have a specific type. Do this by selecting the particular type you're interested in;
Reference
Referenced list
: a reference field refers to another list, so obviously you need to specify to which list this field is refering. Simply click on the button on the right-hand side of the field and a selection pop-up appears that enables you to select the list that that needs to be referenced to.
Edit
is used to change the properties of a field or list. To edit a field: select the field/list and click the edit
button;
Move
is used to move a field/list to another list or folder . When a field/list is selected and move
is selected, a popup appears where you can select the destination of the field/list;
Delete
is straightforward, thus will delete the field or list you have selected. When you do this, all data that is stored in the database will also be deleted.
You can only delete an item if it is not used anywhere in your application.
Besides the regular fields, you can also add a Calculated field
to a list. A calculated field is a field that contains a value that is calculated. When you add a calculated field, the calculation needs to result in a data type that is the same as the data type of the calculated field. The calculation itself is defined using a WEM expression.
A Calculated Field in a List does NOT store a value in the database, but its Expression is always evaluated and executed at the point where it is used (in a node in a flow, or in another expression).
Every calculated field has the same properties:
Name
: The name you want to give a field;
Technical name
: The technical name WEM uses throughout the Modeler;
Type
: The type that the expressions should yield as result (only available when creating a new calculated field);
Calculated value
: this is where you enter the expression that specifies the calculation.
The Find usages
button provides very useful information: it shows where the selected element is used in your application. When you need to change something or delete a field, you need to know where it is used. This is a simple way to find out whether that is possible, and even better, it allows you to go to the locations where an item is used if you want to change or delete it.
These are process that all generate files.
Function
Its function is to generate a Data Matrix (kind of QR code), this can be used to convert text information to a graphical representation matrix of black and white pixels. These are often used for inventory tracking or to hold information about products.
Properties
The properties:
Property Name | Type | Use Description |
---|---|---|
For the flowchart, connect from the interaction node to the create data matrix and back to the interaction with the result using the default exit.
One way to use it:
Create a temporary file field that will store the generated image.
Use an interaction node with a button to start the process, an input field and a label for the result.
Put the Data Matrix node in and set the properties.
Create an exit that will go to the node to execute the process.
After executing the process, the temporary field appears, in this case, a file field data type.
The result of the process, with the data matrix generated.
Its function is to generate a Word Document from the contents of a provided WEM Template.
The use of the Word Template property is currently restricted to only Kubernetes environments. This property is for Word template documents to apply preset styling to the generated documents - it is limited, as Word Properties and Fields are not accessible to set using WEM. Also, custom Fonts should be set to be Embedded in the Word File Properties.
This process has the following properties:
For the flowchart, connect from the interaction node to generate Word node. As shown below we have the interaction node where we want to activate the process and see the response, and the process node is connected with the button exit and back with the default exit.
One way to use it:
Create a temporary text field that will be the one that receives the document file.
Use an interaction node, then, the Generate Word Document node.
Create an exit that will go to the node to execute the process and use the default exit for the response.
In the node properties, the "edit template" gives access to a template in which you can create what you want to add in the future Word document, this template is similar to the editor that appears inside the interaction node;
Before clicking the generate word button.
as After executing the process, the temporary field appears the one that will carry the result of the executing of the node.
The result.
Its function is to generate a PDF Document through the node configuration. WEM allows, through the templates editor, templates to be converted into a PDF document.
The properties that can be used in the PDF process:
Flowchart
Connect from the interaction node to generate PDF. In the canvas, the process flow that will be executing the project is designed, in the following example, we will be using the start node that will always be by default; an interaction node as shown below, fill in the properties section, where can be set the different dimensions of the future PDF document.
One of the easiest ways to use it basically:
Sample casse an interaction node, then, the Generate PDF document node.
Create a temporary file field that will be the one that receives the PDF file field.
Create an exit that will go to the node to execute the process.
In the node properties, the "edit template" gives access to a template in which you can create what you want to add to future PDF files, this template is similar to the editor that appears inside the interaction node;
Before clicking the generate pdf button.
The result of the process executed.
Its function is to generate a file from text through the interaction node configuration, it is quite interesting and it will help us when we have to make a file that comes from a text type; in a direct and immediate way. You can take text-type fields that contain information loaded in advance, either manually, or with one of the options offered by the import node, through CSV, Excel, JSON, XML, or through an external list of Odata, web service, an API, etc…
Flowchart
Connect from the interaction node to generate a File from text. In the canvas, the process flow that will be executing the project is designed, in the following example, we will be using the start node that will always be by default; an interaction node as an "overlay", as shown below.
One of the easiest ways to use it basically:
Use an interaction node, then, the Generate file from text.
Create a temporary file field that will be the one that receives the file from text.
Create an exit that will go to the node to execute the process.
Before clicking the button "Generate file from text".
After clicking file from text, the field appears.
The result.
Function
Its function is to generate an image through the interaction node configuration. Generating an image through this process execution node, allows everything that has been developed within an interaction node with its template edition, to be captured in an image which can be customized according to the idea of the user. The most fascinating thing about all this is that it is extremely easy to use and can contribute to many useful processes in systems development.
Properties:
One of the easiest ways to use it basically:
Use an interaction node, then we put the generate image node.
Create a temporary text field that will be the one that receives the image file.
Create an exit that will go to the node to execute the process.
In the node properties, the "edit template" gives access to a template in which you can create what you want to add in the future Image file, this template is similar to the editor that appears inside the interaction node;
1. Before clicking the generate pdf button.
2. After executing the process, the temporary field appears.
Functions
Its function is to change generate a generate HTML from a rich text field.
Properties
How to use this node?
One of the ways to use this node
The first thing we do is use an interaction node, then we put the generated HTML from the rich text node.
Inside the file content, set the HTML.
After, create a temporary text field which will be the one that receives the generated HTML file.
Create an exit that will go to the node to execute the process.
Before clicking the generate HTML from rich text button.
After executing the process, the temporary field appears.
The result.
With this process node you can generate different kinds of qr-codes, this is an image that can be read by a lot of devices. The process translates a text to a grid of black and white pixels, this can be translated back to text by all kinds of devices with a camera. A lot of times qr-codes are used to share information without having to retype it. This is someting different then a datamatrix which is used in a lot of warehouses management.
Among the properties, it presents:
The symbol versions of QR Code range from Version 1 to Version 40. Each version has a different module configuration or number of modules. (The module refers to the black and white dots that make up QR Code.) "Module configuration" refers to the number of modules contained in a symbol, commencing with Version 1 (21 × 21 modules) up to Version 40 (177 × 177 modules). Each higher version number comprises 4 additional modules per side. More about that here.
One of the easiest ways to use it is shown below, we start with a interaction node, here we provide the input for the qr code and set up a few of the options. The interaction node has a exit to the qr process node, and uses the default exit to go back and show the result.
1. The first thing we do is use an interaction node, and a field to store the code that is made. In this case is that a transient or session field where we temporary store the image.
2. You can leave all the settings on default by keeping them empty or add values to them. In the images below you will see that there are a few transient fields added for specific settings.
3. Add a button that triggers the node exit Create QR-code thats connected to the process node. and add the field that you used for the output to the interaction template.
Fill in the input field with the code you want to convert.
select the create code button that invokes the process
The result of the process, with the QR-code generated.
Its function to create a ZIP archive.
Among the properties, it presents:
One of the easiest ways to use it basically
The first thing we do is use an interaction node, then we put the generate Generate Zip Archive.
Create a temporary text field that will be the one that receives the Generate Zip Archive.
Create an exit that will go to the node to execute the process and back again to show the result.
You have created a ZIP packager, this can be used when working with large files you want to save in the datamodel.
Setting up a databsase connection through OData.
"Open Data Protocol (OData) is an open protocol which allows the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way." The WEM Modeler uses OData to access the database of an external system. And in order to do that, you need to specify where that database resides and what data can be accessed. Once WEM has this information, you can directly access the data from e.g. an interaction node. We call a system that is accessed through Data a Remote data source
.
Setting up a new Remote data source
is very simple. Follow these steps:
Go to the Remote data source
node in the Project tree. Click on Add data service
.
Give the service a name, this is the name that WEM will use for this particular data service.
You can now add a URL, and if needed, fill in the Username and Password for the source.
Based on these credentials the remote data source gives access to the database, including the specific rights this user has (insert, update, delete rights).
If the metadata or data model changes the service needs the current information. To update the service itself, click on the update odata service definition
button and WEM will update the data service. This can be found by right clicking the service you want to change or opening the context menu with the 3 dots when you have the intended service selected.
Alternatively, manually update the OData source by selecting 'Edit Settings' from the same context menu. This opens a window where you can update the name, service URL, settings for File URL's and batch optimization, the credentials for preview staging and live and service root URL's.
Once the remote data source is specified, it can be accessed via the WEM Modeler. Everywhere in WEM where you can access data, you can access this remote data source. E.g. if you are working an interaction node, the list(s) that represent the remote data can be found in the webservice tab of the resource pane under the specified datasource. Or when you create an expression using the expression editor, you can access the same remote data source lists and fields.
It is possible to expose your WEM application's data using the OData protocol. When you do this, external systems can access the data of your application using OData. Exposing OData is very straightforward:
Create user credentials that will be used by external systems to access the data of your application. The credentials can be found in the settings tab under the security settings on the right. Here you you can manage and add access to the OData lists and user access settings.
After you have created the user credentials you specify which list(s) in your data model are exposed to that user (and therefore to the external system);
Here you can also specify for each list which operations are available to that user (and therefore to the external system).
Once the steps above have been executed, your application is accessible via OData. Note: exposing your application via OData is always done per portal. In other words, you need to specify access per portal.
The next sections describe each step in more detail.
Managing OData users is done via the security settings found on the project setting page. When you go to the project settings and click on OData logins, you will see the following window open:
Here you can manage, add and see all active OData logins and control their access level. In the first column you can see the username used to log in to the service and the Portal column is where you specify either one or all portal used by the service for each user.
Management of the data list that is available for each user is managed by clicking the blue access link in the third column. This will open a new window called access control for 'username', here you select the access level and which specific lists are available through Odata. First you choose between giving full access and a restricted access, with the restricted setting allowing you to choose specific lists like the image below. More about this at the end.
This is the first page to add a new OData login user to your project. Here you set up the name/username, password and the portal(s) you want to provide access to. When this is filled in correctly you can go to the next page for the access level settings. This is the same screen as managing existing users access level. When you are done you save the user with the create button.
Deleting users can be done from the OData logins screen from earlier. In this screen the context menu for each user can be opened with the three dots on the right of the window. From here you can also change the access control, change usernames, change passwords and delete the users and its access to the data.
Once an OData user has been created, this user can be given access to your application's data. To do this, select the user you want to manage and select Access control rules
. This will bring up the following screen:
There are two main options:
1.Allow full access to all data
- this is the default selection.This option means that the user can access all lists of your application and has the right to insert data, update data or delete data for all the lists in your application. In other words, the user has full control over your application's data;
2.Specify access rules
This option makes it possible to have very granular control over providing access to your application's data. When this option is selected, you can specify which lists the user has access to and which actions can be performed on this list.
When the first option is selected the individual lists will be greyed out, but when the restricted access is selected you can start allowing to read on specific lists. The other options are available when the read is already selected, users will always need to be able to read the lists before they can get additional rights. Besides being able to read the data in the list you also have the following options:
Allow insert
- the user (external system) can insert new rows to the selected list;
Allow update
- the user (external system) can update data in the selected list;
Allow delete
- the user (external system) can delete rows in the selected list.
By selecting one or more options, it is possible to control exactly what the user (and therefor the external system) can do with the selected list.
You can repeat the steps above to select all lists of your application that need to be exposed.
The Realtime messages functionality is used to allow an application to send messages. That means there is always a sender and a receiver/listener. These are created using Realtime Messages flowchart nodes. A sender sends a messages through a particular message chanel, and the listener listens on a chanel for messages to arrive. And when a message arrives a specific action will be taken. Example: a helpdesk system uses realtime messages to send a message to an escalation chanel when a high priority problem occurs. The listener then takes appropriate action (e.g. send a text message to an escalation officer) when a message arrives.
Almost all the functionality is available through the realtime messaging nodes. However, before you can use the functionality you need to define what a message looks like.
To define a message, go to the webservice and comet tab
in the WEM Modeler resource pane.
Open the context menu of the folder Comet messages and select New message
to create a new message definition. You have to give the message a Name
and optionally a Technical name
.
Next you add the list(s) and/or fields that should be part of your message. In other words: you can create a model of all the data that you want to be part of your message. You can not create a database list because none of the data is stored in the database: it is only used when a message is sent directly over a connection to all listeners.
When you have defined the data model of the message, you can start sending and receiving messages using the Comet Message node. As part of the flow executing the message process you can assign values to the fields created in the message definition before you trigger the send message comet node, and all active listeners will receive these values - and you can present them or work with them in the On Message Received action (for example, using a Flowchart to show the message in an overlay).
WEM supports SAML2.0 and OAuth2.0
Some external blogs about SAML vs OAuth:
The blog from StrongDM provides quite some clear information about the differences and when to use SAML or OAuth.
But, in short: SAML is a more secure way for user identification and authentication (login, single sign-on) and could well be used in WEM to let users login to your WEM application from your existing Identity Management environment (like Microsoft Azure AD or Entra ID).
And OAuth can very well be used to let users access their resources (or your company's shared resources) and external apps from within your WEM Application, using the OAuth authorization mechanism. Example: use Microsoft Graph via OAuth to access files and resources in a secure way.
Typically, SAML is for Authentication (who are you, what is your identity) and OAuth is for Authorization (what are you allowed to do or see, what are your permissions and privileges). Both can be used side-by-side in WEM. SAML is a bit like a house key. It grants you access to the facility. OAuth is a bit like the rules of the house that dictate what the person can and can't do once inside.
An application may require users to log onto the system (authentication). That means the application needs some kind of user management and users need to authenticate themselves and need to be authorized to access the application. To do this you have several options:
Create all user management functionality as part of your application (there is a great example available in My WEM that you can use as a base - look for Basic Authentication project in Quick Starters or the App Store);
Use an external authentication provider. In this case the WEM application relies on an external authentication provider to authenticate users. You may still need to link them to an application-specific list of users for additional details or specific in-app authorizations.
Using an external authentication provider means that users usually need to log onto their company network only once and don’t need to log into an application (like your WEM application) that relies on the authentication provider, such as e.g. Microsoft’s Active Directory or Entra ID. This is also known as “Single Sign-On” (or SSO).
The two most widely used protocols by authentication providers are SAML and OAuth2.
SAML is used for authentication and authorization and is mostly used in corporate/enterprise environments. Microsoft (Active Directory / EntraID), Google (G Suite), Oracle and Salesforce are just a few companies that have SAML based authentication and authorization products.
OAuth2 is mostly used as an authorization protocol and is widely used by social platforms like Facebook, LinkedIn, Twitter, etc. A lot of mobile apps use Oauth2 to authorize users to use the app (“Log in with your Facebook account”).
WEM supports both protocols. In the flowchart documentation about the authentication nodes you can find how to use these in your application. But before you can use them, the authentication providers need to be configured. That is the focus of this article.
First, choose which type (SAML or OAuth) you want to setup. Then go to the appropriate folder (SAML 2.0 authentication
or OAuth 2.0 authorization
) in the project tree and click on the Add authentication provider
option in the context menu [...].
Give your identity provider a name that will be used throughout the WEM Modeler.
Next, continue with either SAML or OAuth settings...
This page describes how to create an App Registration in Microsoft Entra ID to be used as a SAML Identity Provider in WEM.
Microsoft does make changes to their approaches, so we can not guarantee that what we describe here will remain exactly the same. But it should help...
Go to https://entra.microsoft.com/ (you need to have admin permissions).
In the sidebar menu, find the Applications and within that option, go to Enterprise Applications.
Click on New Application.
Click on Create your own application.
Add a name, select "Integrate any other application you don't find in the gallery (Non-gallery)" and click Create.
Wait until the app is created.
In the Enterprise Application, you assign users and groups that are allowed to login using this specific Application (SSO in your WEM portal). Depending on your Active Directory / Entra ID Plan, you can only use specific users (the basic plans). To assign groups, you need the more expensive plans (and users with appropriate licenses). The Business Standard license plan allows you to add users only.
So, select users (and groups if possible) and click the Assign button at the bottom, so when you return to the overview of Users and Groups, you see the users and groups.
Back on the overview, click 2. Set up Single Sign On and select the SAML option.
At 1. Basic Saml Configuration, click edit. Here you need to enter the Identifier (Entity ID) to identify your application to Entra ID, and this will also be part of the settings in WEM. Microsoft Entra ID supports the urn:// structure as in the example, and we offten use a guid with a domain - for example, you can use the Application ID from the overview and add your domain:
urn://{Application-Id}.wem.io
The second required item is the Reply URL. This will hold the URL(s) from your WEM portal that will receive the authentication token.
To be able to correctly fill this Reply URL, you should already have created the SAML provider element in your WEM Project - or you can enter the values here now and make sure that you use the same name in WEM - the Reply Url for any WEM portal is in the following format:
https://{portal-hostname}/auth/saml/{saml-name you set in WEM}
You should already have a staging hostname and perhaps a live hostname. You can enter both in the same App Registration here, so both staging and live portals use the same App Registration and thus cater for the same set of users/groups. If you want to have different sets of users/groups for staging and for live, you must create 2 different App Registrations!
Hit the save button and close the panel.
In this part, Attributes and Claims, you provide the fields that hold the values for a specific Identity that will be provided to your WEM application. By default you have the Unique User Identifier (usually the user principal name), email address and name-attributes. Here you can add other fields as well or change the existing claims to use other fields from the Identity.
This is where you make the settings for the Token Signing and Verification Certificates. You do not need to change anything here.
The default setting for Verification is not required - if this is changed, you also need to change the corresponding setting in your WEM SAML settings.
The important part in this section, is the App Federation Metadata Url. It looks something like
https://login.microsoftonline.com/{tenant-id}/federationmetadata/2007-06/federationmetadata.xml?appid={app-id}
You should copy this url, because with this url you can quickly set up the SAML element in your WEM Project, AND this url is required for the option to "Fetch certificates at Runtime" - which is a necessary option when using Microsoft Entra ID or Azure AD!
In this part, you will see the Login Url, Microsoft Entra Identifier and Logout Url that you can use in your SAML Element settings - BUT, if you use the App Federation Metadata Url to setup your SAML element, that will automatically set these items correctly.
This should provide all you need to know to set up the SAML within Microsoft Entry ID, or at least provide insight into the necessary actions and settings.
Setup external authentication with OAuth2.0
OAuth (short for "Open Authorization") is an open standard for access delegation, commonly used as a way for internet users to grant websites or applications access to their information on other websites without requiring the provision of passwords, as defined by Wikipedia. This article will outline the necessary configurations to integrate an OAuth authorization service, focusing on its implementation using Google as the service provider.
Before integrating an authorization service, it's important to set up the authorization provider. The setup procedure varies depending on the chosen provider. For the purposes of this article, Google will serve as the example provider; however, most OAuth service providers can be used ().
Below is a visual representation of the OAuth process when used to get information from a google docs server:
Once a provider is chosen and configured, the next step involves navigating to the "webservice & comet" tab located in the resource pane of the modeler project. Within this tab, the OAuth 2.0 authorization folder is accessible, serving as the designated area for configuring the client-side Authorization Service utilized by the authentication node within the flowcharts. To add a service, access the context menu of the OAuth folder through either right-clicking or selecting the three dots and choosing "add."
The details needed for the server depend on the Grant type chosen, this type of authentication and communication used by the API. WEM supports the following grant types:
Authorization Code
Client Credentials
JSON Web Token
With the authorization code grant a code is exchanged for an access token where the user gets a chance to see what information access is requested. The user sees the authorization prompt and approves the app's request. The user is redirected back to the application with an authorization code in the query string, the application then exchanges the authorization code for an access token that unlocks the client application.
In the case of the Client Credentials grant, the application requests an access token to access its own data or functionalities outside of the context of a user. This grant type is typically used by clients to access information or functionalities pertaining to the application itself, rather than those associated with a specific user.
When configuring the JWT definition, the initial step involves setting the token endpoint, which denotes the URL to which the JWT is dispatched. Following this, the subsequent step entails establishing the JWT Claims. A claim manifests as a name and value pair, wherein the name consistently assumes a string format, while the value may encompass any JSON value or expression. Two distinct types of claims exist:
iss
(issuer): Issuer of the JWT
sub
(subject): Subject of the JWT (the user)
aud
(audience): Recipient for which the JWT is intended
exp
(expiration time): Time after which the JWT expires
nbf
(not before time): Time before which the JWT must not be accepted for processing
iat
(issued at time): Time at which the JWT was issued; can be used to determine age of the JWT
jti
(JWT ID): Unique identifier; can be used to prevent the JWT from being replayed (allows a token to be used only once)
Custom: consists of non-registered public or private claims. Public claims are collision-resistant while private claims are subject to possible collisions.
Within the client details, inclusion of the Client ID and secret are imperative for secure communication with the client. This setup is configured on a per-portal basis, enabling the utilization of different IDs and Secrets as required. In this section, you can specify the redirect URLs for different portals and runtimes of the application. These URLs typically adhere to the following syntax:
Preview: https://preview.wem.io/*projectID*/auth/oauth2/
Staging: http://*projectName*.staging.wem.io/auth/oauth2/
Live: http://*projectName*.live.wem.io/auth/oauth2/
When utilizing an OAuth service for login, an access token is automatically generated and exchanged between the authorization server and resource server. This access or bearer token can be mapped to a field for use in custom webservices or when using JWT grant with custom headers.
The complete response of the authorization to the Oauth2 service can be mapped to a text field, this will contain the entire response returned from the service. This can be useful for debugging issues.
Initially, an OAuth client ID Credentials must be established in the (Google) Cloud Console, along with the setup or selection of an API. Once the API is obtained, proceed to the credentials section, where you can navigate to OAuth 2.0 Client IDs. Alternatively, you can create a new one using the "create credentials" option, specifying "OAuth client ID" as the type, and choosing a name for identification purposes.
The next step is setting up the JavaScript origins and the Authorized redirect URIs. The JavaScript origins is the hostnames of the WEM project in preview, staging and live:
The authorized redirect URIs is where you are redirected after the authentication by google. The path will be appended with the authorization code for access and can’t contain URL fragments, relative paths, or wildcards, and can’t be a public IP address. In the testcase this will be:
When the client, the provider and Oauth definition is set up the Oauth service can be used in the modeler. There are two main ways to use the Oauth implementation in a project; with a authentication node or with a http request node using the Oauth as authentication provider.
The authentication node can be used to authorize the application access to a API or to allow the project to perform actions on the resource provider or to check if a user has access to certain information. In the image below is an implementation where the Auth node is used to give the application access to certain actions on the provider service.
In the following example the Oauth authorization is used to set up a GET request for a list of files in a google docs account. We set up the definition with the google examples talked about earlier:
The next step is setting up the authorization service in google docs, for this you can use the talked about method earlier, there you find the client details and add them to the Oauth definition in the modeler.
If the token field has not been created yet that would be the next step as this is where the Access token is mapped. The service also needs a response field to store the response and use it further in the application. For this specific example we also create a list to store the information received from google docs. In this case that is a FileType, MimeType, and Name field.
This section involves creating the flowchart and setting up the necessary nodes for our service. The final result will resemble the following:
First, we set up a landing page from which the request is initiated, and its results are displayed upon completion. This corresponds to the OAuth node shown in the image above.
On this page we want have a button to start send the request and a datafield to show the results when we return.
The next node is the HTTP request node that handles the request to google docs and handles the OAuth authentication.
Next step is connecting the exits to the next node, for this solution a failed and a success node is created. These nodes just have to show the the response body to be able to see if it was successful and can be removed after set up is done.
The import node Datasource is the response body from the step before. Now we run the project and webservice, if this is set up correctly the response body can be used to create the import node mapping.
Now connect up the import node back to the original Oauth node with the data-grid and run the service. When everything is setup correctly he result can look like this:
You can find more detailed information about Certificates in WEM in the Security Section of the Project Settings: .
You can manage your certificates in the project resource bar under the tab Webservices and comet
. In this pane, you see the folders to set up web services, authentication protocols and a certificates folder on the bottom. You have 4 types of certificates you can add, namely Client certificates
, Server certificates
, Trusted clients
and Trusted servers
. When you select a folder with the right mouse button you get an option window like this:
When you want to upload a certificate a new window appears with the option to drag and drop a certificate file, or you select one from your system by clicking the empty box. The different certificate types accept different filetypes.
Client and server certificates: .pem, .pfx or .p12
Trusted server and Trusted Client: .crt, .cer, .cert, .pem or .der
You can also create your own self signed client and server certificates. Selecting this option opens a new window with a form, here you can fill in the details of the certificates and create it.
Certificates that are added to the modeler can be viewed and downloaded. You can do this by using right-mouse-button or the [...]
three-dot button. This opens the context menu, where you can select to open the certificate details or download the certificate. You can also download the certificate from the details screen. These are the details a certificate provides:
You can also download your private key. When you do this, you are prompted with a window giving you the possibility to include the private key. A private key is protected by a password you need to create before you can download your certificate.
Advanced custom queries with the WEM Ontology tools
Concept Queries can be used to create custom filtered collections on the Concepts in your Project. This part is quite abstract and can be used in a complex concept-model with custom relations between the concepts and custom concept types. For the basic and more straightforward filtering of concepts, you could do a lot already with the available in Expressions.
For the purposes of understanding this topic a little better, let us consider the following use case.
A Company has a page to add and manage users.
A User has a user name, a role, one or more functions and a location (country). In the screenshots below, you can see the Data Model and the Concepts tree.
Requirements:
A user with Role = Admin can be assigned one or all of the 4 functions - Add / Modify / Delete / View Users).
A user with Role = Advanced User can be assigned one or all of only 3 functions - Add / Modify / View Users).
A user with Role = Regular User can only be assigned one function - View users.
We will now show how the Requirements can be implemented using Concept Relations and Queries.
A Concept Query is a Definition that will yield a collection of concepts. It can be used in Expressions as being a List of Concepts (similar to a Concept-Set or Multi-Select). Or it can be used as Source for Single/Multi Select Input fields, to present a specifically filtered list of options to choose from. The Concept Query contains of certain Nodes, Annotations/Indicators and Relations to form the Definition by which the Concepts are checked and collected to be presented as the result.
To add a new Concept Query, you need to go to the Concepts and concept queries
section of your Project. To add a new Concept Query, right-click on Concept Queries
or click on the ...
to open the context-menu and click on New concept query
from the menu as shown below.
You are then prompted to enter a name for the Concept Query.
Once you name your Concept Query, you are presented with the concept query designer. On the screen, you can see the Concept Query editor menu at the top and more importantly, the concept query nodes at the left. Then you have the canvas where you would drag and drop nodes from the left, just as you would while working on a flowchart, and use the items in the editor at the top. This would create a concept query.
We'll first discuss the (greyish) Literal Nodes, before we get back to the first node (the Unknown Concept).
This node can be used to select one specific single concept item from your Concept tree.
Illustration 1.1:
Let us re-visit the use case that we had above and let's see how we can achieve this requirement using a concept query that uses a single-select literal - "A user with Role = Regular User can only be assigned one functions - View users."
Once you have added a new concept query and given it a name, drag the single-select node on to the canvas. This will bring up a prompt, where you need to select one and only one concept item. In our use case, we want to select 'View Users' under 'Functions'.
Once you do that, you will see something like the below. You may notice the Invalid
error on the editor menu (top).
2. The next step would be to click on node and then click on the Include
button on the editor menu. This will change the node as you can see below and the Invalid
error is no longer there.
3. The last step would be to use this concept query in an interaction node. In this example, we have a conditionals that would allow different configurations for the 'Functions' field, based on the value selected for 'Role'. For now, let us focus on the last one in the screenshot below. We have now applied the concept query to the single-select field 'Functions', if 'Role' = 'Regular User'.
Now, this is what you see as a result. As you can see, the 'Functions' has been filtered on one value that is configured in the ontology query.
Illustration 1.2:
Let's now try the next requirement - "A user with Role = Advanced User can be assigned one or all of only 3 functions - Add / modify / view users".
One of the ways this can be achieved is by using single-select literals as shown below. This illustrates that there can be more than one nodes in a query.
Note: There are better ways of handling this requirement using multi-select literals, which we will see shortly.
Just as the name suggests, this works the same way, except that it there can be multiple concept items assigned to the node.
Illustration 2.1:
Let's go back to the earlier requirement that we had fulfilled in Illustration 1.2 - "A user with Role = Advanced User can be assigned one or all of only 3 functions - Add / modify / view users".
Instead of using 3 single-select literals for 3 individual concept items, we could use one multi-select literal and assign all the 3 concept items for the same result. Notice the values assigned at the right-hand panel.
But there is yet another way of doing this.
Illustration 2.2:
We will learn about the Exclude
option in the editor menu now. So, instead of including 3 of the 4 concept items as we did in Illustration 2.1, we could also Include
all 4 concept item in one node and the Exclude
1 concept item in another node for the same result.
Note the Include
annotation on the first node that is assigned all 4 values and the Exclude
annotation on the second node that is assigned one value that we do not need.
This method could get unweildy when the full list of values that need to be included, get longer. We will shortly see yet another way of handling the same scenario.
The Unknown Concept node lets you define in a more dynamic way which concepts are part of this Node as opposed to the static Literal Concept nodes as discussed before. You can easily assign the entire pick-list to this node without having to select individual concept items under the list, just by indicating the Root Concept and the Depth.
Illustration 3.1:
Continuing from Illustration 2.2, we will now see how we could use the unknown concept to simplify the query.
As you can see from the right hand panel, we have assigned All Children
of the 'Functions' concept item to the unknown concept node. This will select only the direct children (all concepts of the single level below the chosen root concept). If there are deeper levels under the chosen root concept and you want all those concepts as well, the All Descendants option can be used.
The 'Type'-property in the right-hand panel can be used to filter the children further based on a concept type that exists and is defined on the concepts within the root.
Mind: the chosen root concept (in this case, 'Functions') is NOT part of the result...
While the Single Select literal node holds one specific concept item statically, a Single Select Data Field can be used to get a specific Concept Item that is defined at runtime in the User Session. This can make the Concept Query even more flexible and linked to any situation in Runtime.
Let's build upon the earlier use cases where we used different concept queries to add users to the database. Now, let's shift our focus to the User Summary screen that shows a list of all users. We would like to filter the users list based on a role. This can be achieved by creating a concept query with a single select data field.
Illustration 4.1:
To create this query, we need a single-select data field. Let's use the session data field 'Select user role' for this.
We now create a concept query and drag the node onto the canvas. This immediately prompts us to select a single-select data field. Another option is to directly drag the specific Single Select Data-field from the Data Model tree onto the Concept Query Canvas, and it will create the Single Select Data Field node.
Once that is done and the node annotated with Include
, the query is ready.
Next, we create a filter in the 'Users' table as shown below.
This approach does not really need a Concept Query, as you can also directly use the Select User Role data-field (holding the selected concept to filter) in the filter expression. In that case, you can just use [Users.Role] = [SelectUserRole]
in your expression, as they are both single select fields holding one specific concept.
This is just to illustrate a basic approach to using Concept Queries, which can be made more complex.
This is very similar to the above, except that the data field that is being used here is of multi-select data type. Again, also possible to achieve directly in Expression, but then you'll need something like[Users.Role] in [MultipleSelectedUserRoles]
in your expression, to check if the single User Role is part of the selected Roles in the Multi-Select.
Using the Concept Query always assumes that the result is a list of concepts, with 0, 1 or more concepts, so in expressions a Concept Query must always be treated as a Concept-List.
Text literal is a way to filter Ontology items (concepts) based on text matching exactly or containing or starting with or ending with a specific text, with an option to indicate whether or not the search should be case sensitive.
Illustration 6.1:
Let's consider a concept item consisting of a list of countries.
Now, say we would like to filter and show only the countries whose names start with 'U'.
We start by creating a new concept query and adding an unknown concept node and assigning it to the concept item 'Countries' and annotating it with Include
option.
We then drag the text literal on to the canvas.
As you can see, the right hand panel shows a field where you can enter the text that you would like to search, then the matching options (exact / contains / starts with / ends with) and an option box to indicate whether you want the search to be case sensitive or not. We fill these options as appropriate ( Starts With U, not case-sensitive).
Finally, we need to indicate that the condition that has been set in the literal node has to apply to the unknown concept query node. This is achieved by making a connection as shown below, with an arrow that allows you to select a Relation from the available options, to indicate whether the filter should be performed on:
alternative terms that are added to the Synonyms property in the concept items;
the display name property of the concept (language-sensitive);
the description property of the concept.
The final query in our illustration looks like this.
This can be read as: "Include all child concepts of Countries that have a Display Name that starts with U."
While the text literal that we saw in the previous section is set to a fixed text, we can also use Text Data Field to match with a text value from the User Session in Runtime. This last node allows you to select a Text Data Field from your Data Model to use, while you can also drag a Text Data Field from the Data Model tree directly onto the Concept Query Canvas and that will create the Text Data Field Node.
Now you've seen the basics for Concept Queries. In the next part we'll dive into the Concept Relations, that give even more possibilities to create complex Concept Queries, using pre-defined relations and even with your own Custom Relations between Concepts.
Besides the hierarchical structure in Concepts and creating Parent-Child relations, the WEM Ontology feature also allows you to create Custom Relations between Concepts, making cross-references possible. You can create a very intricate "model" of a specific "reality".
On this page we will explore what relations are, how to use them and how to create your own custom relation types. By understanding and utilizing relations in your projects, you will be able to incorporate dynamic multi and single select fields, as well as subsets of concepts from different levels on the hierarchy tree. To properly utilize concept relations, it is crucial to comprehend and apply several important components. We will first explain these key components and then provide a step-by-step guide using two examples.
First, it is important to understand what concepts are, you can read up on them . When you add concepts to the project you create a static hierarchy visualized by the different levels in the tree view. This establishes a connection between the concepts and their higher levels.
In the example above you have the models of cars with a connection to the above brand level because they are a part of that concept. However, there is no connection between the car types and the models. This issue can be resolved through concept relations. The relations in the image are of one type and can not be changed later. The 'polo' concept will always be under Volkswagen, you cannot just move it around to create relations with different concepts.
Before you start connecting concepts and set up new relations, you need a way to define the type of relation. There are a few default relation types that are already defined when a project is created. One such type is the 'is parent of'
relation. The 'is parent'
relation type is one you automatically use, when you look at the image above, the concept Toyota is parent of the concept Yaris. In this case you go from lower level up to a higher level above, you can also look at it from the other side, The Yaris concept 'is child of'
the Toyota concept, 'is child of'
is the inverse name of 'is parent of'
. In this case, the relation type is not symmetric; the meaning changes depending on the direction of traversal (up to down or down to up).
To add a relation type you go to the concept and concept queries tab in the resource pane on the left and find the folder concept relation types. When you expand the folder you will see the types of relations already made. Open the context menu of this folder by selecting the three dots or right click on the relations folder, this will open a context menu with a the options to create relation types and a option to open the concept relations overview of this project.
Name - The name given to the relation type. It is strongly advised to have a name that properly matches its function.
Symmetric - Toggle this when a type functions the same both ways.
* only when the symmetric option is toggled off.
The concept relations in your project are managed from the Concept relation page, you can create new relations with the green button on the right. Below the green button you find a filter to make finding the right relations easier, when you go to this page from a concept this is filled in to just show relations with that concept. In the image below you will see what this page looks like the first time you go to this page and it is still empty. When you are sure you added a relation but cant find it in this screen make sure the filter is reset, this can be easy to miss.
From Concept - The starting point of the relation, interpret the relation type name from this concept.
Relation type - The type of relation you want to make,
Show the inverted... - For asymmetric relations you can use this toggle switch to the inverted or other side of the relation.
To concept(s) - This is the other side of the relations, Here you can add one or more concepts to apply the relation to. When making one to many relations this can speed up the process. This is where it can be useful to use the show inverted option.
Once a relation is created, it appears on the concept relations screen. The concept from which the relation is interpreted is shown on the left. The relation type is displayed in the middle, with the other side of the relation on the right. On the far right, you can still see the properties used to create these relations. Even though we selected a set in the 'To concept' field, three rows are added to the concept relations screen.
Open the context menu of concept queries and create a new query, this opens the concept queries designer. For this example we will use a multi-select datafield to manipulate the concepts available in a multi-select. So in this case depending on the selected option in the multi select we expect to get the concepts back that have a relation with the selected concept.
The last part is to add the ontology query to a interaction screen or implement it in an expression. Most common and easy way is to add to a multi select field. In the image below the query is added to the Month multi select, this is what is affected by the query.
You can also use concept queries in expressions, like this for example:
This expression will generate a list of months that are associated with the selected quarters.
A rental company wants a be able to filter their available cars list. They want to be able to filter on model type and be able to select the models that fit the earlier selected type. They are going to use multi-select fields to make the filter options. In the video below you see the the result we want to work towards.
The concepts for the brands and its models are already made and a new concept for the type of model is added, this is the hierarchy we are going to use:
In the images you can see the ontology or the levels the concepts are added. The brand of a car and the model has a parent child relation because they are part of the same hierarchy. The type concept is in the cars level and does not have a relation with the model concepts (yet).
The next step is making the filter fields. In this case we want a field to select the type and fields for the different brands to select the possible models for that brand.
We have everything we need to start working on the relations now. First we want to create the relation type. This is the type of relation between the model type and the specific models. Go to the concept relation types folder in the concept and concept queries in the resource pane. Open the context menu and select new relation type. We look at this relation form the model type concept, this is what we use as starting point for the name. So in this case we will call the relation 'type of the models'. The reverse name is going to be 'Model of the Type'. The meaning of the relation changes depending on what you look at, so this relation is asymmetric.
Open the Concept relation overview and add the relations between the model type and the models. In the image below you can see the first relations between the Hot Hatch type and the models is already added and the properties for the Coupe and its models is filled in the new relation form. Do this every model you want to be able to filter on.
The next step is creating the concept query, for this you go to the concept queries in concepts and concept queries, and open the context menu to select new concept query. Give the query a fitting name and it will then open the concept query designer. The first thing we need to add is the search field, in this case add a multi select datafield and select the type multi select field. Add the unknown concept for the other side of the relation and select one of the brands. Last step is to draw the 'relation line' between the two nodes and select the right relation type, in this case type of the models. (In the multi select you choose the type of models that the concept should return.)
Last step is making the interaction screen and adding the concept queries to the right fields. In the image you can see the result and below that the steps to create it.
Adaptive column to divide the page for a search filter and the list that is filtered.
Panel with the multi select filter options in the left cell and the datagrid in the right.
First multi select it the model types as filter options
A conditional, this is to show all options when the type doesn't have a selection, when a type is selected the condition goes to false and form in the bottom picture is shown.
The multi select for every brand of cars is added, this is the important part. On the right side of the image you can see the Ontology query field, in this form the query we made is added. Now the options that are shown are only those with a relation to the selected model type.
To finish it up a filter is added to the datagrid to only show cars that comply with the selected filter options.
In the concept query for the example we added an relation for every brand separately. For brand concept you need a new relation with the multi select datafield. There is also a ways to do this with one relation. When you select a level higher as unknown concept and select the depth to all descendants you get every concept back under brand. This way you can use one multi select in the interface and don't need to add every brand to the query separately. This will work best if you use the type options of concept to filter out the models from the brands, when using the all descendants options you also get the brand name as a concept back.
You can also use the concept query with relations in expressions, this gives you the ability to use it in filters or use it in labels. This label creates a list that returns the months in the a selected quarter.
The short answer is everywhere where concepts are used. This article mostly showed it in use for filters.
It can also be used in giving user rolls specific rights which fit their access level, through using custom relations between the rights and access levels.
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Action flowchart
Input folder
Output folder
Faults folder
The Input and Output folders are greyed to clearly show that this information type has not been specified. Maybe this information is not needed, or maybe the details still have to be specified. Once details are specified, the the greyed out folder will change to a Input and Output icon. For each of these folders you need to define which data is needed: you need to add the fields and/or lists that should be given as input for the webservice. You also need to add the fields and/or lists where the results you want to return are stored. And the same applies to fault information. All this information will be part of the service definition that is used by the external systems. To define the data that is needed: click on the folder (e.g. Input) and now you do the same you would do when you create a data model: select the folder and open the context menu and select New field
. When you use single-select or multi-select fields, the concepts that are referred to in these fields will be part of the service definition as well, so external systems have the correct and complete data.
Property name | Type | Description |
---|---|---|
Property name | Type | Description |
---|---|---|
After executing the process, the temporary field appears.
Property name | Type | Description |
---|---|---|
Property name | Type | Description |
---|---|---|
The result:
Property Name | Type | Description |
---|---|---|
When you click on in the top left of the Odata logins window this popup appears:
Setting | Description |
---|
Setting | Description |
---|
Setting | Description |
---|
JWTs can be used as OAuth 2.0 to encode all relevant parts of an access token into the access token itself instead of having to store them in a database. The JWT Type enables creating a custom JWT claims.
Registered: standard claims registered with the and defined by the to ensure interoperability with third-party, or external, applications. OIDC standard claims are reserved claims like:
Preview: Staging: Live:
Preview: Staging: Live:
Setting | Value |
---|
For the url we put the scope and endpoint of the google drive API service, in this case "" this lets the webservice know where to start. The request is a GET request and the default timeout is good enough. The Follow redirect should be toggled on as this is needed for the authentication, which is set to OAuth 2 with the Oauth definition made earlier as the provider. The only property left is the response body that can be written to the response field made earlier.
You can find more detailed information about Certificates in WEM in the Security Section of the Project Settings: .
Toolbar button | Description |
---|
4. Single select data field
5. Multi select data field
6. Text literal
7. Text data field
Inverse Name -*asymmetric - The name of the inverse type, when the relation inverses. Read more about what this means in the .
When the button is selected it is replaced by the new relation form, here you set up the relation Properties. The form looks like this:
A Concept Query is a Definition that will yield a collection of concepts. It can be used in Expressions as being a List of Concepts (similar to a Concept-Set or Multi-Select). Or it can be used as Source for Single/Multi Select Input fields, to present a specifically filtered list of options to choose from. The Concept Query contains of certain Nodes, Annotations/Indicators and Relations to form the Definition by which the Concepts are checked and collected to be presented as the result. If you don't know what concepts queries are or how they work we advice you to first read more about .
This means we need a multi-select datafield in the query (), andweI need to add the concept we want to manipulate as a unknown concept (The concept changes depending on the multi-select so unknown). Now we can use the relation by dragging a line from the multi-select to the the concept we want to manipulate and select the relation between them. In the case of the image below we want a set of months depending on what quarter is selected in the application. The relation is that a quarter holds specific months, so in this case we drag a line from quarters (the multi-select that sets the condition) to the concept of months and select right concept type. In this case 'Contains the months', a relation type made for this use-case. What is left before this query is ready is telling if the children of the concepts (months) to be included or excluded, in this case included.
etc.
Text Input *Prompt
The text(field) that the AI responds to
Instruction
Give an instruction on how the bot needs to behave.
Model
Choose the AI-model that is used by the node for now only GPT 3.5 Turbo is supported.
Temperature
Level of risk and creativity in generated text. A value between 0 and 2, default is 1, default for chat.openai.com is 0.7.
Maximum number of tokens
Amount of units of text. This can be words, phrases, or individual characters depending on level of granularity.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Response
Text field from your datamodel. This is where the response of the AI is stored.
Text Input *Input
The text(field) that is edited by the AI.
*Instruction
Give an instruction as to what to modify of the existing text.
Model
Choose the AI-model that is used by the node, you can choose between Text or Code Davinci.
Temperature
Level of risk and creativity in generated text. A value between 0 and 2, default is 1, default for chat.openai.com is 0.7.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Response
Text field from your datamodel. This is where the response of the AI is stored.
Text Input *Prompt
The text you want ChatGPT to complete or answer.
Model
Choose the AI-model used on the text. The default is "Ada". Other models.
Temperature
Level of risk and creativity in generated text. A value between 0 and 2, default is 1, default for chat.openai.com is 0.7.
Maximum number of tokens
Amount of units of text. This can be words, phrases, or individual characters depending on level of granularity.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Response
Text field from your datamodel. This is where the response of the AI is stored.
Text Input *Prompt
Use text or a text field to make a prompt, this is the context you give for the image you want to create.
*File Name
The name for the generated file.
Image Size
The size of the created image in pixels. You can choose 256, 512 or 1024 pixels. Images are always square, with default as default 256 pixels.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Image
This for a data model field where the image is stored.
Audio Input *File
Audio file in the format of mp3, mp4, mpeg, mpga, m4a, wav or webm.
Prompt
Text to guide the model's style or instruction to continue a previous audio segment. The prompt should be in English
Temperature
Level of risk and creativity in generated text. A value between 0 and 1, default is 1, default for chat.openai.com is 0.7.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Response
Text field from your datamodel. This is where the response of the AI is stored.
Audio Input *File
Audio file in the format of mp3, mp4, mpeg, mpga, m4a, wav or webm.
Prompt
Text to guide the model's style or continue a previous audio segment. The prompt should be in English
Language
The language of the input audio in English. The name has to match with ISO-639-1 format name.
Temperature
Level of risk and creativity in generated text. A value between 0 and 1, default is 1.
OpenAI API key
The OpenAI API uses API keys for authentication. Visit the OpenAI website to retrieve the API key you need to use in your requests.
Output Response
Text field from your datamodel. This is where the response of the AI is stored.
Filename
Expressions, text
Set the file name, in the temporary field.
Word template
Expression, text
You can insert a Word template here. This will be used when the document is created (with limitations).
Page width
Expressions, number
To set the width of the file in mm. Leave empty for standard A4
Page height
Expressions, number
To set the height of the file in mm. Leave empty for standard A4
Page margins
Expressions, number
To set the margins of the file in mm. Leave empty for standard A4
Page margin left/right
Expressions, number
To set the margin at left or right in mm. Leave empty for standard A4
Page margin top/bottom
Expressions, number
To set the margin at top or bottom in mm. Leave empty for standard A4
Page as landscape
Expressions, Boolean
To set if page as landscape. Boolean.
Generated Word Document
Datafield, file
Field to store the generated Word document.
Filename
Expressions, Text
Set the file name, in the temporary field.
Author
Expressions, Text
To set the author of the file.
Subject
Expressions, Text
To set the subject of the file.
Title
Expressions, Text
To set the title of the file.
Page width
Expressions, Number
To set the width of the file.
Page height
Expressions, Number
To set the height of the file.
Page margins
Expressions, Number
To set the margins of the file.
Page as landscape
Expressions, Boolean
To set if as landscape. Boolean.
Show header and footer
Expressions, Boolean
To set if show the header and footer. Boolean.
Custom header text
Expressions, Text
To set the custom header text.
Custom footer text
Expressions, Text
To set the footer text.
Show the outline of HTML headers
Expressions, Boolean
To set if you want to show an outline based on the HTML headers (h1, h2, h3) in the document (index with jumplinks).
Number of levels for the header outline
Expressions, Number
To set the number of levels for the outline (corresponding with html headers h1, h2, h3).
Generated PDF Document
Datafield, File
Field to store the generated PDF document
File content
Expressions, text
To set the content of the following file.
Generated filename
Expressions, text
To set the name of the generated file.
Generated file
Datafield, file
location for the file generated after the process.
Property name
Type
Use Description
Filename
Expressions, text
To set the file name.
Element Selector
Expressions, text
To set the element selector. This allows you to make images for specific preset elements.
Transparant
Expressions, boolean
To set the transparent of the image.
Width in pixels
Expressions, number
To set the width of the image.
Height in pixels
Expressions, number
To set the height of the image.
Output: Generated image file
Datafield, file
To put the output file field for the image generated.
Property name
Type
Use Description
File content
Expression, richtext
To set the content in the file
Generated filename
Expression, text
To set the name of the file generated
Output: Generated file
Datalfield, file
To put the output file field for the image generated.
Data input
Expressions, text
Text input field that is translated to qr code.
Use GS1 standard
Expressions, boolean
Use GS1 compliant qr codes
Character set
Expressions, text
Default is UTF-8, the older ISO-8859-1 is also supported and can be used.
Disable ECI
Expressions, boolean
Extended channel interpretations (ECI) enables using codes longer then standard ISO-8859 and different encodings. default is enabled
QR version
Expressions, number
Size version of the qr code, more in the blue hint box below.
Use compact mode
Expressions, boolean
Creates a smaller qr code with less error correction and less readable.
Error correction
Expressions, text (single symbol)
Level of error correction where:
Level "L" (Low) 7% of data bytes can be restored. Default
Level "M" (Medium) 15% of data bytes can be restored.
Level "Q" (Quartile)[80] 25% of data bytes can be restored.
Level "H" (High) 30% of data bytes can be restored.
Margin
Expressions, number
Size in pixels of a clear area around a symbol where nothing is printed.
Output: Output file
Datalist, file
The location where the output should be stored.
Input file
Expressions, File
The datafield where the file you want ZIPed is saved.
Output file name
Expressions, text
Name of the ZIP File
Output file
Datafield, file
Location of where the ZIP is saved.
Name | A unique name used in only in the modeler for identification. |
Item | Options |
Name | The name you want to give this property. |
Value type | - | The value type you want this property to have |
Applies on | - | Specify if this property is available to only the direct children of a Concept, or to all children of all children. |
Only concepts with type | If a property should only be available to concepts of a specific Concept type, you can specify that Concept type here. |
Include | When a single/multi-select/concept element (refer to Concept Query nodes below) is |
Exclude | When a single/multi-select/concept element (refer to Concept Query nodes below) is |
Ignore | Use this button to clear selected concept-element from being either Included or Excluded from the result. |
100% | This will reset the view of the flowchart to 100% and centered. |
Zoom in | Zoom in on the flowchart (see less nodes but bigger). |
Zoom out | Zoom out of the flowchart (see more nodes but smaller). |
Invalid | You will see this error message when the concept query is incomplete or incorrect. When the query is complete and correct, this will be blank. |
The environment that makes your application available to your users
The WEM Runtime environment is a web-based application platform that is specifically built to interpret WEM Portal Definitions as they are created in the WEM Modeler, and serve them as specific web applications.
The WEM Platform does not generate code like other (low-code) platforms do (which in turn needs to be deployed/installed/configured). The WEM Runtime itself IS the compiled and deployed code, secured, optimized, scalable and compartmentalized using micro-services. It is already up and running and available to accept new or changed Portal Definitions. The WEM Portal Definitions that the Runtime uses to transform into operational web applications, contain the necessary resources which are compiled and distributed from the Modeler to the targeted Runtime environments by the Publish Process. The Runtime retrieves the information from the Publisher and loads the new definition to start serving it as your application.
The WEM Runtime generates currently standard Responsive HTML results, using JavaScript and AJAX, so WEM Portals can be used in any modern browser (Edge, Chrome, Firefox, Safari, Brave, Opera) on any operating system (Windows, Apple, ChromeOS, Linux, Android, iOS).
The WEM Runtime can support hundreds of Portals running simultaneously side-by-side.
The WEM Runtime Platform itself can run on different environments, it can also run on a Private Cloud (Azure, AWS). The WEM Organization provides support and guidelines in setting up the Runtime in Private Clouds.
The WEM Runtime consists of two instances, called Staging and Live. Every instance of the runtime has its own database, so the live environment keeps the users data.
Staging: Typically used for review and acceptance testing with a (limited) group of testers/users, as a step between Application Development (Modeler) and Live/Production.
Live: Typically used as the final production version.
To get your application from the Modeler to the Runtime environment the Publish Process is used which will be explained in more detail on the next page.
The WEM Staging Runtime Environment - between Development in Modeler and Use in Production
The first instance of the WEM Runtime is the Staging Runtime. When publishing a project it will always first transfer to the Staging Runtime. The WEM Staging Runtime is typically used for review and acceptance testing with a (limited) group of testers/users, as a step between Application Development in the Modeler and Usage in Live/Production.
The default URL for the staging environment is https://[projectname].staging.wem.io. and can be changed in the portal settings. More about changing hostnames can be found here: #manage-hostnames.
Every environment (Preview, Staging, Live) has its own database. When publishing a project to a new environment you publish the data structure only, NOT its data content. This is necessary to keep the right data in your live environment. When your storage strategy is set to All portals share the same database
you still have a different database for Staging and for Live used by both portals. More about this here: #storage-strategy.
Before you publish your project to the staging environment you need a valid license. This is a license from WEM giving you permission to publish. You can find out more about licenses here.
Authorization endpoint |
Token endpoint |
Scope |
Token endpoint | Endpoint used to request a token used to validate the login to the client. The client credentials are used for validation. |
Scope |
Grant type | Authorization Code |
Authorization endpoint |
Token endpoint |
Scope |
Data input
Expressions, text
Information to convert to matrix.
Use GS1 standard
Expressions, boolean
Toggle GS1 compliance
Symbol shape (square or rectangle)
Expressions, text
square of 1 or 4 blocks rectangle of 2 blocks
Output file
Datalist, file
Field that holds the resulting image.
Create tasks for automated and scheduled execution
WEM-Native Automated/Scheduled Tasks using this Task feature is available only on full-Kubernetes Private Clouds.
(Automated) Tasks can only perform Action Flowcharts, they can not have any User Interaction Nodes. These Task Action Flowcharts must have a Start Node and one End Node. In between they can contain other Action Flowcharts and any node that does not require user interaction. See image below for an example of an Action Flowchart that will be used as a Task and see that nodes with User Interactions are unavailable because the type of flowchart is Action Flow - which you can indicate when you create a new flowchart.
When you have created your Action Flowchart(s) that you want to use as Tasks, next step is to define your Task so it can be used for scheduling. In the Navigation Pane you can find the Tasks folder. This is where you define Tasks in your project with a Name, a Description and most importantly the Action Flowchart that should be executed when the Task is run.
This now needs to be published to the WEM Runtime (running on a WEM Kubernetes Cloud) to make it available for tools that can schedule these tasks on that WEM Runtime Environment.
The Task Scheduler is a specific micro-service as part of the WEM Kubernetes Runtime Environment and is responsible for storing and managing the Schedules, as well as executing the Tasks according to those Schedules. Executing Tasks is done on specific threads within the Kubernetes Runtime and mostly separated from the normal Portal usage (like users accessing the portal in their browser). This way, Tasks may run quite long, as long as they need and the Task Scheduler Service will keep it running as needed. So it is very important to make sure that the Task to be performed, is properly tested. Any issues with Task executions may be found in the logs (also available in the DevOps portal).
A WEM Kubernetes Runtime Environment provides several secured API endpoints to support certain DevOps-related features. Scheduling Tasks is one of those API endpoints with which the Task Scheduler micro-service can be accessed to manage Schedules.
The WEM Platform provides the WEM DevOps Portal, a portal created using WEM Modeler that can access the Kubernetes Runtime API Endpoints and make it easy to use. This DevOps Portal is only available to people who require access to their WEM Kubernetes Runtime Environment to use certain WEM-Related DevOps features. Scheduling Tasks in portals running on that environment is one of those features.
If you have access and permissions to schedule tasks, you can to go to the Portals Section in the DevOps portal, find the portal in the list and click the Action button to access the portal-specific features - where Scheduled Tasks is what we're looking for now.
The DevOps portal will access the Portal Definition on the runtime to retrieve the available Tasks as defined and published earlier.
Every task can get multiple schedules, as you can see in the image. The selected task has 6 defined schedules, which are examples of the various schedule types. You can also see if a schedule is enabled, when it was last executed and when the next execution is planned.
Available Schedule Types are:
One Time
Daily Recurring (time of day or recurring)
Weekly Recurring (with daily options)
Monthly Recurring (with daily options)
Each Schedule Type provides specific fields to define the schedule. See some examples:
At the creation of Schedules for a Task, the schedule will be Disabled by default unless you switch the Enabled option. A disabled schedule will not be executed, but the definition will be available. You can always Enable and Disable a schedule later via the specific Schedules Details page.
On the Schedule Details page, you can see the information about the schedule as well as perform following actions:
Switch between Enabled and Disabled using the Play/Pause button.
Get Current State: this action will ask the Task Scheduling Service for the current state of the specific task. If it is currently running, it will show.
Run Task Now: this action will execute the task immediately regardless of the schedule definition - useful for testing.
Delete Schedule: will completely remove the schedule definition and the task will no longer be executed. A warning will be displayed to ask if you really want to delete the schedule definition.
Edit Schedule: to change the schedule definition, including type and all other type-specific settings.
Rename Schedule: the Name of the Schedule is part of the Task Scheduler Endpoint - renaming it is therefore a specific action that also needs to be sent to the Task Scheduler service.
If you are looking for ways to automate and schedule tasks in projects that do not run on a Kubernetes Runtime (like the current Public Clouds in Europe and APAC), read this post on our WEM Forum about using EasyCron
In the Template fragments
folder you can add and edit template fragments for use in the template editor of interaction nodes. The template fragments editor is similar to the main template editor used in regular interaction nodes. To learn more about this template editor, go to the corresponding section.
One major difference between Template Fragments and the regular Templates for Interaction Nodes, is the use of buttons.
In Template Fragments, buttons cannot be used as "Follow button exit
", because Exits are linked to specific Interaction Nodes on the Flowchart Canvas, and only the main Template which is the Template Property of that Interaction Node, has access to the available exits and can use these exits in buttons on the page. Template Fragments can be part of many Templates and even other Fragments, so they can be linked to many nodes that each have their own specific exits.
In Template Fragments, you will typically use buttons that Refresh the page, Execute Flowcharts, Navigate to navigation items, Link to external addresses or a File in the Files library.
Templates Fragments are generally used for following reasons:
Re-usable Content: if certain page elements are used multiple times in the same or even in different interaction nodes, these elements can be added to a Template Fragment for easy re-use in different Templates (or other Fragments). Define once, use many times.
Keep large Interaction Page clean and well-organized: with a lot of elements on one page, that page can become cluttered in the Template Editor and not easy to understand, maintain or make changes at later stages. Using Template Fragments to hold certain coherent blocks of content can help to make the Page nice and tight, easy to oversee and make changes.
Help debug and find issues: if a large page is causing issues or fails to render at runtime, you can use Template Fragments to isolate (coherent) parts of the page and one-by-one add them to the page, or use conditionals to turn them on or off, until you find the specific element that is causing the issue.
You can create templates in the project Templates, Widgets, Files and Hyperlink tab of the resource pane through a right-clink on the Template fragments
folder. Then give the new template a name and start editing the template.
When you want to use the template in an interaction node, the template can be dragged and dropped from the resource pane onto the template editor. Or, you can use the Nested Template icon from the Editor Toolbar - this will open an overlay where you can select from the available collection of Tempalte Fragments.
A Fragment that is added to the template canvas will not be rendered with all its specific contents, but as a compact element like shown in the image below. If you want to open the template fragment, you can click the [-> icon in the right-corner of the Fragment Element, this opens the fragment in another window so you can edit its contents.
Any Template Fragment can be as small as just one element (or none), or contain many combined elements, even other Fragments. You can NOT nest a Template Fragment in itself (the Modeler Template Editor checks and blocks this situation).
It can be a very strong and useful feature in the management and creation of your pages.
To be able to create and manage widgets and widget libraries, you need Workspace-level rights (workspace power user, workspace admin or owner).
User Interaction screens are mostly made up of different widgets. These widgets can be made by WEM itself, by partners, by users or you could also create your own widgets. When a new widget is created, it is added to a widget library. This is where widgets are saved and managed.
Before you can add widgets to your interaction template, a widget library has to be added to your project. You can add and manage widget libraries in the 'Files and Assets' tab of the resource pane.
When you open the sub-menu of widget libraries you get the options shown above, in the right-hand side. Here you can open the widget editor to make your own widgets or add a library to your project. Find out more about the Widget Editor and how to make your own widgets.
You can add a library by selecting the add widget library option in the sub-menu. This will open a window with all the widget libraries you can add to your project. Here you can select a library to add and you can see all widgets that are in a library. If you want to add a specific widget, you first have to add the library to your project and select the widget in the template editor.
When you have a library selected the 'Ok' button turns green and you can add it to your project. Hereafter, when you want to add a widget to the interaction template editor you can use the widgets from the added libraries.
Every library has is their own category and function. There are also some libraries that don't show any widgets. These widgets are only shown when you have a supported type of project. For example, mobile app widgets can only be added when in a mobile project, the same for Charts 2.6 are for other types of projects.
Some widgets use API's to communicate with a service, because API's are sometimes updated or changed some widgets will not always work, especially social media API's.
How to add and use widgets and in a user interaction screen is explained on the #custom-widgets page.
The Navigation-tab is where you manage your 'Navigation points'.
Introduced in June 2022, Custom HTTP Endpoints can be managed from this Navigation-tab.
Navigation points are basically menu options that are available in the various menus that are available in a WEM application. A navigation point navigates towards a specific flowchart or URL. This is defined when you create a navigation point.
Every WEM application comes with three different visible menu-groups and one invisible group. The location and styling of the visible menu-groups is defined by the Design Template selected on the portal.
Main menu - this is the main menu bar that you usually find at the top of your application (or at a different position defined by the Design Template).
User menu - this menu is also on the top menu bar, but at the far right: here you find all navigation points (menu options) that can be made available when a user has logged in (a typical use for this group). But this group can also be used just to show specific menu items at the top-right of the page (or where the Design Template places this group).
Footer menu - which is actually a secondary menu that can be positioned at the bottom of the page but also at the left (based on the location defined by the Design Template).
Besides the menus that are mentioned above, there is also a group called Invisible
. This is a special one: all navigation points that are part of Invisible
are points that will not be visible in a manu on the page, but may provide specific URLs (hostname of portal + path to specific flow). These URLs can be used to directly access a specific flowchart in the WEM application from the outside (bypassing the standard home-starting point). For example by providing a link in an email message. A specific often-used example is the Reset Password option: you create a URL that is very specific, you can't access the functionality via the application directly, but through the URL you could access the password reset functionality of the application (for example via link in email). This feature can be seen in the Quick Starter Project Basic Authentication v2020
, in MyWEM.
A navigation point navigates directly to a flowchart or a hyperlink. Usually, a navigation point is used as a menu item in a menu. When you click on a menu you get access to the list of navigation points. When you right-click on a navigation point, you get a menu to manage the navigation point:
To create a new navigation point, click on the menu or navigation point where you want to create a navigation point. When you create a new navigation point, some properties have to be defined:
Hierarchical parents of a navigation points override the visible when expression of its children. When a parent is not visible to the user its children will also not be visible and its direct link will not allow access either.
Most Navigation menu-bar options are pretty straightforward:
Move
allows you to move a navigation point to another menu;
Delete
deletes the navigation point;
Find usages
show you where a navigation point is used within the current project.
Rename
Your navigation point, this is updated project wide.
Query parameters are parameters that are used in URLs. Let's look at this example URL (that does not specifically work):
http://queryapp.live.wem.io/queryparam?uid=admin&action=resetpw
This URL points to the navigation point "queryparam" and contains two parameters: uid
and action
. Both have values associated with the specific parameter. The flowchart associated with the navigation point "queryparam" gets direct access to these variables and their values through the data-field-mapping you define. To make a parameter available to a navigation point, select the navigation point and click on Edit query parameters
. You now get a form where you can manage the parameters for this navigation point:
You can now add or delete query parameters. When you Add
a new parameters, you have to select the field to which this parameter should be mapped:
The WEM modeler automatically assigns a name to the parameter, but when you click on that name you can change it to your own preferred name (this is the name that is used in the URL). When you want to change the data field, simply click on Change data field
.
You can also define Query string Parameters on the Project level, in Project Configuration - Query string, to make them available to any and all URL paths. When these parameters have been used on any URL to access the portal, the mapped data fields will have the provided values and are available to your flows.
Custom WebHooks into your application
Custom HTTP Endpoints are currently (June 2022) only available in Private Cloud Runtime environments. This feature will not be available in the current Public Shared Cloud.
So, while you can already define your Custom HTTP Endpoints in the Modeler for your Project, they will only actually work when your portals are running on a Private Cloud Runtime!
With these Custom HTTP Endpoints, WEM provides yet another way to make integration with other applications possible. Other integration features available are SOAP/XML, REST/JSON, OData, SAML, OAuth and information about those features can be found in the Services and Integration section.
HTTP Request Messages can be sent using different methods [wiki]. Other applications may be able to send those messages in order to get information out of your WEM Portal or make changes to your data.
Please make sure that wherever you can enter names for parameters, you use URL-Safe characters (read this post on stackoverflow).
In Tab Navigation, element HTTP Endpoints, click the [...] button to open the context-menu and click New HTTP Endpoint
.
The URL Path is a templated path containing literal (fixed) parts and parameter (dynamic, replaceable) parts. The hostname part is automatically implied for each portal and all the configured hostnames published to the runtimes, so in this field you only have to enter the path that starts after the hostname:
https://portal.wem.io/CUSTOM_URLPATH
.
Parameters are surrounded by curly brackets: {parameter}
. In the example below {order-id} is a parameter part named order-id as part of the URL-Path.
Example: order/get/{order-id}
Parameters can be bound to a target data field. As soon as you type a parameter part {curly-brackets-with-parameter-name} , the name between the curly brackets will automatically be added to the list of Parameters for the URL Path. At runtime, when the path is requested, the value at the position of the parameter will be written to the target data field as defined in this part.
Query Parameters can also be added in the Parameters section, to add additional parameters that will become part of the additional query string. The Query String is the part in the URL that starts with a question mark ? and is followed by name=value
pairs, separated by an & ampersand. A Query string is considered not as a part of the URL Path itself, but as an addition to the request to said path. The path defines the resource (location), the query string adds elements for specific logic on or within that resource.
The HTTP Request Method (wiki) indicates the method (or verb) of the HTTP request expected by the endpoint. If this is set to “None” then the endpoint does not accept any request on this specific path. Endpoints with a “None” method are used as part of other endpoints.
GET: request to retrieve data without making changes in the portal;
POST: request body is required with payload (data) that may trigger changes in the portal;
DELETE: request to delete the indicated resource;
HEAD: request to retrieve only the header information for a request (no response body); used for checking availability of a resource or content-length of a file
OPTIONS: request to provide the HTTP methods that the portal supports;
PATCH: request to perform a partial update with the provided information in the request body;
PUT: request to create or update a resource with the information provided in the request body;
None: to indicate that this path will not accept requests to this specific path, but it may be used as a (re-usable) part for other endpoints
If this option is checked and any validation error occurs, an exception is thrown and the request is not further handled.
Some validation errors:
Missing request body (required for methods POST, PUT and PATCH);
Missing required parameter value;
Multiple values provided for a parameter;
Value conversion error. The raw value could not be converted to the expected datatype of the data field;
Value out of range error. For example, integer value falls out of allowed range of the numeric data field.
Value format error. For example, if raw value does not conform to the format of a valid email address.
By disabling this option, the endpoint will continue with the flow, but the mapped fields may not have valid values (so you may need to perform your own checks and validations additionally).
This option indicates if a WEM Session should be used when this endpoint is targeted.
Typically used for API integration, like REST/JSON: basically 2 applications exchanging messages/data in a single interaction. There is no session required, no specific user, no specific process with consecutive steps that need the data from the first interaction onwards.
Typically used in WEB-HOOK situations.
When a user (via browser) is already active in the Portal (active session), or if a new session should be started and the provided data in the request should be used and made available in consecutive steps, so you want to be able to continue in the Portal with the externally triggered changes.
One typical example is when using external payment providers, that typically prescribe a certain Web-Hook they use to send the transaction results, you want to retrieve that and link it specifically to the active session.
This option becomes available when the selected HTTP Request Method is one that requires a Request Body: POST
, PATCH
, PUT
.
If this option is enabled, the form-fields within the request body will be converted into a JSON structure, making it easy to use the Import JSON Node to map these form-field-values to WEM-Fields in the Data Model. The conversion will be executed to BEST-EFFORT. The providing application may provide form-fields in a way that is not easily correctly converted into JSON, especially when they use custom ways to group multiple fields (array/indexed).
This option becomes available when the selected HTTP Request Method is one that requires a Request Body: POST
, PATCH
, PUT
.
Put a Data Field into this input to map the contents of the Request Body (from the POST, PATCH or PUT request). This field can be Text (for form-fields, json, or other text contents) or a File (to exchange binary files - directly map them from and to WEM File Fields).
WEM can automatically generate OpenAPI Documentation for your custom HTTP Endpoints. The resulting OpenAPI documentation can be accessed when the Custom HTTP Endpoints are available in the Staging or Live runtime environments (so after publishing), by using the following link:
{your-portal-hostname}
/openapi
This url or its resulting JSON can be used in other applications that can visualize or generate client code based on OpenAPI documentation. Swagger is a well-known tool to visualize this information.
In this part you can provide additional information that the OpenAPI documentation will provide.
Endpoint name
Name used in the OpenAPI document generated for the endpoint. This name is used as method/function identifier by tools generating client code for calling this endpoint.
Description
This description is included in the OpenAPI document generated for the endpoint. With this description you can provide further detailed information about your custom endpoint to the consuming party.
Source column indicates in which Request-element the parameter is located: URL Path, Query string, Header or Form.
Name is the name of the parameter to be used. Make sure these values are URL-Safe (read this post on stackoverflow)!
Required can be used to force a check on the existence of the parameter in the Request, and send a validation error if it is missing.
Target data field is where you map the incoming values to their respective fields in your Data Model, so you can work with the values in flows and pages.
Inherited by nested endpoints allows nested endpoints to inherit this parameter so you only declare and map it once, and it is available to all deeper levels (nested endpoints) and the flows therein.
[URL-Path]
Parameters which are dynamic parts of the URL Path can be added using the curly brackets {param-name}
into the URL Path. They then get automatically added to the Parameters section so you can map them to the Target data field.
[Query string]
Query string parameters can be added by clicking the button “Add query parameter”. You can define the Name as it should be used and please make sure these names are URL-Safe!
[Request Header]
Request header fields can be added specifically using the Add Request Header. For a list of available http header fields, check this wiki link. Some Header fields may only contain specific values and the number of fields and length of values is limited.
[Form Fields]
Form fields allows you to define specific HTTP Form Fields that can be mapped to WEM Data Model fields. These fields are only available when using verbs that require a Request Body: POST
, PATCH
, PUT
.
Every HTTP Endpoint that can handle a request (with any other method then “None”) has a flowchart. Once you've created (and configured) the Endpoint, the Flowchart is accessible by double-clicking on the Endpoint in the navigation tree, or by clicking on the Open Flowchart option in the context-menu.
Typically, an HTTP Endpoint Flowchart does not support Interaction Nodes so in fact should be considered to be an Action Flowchart (without user-interaction). It must always end with either an HTTP Response Node, a Navigation Node or a Clear Session node (that also performs a redirect at the end).
When used in API Integration (server-to-server), it should provide an HTTP Response consisting of an HTTP Response Code and optionally a Response Body.
When used as Web-Hook where a redirect is part of the process provided to the user, you can use the Navigation node to send the user to other parts of the application when this Http Endpoint Node is activated. When the option to use the WEM Runtime Session is active, this navigation will use the existing session.
Testing your application
The WEM Preview Environment is the Development-Testing part of the WEM Modeler.
Just hit the Preview Button in the top-menu bar, and see your Project in action!
The WEM Preview environment brings all your settings, flows, nodes and fields together with the selected design to show the application in action and enables you to make and review changes without the need to publish.
When started, Preview opens a new browser window and loads your project information directly from the Modeler repository. In the background, a database container for the Preview-Runtime will be created (when starting the Portal in Preview for the first time) or updated with the latest changes to permanent lists and their fields. Data stored in permanent lists during Preview Sessions will then also be available in other Preview sessions.
A Preview Session of any project can only be started from the Modeler. The Preview is only available to Modeler Users with access to that project.
Any Preview URL which is accessed by other people (if a link is shared in some way) will not work and will show a message stating [No debug session].
You will see this -no debug session- message also if you copy the preview link and use it in a different browser (for example you start in Edge, and copy the link to open in Chrome). But having multiple preview pages is not practical at all, so just keep using one Preview session that is started directly from the Modeler.
Using a technology called Comet Messaging (wiki), WEM makes it possible to exchange information between the Modeler session and the Preview session started from that Modeler session. This way, while Previewing your application, it is possible to:
Push changes from Modeler to Preview without reload: Make any change in the Modeler and you'll see it work in Preview almost immediately (depending on the change) without restarting the Preview session. For example if you add a text, button or other visual element to the Interaction Template: after saving that Template in the Modeler, the changes will be sent to the connected Preview session and you will see the added element appear. Changes that have been made to flowchart-nodes only occur as you pass through these nodes. So any changes that have been made to nodes that have been passed before reaching the current active node in the Preview, will only be executed if they are passed through again, which can be done with a menu item or a button.
Access current Preview State in Modeler:
When Preview is started from the Modeler, a Debugging panel appears at the bottom. This panel provides access to the information in the Preview Session using Expressions: put any field into the Expression to see its value in Preview, or do a Count([list])
to see how many values there are in a certain list.
The button [Goto current node]
does exactly that: it opens the flowchart and selects and highlights the node which is currently active in the Preview session.
The Comet connection between Modeler and Preview may get broken sometimes for many reasons. When that happens, you will see for example that when you use the Goto current node, you will not end up at the correct node that you see in Preview, or when you try to check a value using an expression, you will not get any result.
In that case, it is necessary to start a new Preview session in order to create a new Comet connection between the Modeler and Preview sessions.
Use the Preview Environment to test how your application works, debug and improve "on-the-go" until you are happy and ready to publish your application and latest changes to the Staging and Live Runtime Environments to make it available to your end-users.
Because the Preview Environment is tightly linked to the Modeler and its main purpose is to directly show changes made in the Modeler and provide debugging information back to the Modeler, it works a bit slower compared to the Published Runtime Environments. The performance of the application in Preview is absolutely no indicator for performance expected in the Runtime. The Runtime is very specifically optimized for speed, performance and high usage.
Getting your application on to the WEM Runtime Environment
The Publishing Process transfers your Project from the WEM Modeler (your development environment) to the WEM Runtime environment to make it available to your users.
Publishing works in a flow from Modeler to Staging to Live, as depicted in the diagram.
From Modeler To Staging Only You can choose to publish to Staging only: this will leave the Live Runtime unchanged, and sends the current situation of the Project in the Modeler to the Staging Runtime. This is what you usually do when you are done making changes and want to test in Staging with realistic data or provide a new "review/acceptance" version to your users.
From Staging To Live Only You can also choose to publish to Live only: this will take the current version on Staging and sends that to the Live Runtime. This is typically what you do when the Staging version has been reviewed and accepted, and this version should become the new Production version. It will NOT push any changes made to the Project that have not been published to Staging.
From Modeler to Live always goes through Staging Or you can choose to publish from Modeler to Live, but this will always go through Staging! All changes done in the Modeler will be pushed to Staging first and immediately after Staging also to Live, in one go.
The Publishing Process gathers all resources and settings from your project in the Modeler, transforms it into the Portal Definition as needed by the WEM Runtime environment, wraps it into a compressed file and sends it to the Staging Runtime Environment. The Staging Environment receives the new package, unwraps it and replaces the old Portal Definition with the new version.
You may be working together with other WEM-users on your project, so if you start a Publishing process while others are making changes as well, this requires some form of coordination. The WEM Platform takes care of this! When several WEM users are working on the same Project, the Modeler will send updates from every user - when they get saved in the backend - to every other user using Comet technology. So every user will have the latest version of the Project available in their browser.
Check settings When someone starts the Publishing Process, that Process will first check all current project settings.
Acquire Publish Lock "There can be only One" ... active Publishing Process running for one Project. So one important step is to check if nobody else has started a Publish action. If it is free to publish, a Publish Lock will be set on the Project, so when someone else attempts to Publish - it will be blocked with a message showing that the Project is already being Published.
Create logging entries The Process will store information about all steps, so in case something fails along the way, this information may be used by WEM Techs to investigate and resolve the situation if necessary.
Update Portal Packages All resources in the Project needed for Publication are gathered for each portal.
Publish portals to the selected Runtimes Based on selection as previously described: first to Staging (if selected), then to Live. The following steps are not shown in the image - but available to you when you publish - you can expand the steps in the Publishing Process Overlay:
Upload package to target Runtime environment;
Validate the package;
Store the package;
LOCK portals*;
Update database schema;
Update Portal Definition;
Commit package;
RELEASE portal locks*.
Finish logging All information gathered during the process is combined and stored in the database.
Release Publish Lock All done, release the lock so other users (or yourself) can start a new Publish actions. If something fails during the Publishing Process, there is a final fallback scenario in place that will release a Publish Lock after 15 minutes since the last recorded action within the Publishing Process.
People may be actively using the application when you want to publish the new version, so in order to perform the update without disturbing active sessions - AND make sure that the Publishing Process can be executed without being disturbed itself, the Publishing Process places a Lock on the Portals. This means that no new requests can be made and no changes to data will be stored. All running requests will be handled until finished. As soon as all work is done, the Lock is released and all requests to the Portals can be handled - using the new updated version.
To make sure that this Lock is only active for the shortest possible time, the Publishing Process does all preparation that is possible before placing the Lock. Most users will only notice a very slightly slower response to their action while working in the application when this Publishing Lock is placed and released.
The Publishing Process tries to find a window of opportunity to place the lock and continue the Publishing action, but it only tries to find this window for a short period of time. If this window cannot be retrieved within the allotted time, the Publishing Process will stop and return the message that it Failed to acquire a lock. The Portal will remain in use without changes and you should try to Publish again at a later moment. Failing to acquire a Portal Lock may be caused by long-running actions, like importing large amounts of data or trying to execute a very complex query against a very large dataset. If this happens more often, it may be required to optimize these actions in the Modeler by improving your flows (splitting it into steps by putting interaction nodes in between them to make room) or optimizing your queries to let them work faster. Doing this may not be easy or straightforward, but you can always ask for support in MyWEM...
When you have started the Publishing Process, the Publishing Process Overlay shows the various steps and will show which step is currently active - or place a green check-icon to indicate a step is successfully done.
Depending on the size of your project - the number of resources to gather, the checks to perform, the size of the Package to distribute, the number of database changes to perform and other elements - it may take a while for a Project to be Published. It may take a few minutes, but in some cases maybe even 15 to 20 minutes.
You do NOT have to wait and keep the Publishing Process Overlay open for all that time!
Once you have started the process, it runs independently of your browser session. You may close the overlay and the process will continue in the background, you can even close the Modeler - Publishing will continue until it's done (or failed).
If you keep the Publishing Process Overlay open, you can see which step is active and which step is successfully finished. The progress updates are provided using Comet messages from the WEM Platform to your browser as long as the Comet "channel" is available. If you close the overlay or close the Modeler the channel is closed, but the process continues. If you re-open the Modeler and hit the Publish button again, you will see a [Show History]
button. Click this button to see past Publishing actions. They may show:
Running (icon of a running person): You or someone else has started a publish process which has not yet been completed (Publish Lock is in place); Nothing else to do but wait until it is finished (or just continue making changes to your project for the next version);
Finished successfully (green check);
Failed: In this case you can click on the item to see some information about the failure - like failing to acquire a portal lock.
In case of failing to acquire a Publish or Portal lock: close the window, wait a few minutes and try again. Maybe even close all open tabs and reload the Modeler, just to be sure (although refreshing the Modeler will close any open tabs you may have been working on, but that is a good thing if publishing fails anyway).
In case of other failures in the Progress Steps, or even in case of a Running situation that does not seem to stop (for more than 15 minutes), just wait about 15 minutes and try again. Very often it will succeed! Also in this case: maybe even reload the Modeler before you try again...
If the process fails and you have chosen the option to publish to both Staging and Live in one go, you may try to publish to Staging alone first and see if that succeeds. Then do the Publish action from Staging to Live only and see if that succeeds.
If the Publishing Process keeps failing after several tries (with enough time in between) or if the Failure Message is NOT about failing to acquire a lock and the failure information is of no help at all: go to MyWEM and create a Support Ticket - WEM Support will surely be able to help!
Tip: to speed up the Support process, provide the Project ID, the details of the publishing overlay (as a screenshot). Also indicate if you allow Support to perform a publishing action to staging and/or live if they want to check/test, or if you explicitly do NOT want Support to try and start a publish action.
When, after more than 15-20 minutes after the Publish Process has started, it still shows Running in the History, you could start another Publish Process. That action will tell you if the previous Process is indeed still running - but more likely it will just start a new Publish Process.
If this happens quite regularly in your specific project, please let it know in a Support Ticket, mentioning your Project ID (the numeric value in the browser's addressbar after ?project=...
).
In the Multilanguage Dictionary
, you are able to add certain Symbols (specific Labels) with translations for every activated language in your application. Everywhere the Symbol is used, it will display the value according to the active Language.
The available languages and the option to change language settings in your application, can be added to your user interface in the Project settings
(see the Project Configuration documentation).
Dictionary Entries (Symbols) can be added to the dictionary via the green "plus" button. The new dictionary entry should have a Symbol - a unique and recognizable Label Name, which can be used in Design Template Settings, in the Template Editor as Labels or in Expressions. For each available Language as defined in your Project Configuration, you can add the language-specific text to be displayed.
If you do not provide a Translation Value for a certain Language, the Symbol Name will be displayed in its place when that specific language is active in the Runtime.
The content of your dictionary can be used in the Template Editor as Label or in an Expression (used for displaying values), it will show in the Expression as "$Symbol
" . You can also drag and drop the specific Dictionary Item onto the Template Editor Canvas or into the Expression Editor from the Dictionary Panel.
Depending on the active language, the specific translation value will be displayed in the runtime.
Dictionary Items can have one or more parameters, that you can position within the Translation Values using double curly brackets {{ and }} (creating placeholders). In the Expression where you want to use the Dictionary item, you can provide certain values to be replaced in those placeholders.
The translation for English is entered as:
> The name "{{0}}" is not allowed.
The expression on the Template is written as (using the LastName of the current user reference):
> $InvalidName([Data.CurrentUser]->[Users.LastName])
The end result will be something like:
> The name "NoNameEntered" is not allowed.
If the parameter is not provided, the expression will warn you that "an invalid number of parameters is provided", so you will have to provide a value for each placeholder that is defined with the Dictionary Symbol. If the value to replace the placeholder is empty, the display will just remove the placeholder and replace it with an empty string.
When building applications you need to have the ability to store files in your applications. The WEM modeler has a place for that in the Templates, Widgets, Files and Hyperlinks tab of the resource pane (). Here you find a folder called Files.
There are no restriction on the type of file you want to add. When a file is added the modeler checks the extension and the first lines of the mimetype to verify how to handle the file.
There is a restriction on the file size of <30MB. If someone tries to upload a file larger than 30 MB, the load balancer will kill the connection and show a "413 Request Entity Too Large" message. When you want to use larger files it is recommended to use a 3rd party host like youtube or vimeo and use link or a widgets to present the files to the user.
Add a new file
Add a sub-folder
Rename a file
Delete
Find Usages
Help
When you add a new file a window will appear, where you can add the file and choose a location to store it. A storage location can be selected through selecting the folder icon in the files field. This will open another window to select the preferred folder. The image on the right is what it looks like when you have created a few folders. By default a file is stored in the Files folder on the same level as the created folders.
The next step would be to add the file, you can do this by dragging a file to the box with "click or drop file here" or you can click in the box to select a file from your system.
For most file-types the main use-case would be to give an option for users to download these files. This can be done through dragging your file to an interaction screen. This will create a button with a download that redirects to a download link. You can also use a file as a concept property, these files are saved inside the project and are first added to the files folder before you can add it as properties. For more information about concept properties, go to the documentation about this topic#properties.
When you create a button it behaves like other files and is a link to download the file. Creating an image will show the image in its original size on the interaction canvas. The properties of the image can be altered in the properties pane on the right.
Image files can also be used to make custom buttons. The button properties gives you the option to change how the button is displayed.
Selecting the image option will open a window with the files in your project. Here you can choose the image you want to display the button as.
The powerful Page Builder in WEM
Interaction nodes are the bridge between modeling you application in the WEM modeler, and the user interaction you want to achieve in your app. When you want edit an interaction node, double click on the node, and you will be taken to the Interaction Template Editor
. This is where you design the user interfaces of your website. The different components you add to this page make up this interface and allow you to show your content. In WEM, these components are called Widgets
. Widgets
are created by WEM and WEM Partners. However, you can create your own widgets as well with the Widget editor
. More on that in the . The template editor has tree important parts: the Toolbar
, the Canvas
and a Properties pane
.
The Toolbar
is where you find everything you need to create an interactive front-end webpage. The Toolbar is divided into categories, which are: General, Preview size, Style, Layout, Interaction and Miscellaneous. These categories contain various buttons or functionalities which will be described in more detail per separate category. Generally speaking, the Preview size and Style categories help you to style your user interface - mainly its text fields - and the Layout, Interaction and Miscellaneous are used to interact with the user. Layout specifically contains components to design you user interface. The Interaction category is used to create options for users to interact with the application database. And lastly, the Miscellaneous tab contains tools to present information, also with the ability to add custom Widgets.
Below the toolbar you will find the canvas. This is the representation of your page where you add all the different components you find in the toolbar. To add something to your canvas you drag it from the toolbar to the right place on the canvas. While holding a component you will a green, red or no line to appear, this is to guide you in the placement of that component. A green line shows you where the component will be placed when you release it. A red line means this component is not suitable for that location, this can be because the component is incompatible with another component or it doesn't fit. The canvas always has a button ribbon on the bottom, here you can only have buttons and the ribbon will only be shown on the client side if it holds a button. You can do this by dropping a button, Flowchart, hyperlink, navigation item, or a file element into the ribbon as buttons.
On the right, next to the canvas, you find the properties pane. This is a place reserved for property settings of the selected components or widgets. Almost all components have different properties and will be further explained on their respective category pages. Some of the recurring properties are divided in properties categories. Paging properties give you control of the widgets behavior when showing a lot of rows or entries. Behavioral properties are, for example, what to do on a action such as a "click on a row", which column to sort on or if a panel should be expandable. The appearance of different widgets can be changed in the appearance properties section. Here you can, for example, change color context, change display properties, and add and remove headers. Things like buttons have a toot-tip category, the tool-tip text appears when hovering your mouse pointer over a button without clicking it. In conclusion, the Properties pane really allows you to customize you user interface to your own preferences.
The show as overlay is a property of your interaction node, and shows up in the property pane when the editor is opened or when the canvas is selected. This setting changes the interaction node from a full page to an overlay.
Show close button - The overlay gets a close button on the top right of the canvas. This gives users a way to close the overlay and return to the main page without saving changes.
Overlay size - This lets you change the size of the overlay.
Overlay title - This is title of your overlay, this can be text or an expression.
Overlay Icon - Lets you add an icon to the top left of your overlay.
The element path is something you find at the bottom of the editor. With the element path you can keep track of where you are within your widgets. Here you see the path to a button that nested inside a table. This is useful to keep an overview and to easily navigate between the different levels.
Unwanted components can be removed from the template by deleting them from the canvas. First select the component you want to remove and use backspace or the delete key to remove the component. You can use the element path to select the right component or to make sure you have the right component selected. The delete action can also be undone with ctrl-z or the undo button.
The Save button is very important and should always be remembered to use before closing, or when you want to preview the changes that you made. A change made in the template editor it is not immediately implemented and is temporary. When you save your changes, they will be implemented and updated in the preview. So when using the modeler with the preview screen open, you should save after an edit. This will refresh your preview and update to the new changes. On some changes the refresh is not properly triggered and you may need a hard refresh on the preview page by refreshing your browser window.
The undo is an obvious must have and will revert changes to the previous state. This will work even after you save your template and as long as you don't close or refresh your browser.
When you are still unsure of your changes, or didn't make a mistake after all, a redo button comes in handy. Just like the undo this is remembered in your session and works as long as you do not refresh your page, even after saving.
The Go-to button gives you an easy way to navigate back to the Interaction node you are working on. It will open a new tab of the flowchart containing the interaction node. When working on big projects this gives you an easy way to find your node and a way back to the correct flowchart.
Unwrap lets you remove a component but keep the content. You select the component you want to remove and use the unwrap node. The selected component will be removed and the content is placed in its location.
Preview size is used to simulate different screen-sizes and to get an impression of how your components and widgets react to the screen-sizes. There are four sizes, the large is for desktops with large screens, medium for standard desktop monitors, small for tablets and extra small for phones.
You can change size to:
xs (extra small): for mobile screen sizes (screens less than 768px wide)
sm (small): for tablet screen sizes (screens equal to or greater than 768px wide)
md (medium): for small laptops (screens equal to or greater than 992px wide)
lg (large): for laptops and desktops (screens equal to or greater than 1200px wide)
Invisible: you can make a column invisible by clicking on the eye icon
On this page are some useful hotkeys specifically for the Interaction Template Editor.
When using the modeler on a mac the Ctrl key should be replaced by the Command ⌘ in most cases.
Input | Function |
---|
The WEM Live Runtime Environment - your Application in Production
The WEM Live Runtime is the Production Environment for your application. In the Publish feature you can activate both Staging and Live in one go. All settings and features in the Modeler are published first to Staging and updated in Staging Environment, and then to Live and updated in the Live Environment. Publishing is needed when changes are made in the Modeler that need to be implemented in Live Runtime. You want to publish only the finished and tested updates to this environment to make sure you keep a working application exposed to your users.
The default URL for the live environment is https://[projectname].live.wem.io. and can be changed in the portal settings. More about changing hostnames can be found here: .
Every environment has its own database. When publishing a project to a new environment you publish the data structure not its content. This is necessary to keep the right data in your live environment. When your storage strategy has all portals share the same database you still have a different database for staging and for live used by both portals. More about this here: .
Before you publish your project to the live environment you need a license. This is a license from WEM giving you permission to publish to live. You can find out more about licenses .
When you want to use hyperlinks in your application, you need to define them first. You can do that in the widget, templates, hyperlinks tab (second from right) on the left pane in the modeler. Hyperlinks in WEM are mostly used for directing the user to specific resources or websites outside of the application being build. Hyperlinks can be used in the template editor as buttons or links to allow the user to navigate to these websites via these interaction widgets. The modeler and WEM work differently with URL's and cannot be used to point to a specific location within your application.
Here you can manage all your hyperlinks. You can:
Add and delete hyperlinks;
View the all hyperlinks in this project;
Get a list of all locations where a link is used within your application with find usages;
Create/manage folders. This is used to group hyperlinks. If you have a large number of hyperlinks, you can group them in folders, to make it easier to manage all the available links.
The hyperlink style makes your text appear as a link, with blue text and an underline appearing. The hyperlink styling allows you to give the text extra properties. To make the text an actual link you have to use the these properties.
The style context controls the text color of your hyperlink, to which color this translate in the browser is depending on the design template and the browser used. The "On click" property relates to what happens when the hyperlink is clicked. These are the same choices a button has. By default it refreshes the screen. The other option from left to right: open a flowchart, follow a button exit, go to a navigation item, open a hyperlink and downloads a file.
Find out what's going on in Runtime
WEM offers some debugging features that are helpful in finding out what a situation in the Runtime is, while you are working in the Modeler. The underlying technology is using Comet channels to exchange information between Modeler and the Runtime about the current Node and the current values in the Session.
The principal use is debugging while in Preview - when you start a Preview Session from the Modeler, the Debugging Pane is automatically started and the comet-channels get connected. It is also possible to start a debugging session with Staging or Live, to enable you to check what happens and what values are available in these Runtimes.
A debugging session can be started for Preview Runtime, Staging Runtime or Live Runtime.
Any Preview Session always automatically starts with a Debugging Session, and you start this either by clicking the [> Preview]
button in the Modeler top-menu, to start the Preview Session from the Homepage (starting point for the portal) , or the [> Preview]
button in a specific Flowchart to start a Preview Session from that specific flowchart directly.
To start a debugging session for Staging or Live, you need to go to the Project Information Tab and specifically click on the icon in front of the URL.
When a Debugging Session is started, the Debugging Pane is visible at the bottom of the Modeler page. In its title it shows Debugging: [which environment]. You can start a preview and then a staging and then a live debugging session, but only the last started session will be actively connected for the debugging features!
Breakpoints can be used in debug sessions to temporarily stop an application's flow to investigate the situation on that specific point. Breakpoints are "personal": they are linked to the Modeler User that places the breakpoints, and they will only get triggered when that Modeler User starts a Debug Session. For all other users these breakpoints do not exist and will not stop their Runtime Session (not even for other Modeler Users in the same project).
In flowcharts you can add a breakpoint to any node. To set a breakpoint, just select one or more nodes in your flow, and click on the Breakpoint button in the Flowchart Toolbar.
Nodes with a breakpoint get this little red dot in the top-right corner of the node. When a breakpoint is set to a specific node, you can add a condition for when this breakpoint should indeed stop the flow. Click on that little red dot to activate the Breakpoint Condition overlay and put in an expression that will be evaluated when the node is reached in runtime.
When a breakpoint is reached in the Runtime, you'll see a message on top like the image.
If you click on the message, the application will continue. If at this point you switch to the Modeler Tab in your browser, you can click on the [Goto current node]
button in the toolbar of the Debugging Pane. This will open the flow and put the specific node into focus. The Debugging Pane also allows to [>Continue]
the flow in the Runtime (until the next breakpoint is reached).
If Goto Current Node does not work, or does not seem to bring you to the correct node - it is because the node information is not properly exchanged over the Comet channel, which may indicate that the connection between debugging runtime session and modeler session is no longer in sync. You can still continue with both sessions, but it is recommended to close the debugging runtime session and start a new session from the Modeler.
With the expressions in the Debugging Pane, you can actually find out what certain values are in the Debugging Session. See the examples in the image, where IsPreview() yields yes (because it is running in a Preview session), the count on a list is 0, a setting value is displayed and the children of a Concept is displayed. The values displayed are retrieved from the Runtime Session being debugged.
The 3-dots at the end of each line gives you the option to remove the expression line, or to copy the value it yields to your clipboard.
This way you can see at certain points what the values in Runtime are, to help you understand certain situations (when the application seems to react different as expected).
Server endpoint used for sign in authentication. This is the start page to login into the provider service. For google this is:
Endpoint used to exchange the authorization code for a access token used to validate the login to the client. For google this is:
The scope is a space-delimited list of permissions in string format, used to limit an application's access to a user's account. For google you can find examples here:
The scope is a space-delimited list of permissions in string format, used to limit an application's access to a user's account. For google you can find examples here:
In this case we want to use a specific google service scope called:
To create a new schedule on a specific task, click the calendar-button . To edit an existing schedule, click on the schedule-row.
Property | Description |
---|---|
The Flowchart Nodes pane has a specific Node to provide the HTTP Response: .
If the process seems to keep running , even after more than 15 minutes, it may be that the feedback from the Publish Process back to the Modeler is not able to send back the "successful end" message in time.
To add a file you right click select theFiles folder or use the [...]
three-dot button. This will open the context menu for files with the supported actions. Here you can:
When you drag a picture file to the template editor you get an choice:
Here are some useful .
Name
The (internal) name of the navigation point.
Display text
(optional) This is the text that is used for a menu item (navigation point) in your application. If this property is left empty, the Name
property is used to display the label of the menu item.
Icon
(optional) It is possible to have menu items that also include an icon. Here you can specify the icon.
Visible when
This property is required.
You can restrict access to a navigation point by specifying an expression in this property. If this expression evaluates to false
, the navigation point is not visible and its flowchart not accessible by its URL path. This is often used to give access based on a specific user role or set of user roles. But any other reason can be used to prevent access, as long as you can specify it in the expression editor.
For security reasons, this field is required: you have to consciously set the Visible When expression! Plainly setting the expression to true
makes the item always available - so you can use that if you are sure that this item does not need specific rules to be available - just as long as this choice is consciously made.
Action
Deeplink
: The navigation point navigates towards a flowchart that will be executed after clicked on menu item. This action should be a stand-alone flow ending in an Interaction Node without an End Node (or a navigation node navigating to a different flow).
Subroutine
: This can be used to call flowcharts as a subroutine, to return to the same point when this item was clicked. The flowchart to be executed must end with an End Node, so that when flow reaches the End Node it can return to the point from where the Subroutine was started.
Hyperlink
: Allows you specify a URL you want this navigation point to use. This is usually an external URL pointing to another webpage.
None
: No action will be executed and this option allows you to create deeper level menu items (submenu). None
creates a placeholder in the application menu that can expand and collapse to show/hide submenu items. After creation of this item, you can create new navigation points as sub-items in this item, that will be available if this item is clicked to expand the sub-menu.
Flowchart
Only available when the Action
is Deeplink
or Subroutine
. You use this field to select the flowchart the navigation point will execute.
Hyperlink
Only available when the Action
is Hyperlink
. This field is used to specify the hyperlink the navigation point will take you to.
URL Path
Only available when the Action
is Deeplink
or None
. The specified path is added to the base hostname of the portal and can be used to get direct access to this navigation point through your browser.
Open hyperlink in
When you use a hyperlink as a navigation point, you can specify what should happen when the hyperlink is opened: Open in a new window, open in the current window, open in the current frame or open in the parent frame.
Name
the name of the response and is used in the generated open API document
Content type
Provides a value for the Content-Type HTTP Response header. Check [wiki] for common examples.
Status code
Provides a value for the HTTP status code of the response. Check [wiki] for possible status codes - specifically 418.
Response body
Provide value for the data which is sent back to the caller. This should match the defined content type.
Response headers
To allow for the configuration of HTTP response headers. Check [wiki] for standard response values.
Tab | Select first element that is one level deeper |
Shift + Tab | Select element that is one level higher |
Arrow keys | Move cursor |
Shift + Arrow keys | Select multiple elements |
Alt + Arrow keys | Move the elements |
Ctrl + A | Smart select all, Press it multiple times to traverse higher up |
Ctrl + Z | Undo |
Ctrl + Shift + Z | Redo |
Ctrl + Y | Redo |
Rich-Text: |
Esc | Get of out of (rich)text mode |
Ctrl + B | Make text bold or remove bold style |
Ctrl + I | Make text Italic or remove Italic style |
Tab | Indent text |
Shift tab | Remove Indenting |
Adaptive columns allow you to organize elements in your user interaction screen. And, if needed, you could even use them to organize the screen layout in different ways depending on the screen sizes.
The adaptiveness or responsiveness of your column is customizable for different screen sizes. You can change properties to customize:
xs (extra small): for mobile screen sizes (screens less than 768px wide)
sm (small): for tablet screen sizes (screens equal to or greater than 768px wide)
md (medium): for small laptops (screens equal to or greater than 992px wide)
lg (large): for laptops and desktops (screens equal to or greater than 1200px wide)
Invisible: you can make a column invisible by clicking on the eye icon
Rendering of columns is based on Bootstrap and always tries to left align columns.
Property | Description |
---|---|
The Employee Management System (EMS) application of a company shows the list of employees in a Datagrid in a screen. When a row is clicked in the datagrid, it is supposed to show an overlay screen with some details about the employee. Now, the way the details in the overlay window are organized should be different for different screen sizes, as below.
Let's go through the steps of how to configure the Overlay screen to achieve this result.
1. In the Template Editor, click on the 'Adaptive columns' icon, drag and drop it on the canvas. This action will insert a frame with 2 columns by default.
Along the top border of the frame, you can notice equally spaced grooves. These are markers for dividing the frame up to a maximum of 12 parts. By default, when a frame is inserted, it is will have two columns, with each column being 6 parts (6/12 and 6/12 parts) wide.
2. For our requirement, we need the profile pic to be hidden for 'xs' screen size, on the top of the data for 'sm' screen size and alongside the data for other screen sizes. Therefore we need a frame (Adaptive columns) for this with two columns - the first column containing the profile pic and the second column containing the data.
Then, the data needs to be arranged in one column for 'xs' screen size and two columns for other screen sizes. Therefore we need a frame for this with two columns. This frame should be nested in the second column of the other frame.
So, repeat step 1 to insert another frame in the second column of the frame that you already have.
3. Add the data elements from the Data Model at the appropriate places in the frames. You do this by dragging the required fields from the Data Model into the canvas.
4. To insert a blank column, hover over one of the grooves at the top border of the frame. For example, if you want to add a column after 2/12 parts, hover over the second groove. This will bring up a '+' icon. Click on it to add a column.
When you insert a column in one column layout (Column layout = md, in the above example), it reflects in all the other layouts as well. However, the column widths and alignments will differ for each layout. You would therefore need to follow the next step in rearranging the columns for each layout separately.
5. There are two ways in which you could increase/decrease the width of a column.
One way is to hover over the left/right vertical border of the specific column. This will bring up a double-sided horizontal arrow. Click on it and move the vertical border on either direction to increase/decrease the column width.
Another way is to do the same action, that is clicking and dragging the left/right vertical border on either direction, but from under the 'Columns' or 'Selected column offset and width' properties in the Properties pane. This is the only method if you want to make a vertical column into a horizontal column, that is, stacking the column one below another instead of one beside another. Refer the section below in this page, to know more about these properties.
Once again, the changes to column widths that you do this way will apply only for the specific column layout that is selected in the properties pane. Columns will be aligned differently for other layouts. So, be sure to repeat the step for all 4 layouts separately.
Note: In the general sense when we refer to a table, columns are vertical and rows are horizontal. But for this discussion specifically on 'adaptive columns', we use the term 'columns' for everything.
6. In certain situations, you might want to make one or more columns horizontal. For example, in the use case that we are discussing here, we would like the profile pic to be shown above the data fields only for 'xs' column layout. For this, the first column has to be made horizontal.
As explained in the previous sub-section, you need select the appropriate column and drag the vertical border from under the 'Selected column offset and width' property. If you drag it to the extreme right, then that column becomes horizontal and is 12/12 parts wide.
To stress once again, this change applies only for the specific column layout that you are working with. If you want the change to be made for other layouts, repeat the step by selecting the appropriate column layout in the Properties pane.
Once you make a column horizontal, it can be split up to 12 parts and behaves like an independent adaptive column frame.
7. Click on the 'eye' icon under the 'Selected column offset and width' property in the Properties pane after selecting the column that you would like to hide for the specific column layout. The column is now hidden.
Save the Template Editor and preview.
The hidden column is then greyed out and the specific column is shown in red in the Properties pane. This improves readability.
It is recommended to keep this toggle always on when you have hidden columns.
Below the heading options, you find the style options supported by the modeler. With first, the eraser, used to erase the styling on the selected text or label altogether and revert to paragraph style text while the alignment setting is retained. Next to the eraser you have: B, for Bold; I, for italics; C, to cite and S
to make the text extra small. The cite style uses a color with italics to make it make it visibly a quote.
This type is for regular paragraphs of text. The font again depends on the master template. This style is default for text when you add a label with text to the canvas.
Next to the paragraph are the list options, modeler supports ordered and unordered lists indented with numbers or bullet-points. Indentation can also be done here with a indent and a outdent button you can go as far as you want. The indenting happens per paragraph and does not have to be in a new label or text block for different indentations.
The heading types are established by the master template. When you show text in a label you can use the heading types to give text styling that fits the master template. h1 has the largest text size for big headers, and slowly downsizes to the smallest h6, which is the same size as the paragraph style.
Use the Image element to show an Image from your Files Library on the page. When you drop the Image element onto the canvas, a window will pop up to select the image from the library that you want to display. If the Image is not yet available, you can do right-click on a folder in the Library to create and upload a new Image, which you can then select.
An Image element has following properties to set:
Alt Text: the text to show when hovering over the image and which will be displayed if a user has turned off all images in the browser.
Appearance - Rendering:
Default will show the image in its original form;
Circle will show the image within a circle-formed frame;
Rounded will show the image with slightly rounded corners;
Thumbnail will show the image within a bordered frame-outline that has rounded corners.
Appearance - Responsive:
off: use original image dimensions or the indicated height and width values;
on: use the available space from the container in which the image element is placed and automatically resize to fit (responsively).
Appearance - Alignment:
Default: no specific alignment set, use the default (browser or custom definition from Design Template);
Left: align image element left of the container and enable other elements to float to the right of the image;
Center: put image in the center of the container;
Right: align image element to the right of the container and enable other elements to float to the left of the image;
Appearance - Width: only available when Responsive is off, provide a numeric value to use as specific width in pixels; leave empty for implicit (will use original width or the relative width corresponding to the set Height value).
Appearance - Height: only available when Responsive is off, provide a numeric value to use as specific height in pixels; leave empty for implicit (will use original height or the relative height corresponding to the set Width value).
When Appearance is set to responsive the width and heigth are a maximum size. The image will scale to fit the page untill the maximum height or widht value is reached.
The Table element can be used to create Rows and Columns to display other elements in a grid-structure with a fixed number of columns and rows that you define.
A peculiar thing with the Table element is, when you have set Display mode = Bootstrap, then set the First Column as Header or First Row as Header to true, and then change to Display mode = Default, the table will still be showing the first column or row as headers. You just need to know to switch to Bootstrap to set the options if you want this option for the basic Default table display.
Within the Table, you have Rows and Cells that also each have their own options to play with.
This illustration makes use of Label. Refer the linked page if you would like to learn more about these widgets.
Let's continue with the EMS use case from the last topic, Alert, where we had constructed the Employees Overview page. On the page, we had shown the list of employees as cards (using Repeaters) and within a card, we had shown three fields for the employee, one below another, as read-only Form fields. Let's now try to align the three fields vertically within the card.
Note: Although Adaptive Columns would be best suited for this scenario, let's use Table for understanding the element better.
This is what we had from the last topic, Alert.
Let's remove the three fields from inside the Panel, which we are going to replace with a Table.
1. Click on the 'Table' icon, drag and drop it on the canvas at the place where you would like to insert it.
This inserts a Table that contains one cell, the default Display Mode being Bootstrap. Scroll back up to the Properties Section to learn more about this property.
2. To add a column after a specific column, hover over the top right corner of that column. This will bring up a '+' icon. Click on the icon.
To add a row before a specific row, hover over the top left corner of that row. This will bring up a '+' icon. Click on the icon.
To add a row after a specific row, hover over the bottom left corner of that row. This will bring up a '+' icon. Click on the icon.
For our use case, we want a row for the header and a row for the data. We also want 3 columns. So, follow the above steps and add 2 more columns and 1 more row.
3. Add column headers and add Labels corresponding to the required data fields from the Data Model.
Save the Template Editor and Preview.
With the tool-tip you can also give text and labels a tool-tip. A tool-tip is a small text balloon that shows up when your mouse hovers over or clicks on a component. This button give you the ability to give labels or text a custom tooltip. When the tooltip property is added to a text item, it allows to set a few properties in the property pane as shown belaw.
Text style context changes the original text and or label.
Mode controls whether the tip is shown by clicking the text or by hovering your mouse over it.
Placement chooses where the tip will appear relative to the text.
Layout elements are:
Adaptive Columns (to manage responsive placement of contained elements);
Div (a basic container with a color);
Panel (container with title, body and footer, collapsible);
Alert (container with color and optionally an icon to show information or error messages);
Table (to create a table with multiple rows and columns, flat style or advanced bootstrap style);
Image (select an image file from the Library and set some display options);
Icon (needs to be placed inside a Rich Text element - select an icon from the collection);
Label (to show the result of an expression or a datafield as text or with specific other options).
A Div creates a simple container on the user interaction screen with a color. You can add text or other elements and optionally add an OnClick action. The Div can also be provided with a tooltip.
Property | Description |
---|---|
The color as shown in the Modeler Template Editor will NOT be the same when it is rendered in the Runtime (preview/staging/live). In Runtime, the Div will be rendered using the color-definition from the chosen Design Template on the specific portal; within the Modeler the Div will use the fixed pre-defined colors as defined in the Modeler CSS.
A practical application of Div is in building a Kanban board, where you can have 4 different colored Div elements as sticky notes on the Kanban board, the colors representing different status. You can add text from various data fields into the Div.
This illustration makes use of Label. Refer the linked page if you would like to learn more about these widgets.
In the overlay window that we had created in the EMS use case from the last topic, Adaptive Columns, let's now try to use Div to put the profile pic within a container.
1. In the Template Editor, click on the 'Div' icon, drag and drop it on the canvas at the place where you would like to insert it. In our example, we want the profile pic within a Div. So, insert the Div above or below the Label that contains the profile pic.
2. This inserts a Div of default Style = 1 (Read the 'Properties' section above for more information on this). Move the Label corresponding to the profile pic inside the Div. You can change the Style as needed. Save the Template Editor and Preview.
Note that the Div's color is different at Runtime than what is used on the modeler. Refer the 'Properties' section above to understand the reason behind this.
Panel creates a container that consists of three parts - an optional Header, a Body and an optional Footer. You can add other elements (such as rich text or graphics) to any of these containers.
Property | Description |
---|---|
In the earlier page for the topic of Adaptive Columns, we had the use case for the Employee Management System (EMS) application of a company, in which the list of employees was shown in a screen. And when one of the row was clicked, the employee details were shown in an overlay. Now let's try to design the employees overview screen, where we we show the list of employees as Repeaters, and use panels for each card. The final result is shown below.
1. In our example, we have the Repeater added to the Template Editor. Now, click on the 'Panel' icon, drag and drop it on the canvas at the place where you would like to insert it. In our example, we want the panel inside the Repeater.
2. Add a Label in the Header that concatenates the First and Last name fields from the Data model and set the Heading type as 'h2'. Add Forms for the fields needed in the body.
3. Set the 'Show footer' toggle 'on' in the Properties pane. That will show the Footer container in the Panel. Add the necessary Buttons in the Footer. Save the Template Editor and Preview.
The icon widget lets you add icons to text fields or labels. Select the icon widget and drag it to your canvas to a location where a green line appears, this means you can place a icon there. It can not be dropped directly onto the canvas but needs to be within at least an "active" element (like a Rich Text element).
When you add an icon a menu pops up with the different icons available in the modeler where you can choose the icon you want. Then you can set a color along the available Context options, and optionally set a Size (in numeric value for Pixels).
The form is an important part of a interaction page which lets you add and edit your data. There are two ways to add a form to your canvas. The most simple way is to drag the form to the canvas. Another way is to drag a data field to your canvas (without first creating the empty form), and select "Create form". When you add a Form to your template, a grey box with text appears, for now this is still an empty form. You can add content by dragging fields or a complete list to the form.
Form items is what makes a form useful and what you use to get information for specific fields in your data model from user interaction. You can see a few different types of fields being used in the image above. Every data type has their own form item properties and appearance settings with different visual results.
Here are the options most form items have in common:
When a text field is added to a form it has a few field specific properties:
This is a field that behaves similarly as a text field but only allows numbers as input.
The numeric input field also supports a help text that is shown below the field, a hint text that is shown in an empty input field and a postfix text that is added at the end of the input field. You can see what these look like in the image: help, hint and postfix example.
A list of radio buttons or a dropdown field of options in a concept set.
A list of concepts from a concept set with multi select boxes.
The Boolean form item has the following appearance options:
The Date form item has the following options:
Auto-completion options provide suggestions to users as they fill in specific fields in a web browser. There are two types of auto-completions available: one based on the browser's suggestions and another based on a list from your data model. Fields that are not saved in a database, known as transient fields, can use both types of auto-completion. However, fields directly sourced from a data model list can only utilize the browser's auto-completion. The available browser auto-completion options depend on the "display as" property. For fields displayed as a single line, both types of auto-completion are supported. Multi-line fields do not support auto-completion, and for password fields, only auto-completion types related to passwords are allowed.
Disable auto-completion
Depending on your settings browsers will try to add auto completion options when it recognizes a field is used for similar content.
You can prevent this by setting the auto-completion to browser and using the 'General' option with the 'Type' setting off.
This feature enables the use of the browser's built-in auto-completion functionality for input fields. By
specifying the auto-completion type in the field properties, users can benefit from suggestions and auto-fill options provided by their browser, enhancing the efficiency and user experience of form filling. The implementation of this feature heavily depends on the browser being used and may be treated as suggestions in some cases. When the browser setting is enabled, two new properties become available for configuration.
The first property is "Auto completion type," where you can select the category for auto completion in this field. Most browsers interpret "General" as a tag to remember the specific field, displaying previous values whenever the field is accessed. The "General" option also allows you to exclude the field from auto completion, which can be useful for security code fields, for example.
When any other auto completion type is selected, a more specific property called "Type" becomes available. Here, you can choose the actual completion type for the field, such as a name or an address line.
Additionally, there are options for an Autocomplete prefix and a contact prefix. The Autocomplete prefix allows you to specify whether the field is for billing information, shipping, or not specific. The contact prefix is specifically intended for contact fields and enables you to indicate the relation with the contact, such as home, work, or mobile information.
To be able to use this option make a session field or transient field in the form to fill in for the user and save the data after the fields are filled. When the option auto completion (data model) option is chosen a overlay with your datamodel is opened. Here you select the database list used for the auto completion. This will add a extra section in the property pane called Auto completion (data model)
An Alert Container is a basic container with one of the predefined Contexts (success, information, warning or error) to show information with that specific context. These are useful, but not limited, to displaying warning/error messages after validations (for example, validations after submitting a form).
Properties | Description |
---|
This illustration makes use of elements like and . Refer the linked pages if you would like to learn more about these widgets.
Let's continue with the EMS use case from the last topic, Panel, where we had constructed the Employees Overview page. Let's now try to display a warning alert message within the Panel when the employee has no Role assigned.
This is what we had from the last topic, Panel.
1. Continuing from the above, add a conditional inside the Panel that checks whether the employee's role is empty.
2. Click on the 'Alert' icon in the Template Editor, drag and drop it on the canvas at the place where you would like to insert it.
By default, an Alert of 'warning' context is inserted.
2. Click on the flag icon under 'Icon' in the Properties pane and search for a warning icon.
3. Select an icon, click 'Ok'.
The icon is added to the Alert.
4. Add text to the Alert, either by typing in directly, or using a Label.
5. Save the Template Editor and Preview.
When you add a label to the canvas, you can add an expression or a field from the datamodel. You can use any expression within a label using the expression editor and the result will be displayed as Text (by default). This means you can show plain text by using the "quotes"
but also use a expression to show a non static text. When a label is added to the template a expression editor appears, this is where you insert the expression that will yield the result to display as label. When a label is added you can change its properties - based on the resulting type of the expression, the available properties will vary!
The When empty property lets you set a value to show when the Expression returns an empty value.
The appearance properties changes the way a user will see the label. This setting can be used to give the label a bit of extra functionality.
For an expression that yields a (plain) text-value, you can choose between text, a hyperlink, an email or as HTML formatted text. When hyperlink or email is chosen, the label will be displayed as clickable link and will perform the approproate action (try to open the link in the browser or start the email program to create a new message with the value from the label as To: recipient).
The different settings for a Text-label could look like this:
Based on the resulting type of the expression, the display options may vary:
Text as described above;
Boolean/YesNo: no other display options;
Single/Multi Select (concepts): no other display options;
Date/Time/Duration: you can set a display format, how to show the value according to specified format;
Entity/Reference: no other display options;
Number: set a numeric format, set the number of decimals to show (default none).
Rich Text: display as Text or as HTML. When the rich text value contains formatting, set the display to HTML to allow that formatting to be displayed. Default display is set to Text which will show the Rich Text as Plain Text...
Finally, the Prefix and Postfix options allow you to add text (plain text - either with a fixed value or more dynamic by using an expression) that will be added directly before or after the label itself. Not available for File labels.
The label's appearance, in addition to the default options accessible from the properties pane, can also be changed using the style section of the toolbar. With these options, you can modify various aspects such as text style, boldness, alignment, indentation, and more. Labels can also be changed into hyperlinks and given a tooltip by enabling tooltip properties in the property pane.
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Item | Description |
---|---|
Rendering: --
Check the on how to prevent validation for a cancel action.
Property | Description |
---|
Property | Description |
---|
Property | Description |
---|
Property | Description |
---|
Property | Description |
---|
Property | Description |
---|
File: display as hyperlink (shows a link to click and download the file - additionally set the display text or leave empty to show the filename) or as image (only useful when file is indeed an image - additionally select rendering options as described at the element);
Style
you can set the Style to show No border or Table, where it shows borders around the cells (if so supported by the CSS definition in the selected Design Template - that may override this choice and still show no borders).
Cell padding
This adds space between the cell borders and the contents within the cell
Bordered
If supported by the CSS definition in the Design Template, the table will show borders around the cells.
Condensed
This will use less whitespace around the table and within the cells, making the element a bit tighter (condensed). By default, a bootstrap-table uses quite some whitespace to nicely place all contents clear and separate.
First column as header
This will show all items in the first column as a header element (usually bold labels, defined by the CSS definition of the chosen Design Template).
First row as header
This will show all items in the first row as a header element (usually bold labels, defined by the CSS definition of the chosen Design Template).
Hoverable rows
This option will support highlighting (changing the background color) when hovering over the row
Striped
This will show all rows with switching background, like a zebra striping (usually clear and light grey background - depending on the chosen Design Template).
Responsiveness
Stretch - Tries to fill the available space optimally, without showing scrollbars within the table.
Scrollbar - if columns and content need more space than is available, a horizontal scrollbar will be used at the bottom of the table.
Column Break - This option should be used carefully. It tries to break rows and put columns on a next line if space is limited, but this usually yields unexpected and not-so-pretty results.
Height
You can set a specific height in numeric pixel values
Visible When
You can use an expression to decide whether to show or hide the specific row
Width
You can set a specific height in numeric pixel values
Horizontal align
choose Left, Center, Justify or Right
Vertical align
choose Top, Middle or Bottom to align content in the cell.
Style context
If Table is set to Bootstrap, you can set a Style Context on a cell, Allowing you to change to color of a cell
Enable Tooltip
allows you to set a tooltip on the whole cell area
Visible When
You can use an expression to decide whether to show or hide the specific row
Label | Lets you change the text in front of the input field. It uses the name of the datamodel field as default label. |
Visible when | This is a boolean expressions that lets you hide the Form item. |
Behavior Required | Makes this field a required field you have to fill in before leaving this page. You can overwrite this by using the ignore user input option on an exit in your flowchart. |
On Change | Changes what happens when the content in a field changes.
|
Appearance Display as | The text form item has three different appearance options:
|
Input mode | The input mode changes how the input text is shown in the runtime.
|
Input mode when | Expression field for when a the selected input mode should be activated. When false default mode is used. |
Width | Width of the field in pixels or implicit. |
Help text | Input fields also supports a help text that is shown below the field. See image below. |
Hint text | implicit text or expression field for the hint text that is shown in an empty input field. (image Help, Hint, en Postfix example above) |
Postfix text | implicit text or expression field for a postfix text that is added at the end of the input field. (image Help, Hint, en Postfix example above) |
Auto completion (browser) | Enable browser level auto completion, this will open a extra property section you can find more at the end of this page. |
Auto completion (data model) | Enable auto completion on the based on a list in your project. This will open a overly prompting you to select a list to base the auto completion on, more about that at the end of this page. |
Behavior Number of decimals | Select the amount of decimals allowed to enter in this field. 0-100 |
Appearance Display as |
|
Label text (Yes) | The label for the Yes option, this can be explicit or an expression. |
Label text (no) | The label for the No option, this can be explicit or an expression. |
Help text | A text shown below the options |
Appearance Display as |
You will find what these options look like in the image below with the help text option used to represent the chosen option. |
Include time | Adds a time input field |
Translate to local time | Translate the time to the local time set on the device of the user. |
Help text | A text shown below the input field in the image below it is used to name the display as property. |
Auto selection first option | When this is toggled on the first suggestion is selected and can be filled in with enter. When its off you have to select the option before it can be filled in. |
Source | This is the data list that should be used for the suggestions. |
Suggestion text | Property for selecting the label text for the suggestions. This has to end with the text datatype. |
Search mode | Choice between contains where the options only need to contain the text entry, or it has to start with the text entry. |
Min characters | Amount of characters needed before suggestions are given. |
Max suggestion | Maximum amount of suggestions given by your browser. |
Width
You can set the width of the table using pixels or percentages or the implicit setting. The default is 100%, which uses all available space of the parent container in which the table is placed.
Display Mode
The Table container has 2 main display modes: Default (flat, basic and tight - useful to help position and align other elements) or Bootstrap (advanced, more options to set and usually needs more space).
First column as header
This will show all items in the first column as a header element (usually bold labels, defined by the CSS definition of the chosen Design Template).
First row as header
This will show all items in the first row as a header element (usually bold labels, defined by the CSS definition of the chosen Design Template).
Ontology query |
Filter expression | Expression field for the use of a filter on your concept set to filter out specific options. |
Appearance Display as |
|
Option Text | An expression that lets you set the label used for the options. Default uses the name of the concept for that option. |
Default text (Dropdown) | The text displayed when no option is selected. Default or empty selects the first option. |
Column count (Vertical) | Amount of columns used for the options. It will try to keep the same amount of options in each column. |
Ontology query |
Filter expression | Expression field for the use of a filter on your concept set to filter out specific options. |
Option Text | An expression that lets you set the label used for the options. Default uses the name of the concept for that option. |
Checkbox orientation |
Column count (Vertical) | Amount of columns used for the options. It will try to keep the same amount of options in each column. |
Show hidden columns
If you like to keep the column hidden at run-time, but make it visible in the Template Editor on the modeler, you can toggle 'Show hidden columns' on in the Properties pane.
Column layout
With this property you can configure the layout of adaptive columns for four different screen sizes - Extra small (xs), Small (sm), Medium (md) and Large (lg). As discussed later in this page, the settings for each layout (changing column widths, making a column horizontal, and so on) will have to be done separately for each column layout.
Columns
This shows a tiny preview of how the columns of a frame are laid out for the selected column layout. It shows whether each column is laid out horizontally or vertically and also shows the width of each column (x/12 parts). You can select a column right from here, which will show you its offset and width in the next property.
Selected column offset and width
This property shows (and can be used to adjust) the width of the selected column (1 to 12) and also shows how much it is offset relative to the other columns.
Behavior: On click
This property can be used to indicate what should happen when you click on the Div. There are five options possible:
Refresh screen
Execute flowchart
Button exit - can be used to define an exit, just like how you would do for a Button, to be used in the parent flowchart.
Do nothing (default)
Appearance: Style*
Using this property, the Div can be configured to have one of 4 colors, based on the definitions in the CSS of the chosen Design Template for the specific project. The 4 colors are 'fixed', in the sense that they are based on the Design template and therefore cannot be changed in the Template Editor.
Tooltip
Tooltips have already been covered in detail here. Refer that page for further details on this property.
Show collapse button
When toggled on, the Panel shows a small arrow to fold or unfold the block panel’s body depending on the condition (see'"Body is expanded when' property).
Body is expanded when
This property becomes visible only when 'Shown collapse button' property is toggled on. By default, the expression contains the value 'true', which means that the body of the Panel is shown expanded by default. You can change the expression as you wish. In the end, the body will be expanded when the condition is true; when false, the body is collapsed by default.
Appearance: Style context
Bootstrap context color for the header and the outline of the panel.
Appearance: Show header
Toggle to show or hide the header container. This toggle is on by default. That is, the header is shown by default.
Appearance: Show footer
Toggle to show or hide the footer container. The footer is hidden by default.
Appearance: Smart margin
If you place a datagrid in the body of the panel and turn on Smart margin, the panel will remove additional whitespace around the datagrid.
Appearance: Body height
implicit, percentage, pixels: implicit will adjusts the body height depending on the height of the inserted elements (dynamic). A value other then 0 will force the height to the given number of pixels or the ratio in percentages. You can change this when a value is added.
Style Context | When toggled on, the Panel shows a small arrow to fold or unfold the block panel’s body depending on the condition (see'"Body is expanded when' property). |
Show close button | Optionally, you could show a 'x' button at the top-right corner of the Alert container, which can be used to close the Alert at Runtime. |
Icon | You can add an icon that is displayed in a predefined position (top-left within the container) as explained in the Illustration. |
Here you can add a ontology query to a concept form item. With this you can filter concepts depending on a query. Find out how: .
Here you can add a ontology query to a concept form item. With this you can filter concepts depending on a query. Find out how: .
Choose which way to orient the options. Top Vertical