Simplifier 5.0 Documentation 1

Current Release & Archive

The Documentation refers to the latest version of Simplifier (5.0). If you have an On-Premise installation and need help with an older version, please contact us via contact@simplifier.io, we are glad to support you.

Download Previous Simplifier Documentations:
Version PDF HTML
Simplifier Documentation Release 4.5
Simplifier Documentation Release 4.0
Simplifier Documentation Release 3.5

New Features Release 5.0

UI Designer  

The UI Designer which is used for the creation of user interfaces has been completely redesigned. 

Besides the already known features, such as real-time collaboration, the new WYSIWYG editor is our greatest achievement: You can drag & drop your widgets into the editor, which directly displays the preview of the interface in real time.

Live Preview

In addition, you can use the Live Preview on different device form factors to test the layout without deployment first. This makes application creation much easier and saves a lot of time! The different selection of corporate designs (themes) and your changes in the CSS editor are also directly visible.  

 

Icon Explorer 

To assign meaningful icons to your modern layout, we integrated an icon explorer for searching and using icons visually. 

 

New Database Designer and No-SQL Access 

A very special feature is the new Database DesignerIt drastically simplifies database creation, as you can now create your database scheme directly visually in Simplifier and deploy it to multiple target databases like MySQL, Oracle, Microsoft SQL Server and SQLite. 

 

Invite developer 

Working on an application with other people makes many things way easier. The new Share Button allows you to easily invite other team members via E-Mail to work on your current app project.

 

New Datatype Generation of Test results of Business Objects and Connectors 

To reduce the manual work of data type definition, you can create simple or complex datatypes from connector request or business objects results in the test dialog automatically. 

 

Asset Editor 

To help you better manage the static content of an app, we have created a new Asset dialog. This dialog allows you to upload and preview images as well as download them and provides more clarity. 

 

Theming Administration 

Corporate design is very important for every company. Accordingly, themes can be directly assigned and loaded to the Simplifier instance.  

You can therefore use the application on different instances in different corporate designs.  Separate loading of themes via business objects is now a thing of the past.  

 

Attribute and Role Mapping from external IDP 

Security and authentication are particularly important to us: The authentication mechanisms Active Directory, SAML 2.0, LDAP and OAuth 2.0 now offer central role and user attribute mapping based on defined rules. 

Roles and attributes can thus be maintained centrally in your company’s user administration and automatically synchronized in Simplifier.  A new standard role can also be defined. This is automatically assigned to a new user.  

Not to forget the metadata exchange via URL: This ensures that client and provider always use the most up-to-date metadata. 

 

Administration Interface Dark Mode 

It gets dark in our administration dashboard so you won´t have to be in the dark when creating apps: The new Dark Mode follows the trend towards eye-friendly operation. 

 

Functionality in Server-Side Business Objects 

With the Crypto JavaScript library you can now both decrypt and encrypt data. The functions of the Lodash library offer you a wide range of data filters and manipulations. Via our Simplifier User API you can now add your own profile pictures to the user profile. 

 

Mobile Actions 

Now, you can also record a video configuratively with the camera on your mobile devices. Simply choose how many videos are created and how long they should be. 

 

Plugin Secret Administration 

You can now create your own keys in the plugin administration to register your own plugins securely with Simplifier. 

 

Enhanced Feature-Set for OData v2 Connector 

You can now use the test dialog for testing OData calls directly. We also support Function Imports in our OData wizard to easily use this kind of business logic as a connector call. 

 

SQL Database Support for IBM DB2 

In addition to the well-known databases, we now also support IBM DB2 and IBM DB2 for AS-400 systems for easy recycling of old Lotus Notes applications. 

 

Support for Client X.509 Certificates 

Simplifier allows you to manage X.509 certificates and use them as a login method for authentication on backend systems via our connectors. 

 


Updated Features

Enhanced widget editing 

Be it icons, widget wizard, revised interface or drag & drop zones for the WYSIWYG editor – all UI5 versions of a widget can be managed directly in the mask. This includes support for auto-generating controls from the commercial SAP UI5 library. 

 

Optimized Process Designer 

Links to Process Designer Items are now highlighted when selected. The selection of mobile actions has been reworked for better handling. 

The Script Action now offers a selection of ready-made and useful JavaScript code to get results even faster. 

 

Enhanced RFC connector 

Our SAP RFC connector now also supports TABLES parameters for exchanging data from SAP function modules and Auto Commit to trigger automatic updates to the sap database. 

 

Test Dialog of Connectors and Business Objects 

The test results are now displayed in the test dialog for business objects and connectors formatted as JavaScript Object Notation (JSON) View including syntax highlighting.  

Individual result rows can be folded in and outto get a better overview. 

 

Enhanced transport system 

Business objects that refer back to themselves through other business objects (circular reference) are now imported correctly. 

 

Templates Preview  

Templates now directly generate a preview when the content is changed. 

 

Optimized App Deployment 

You can now optionally activate the following deployment parameters for production environments: 

 

Standard rolls 

Simplifier is delivered with new standard roles 

 

Optimized library administration 

Syntax highlighting is now also available for the inclusion of third-party libraries. This makes it easier to read the code and recognize its structure. 

Existing libraries can now also be downloaded. 

 

 Oracle 19c compatibility 

Simplifier now also supports the latest Oracle 19c database. 

 

 Security Enhancement 

The legacy route for direct execution of connectors is locked by default – in special cases this lock can still be removed in the system settings. In Release 5.5 this option will be removed completely. 

 


Mobile Features 

Live Preview on mobile devices 

Together with our brand new WYSIYWG UI Designer, we also offer the live preview in our simplifier mobile client (has to be activated in the developer settings. That means, that every change in the user interface will be published in realtime on your real hardware. This enables you to test your layout on different device factors and smartphone / tablet models in realtime

 

Support for Honeywell Scanners 

Our Simplifier Mobile client runs natively on Honeywell laser scanners with android operating system. This means you can use the information from the laser scanner directly in your business app without any extra interface. 

 

Updated Mobile APIs 

Our native mobile feature sets are updated to the latest version to give you the best native mobile experience. 

 

IOS 13 Support 

Our iOS Client was optimized for iOS 13 

 

New API for TCP socket connections 

With our new native tcp support, you can exchange data directly with other devices over ethernet or wifi interface. We use this to support external fix-mounted laser scanners on a fork-lifter for intra-logistic use case in production environments or warehouses. 

 


Discontinued Features 

 


Manual changes 

The new UI Designer requires updated widgets and metadata such as aggregations and drop zones. For the OpenUI5 version 1.60 we provide these widgets at http://download.simplifier.io/transports  

These must be imported and overwritten.  

Attention: All customer specific changes to these widgets will be lost! 

For the OpenUI5 version 1.38 and 1.44 you have to adjust the widgets manually in the widget editor. 

 


Announcements

Client API for direct connector execution (without calls) will not be available in Version 5.5 anymore  – please use only connectors with calls. 

Getting Started

Simplifier is a low code platform for mapping business processes in integrated business and IoT applications and to interconnect internal and external IT infrastructures. Applications only need to be configured once to be available on any mobile device and operating system. Basically the functionality can be divided in two main categories:

Main Features:

Using state-of-the-art technologies, we accelerate your application creation. We have designed and built our platform in terms of logic and usability to accommodate the modern, agile development processes within companies. Due to the low-code approach, applications no longer need to be elaborately programmed but instead can be easily configured and integrated into any system. Thus, applications can be mapped process-oriented.

The main features of Simplifier can be accessed from the central Dashboard, that consists of the following parts:

 

Basically, creating an application with Simplifier can be divided into the following 5 steps:

1. Connect systems

In the future, for each application, you can access the data that is needed contextually to make the integration process more efficient. Standardized connectors enable you to quickly connect to any back-end system and various data sources.

2. Create user interface

Easily, quickly and intuitively create the user-friendly interface for all your applications. Use the pre-designed elements designed for this purpose and create a uniform look and feel for improved user experience.

3. Configure processes

Configure the application logic of each application using the Process Designer. Based on individual user stories, reusable application logic is encapsulated within User Stories in the Process Dashboard. Each user story can be stored individually so that you can work with several people on different stories at the same time and thus be able to create application logic collaboratively.

4. Test application

Test your application at any time in the Simplifier Mobile client or in the browser. Intermediate testing allows for faster detection of misbehavior of your application at any point in time. The Simplifier Mobile Client supports the testing process by ensuring that applications can be used across devices and that the correct responsive display of the application on each end device can be ensured.

5. Publish application

The Simplifier transport system allows you to transfer the application to your productive system quickly and easily. And all without compilation or complex deployment processes. Quickly create a transport file of the finished application – it contains all the components of your applications and can be downloaded and imported directly into your production instance. Finished! The application is now available to any authorized user.

Example Apps

To demonstrate various features of Simplifier the following Example Apps are available with every Simplifier Freemium Instance and can be downloaded here

AppName and Description Video

ITIZ_Example_SmartMaintenanceDashboard

The Smart Maintenance Dashboard is used for real-time monitoring of machine data. A color-coded indicator shows immediately whether a production line is outside the predefined threshold values. This enables a quick reaction.
In the dashboard the user sees an overview of all machines assigned to him. For each machine he gets information about manufacturer and sensor data. The sensor data is displayed in the shape of a chart. In addition, the user can perform the following activities: Remote Service Call, Create notification in the SAP system and Detail view.

ITIZ_Mobile_Example_SimplifierExplored

This application shows a selection of functions of the Simplifier (e.g. Toggle Light, Vibrate, Scan Barcode, Take a picture…)
IMPORTANT: most functions can only be used on a mobile device. Please run this application in the Mobile Client.

ITIZ_Template_OPCUA

In this application you can specify an OPC UA node. The sensor data will then be displayed in real-time.

ITIZ_Template_REST_ToDoList

In this application you can create different to-dos with subject, text and user. You can also edit or delete existing to-dos. This application is using a REST interface.

ITIZ_Template_SAPRFC_PurchaseOrder

With the Purchase Order Application, you can display the details of a purchase order and also change the quantity of existing items.

ITIZ_Template_SAPSOAP_FunctionalLocation

This application shows you the functional location of a machine. You get the information about the manufacturer, as well as details about the location with representation in a map. The machines are displayed in a structure list and it is possible, for example, to remove the equipment and install another one.

ITIZ_Template_SQL_ShoppingList

In this application you can add a product and the quantity to the shopping list. You have the possibility to delete existing values.

 

Prerequisites

For Simplifier Configuration & App Development within Simplifier Admin Interface we recommend using Google Chrome Browser.

Deployment & Installation Instructions

A Simplifier application can be deployed in different ways. You can deploy to your local machine for development and testing, you can deploy to the Simplifier cloud, Cloud Foundry-based platforms, Azure, AWS, SAP Cloud, or a server you configured yourself.

Cloud installations are hosted and maintained by Simplifier AG. Each instance is reachable via a unique DNS name:

https://<instance-name>.simplifier.io

On-premise installations are hosted by our customers, on their own infrastructure. This scheme is especially useful if the Simplifier shall be integrated into a closed network infrastructure.

 Checklist for Installation

For Installation of the Simplifier, the following persons and things are required:

Use the following checkpoints for a successful installation

Checkpoint Description
System-Requirements are clear
Domain-Name for Development, QA and Productive Systems are clear
SSL Certifcates for all 3 Instances is available
Firewallports 443 and 587  are open
Backendsystem is reachable via Supported Protocols

 

General Requirements for On-Premise-Installations

We support you with on-premise installations of Simplifier. To do that, we deliver a prepared Docker image to you. The image comes pre-configured and contains all the required components, including a Simplifier server in its most recent version.

The target instance must fulfill the following requirements:

“D-Q-P”-landscape

To ensure high availability and qualified operations, it is necessary to build a three-stage system landscape (= DQP-landscape: development, quality, production). Please note that with a DQP-landscape the system requirements are tripled.

Reverse Proxy Requirements

The Simplifier Server needs a typcial Reverse Proxy as standard setup.

The Reverse Proxy should provide the following services for a secure setup

Forwarded Ports:


Port 443
Proxy must be able to pass through WebSocket connections!

CORS headers

Cross-Origin Resource Sharing (CORS) is a mechanism that uses additional HTTP headers to allow a user agent to access selected resources from a server located on a different origin (domain) than the currently used Web site. A user agent makes a cross-origin HTTP request when requesting a resource from another domain, protocol, or port than the one from which the current document originates.

The CORS mechanism supports secure cross-domain queries and data transfers between browsers and web servers. Modern browsers use CORS in an API container such as XMLHttpRequest or Fetch to minimize the risks of cross-origin HTTP requests.

For request methods’ POST’,’ GET’,’ PUT’,’ DELETE’:
Header name Header value
Access-Control-Allow-Origin *
Access-Control-Allow-Credentials true
Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,SimplifierToken
Additionally for request method ‘OPTIONS’:
Header name Header value
Access-Control-Max-Age 1728000
Response name Response code
Empty Content 204, No proxy call required

 


The following paths should be configured for routing it back to Simplifier
Location / Path Description
“^/genToken/$”  The Simplifier Authentification Service based on Tokens
“^/assets/(.*)$”  The static assets like images, pdf files, etc for an Application
“^/client/(.*)$”  The Client REST API to access business objects, connector or plugins
“^/library-managed/(.*)$”  Third-Party Javascript Libraries that need for the HTML5 Applications
“^/library-static/(.*)$” Third-Party Javascript Libraries that need for the HTML5 Applications
“^/appDirect/(.*)$”  Hosting Path for the created HTML5 Applications
“^/UserInterface/(.*)$”  Admin Backend Interface Application (should only accessible in a secure environment, internal network)
“^/authentication/(.*)$” External Authentication Provider for e.g. oAuth
 “^/passwordExpired/(.*)$” Password Reset Page for Admin Interface
“^/marketplace/(.*)$”  Simplifier Marketplace
“^/develop/(.*)$”  Plugin Interface

 

Docker Installation

Get Docker CE

Referenced to the official Docker instructions.

Note: This installation instructions is based on the example of the operating system Ubuntu 16.04 LTS.

SET UP THE REPOSITORY

Update the apt package index:
$ sudo apt-get update

Install packages to allow apt to use a repository over HTTPS:
$ sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    software-properties-common

Add Docker’s official GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22

      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

uid                  Docker Release (CE deb) <docker@docker.com>

sub   4096R/F273FCD8 2017-02-22

Use the following command to set up the stable repository. You always need the stable repository, even if you want to install builds from the edge or test repositories as well. To add the edge or test repository, add the word edge or test (or both) after the word stable in the commands below.

Note: The lsb_release -cs sub-command below returns the name of your Ubuntu distribution, such as xenial. Sometimes, in a distribution like Linux Mint, you might have to change $(lsb_release -cs) to your parent Ubuntu distribution. For example, if you are using Linux Mint Rafaela, you could use trusty.


amd64:
$ sudo add-apt-repository \

   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

   $(lsb_release -cs) \

   stable"

INSTALL DOCKER CE

Update the apt package index:
$ sudo apt-get update

Install the latest version of Docker CE:
$ sudo apt-get install docker-ce

Requirements for Remote Service applications

(On-Premise Installation)

Remote Service applications demand some additional requirements, especially on the network side. To successfully establish a connection between two clients, e.g. the Remote Service Portal, running in the browser on a Desktop machine and the Remote Service Client running on a Smart Glass, they must either reside in the same network, or a STUN-/TURN-server must be used.

The minimum requirements for using a remote service application are:

Additional Requirements for Oracle Databases as Backend

On-Premise Installation

Oracle as a DB backend for the Simplifier requires some additional server settings, which are listed below. The Simplifier is currently running with MySQL 5.7 and Oracle 11g.

 

Database Settings within the Oracle Database:

Parameter Recommended Value
OPEN_CURSORS 3000

Supported Oracle version:

Oracle Database 11g Release 11.2 – 64bit

Desired/recommended instance names (Productive and Test):

simplifierp and simplified

Required tablespaces:

simplifier 5G, Temp 1G, Undo 512 MB, Users 5MB

Oracle user and required roles and permissions:

simplifier, simplifier_np (in Prod and Test) permissions to run DDL

Database Characterset:

AL32UTF8

National Characterset:

UTF8

Default language:

German, Germany

Processes and Sessions:

Value to 1000

Installing an On-Premise Image

We always prepare an all-in-one Docker image for our customers which contains all required components.

Given a target machine that matches the requirements described in the previous chapter, the installation is quite easy:

1. Create the directory which will host all external user-specific data:

$ mkdir -p /opt/simplifier/data

$ export SIMPLIFIER_DIR="/opt/simplifier/data"

 

2.1 If your server has an Internet connection, you can get the Docker image from Docker Hub. 

$ docker pull simplifierag/onpremise:latest 
# for the Onpremiseversion include MySQL and Nginx

$ docker pull simplifierag/netzportal:latest
# for the Netzportalversion with config files for your own Oracle DB

View the variants and their versions. 

2.2 As an alternative we can provide a tarball for download. Copy the downloaded file with ending .tar.gz to a temporary directory on the target machine, e.g. /tmp and cd to this directory.

$ wget -O <filename>.tar.gz

Unpack the file in place:

$ tar xzvf <filename>.tar.gz

You will get two files: one readme.txt and the docker image with the ending .tar.

Inside the directory which contains the unpacked file, run the following commands as root- (super-) user:

$ docker load -i <imagefile.tar>

 

3. Install SSL certificates:

$ mkdir -p $SIMPLIFIER_DIR/certs

$ cp <certificate.crt> $SIMPLIFIER_DIR/certs/default.crt

$ cp <keyfile.key> $SIMPLIFIER_DIR/certs/default.key

 

4. Run docker image:

Alternative 1: with SSL/Certificates

$ docker run --name simplifier -v $SIMPLIFIER_DIR:/opt/simplifier/data \

-p 80:80 -p 443:443 -p 8090:8090 \

-d <Docker Tag>

Alternative 2: without SSL/Certificates

$ docker run --name simplifier -v $SIMPLIFIER_DIR:/opt/simplifier/data \

-p 80:8080 -p 8090:8091 \

-d <Docker Tag>

Replace the <Docker Tag> with the selected variant, e.g. simplifierag/onpremise:latest

 

5. Open your browser

Now use your browser at your Client Computer to access http(s)://<IP> or <FQDN>/UserInterface. The Simplifier will prompt a license dialog. After pasting that license
you can start configuring Apps in the AdminUI.

Handling & Updating an On-Premise Installation

Docker Basic Commands

Start the Simplifier container:

$ docker start simplifier

 

Stop the Simplifier container:

$ docker stop simplifier

 

Restart the Simplifier container:

$ docker restart simplifier

 

Create a backup of the complete Simplifier data directory, e.g.

$ docker stop simplifier

$ tar cvzf simplifier_backup.tar.gz /home/simplifier

Updating

In case of updates, we will prepare a new docker image for you, preserving your personal settings. Please download the image to a temporary directory of your choice (e.g. /tmp) and change into the directory. Finally unpack and load it, as described in steps 2.2 in the installation instruction.

To perform the update, proceed as follows:

  1. Stop the container and remove it from Docker.

    Take care NOT to remove your data directory /home/simplifier/data !

     

  2. Perform the following commands in order:
$ docker stop simplifier

$ docker rm simplifier

$ docker run --name simplifier {additional options as in step 4 before}

Features and supported operating systems

See the full-featured list of supported operating systems:

Plugin Description Android > 5.1+ iOS > 10.x+
cordova-plugin-background-mode For the Cordova framework to perform infinite background execution
cordova-plugin-badge Displays a badge number beside the Simplifier icon
cordova-plugin-barcodescanner Scans many different kinds of barcodes
cordova-plugin-ble-central Enables communication betweena phone and Bluetooth Low Energy (BLE) peripherals
cordova-plugin-device Defines a global device object, which describes the device’s hardware
cordova-plugin-device-motion Provides access to the device’s accelerometer
cordova-plugin-device-orientation Provides information about the physical orientation and motion of the device
cordova-plugin-file Implements a File API allowing read/write access to files residing on the device
cordova-plugin-device-file-transfer Allows you to upload and download files
cordova-plugin-dialogs Provides access to some native dialog UI elements
cordova-plugin-embedded-pdf-viewer Views PDF files
cordova-plugin-fullscreen Interactive fullscreen mode
cordova-plugin-geolocation Provides information about the device’s location, such as latitude and longitude
cordova-plugin-ibeacon Provides the functionality to use beacons with the iBeacon protocol
cordova-plugin-inappbrowser Provides an in-app browser
cordova-plugin-conferencing
Plugin to provide WebRTC Conferencing functionality via Open WebRTC Toolkit Media Server
cordova-plugin-keyboard Controls your soft keyboard
cordova-plugin-local-notifications Allows to schedule multiple notifications at once
cordova-plugin-media Provides the ability to record and play back audio files on a device
cordova-plugin-media-capture Provides access to the device’s audio, image, and video capture capabilities
cordova-plugin-network-information Provides an implementation of an old version of the Network Information API
cordova-plugin-photo-library Provides access to your photo libraries
cordova-plugin-screen-orientation Sets/locks the screen orientation in a common way
cordova-plugin-speechrecognition Speech Recognition functionality
cordova-plugin-statusbar Enables the user to make changes to the status bar of a mobile device
cordova-plugin-streaming-media Allows you to stream audio and video in a fullscreen, native player on iOS and Android
cordova-plugin-tts Text to Speech functionality
cordova-plugin-vibration Provides a way to vibrate the device
cordova-sqlite-storage A Cordova/PhoneGap plugin to open and use sqlite databases
Flashlight-PhoneGap-Plugin Allows you to switch the flashlight / torch of the device on and off
Insomnia-PhoneGap-Plugin Prevents the screen of the mobile device from falling asleep
phonegap-nfc Allows you to read and write NFC tags
phonegap-plugin-battery-status Provides an implementation based on the W3C Battery Status Events API
SocialSharing-PhoneGap-Plugin Allows you to use the native sharing window of your mobile device
sockets-for-cordova Provides JavaScript API, that allows you to communicate with server through TCP protocol
wikitude-cordova-plugin Provides augmented reality functionality by Wikitude

 

Live Debugging with Chrome DevTools

You can debug your applications on the Simplifier in real time on mobile devices.

Enter chrome://inspect into your Chrome browser.

Connect your mobile device via USB and enable “USB Debugging” within the device settings. Chrome will autodiscovering your mobile device and integrating it within the developer tools options.

When connected, you can begin screencasting by clicking the appropriate button in the developer tools window. Then your mobile device can be supplied directly with input from your desktop screen. Any changes are instantly displayed on your mobile device.

By the way, the “Port forwarding” button above provides some flexibility for those who don’t have their screen and developer machine on the same network. In this scenario, you can create a TCP port on your mobile device and assign it to a specific TCP port on your development machine. All forwarded traffic is transferred via USB, bypassing the mobile device’s network configuration.


Simulate a Mobile Device

By clicking the “Toggle device toolbar” button, the current page is reduced to the imitated screen parameters according to the set properties. This imitated display can be operated with the mouse in the same way as with the finger on a physical device.

In this view, you can simulate pinch zooming, finger scrolling and even multi-touch events.

 

Simplifier Mobile Client

Simplifier provides a Universal Mobile Client which uses an App-in-App Concept to run UI5 Applications as hybrid Apps on mobile Devices.

Download the Simplifier Mobile Client in the appropriate stores, depending on your mobile device.

GooglePlayAppleStore

 

App Links

Through App Links you can launch specific Simplifier business applications via Deep Links / URL. Use this feature to crosslink different business applications on your mobile device.
App Links can be used with the following URL scheme:

Scheme: 

new

simplifierclient://<action>/<value>?<param>=<value>[&<paramN>=<valueN>]

deprecated

simplifierclient:///<action>/<value>?<param>=<value>[&<paramN>=<valueN>]

Explanation:

simplifierclient:// – The url type, on that the simplifier client is registered. All uris with this link opens the client by default. If parameters or path components are missing, at least the client is always started.

/<action> – The action to take. For now only “appDirect” is available.

/<value> – The value for the action.

?<param>=<value> – The URL arguments are being passed to webview so business app can access them. So on the client the local href would be something like file:///some_very_long_ios_path/www/businessapps/Simplifier_Explored?foo=1&bar=2

Example: 

simplifierclient:///appDirect/Simplifier_Explored?foo=1&bar=2

The example above launches the simplifier client if installed and runs the app “Simplifier_Explored”.

Restrictions:

Simplifier Client API

All external programs, business applications and the mobile client access Simplifier via Simplifier Client API.

Simplifier Client API is documented by Swagger and can be accessed by opening the URL:

https://<simplifierbaseurl>/client/2.0/api-docs/

A detailed documentation of the client API is displayed and you can try out the API using the tools built into Swagger. All changes in the API are automatically transferred to the documentation.

Note: Make sure that you have select HTTPS under schemes.

Authentication

URL: https://<simplifierbaseurl>/genToken/

Method: POST

postBody:

{"user": "<username>", "pass": "<password>"}

Example Response:

{"result": "<simplifierToken>", "success": true}

 

The Simplifier token must be used for every following API request as header parameter simplifierToken.

Application

GET /appDeps/{appName} Get dependencies for application
GET /apps/{appName} Download application ZIP

 

Dependencies

GET /appDeps/{appName} Get dependencies for application
GET /libs List all libraries

 

Business Object

POST /business-object/{businessObject}/{method} Execute Business Object Method

 

Execution

POST /business-object/{businessObject}/{method} Execute Business Object Method
POST /connector/{connector} Execute Connector
POST /connector/{connector}/{call} Execute Connector Call
POST /pluginSlot/{plugin}/{slot} Execute Plugin Slot

 

Connector

POST /connector/{connector} Execute Connector
POST /connector/{connector}/{call} Execute Connector Call

 

Download

GET /apps/{appName} Download application ZIP
GET /libs/{libId} Download library ZIP

 

Library

GET /libs List all libraries

 

Mobile Client

POST /log/MobileClient Post general message to simplifier logger
POST /log/WebView Post WebView message to simplifier logger

 

Example

GET /ping Get default ping/pong message
POST /ping Get custom ping/pong message

 

Plugin

POST /pluginSlot/{plugin}/{slot} Execute Plugin Slot

 

Simplifier

GET /version Get the version of the currently running Simplifier app server

 

Settings

Server Settings | Password Settings | License | Authentication | Messages | Log | Server Environment

As a user that is defined as an admin by the corresponding role, you can hit the settings button by clicking on your user profile name on the top right corner.

Within the settings panel, you can define several settings: Server, Password, License, Authentication, Messages, Log and Server Environment.

In addition to the settings, you can also send an error report, change the language (German or English) or the design (light or dark) to set or unset the dark mode. You can also view the version info of your Simplifier instance or log out.

Server Settings

The Server settings control your session. At the subtitle Authentication token, you can set the lifetime of the authentication token and its checking interval.

If you set the authentication token to active, the checking interval to 10 seconds and the maximum lifetime of the authentication token to 3600 seconds, that means that every 10 seconds it will be checked if you are inactive. If you are inactive for about 3600 seconds, you will be automatically logged out.

Define the email settings within the SMTP Settings.

SMTP Port Specify the port of the outgoing mail server, e.g. 587
Authentication required If activated, a user/password authentication from the outgoing mail server is required
Encrypted with TLS If activated, the transmission is encrypted by TLS
Sender E-Mail Enter the sender’s email address, e.g. no-reply@simplifier.io
Sender Specify the name of the sender to be displayed
Password Set a secure password
You can switch on Experimental Features. It’s not guaranteed that these features work properly.

 

Password Settings

The Password settings specify the password policy for the users.

Minlength Minlength defines the minimum length of a password. Set a high number for added security
Count lowercase characters Defines the minimum count of lowercase characters in passwords, e.g. setting it to 4 means that a password has to be “abcdEFG” (at least four lowercase characters)
Count uppercase characters Defines the minimum count of uppercase characters in passwords, e.g. setting it to 4 means that a password has to be “ABCDefg” (at least four uppercase characters)
Count numbers Defines the minimum count of numbers in passwords, e.g. setting it to 4 means that a password has to be “1234abc” (at least four numerical characters)
Force symbols This forces the user to use at least one symbol such as $%&#
Prohibit parts of the username This option prohibits users from using their username or parts of it for their password, e.g. the user ‘John’ cannot use a password like ‘John123’
Block user after specified number of failed attempts Specify a limit for failing logins to prevent Brute Force Attacks. If the user exceeds the limit he will be blocked. To unlock the user, the admin has to do this via the user management or the user can reset his password to unlock himself
Demand captcha after specified number of failed attempts This option demands a captcha after a specified number of failed attempts

 

License

The License settings offer information about the current license you use. If your license expires, you can update it here. Simply copy and paste the license key in the corresponding field.

Authentication

Take a look at Authentication Settings and the following subpages.

Messages

The Message settings allow you to store system messages, which are transmitted to all logged-in users, e.g. if you want to inform them about maintenance work.
With corresponding rights (assigned role “System Messages”), you can add a validity date. The messages can be written in HTML. As soon as a message is stored, it is pushed to all user. A user who logs in later receive the message as well. The message is displayed as an overlay and must be closed manually.

Log

Within the settings, you find the settings for the logs. You can define per categories, which log level will write a log in the Logs & Monitoring.

Choose from the following categories:

  • Debug
  • Info
  • Warn
  • Error
  • Critical

Use the Log Archive Settings to specify the time period for archiving the logs. It runs every day at 3 a. m. when it’s activated.

Server Environment

Take a look at Server Environment.

Authentication

The Authentication settings allow you to establish a connection to external Identity Providers in order to sync external user to the Simplifier.
The following Providers are supported:

LDAP Active Directory (AD) SAML 2.0 oAuth 2.0 SAP Single-Sign-On (SSO)

Note: if all authentication systems that are set have been run through and no result has been obtained, a login is executed against the Simplifier User database.

LDAP

LDAP is based on the client-server model and is used for directory services. It describes the communication between the LDAP client and the directory server. Object-related data, such as personal data or system configurations, can be read from such a directory.

General Settings

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism

Mechanism Settings

Hostname The hostname of the server may be an IPv4 address or a fully-qualified hostname (FQHN)
Port The port of the server
Base DN The entry point for the directories

 

SAP Single Sign On via SOAP

You can use the SOAP service to authenticate via an SAP system and get an SSO2 Token for SAP SOAP web services. The user synchronization is done by the Simplifier AG own SAP RFC Module -ITIZ-_USER_READ or with a different SOAP-Webservice, which calls the standard SAP-Module BAPI_GET_USER_DETAIL.

General Settings

 

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism
Mechanism Type The authentication mechanism type

 

Mechanism Settings

Hostname Defines the IP/Host of the authentication service
Port Defines the authentication port
URI Type Defines the URI Type (HTTP or HTTPS)
WSDL Endpoint Ending part of the WSDL  URL without  protocol, hostname,  port and leading slash
SAP Client Number Defines the SAP Client Number
Timeout [seconds] Set a timeout in seconds
Create profile regardless of received SSO-Token Activate or deactivate the creation of a profile regardless of received SSO-Token
Enforce default values for the profile extraction Activate or deactivate the enforcement of default values for the profile extraction
Operation Name Defines the Operation Name
Binding Name Defines the Binding Name

SAP Single Sign On via RFC

You can use the RFC service to authenticate via an SAP system and get an SSO2 Token for SAP RFC web services. The user synchronization is done by the standard SAP-Module BAPI_GET_USER_DETAIL.

General Settings

 

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism
Mechanism Type The authentication mechanism type

Mechanism Settings

Hostname Defines the IP/Host of the authentication service
SAP Server Type Type of the SAP Server: Application Server, Gateway Service, Gateway Host, Message Server, Message Server Port
SAP System ID Defines the ID of the SAP System
SAP System Number Defines the number of the SAP System
SAP System Language Defines the language of the SAP System
SAP Client Number Defines the number of the SAP Client
SAP Router Hostname Defines the hostname of the SAP Router
SAP Router Port Defines the authentication port of the SAP Router
Create profile regardless of received SSO-Token If this switch is on, Simplifier will try to extract the profile. The used authentication method only will be {Basic-Authentication}. If the username or password consists of non-alphanumerical symbols, the authentication required for retrieving the user details might fail.
Enforce default values for the profile extraction  If this switch is on, all missing information in the profile will be replaced by default values. This will even happen when critical information, required for further extraction steps is missing. If this switch is off, the extraction process will be terminated and an error will be returned.
SAP Initial Logon Codepage Type The type of the codepage for the logon process: Undefined, Non-Unicode or Unicode-Enabled
SAP Codepage The number of SAP Codepage
SAP Client Type The type of the SAP Client: Not defined, R2, R3 or External
SAP Username Alias The assigned Alias for the SAP Username
SAP R3 System Name Defines the number of the SAP R3 System
SAP System Group Defines the group of the SAP System

Active Directory

Simplifier is able to sync users of Active Directories, like users from other LDAP sources.

General Settings

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism

 

Mechanism Settings

Hostname The hostname of the server may be an IPv4 address or a fully-qualified hostname (FQHN)
Port
The port of the server
Base DN The entry point for the directories.

Open Authorization (OAuth)

OAuth (Open Authorization) is an open standard for token-based authentication and authorization on the Internet.

To set OAuth as authentication, make sure you have administrator rights.

After you have logged in as usual in the login mask with your user credentials, click on your name in the upper right corner and then on the settings.

Switch to the Authentication tab in the upper toolbar.

To add a new authentication mechanism, click on the plus icon in the upper right corner.

General Settings

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism

 

Mechanism Settings

Display Name The Display Name is shown on the login button
Client ID Identifies the application and is defined by the configuration on the OAuth server
Client Secret Authenticates the application and is defined by the configuration on the OAuth server
Scope  Determines which rights are gained with the access token, e.g. ‘profile’, ’email’, etc. for gaining rights to access the user profile/user email
Authorization Endpoint The Authorization Endpoint is the URL to which an authorization request is sent
Token Endpoint  The Token Endpoint is the URL to which an access token request is sent
Redirect Endpoint The Redirect Endpoint is the URL to which the browser is directed after successful authorization. This URL needs to be entered in the OAuth server configuration
Additional Query Parameters It is possible to add Additional Query Parameters, such as name and value
Icon The icon will be displayed on the login mask above the display name
Profile URL The URL to which a user profile request is sent
Profile Path The path which points to the user profile, e.g. ‘/’, ‘profile’,’profiles[1]’ etc.
Profile Verb GET, POST, PUT
You can enable different types of OAuth 2.0 authentication mechanisms by applying the required data in a generic form. This allows using any OAuth 2.0 authorization service. On the subpages, you will find examples of authorizations with Google, Amazon and Azure.

User Management

The User Management module lets you define many different parameters for users and the roles they take.
The QR-Code generator for easy accessing, especially with smart glasses, is also located here.

The following table explains the different User Management functions and their meanings:

User

User Master data

Master data for a user account like Email, Username, Expire Date, Address Data

Roles

Collection of permissions

A role represents a number of permissions and can be assigned to a specific user

Permission

Permissions

Permissions are an authorization like granting access to a specific connector or business app

Groups

Collection of users

A user group contains several users and could be used for workflow logic in business apps like informing a team via email or push notification about a certain event or task

 

User Overview – Create a new user

The user overview display all users of your own Simplifier instance. Aside from the first name and last name you also can see the username and the expiry date of the user. Four icons on the left side allow you to see details of the user, edit or delete the user (only when your role has the permissions) and see if the user has been blocked.

To add a new user click on the “+” icon on the right above the user table. Within the User Details, fill out all required user information and assign a role or group for the user.

After creating a user, a one-time-link via email will be sent to the created user. After email activation via the link, a new password can be set.


It is also possible to assign different attributes to a user.

Role Overview

The section Role Overview defines permissions for the users. Here you can configure roles that can be applied to your users in order to permit or restrict certain actions, like administering applications and users or allow the use of special applications and restrict the use of others. Usually, there is one administrator-role that is allowed to use all features and functions of Simplifier.

Create a new role by clicking on the plus icon. To add a permission, use the selection helper on the right and choose the needed permission category. To enable or disable single permission, click on the checkbox in the corresponding column. Finally, assign the role to existing users. Hit the save button to finish the role creation or the update.

Within the right tab, you can add a user to the role. Use the selector for this.

Group Overview

A group contains several users and could be used for workflow logic in business apps like informing a team via email or push notification about a certain event or task.

Details View of a Group

To create a new group, you have to specify a unique name and an optional description, e.g. for a team or special task force group.

To add users to the group, click into the ‘Add User to Group’ Field and search for specific usernames. Mark (optional) several users and click OK to add them to the group.

Save your changes.

QR Login-Generator

The QR Login-Generator lets you generate your individual QR code for login purposes especially for wearable devices without a keyboard. You don’t need to type in your credentials anymore, just scan the QR code and you are logged in on your instance. Especially when using smart glasses, this feature is comfortable as it takes just a quick scan to enter Server URL, username and password without typing.

To generate such a QR code, go to the tile Users on the Simplifier dashboard and switch then to the tab QR Generator in the user overview.

 

You have to enter the required user with password and the Server URL. By default, this is already filled in. Generate the login code and now you can log in to other devices easily and quickly by scanning the QR code.

 

Applications

Simplifier transforms your business process into a configured business application for

Applications run on any device because it is generated on common open standard technology leveraging OpenUI5 / SAPUI5 

Overview

By clicking on the Applications tile, you will be lead to the overview. At default, there you will see a table with all the created applications. Within this table, you’ll get information like the name of the app, created by, last edited by, version, customization ratio, framework, and several actions.

At the top, to the right of the plus icon, you can switch between the list and table view. By changing the view, all lists in the Simplifier are changed.

There you will see all created applications with information like the name of the app, the description, created by, last edited by, and the framework.

If you click on an application in the overview, further information and actions are displayed on the right side. On the one hand, you can edit the app name, switch directly to the application preview, or delete the application. On the other hand, you can customize the description, the app icon, look at the customization ratio and the version. Below this information, you then have various actions, in this case, Copy Application and Show Releases.

App It’s the name of the application.
Created The name of the person who has created the application (with date and time).
Last Edited The name of the person who last edited the application (with date and time).
Version It’s the version number of the releases.
Customization Ratio After deploying an application, a code metric is available in the overview. It shows the generated lines of code and a comparison to the lines of code written by the customizer in events and script activities.

Framework The framework – OpenUI5.
Actions Edit application, copy application, show releases, edit meta-resources, preview and delete the application.

You can hide the details on the right with the button right of the search bar.

Read how to create a new application.

Basic Concept / Technology

All Simplifier applications are based on OpenUI5.

SAPUI5 and its open-source variant OpenUI5 help you build enterprise-ready Web apps that are responsive to all devices. The JavaScript UI library and development toolkit contains many feature-rich controls and implements the award-winning SAP Fiori user experience. It helps developers ease and speeds up the development of full-blown HTML5 Web applications.

The Simplifier App Generator generates OpenUI5 Applications based on OpenUI5 Controls. Within Simplifier OpenUI5 Controls are represented by Widgets.

User Interface

To create the user interface of Simplifier applications visually the UI Designer is used. In general, OpenUI5 uses pages to represent views within a single-page-app. Within Simplifier UI Designer, pages are represented by screens. Simplifier applications consist of one or more screens and every screen can be populated with widgets.

Application Logic

Within Simplifier application logic is separated by user stories within the Process Dashboard. Every user story contains an isolated part of the overall application logic and can be edited with the Process Designer. The Process Designer is a visual scripting environment to create application logic based on configuration elements. To find out how to use configuration elements see chapter Process Designer.

How OpenUI5 concepts are handled within Simplifier

OpenUI5

Simplifier

Description

Pages (Views)

Screens

OpenUI5 pages are represented by screens within Simplifier. A screen collects several widgets in a specific order to represent the user interface

Controls

Widgets

OpenUI5 controls are represented by widgets within Simplifier. A widget represents a specific element in the user interface like buttons, checkboxes, tables and input fields. 

View Controller 

Screen Controller/User Story

OpenUI5 view controllers are represented by screen controllers/user stories. There is an n:n relation between user stories and controllers. 

Models

Screen Models and variableHolder Model

Within Simplifier there is a global model named variableHolder and each screen has its own model named by the screenId.

 

Create your first Application

 

To create a new application, click on the Applications tile.

Then click on the “+” button on the top right to create a new business app:

The following dialog will appear:

Fill out the necessary fields analog to the table below:

App-Name

Unique app name like “SmartMaintenance”

App-Description

A short description of your app

Default Language

Your default language for configuration – you can translate this language later via the language translation feature

App-Transport-Name

The name of the transport for transferring your configuration to another Simplifier instance like a quality assurance system

After the app creation you can configure it with the following tabs:

image74

UI Designer

Configure the user interface and mark all necessary events to design your workflow.

image69

Process Dashboard 

Define your workflow with simple visual events and actions.

 

Widgets

A widget represents a specific element in the user interface (e.g. checkbox, button or login screen, etc).

To customize a widget, click on the Applications tile in the Simplifier dashboard and choose the Widgets tab.

Within the overview, you can edit, take a look at the details, delete or copy a widget or take a look at the description, category, tags, and set it to deprecated or not.

Press the ‘+’ button on the right to add a new one.

Add a name and select the OpenUI5 version.

By clicking OK you will be forwarded to the Widget Customizer.  On the left side are three different tabs: General, Template and Script.

General

In the tab General, you find the general information like Name, Version, Category, and Description. You can add tags or set the widget to deprecated.

Deprecated widgets are no longer displayed in the UI Designer. Deprecated widgets that were used before they were marked as deprecated are still displayed within the application content. The application will continue to be saved and deployed without issues or warnings and runs as before.

Add an icon to the widget by uploading it. You can delete it at any time.

 

Template

Enter the widget type in the tab Template – take a look at the constructor details in its API reference. It must match the name of the UI5 control. Use the wizard to automatically extract the widget data.
Choose a framework – OpenUI5 or SapUI5
By clicking on Next, the template for the widget is generated as well as the properties, events, and aggregations.

Script

The script of the widget is generated automatically if you use the widget assistant.

After hitting the Save button, you’ve successfully created or edited a widget.

Enumeration in Widget Properties

You can maintain enumeration for widget properties. Enumerated properties can only hold the defined values and will be displayed as a selection in the UI Designer.

In order to define the enumerations, you have to add them in an array notation to the default value of the property. It is not necessary to set the values in quotes.


Example

There are different predefined types of buttons in OpenUI5. The properties can be maintained as a list in the widget mask. In our example, we look at all different button types in the OpenUi5 API Reference and transfer them into the widget edit mask with the appropriate syntax: [typ1, typ2].


Result in the UI Designer

 

UI Designer

Create and design the user interface of an application with the UI Designer. The interface of the UI Designer is divided into four sections:

Screens & Widgets

On the left side you find the overview of all created screens and can switch to the widgets to fill the screen content. The widgets are e.g. buttons, checkboxes and so on, but also whole login masks can be displayed via a widget. If the standard widgets are not sufficient, you can create your own widgets at any time.

Screen Content Tree
In this area, the Screen Content of the current selected screen is displayed as a tree structure. You can add the widgets here and arrange them using drag & drop, but also with the arrow buttons or WASD on your keyboard.

Application Preview

In this section you get a real-time preview of the current screen. You can also drag-in widgets here and arrange them directly via drag & drop.

Properties Area
On the right, the properties of the selected widget are adjusted.


You have several options in the upper menu bar to navigate to specific features:

Designer Create and design the user interface of the application.
Process Define the process logic of the application.
Data Workbench Manage custom events, global variables and auto fields that you want to use cross-functional in the user stories.
Tests
     OPA5 With the OPA5 test framework, you can write test cases, which will be executed after the deployment.
     TBaaS TBaaS is a automated test service from j&s soft to test your application in different environments.
Other
     CSS Editor Use the CSS Editor to adjust e.g. spaces, sizes etc.
     Assets Uploads assets like documents, images, CAD models or any other file types.
     Security Assign roles to applications.
     Language Translate an application into different languages and set a fallback language.
     Theming Upload a particular theme to give an application a specific look according to your corporate design guidelines.
     Libraries Add libraries to an application and get an overview of their dependencies.
     Code

The Code Designer is a web-based development environment that can be used to write source code like in a normal IDE.

Note: Changes are not applied to the Process Designer of the application.

     Share Invite another developer to edit your application.

On the right you have the following options: 

Deploy Deploys the current app configuration – It’s necessary to deploy an application before open (preview) it
Open Open an application in the browser – Be aware that there are no mobile features like camera available. Use the Simplifier Mobile Client to preview mobile applications
Exit

Exit the current app configuration – It’s not necessary to save explicitly because of the AutoSave.

Attention: This does not apply to other areas.

 

Deploy and Preview

Applications can be deployed rapidly and previewed within a standard web browser and on the mobile device using the Simplifier Mobile Client.

By clicking on Open, it opens a new browser tab. Every time you deploy your application, the browser tab reloads automatically.

Make sure that pop-ups are not blocked in the browser for the Simplifier instance.

You can simulate your preview for different mobile devices with the Chrome Developer Tools or use it for debugging.

To access the DevTools, open your app preview in Google Chrome and press F12.

Alternatives:

Via the toggle device toolbar, you can simulate different devices like Galaxy S5, iPhone 6 or iPad to preview your application. More information on Google Chrome DevTools Device Mode.

Assets

Use Assets to upload files like documents, images, videos, 3D models or office documents to an application. It can be found under the tab Other.

It is possible to upload the following file types:

To upload an image, choose it from your client via the Browse button. You can reference to the path in the properties of a widget.

In the following screenshot, the path of the image logo.png is img/logo.png.

To insert e.g. an uploaded image into the user interface of your application, copy the path of it and paste it into the source field (src) in the properties of a widget.

 

CSS Editor

Use the CSS Editor for styling your application with standard web cascading style sheets. It can be found under the tab Other.

Please keep in mind that CSS statements are mainly used for design purposes, not for the basic layout to maintain the responsiveness of UI5.

For the corporate design, we recommend the use of the UI5 theming functionality with the Theme Designer.

UI5 and CSS: Please be aware to use CSS directives mainly for design purposes, not for basic layouting to preserve the responsiveness of UI5. For design purposes, we recommend using the theming functionality of UI5. Therefore you can use the Theme Designer.
The syntax for accessing widgets by ID with CSS is: #<screenId>–<widgetId>

If you want to learn more about CSS, check out the tutorials of the w3 schools or Codecademy.

Language

Applications can be localized easily by adding language files (.po-format) to the application.

By default, the language depends on the user environment, browser or device language, however, a fallback language should still be defined.

For the translation of the individual applications, .po files are used in Simplifier. These can be viewed, up- and downloaded via Language under the Other tab.

To create a new translation file, download a template from this overview by clicking on the download button.

It’s the best way to edit the downloaded file in a POEditor.

Important: translatable values must be flagged within a widget in order to appear in the default language file.

In this template, all values that are marked as translatable in the widgets, are listed and can be translated into the target language.

To upload the file to the application, add it via the plus. Select the language and upload the PO-File.

In order to avoid cache problems, rename the file before uploading.

If the desired language is not available, please contact your administrator, as these are maintained in the server settings.

To change the language of an application at runtime, the following script can be inserted in the Process Designer or browser console:

Sap.ui.getCore().getConfiguration().setLanguage(“en”)

Note: “en” can be replaced by the desired abbreviation.

To start an application with a specific language, add the query parameter sap-language=en to the application URL, e.g.

https://<simplifierBaseUrl>/appDirect/<appName>/index.html?sap-language=en

Libraries

Within the Libraries you get an overview of all assigned libraries that are currently used in your application.

You can assign libraries to your application in the UI Designer.

With the “+” you can add an existing library to your application. The icon left computes all dependent libraries of the application itself and its widgets as well as all transitive dependent libraries.

Take a look at Integration of external Libraries for more information.

 

Theming

To create themes for Simplifier applications, we recommend using the UI5 Theme Designer.

To use the Theme Designer make sure you have a registered user within SAP cloud platform or register a new one for free.

Export the theme and make sure that in the dialog, you set the checkbox beside Source files + CSS Resources.

You can then upload the theme to your application to give it a specific look corresponding to your corporate design.

To activate the theme, you have to select the Instances.

Then you can switch in the UI Designer between the themes to select the one you need.

Manage Screens

A screen represents one single user interface page and can contain several widgets.

When you create a new application, it does not have a screen yet. Add a screen by clicking Add Screen.

You can add more screens at any time by clicking on + New at the screen overview or just click on the + next to the tab of your screens.
A screen is always the start screen. To change the order of the screens, drag it to the required position.

To rename screens change the ID within the properties section on the right. Use the Description field to comment on the screen. This helps to identify the purpose of the screen later.

Widget Usage

Add Widgets to the Screen

To fill your screen with UI elements like text fields, charts or action buttons, use the widget panel on the left side. First, select the OpenUI5 version.

Via the filter, only the compatible widgets matching the stored UI5 version of the application are displayed.

Search for a specific widget using the name or just browse the list, then add the widget to the screen via the plus icon. The widget will appear in the content area of the selected screen.

Sort Widgets in the right order

Use the arrow keys to structure the widgets in the screen content tree into a hierarchy, or alternatively use WASD on your keyboard.

You can also use the arrow keys to structure the widgets in the screen content tree into a hierarchy, or alternatively use WASD on your keyboard (the widget needs to be selected).

W or moves the widget upwards
A or de-nests the widget
S or moves the widget downwards
D or nests the widget underneath the one above (if possible)

With the arrow keys on your keyboard, you can navigate through the screen content tree as follows:

Up ↑ Navigates up
Down ↓ Navigates down
Right → Opens the currently selected tree item (if possible)
Left ← Closes the currently selected tree item (if possible)

Copy Widgets within the Screen Content

You can copy Widgets and insert them on a different Screen or even another Application. For that, use the Copy, Cut and Paste function.

Edit Widget Properties

Every widget has properties to configure how the widget behaves. In the following example the properties of a button widget are shown.

Every widget has properties to configure how the widget behaves.

On the left are an example of the properties of a button widget.

 

Icon Explorer

Use the icon explorer to add icons to widgets that have an image or icon as property.
You can also add a font to an application that contains icons to use in the icon explorer. Images uploaded under Assets can also be selected.

 

Client Validation of Default Properties

The data type of default properties in application items can now be overwritten, but only domain types with the same basic type can be used.

You can find the settings in the Properties panel of the UI Designer. The button opens a popover, which lets you define the data type and the validation event. If the validation is enabled (checkbox), an indicator will be displayed. You can change the valueState and valueStateText as result.

In this example, we wanted to make sure, that the input field will be filled with the correct data, a ZIP Code. Therefore we added the validation for the predefined Datatype “ZIP” (a String with exactly 5 numbers) on the change Event.

Now, if you open the application in the preview and type in anything else than 5 numbers, the valueState of the input field would change to “ERROR” and the valueState text “Wrong Input” is displayed.

 

Process Dashboard and Designer

Process Dashboard | Process Designer

The Process Designer enables defining process flows as the result of an event in an intuitive, graphical way.

The tab for it is located next to the (UI) Designer.

By that, it follows the classic workflow of creating an application: First, you design the user interface for the application, followed by the definition of the workflow between these elements in the Process Designer.

Process Dashboard

By clicking on the tab Process, you get to the Process Dashboard.

The Process Dashboard is divided into different user stories that can be saved individually, so it is possible to work on it simultaneously with several people.

After deploying the entire application in the UI Designer or Process Designer, all user stories are merged into one.

If you save a user story in the Process Designer, the changes will not be visible in the preview of the application as long as it is not deployed.

To add a new user story, drag Story (on the left) into the middle. It opens a pop-up to define the Story Name (mandatory), set an External link with the Link text and define a Story Description.

It is possible to open multiple user stories at the same time. To switch between the user stories, simply switch between the tabs.

Edit or delete an existing user story with the equivalent icons. The user stories are ordered alphabetically (or by number – if used). You can sort the user stories in ascending or descending order with the icons on the right.

By double clicking on the whole tile of a user story or clicking on the edit icon, you are forwarded to the Process Designer to work on the currently user story.

If another user is editing the user story, it is displayed by a small avatar image of the user in the user story tile. By mouse over such an avatar image, a tooltip with the user’s login name is displayed.

Similarly, a small button in the upper left corner in the Process Designer itself displays users who are editing the same user story. The color of the button turns to red when another user starts editing the same user story. To view all editors, click on the button to open a pop-up.

It displays the avatar screen and the user’s login name. The colors depend on the user’s login name, so each user is given an individual color. The list of editors will always be up to date so you will get an instant response when someone starts editing the same user story.

 Deep Search

It is possible to search within the Process Dashboard for elements.

You can search for General, Activities and elements In Mappings.

While the search for user stories is a live search, the search for other elements must be triggered by clicking the search button.

Note: Auto Fields cannot be found by name, only by the expression they represent.

Live search for user story names
Search for activities

As result, all activities that match the search term are highlighted in green within the Process Designer.


Process Designer

The main view of the Process Designer is split into three main sections:

  1. The selection of the building blocks on the left: Event, Logic, Action, Data Object and Module. The activities are subdivided again. Take a look at the subitems of this page for more details.
  2. The drawing area in the center.
  3. On the right side, you can see the current user story, edit and save it. In addition, you can configure the current selected shape.

Process Documentation

For a better understanding of the application creation, use the Process Documentation. You can open it in the Process Dashboard as well as in the Process Designer itself.

It opens a dialog, that displays a textual documentation of the application process in Markdown format.

The description of the user stories as well as of the shapes are added into the documentation automatically. So make sure to use the description whereever possible.

Dynamic Process Settings

The toolbar within the Process Designer gives you control of the appearance of your process.

Number Function Description
1 Grid resolution This slider changes the size of the grid in combination with the “snap to grid” function (2), you have full control to properly align your process.
2 Snap to grid When deactivating (click on the icon), you can freely move all activities.
3 Zoom You can zoom out (left icon), zoom in (right icon) and reset the zoom with the icon in the middle.
4 Connection settings You can choose between three types of connections:

  • Angled
  • Curved
  • Direct (default in mapping dialogues)
5 Actions With these icons, you can cut, copy, paste or delete shapes.

Cut, Copy, Paste and Delete Shapes

You can cut, copy, paste and delete shapes within the Process Designer. Therefore you have to click on the appropriate icons on the top right of the canvas.

Cut With the left icon, you can cut your selected shapes from the canvas. So the shapes including connections and mappings of the configured shapes were copied and dropped.
Copy With the second icon from the left, you can copy the selected shapes including the connections and mappings from the canvas.
Paste With the third icon from the left, you can paste your copied (or cut) shapes including all connections and mappings. They appear slightly offset from the copied or cut shapes.
Delete With the right icon, you can delete your selected shapes. You can also do this with the delete key on your keyboard.

Visual Feedback for Process Errors

If you have any errors in your process, you will receive feedback about that. Every error will be displayed within the process. The corresponding activity will be highlighted in red and a tooltip will be shown by hovering over it.

 

Events

Publish Custom Events | Subscribe to Custom Events

Each workflow in the Process Designer starts with an Event.

Click on the Event element under Activities on the left side and drag & drop it into the drawing area in the center.
By double-clicking on the shape, the event selection assistant opens. You can also open it by clicking on the right side underneath Subscribe event / Publish event.

It guides you to your required event. When subscribing to an event, you can select events from these categories: Widget Events, Screen Events, Custom Events and System Events.

Each category is sorted and searchable.

If you want to use the Event in the current user story, select one of the Events under the tab Subscribe Event.


Event Type Description
Widget Events Events that are available for certain widgets, e.g. button press event.
Screen Events Events related to screens, e.g. onInit and onAfterShow.
      onAfterHide This event is triggered when the app has made the screen invisible. In the case of animated transitions, this event is triggered after the end of the transition. This screen will no longer be displayed and animated.
      onAfterShow This event is fired every time when the app has made this screen visible. In case of animated transitions this event is fired after the transition finishes. This screen is now being displayed and not animated anymore.
      onBeforeHide This event is triggered before the app hides the screen. For animated transitions, this event is triggered before the transition begins.
      onBeforeShow This event is fired every time before the app shows this screen. In case of animated transitions this event is fired before the transition starts.
      onBeforeFristShow This event is fired before the app shows this screen for the first time.
      onNavButtonPress This event is fired when Nav Button is pressed.
Custom Events Individual events within an application that can be published and subscribed at any time.
System Events Events related to devices, e.g. onDeviceGoesOffline and onOrientationChange.

Publish Custom Events

To use an event in other user stories, create a new Custom Event on the Publish Event tab.
A shortcut for creating Custom Events is located in the upper right corner.

Subscribe to Custom Events

Subscribe to a custom event in another user story to connect the logic between different user stories.

Example:

You have a process in User Story 1 that contains a condition to check if an input field is filled out after clicking on a “Login” button. Afterwards, the user should be navigated forward to the next screen.

Imagine you have the other user story exclusively for the whole navigation of your application. So you want the end of the event from User Story 1 (the navigation) subscribed to User Story 2.

Therefore we published the new Custom Event “LoginButton” in User Story 1 and subscribed to it in User Story 2.

User Story 1
User Story 2

Custom Events can be maintained in the Data Workbench.

Logic

Condition | Iterator | Script

Condition

Conditions allow you to define the process flow dependent on the evaluation of certain expressions.

In such an expression, you can compare auto fields, variables, a current value of a widget, or a given constant with each other and use the result to decide whether the process continues in one direction or the other.

Alternatively, you may decide to continue the process only if a condition is true and decide to leave out the alternative, which will stop the process at that point.

Double-clicking on the shape adds a new condition. Alternatively, click on the plus icon on the right.

An AND condition is created by default.

Toggle between AND
 and OR (not XOR) condition using the toggle switch.
Select the operator of the condition by the drop-down.
== value1  is equal to value2 (not checking the data type, only the value)
!= value1 is not equal to value2
< value1 is less value2
> value1 is greater than value2
<= value1 is less or equal to value2
>= value1 is greater or equal to value2
isSet variable has a value
isNotSet variable has not a value

Iterator

An iterator is an object that passes data structures sequentially. It returns the following element and determines if further elements follow.

Use the iterator activity to iterate over a variable. It has two output ports: each and after.

Port Description
each For every iteration, the following process will be executed.
after After all the iterations ended, the following process will be executed.

The iterator selection helper can be called by opening the mapping dialog on the right side. The mapping dialog can also be opened by double-clicking the shape.

Drag and drop the parameter to the drawing area in the center. You can select the collection to be iterated by double-clicking on the parameter.

The Mapping dialog is aware of its type and only offers collection variables that are defined in the application.


Script

The Script element allows you to integrate your own JavaScript snippet. It is activated by the previous event.

It shows a preview of the JavaScript full screen and its (optional) description on the right side. You can also enter code in this area, the changes will be saved and also transferred in full screen.

The full screen view is opened by double-clicking on the shape or by clicking on the corresponding icon .

Pretty Print

You can prettify JavaScript code with just one click.

Important: the script activity must be in full-screen mode.

By clicking on the corresponding symbol (Format Code) your code will be simply prettified.


Action

Navigation | UI Action | Mobile Action | Server Action

The Navigation element is used to trigger a navigation from one screen to another. By dragging it to the main screen, a list of screens to navigate to will appear in the right pane.

Set that the navigation should navigate back, or choose between several transitions: Slide, None, Fade or Flip.


UI Action

With the UI Action element, you can map different widgets, variables and auto fields to another.

Let’s say there is a very simple login screen with an input field for the name and a button to submit.

The button should not be responsive, as long as the login field is empty. This can be achieved with the UI Action in the Process Designer.

Step 1

At first, assign the input field to the Event (subscribe).

Step 2

Next, a condition is needed. Check, if the value of the input field equals an empty string.

Step 3

If the condition is true and there is nothing written in the input field, the button should not be responsive.

Add a UI Action and set within the mapping dialog the constant (Boolean, false) on the left side (source) and map it to the equivalent widget on the right side (target). Select the screen, widget, and property (in this case ‘enabled’).

For the other scenario, when there actually is an input written, you can connect the condition to a second UI Action and set the boolean via the constant on true.

 


Mobile Action

The Mobile Action element enables you to use mobile features within the application.

Drag and drop the activity ‘Mobile Action’ underneath Action into the drawing area.

Currently, there are 15 different actions implemented in Simplifier. Use the input/output mapping to define the source for the input (request) and the destination for its output (response).

The mobile actions are grouped into the following categories:

Behaviour

Background Mode
If the background mode is enabled, JavaScript will be executed even if the app is running in the background or the display is locked.
Light
With this mobile action, your mobile device can toggle light.
Screen Orientation
You can set and lock the screen orientation of the mobile device. Possible values are Landscape, Portrait, Landscape (Primary), Landscape (Secondary), Portrait (Primary), Portrait (Secondary) and Unlock.
Show Notification
This mobile action will trigger a native notification.
The notification will be displayed on your mobile device.
Show Toast
This mobile action will show a native toast, with a constant or by using the input mapping. You can specify the duration how long the toast should be displayed (Short or Long) and the position (Top, Center or Bottom).
Vibrate
Define how many milliseconds the mobile device should vibrate.

Connectivity

Audio/Video Call
This is a native feature for talking with a user via audio- or video live streaming. The user can be statically configured. Furthermore, you can set a fullscreen.

Information

Acquire GPS
The mobile action GPS need to be initialized at first. It’s recommended to do this in a screen onInit function.

When it’s initialized, you can access the longitude and latitude by the Auto Field type Geolocation.

For that, you need to open the mapping dialog of the UI Action. Then you can drag the auto field in the middle and by double-clicking on it you can select the longitude/latitude. Connect it with the appropriate widget.

Media

Capture Image
Determine how many pictures should be taken.
Capture Video
Determine how many videos should be taken and set the duration (default 60 seconds).
Play Audio
The mobile action Play Audio just needs an audio file path.
Play Video
By providing the mobile action a path to a video, it will play the video in a full-screen mode.
Scan Barcode
Set the format of the code you want to scan, the orientation of the camera and write a text in the prompt property.
Scan Meter
Parameter Data Type Valid Values
Meter appearance String see table below
Number of counts Integer 1, 2 (from the dropdown)
Integer digits Integer/String AUTO, 1-n
Fraction digits Integer/String AUTO, 1-n

You can choose from the following values for meter appearance:

Key Value
mechanical_black White text on black rollers
mechanical_white Black text on white rollers
lcd LCD Display
lcd_edl21 EDL21 and similar meters with LCD 7 (three-digit OBIS code to the left)

For the output mapping you can use the following parameter:

Parameter Data Type Description
image string Image of the scanning process as data URL
line1 string Result of scanning the first counter (always set)
line2 string Result of scanning the second counter (only set if 2 counters were scanned)
line1ObisCode string Result of scanning the first counter’s OBIS code (only set if meter appearance was set to lcd_edl21)
line2ObisCode string Result of scanning the second counter’s OBIS code (only set meter appearance was set to lcd_edl21 and 2 counters were scanned)

Text to Speech

With this mobile action, you can specify a text to be read out, as well as the output language. You can choose between English (US) and German (DE).

Server Action

The Server Action enables you to configure the login or logout for an application, address a template or send an e-mail.

Login

After mapping the according parameters you can decide which port you’d like to connect.

Port Description
success The process will be executed after a successful login or logout.
error The process will be executed after a failed login or logout.
already logged in The process will be executed if the user is already logged in.
User Credentials

The Server Action needs two parameters as input if you want the user of the application to fill in his username and password.

You can map the widgets in which the user fills in the information with the equivalent input parameter. (By double-clicking on the widget, you can choose the exact property that you need).

The Login screen of your application might look like this:
Single Sign-on

You can use a Single Sign-on if you want to allow a user to use a single set of login credentials to access multiple applications. In difference to the first login method, you have to map an additional parameter, the authentication.

Therefore you have to add this authentication method to the Simplifier in advance (this will be an admin task – take a look at “Settings for Admins“).

The name that was given to the authentication is the one that is needed as an input parameter.

This is what the input mapping should look like:
The login screen of your application might look like this:

 

OAuth 2.0
Select OAuth as login in the server action and open the mapping dialog.
Within the mapping dialog you have the opportunity to choose between two parameters:

  1. Service describes the OAuth service provider (e.g. Google, Amazon, Azure…) that expects a string that represents the name of a provider configured in the server settings.
  2. UserSync expects a Boolean value to switch between the following two possibilities:
      1. Login via OAuth by synching a user profile (true)
        This will synchronize the retrieved information with a Simplifier user (if there is one for the credentials) or create a new user. In both cases, the current login is overwritten and all permissions are revoked.
      2. Login via OAuth by adding the OAuth token only to the Simplifier token of the current user or app (false)
        This does not synchronize the user, but adds the received token to the current user or app profile (if the app is configured to allow anonymous users), retaining all previous logins and associated permissions.
SAML 2.0

It is possible to log into a business app via SAML 2.0.

Within the mapping dialog, you have the opportunity to choose between two parameters:

  1. Service – must be an existing SAML authentication setting.
  2. UserSync – should be true if a successful login replaces the primary user login.

The behavior is analogous to the OAuth login.

 

Logout

For the Server Action Logout you don’t have to configure anything additionally.

 

Template

Use the Server Action Template to address templates.

With the help of parameters, it is possible to pass data to the template.

Don’t forget to map the input and output. The complete template will be returned as a string.

 

E-Mail

The Server Action can be configured to send e-mails.

Enter the sender and receiver e-mail, optionally CC and Bcc. You can enter multiple e-mail addresses for the receiver, CC and Bcc – in this case, the e-mail addresses have to be separated with a semicolon. At least, enter the subject and the body in HTML. For better user experience, it is possible to maximize the editor.

It is also possible to use the mapping dialog to this instead of using the settings panel.

Important: If a mapping is set, the settings in the panel are not considered.

Data Object

Connector | Asynchronous Connector | Business Object | Mapping Collections | Mapping Structs

Data Objects represent data sources and destinations, which can be triggered for execution. You can choose either a predefined connector (you can activate it to asynchronous) or a business object.

 

Function Description
Asynchronous If you select this option, the value helper assistant only offers asynchronous connectors.
Value Helper If you open the value helper, an assistant opens that guide you to your connector.
Show Busy Indicator You have the possibility to configure if the UI is blocked by the busy indicator, or can configure which element on your screen should be blocked by it.
Input Mapping You can map variables, auto fields, widget properties and constants to the input parameter of your connector.
Output Mapping You can map the output parameter of your connector to variables and properties.

Connector

A typical example of a data object is a previously defined connector call. An assistant offers all configured connectors that own connector calls. You can search for the connector name or even the connector type. If you select a connector, all calls are listed on the right side.

Choose the required Connector and the Call you want to execute.

You have the possibility to configure if the complete UI should be blocked by the busy indicator, or which element(s) on your screen should be blocked by it.

If you want to assign a connector call to a data object, you have to define the sources for the connector input (the request) and the destination for its output (the response). This is called the Input Mapping and Output Mapping:

Clicking one of these two buttons opens a new pop up which allows you to connect widgets with the input or output attributes of a connector call.

Independent of whether you’re defining the input or output mapping, you’ll always find the mapping sources in the left pane and the destinations on the right.

If you define e.g. the input mapping, you’ll find the list of widgets in the left pane and the available connector call request parameters on the right.

Within the output mapping dialog, the widgets are on the right pane, as they are the destination of the received data. In this example, the request of the selected connector call provides only a single input parameter, an ID field named “TechnischerPlatzId”. This input parameter is connected with the value of the widget “CustomerType”. This means, that once the data object is triggered, e.g. through a button press event, the connector will be called with the actual value of the widget “CustomerType” as the request parameter. You can choose the exact source that you want to use for the input parameter by double-clicking on the widget. It opens a list of all properties so you can choose the one you need as input.

Asynchronous Connector

You can configure asynchronous connectors in the Process Designer. The configuration works as same as with the synchronous connector.
When setting a connector to asynchronous, the assistant only offers connectors with asynchronous interfaces (Push, MQTT, and OPC/UA).

It has two inputs “subscribe” and “unsubscribe” and one output.

subscribe can be triggered with any output
unsubscribe can be triggered with any output
output will be triggered on any async. message the Data Object receives

Business Object

The input and output mapping of Business Objects works equivalent to the mapping of Connectors.

After selecting the right business object and the predefined script template, you can map the input and output parameters.
Function Description
Client-side You can choose between client-side and server-side business objects. Read more about client-side and server-side business objects.
Value Helper By opening the value helper, an assistant opens that takes you to your business object.
Show Busy Indicator You have the possibility to configure if the complete UI should be blocked by the busy indicator, or which element on your screen should be blocked by it.
Input Mapping You can map variables, auto fields, widget properties, and constants to the input parameter of your business object.
Output Mapping You can map the output parameter of your business object to variables and widget properties.
The dialog shows all configured business objects that include methods. You can search for the name of the business object. By selecting a business object, all methods are listed on the right-hand side.

Output Mapping

The output mapping of a data object to a table, a list or a selected widget can be easily done in the Process Designer.

Click on Output Mapping and add the output parameter (on the left) and your table widget (on the right) to the screen. Double click on each to select the items.
Now map the equivalent items together via drag & drop.

Validation of mandatory Parameters

All configured parameters have an indicator if it’s mandatory.

If you haven’t mapped all input parameters of a data object that has been marked as mandatory, the following warning will appear:

Mapping Structs

Structs describe a package of domain types. For example, the struct “address” contains different domain types like name, street, city, ZIP Code, etc.

You can map structs as input and output parameter within your data object or when using a UI action.

Example:

In the example below, we want to use a business object that needs the information first name, last name, street and city as input parameter. Prior to our work in the Process Designer, we have created the struct data type “Person” that contains several domain types like “Firstname” and another struct which is called “Address”.

Within the input mapping of our business object, we can assign the input fields with the equivalent data to the struct “Person” that the business object needs.

By double-clicking on the struct you can choose exactly which parameter you want to select.

Navigate higher or deeper in the struct by clicking on the arrows (e.g. to select the domain type “Street” within the struct “Address”).

Data Workbench

Custom Events | Global Variables | Global Auto Fields

Within the Data Workbench, it is possible to administer custom events, global variables and auto fields that you want to use cross-functional in the user stories.

 

Custom Events

Custom events can be imagined as tunnels that connect different user stories or processes.

By publishing an event, you open the entrance to the tunnel and by subscribing to this particular event, you create the exit of the tunnel. This enabled you to jump between the user stories and helps you to have a clearly laid out working space.

To create a new custom event, click on the plus icon. Enter a name and then you can use it in the Process Designer.

Go to Events for an example of using the custom event in the Process Designer. In this section, you can also find out how to create a custom event directly in the Process Designer.

 

Global Variables

 

Use global variables as a container to buffer data, e.g. if a connector returns a lot of data and you would like to use some of it later in your work process, you can save the parameter as variables and map them later.
To create a new one, click on the plus icon. Enter a variable name, variable type and default value (optional).
You can also select, e.g. a struct as the variable type.

If you have selected a struct as a variable type and clicking on the value helper for the default value, the dialog on the right appears.

The dialog lists the fields of the ‘Machine’ struct on the left side like a tree. The struct is expanded to its first children so that the user can immediately see which are the fields of the parent node ‘Machine’.

You get the information about the fields on the right panel to configure the default values.

In general, the fields have four different appearances depending on their own data type:

Data type Appearance Behavior/Usage
String, Integer, Float Input field with validation (depending on data type) Values are written in the input field and saved on live change.
Date Date time picker The date-time picker dialog opens and the user is able to select the date and time.
Boolean Switch The switch can be set to true or false.
Collection, Struct Link By clicking on the link, you will be navigated to a complex data type in the left tree, that will also be selected automatically.

Example of a link press for clarification:

By pressing the ‘lubricant’ link from the dialog above, there are also different appearances of the tree items depending on their datatype:

Data type Icon Is Expandable Plus Button Remove Button
Base (String, Integer, Float, Date, Boolean) No No No
Domain No No No
Struct Yes No No
Collection Depending on collection items Yes No (only if it is a collection in a collection)

Collection exception:

By adding a collection object, the item is inserted into the structure below the collection. The collection object can then be clicked like an ordinary tree element. The only difference is that a collection item can be removed using the delete button.

You can reference variables in data objects as in- or output parameter. To do so, drag a variable (that you’ve created previously in the Data Workbench) from the toolbar in the mapping dialog.

 

Global Auto Fields

Auto fields are automatically computed/filled fields. You can use them e.g. if you want to greet the user who is logged in with his actual name or load e.g. the version number.

To create a new auto field, click on the plus icon in the Data Workbench. Enter a name for the auto field, the type, and the characteristic.

It is possible to declare auto fields from five types:

 

Category Characteristic Description
Application Name The name of the application.
Version The current version of the application.
If the application is not yet released, it is stated as “n/a”.
User Name The currently logged in user name.
URL Complete URL

The complete URL:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Origin

The origin part:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Protocol

The protocol part:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Host Name

The host name:

https://developer.simplifier.io:443/doc/current-release/?search=help#8263

Host and Port

The host name with port number:

https://developer.simplifier.io:443/doc/current-release/?search=help#8263

Port

The port number part:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Path

The path component:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Query Parameter

The value of a selected query parameter:

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Hash/Page fragment

The page fragment (URL part after the hash-symbol):

https://community.simplifier.io/staging:443/doc/current-release/?search=help#8263

Geolocation Longitude  The longitude of a place or city.
Latitude The latitude of a place or city.
Device Online

 Holds the current connection state.

Note: Use this autofield only in the context of mobile devices!

Please refrain from using it in the browser and be aware that this autofield does not work in Mozilla Firefox.

Mobile Client  Tells you if your application is running on the Cordova Client.
Screen orientation The screen orientation is set.
Device Type  The auto field can hold these values: desktop, phone, tablet, watch and smartglass.

In the overview, the type of the auto field is displayed underneath its name and the characteristic is displayed on the right-hand side.

To edit an auto field, use the edit icon. It opens the same dialog as creating the auto field, but of course, predefined with the data, you set before. If you no longer need an auto field, delete it by clicking the appropriate icon.

How to use Auto Fields

You can use auto fields within a data object. In this example, we created an auto field that automatically gets the user name. It is mapped with the input parameter ‘userName’ of a preconfigured business object.

We configured some more auto fields like “applicationVersion” or 2 URL parameter. The result is shown below:

At first, you can see the former way of typing in the information by hand. On the second Screen, we used the Auto Fields and you get the information automatically, simply by clicking on the button.

 

 

Code Designer

The Code Designer is a web-based development environment that can be used to write source code like in a normal IDE. Entered code will be highlighted according to the programming language used (e.g. JavaScript, HTML or CSS).

On the left side, there is a document tree view where all the files of an application are displayed in a structured hierarchy. New files can be created, uploaded or moved within the tree view.

All opened files are displayed in tabs and can thus be edited easily by switching tabs. The search function is used to search through code by keyword. Changes can be undone or redone with the Undo / Redo Buttons.

To get the code file, click on the “Download App” button.

If you add or change the code, it can not be displayed in the Process Designer. The connection is only unidirectional.

Security

Assignment

You can assign roles to apps, which is the first step in order to have anonymous logins.

All assigned roles to the app are imported and exported by the transport system. By default, it is not allowed for anonymous users to execute data operations in the app.

Allowing anonymous users must be allowed with explicit approval. For this you have to activate the checkbox next to “Allow anonymous users”. The plus icon will then be available.
To assign a role, click the plus icon. A pop-up appears in which you can select a role. Click on it to assign it directly.
After assigning a role, your changes are automatically saved.

You can also remove roles. All you have to do is click on the corresponding icon.

 

Runtime

When you navigate to an application, an authentication of the app for accessing an application token is triggered. All roles assigned to the app are linked to the application token. This feature allows anonymous users to e.g. execute connectors.

As a further security aspect, the app needs to provide security functionality in order to obtain an application token.

Integration of external Libraries

Sometimes it is necessary to add an extra library to your app, e.g. if you want to display some special charts. You can upload and manage those external libraries under the “Libraries” tab in the Application tile.

If you want to know how to implement them into your application, go to “Libraries

 

Standard Equipment

Simplifier provides the following library by default:

App Technology Library Version
UI5 OpenUI5 1.60

 

Add a new Library

To add a new library click on the “+” in the right corner.

Now you can fill in the following parameter:

Parameter Description
Name & Description Name The name of the library
NOTE: The combination of name and version number must be unique!
Version The version of the library
Vendor The vendor of the library
Comment A description of the library, or e.g. license information
Compatability UI5 compatible Controls the assignment to UI5 Apps
Default for UI5 Assigns the library automatically when creating UI5 Apps
Content ZIP file The ZIP file, that contains the library
JS code to include Code snippet to integrate the library into Apps
Dependencies Dependencies Dependencies to other libraries can be added via the plus icon

Integration of Libraries – addScript

To integrate the library with a js code snippet, use the following parameter:

addScript(ScriptPath, Name, Dependencies)

Parameter Type Description
ScriptPath String Relative path in the uploaded ZIP structure to the .js file you want to include (e.g. src/js/includedScript.js)
Name String Name of the library you can use to access the .js file (e.g. includedScript). By using “includedScript” in your script code you can now use all methods of your integrated library
Dependencies Array<String> Dependent scripts (refers to the parameter “name” of “addScript”)
It guarantees, that all dependencies are loaded beforehand. Use this if your library needs other libraries to work properly

It is important to ensure that all scripts specified under “dependencies” are either integrated into the same library, or a dependency is set on the library in which the script is integrated.

Integration of Libraries – addStyle

To integrate the library with a js code snippet, use the following parameter:

addSyle

Parameter Type Description
StyleURL String Relative path to the uploaded ZIP structure of the library
Name String Style name (optional)

 

Integration of Libraries – addBeforeInitHandler

 

addBeforeInitHandler

Parameter Type Description
Handler Function Callback function, which is called immediately before the loading of the script begins.

 

Integration of Libraries – addAfterInitHandler

addAfterInitHandler

Parameter Type Description
Handler Function Callback function, which is called after all scripts have been loaded completely.

 

Offline Applications

You can react on losing the connection of your application/device in the Process Designer.

There are two default events added in every application: onDeviceGoesOnline and onDeviceGoesOffline.

 

Event Function
onDeviceGoesOnline Will be triggered when the device has established a connection to the Wi-Fi or LTE.
onDeviceGoesOffline Will be triggered when the device has lost the connection to Wi-Fi or LTE.

 

The auto field type “Device” holds the current connection state – characteristic: online. How to create a new auto field, you can see here.
It can be used in every mapping and also in conditions.

Application Properties and Releases

Application Properties

Open Application Properties and Releases by clicking on the application name in the upper left corner.

Application Properties

This opens a new dialog box in which you can see the application properties directly.

Application Name The name of the application.
sap.m.App The specified expression is used as ID for the application envelope.
Description The description is displayed in the application overview list.
Splash-Logo The selected image is used as logo for the initial loading of the application.
Busy-Logo The selected image is used as a logo for asynchronous calls within the application (e.g. for connector calls or methods of business objects).
Author Creator of the application.
Date Creation date of the application.

Deploy Configuration

In the lower part of the window, you can activate the following deployment parameters for production environments:

ECMA 5 Transforms source code to ECMA5 standard.
Minify Minifies source code to reduce download time.
Polyfill Adds additional polyfill functions to reach full ECMA5 compatibility

Releases

By switching to the tab Release, you see an overview of all created releases of this application.

Use the button to the right of the entry to display the full release notes.

Create new Release

At the bottom right you can create a new release by clicking on New.
There you can add the Release Notes. By clicking on Create, a new transport for this application is generated.

Business Objects

Simplifier allows you to create complex integrated applications up to a high degree solely through configuration. Nevertheless, at some point in time, advanced business logic might be required, which can’t be implemented merely by configuration. This is when Business Objects come into play.

Business objects are implemented via JavaScript. This way they integrate seamlessly into Simplifier applications. They allow you to write arbitrary business logic and interact with other Simplifier artifacts like connectors, plugins or other business objects. They can also be used among different applications

To copy a business object, just click in the overview of business objects on the ‘Copy Business Object’ button on the right of the selected entry.

After you have clicked on it, a pop-up appears in which you can specify the new name of the business object. Then click on ‘Save’.

Now the business object has been copied. All included connectors, plugins and other business objects, as well as the script templates, are available in the copy.

 

Create server-side Business Objects

Business objects are managed in the tile ‘Business Objects’. The main screen lists all existing business objects in table form. On the top left, you can switch between server-side and client-side business objects

Press ‘+’ in the upper right corner to create a new one from scratch. This fires up the following screen:

First, choose a name for your business object and define a description (optional). Add some tags, so you can search in the overviews and the UI Designer by the tags.
You may then select any connector, plugin or other business objects you want to refer on the left side. It opens a dialog where you can select it. Each selected item appears in the list below, from where you might also remove it again by clicking the delete icon underneath ‚Actions‘.

When you’re done, leave the screen by hitting the ‘Save’ button and return to the overview page. Your new business object appears in the table.


Usage of server-side Business Objects

You can see which applications or interfaces are using the business object. For that, click on the appropriate icon on the right.

It opens a popup that displays all used applications:

By clicking on an entry, the application opens so that you can edit it directly.

Create and Manage Functions

The logic of a business object is implemented via script functions. Each business object can hold as many functions as wanted. Click on the ‘Edit functions’ icon. 

You are forwarded to the overview of the functions of the business object. There you can go to the function details, edit a function, test it, copy or delete it. 

To add a new function, click on the ‘+’.

Creating a function involves writing a method via JavaScript and editing parameters. In the script editor, you can code logic that can be called in the Process Designer.

The content corresponds to the inner body of a JavaScript function. In other words: your main code block must not be wrapped into a separate function definition but rests on the top-level context. It’s nevertheless possible to define sub-functions on top of your main code block.

It’s best practice to wrap your main code block in a try-catch-block to handle possible errors.

Let’s have a typical hello world example:

In the toolbar above you have several possibilities:

This example reads a name that is provided to the business object as an input parameter, compiles it into a greeting message and writes the result to the output.

Take a look at the try-catch-block surrounding the main code section:
If no error occurs, the upper part of the code inside the “try”-section will execute and return the greeting message and output.success = true. However, if any error occurs, the function will jump down into the “catch” section and return output.success = false and assign any details of the failure to attribute output.error.

In order to use the script function correctly, you have to add the same input and output parameters you used in the payload. Those parameters will be shown in the mapping dialogs in the Process Designer. Please note the corresponding handling of in- and output through the (JSON) objects “input” and “output”. Both of them may carry arbitrary attributes.

In this example the object “input” carries the attribute:

The “output” object carries the attributes:

Validate

You can validate the input and output parameter in the backend. It validates:

If the validation is not successful, the client is notified of all failed validations and it’s written to the business object log or system log at the same time.

For every new business object, this flag is set by default. Already existing business objects do not have this checkbox flagged to guarantee the compatibility.

You have the possibility to declare parameters as optional. When declaring a parameter as non-optional, the validation will fail if the parameter is not provided.

Server-Side – Access Connectors

You can access all connectors you’ve previously assigned to your business object inside your script template.

Simplifier.Connector.<ConnectorName>(payload?: string|object): object

 

Example:

var connectorResult = Simplifier.Connector.MySoap({bindingName"Binding""operationName""MyOp""soap": {"foo""bar"}});

 

Each call to a connector in a script template follows this convention:

Simplifier.Connector.<ConnectorName>.<CallName>(payload?: string|object): object

 

Example:

var connectorCallResult = Simplifier.Connector.MySoap.myCall({"Foo""bar"});

Server-Side – Access Plugins

In order to call a plugin from your business object you need to add the plugin to your business object first (see Create Server Side Business Objects) and afterwards access it within a Business Object Function using this syntax:

Simplifier.Plugin.<PluginName>.<SlotName>(payload?: string|object): object

Example:

var repos = Simplifier.Plugin.contentRepoPlugin.listRepos(); 
var newRepo = Simplifier.Plugin.contentRepoPlugin.createRepo({name: "MyRepo"}); 
Simplifier.Plugin.contentRepoPlugin.updateRepo("{\"id\": 15}");

Server-Side – Access other Business Objects

You can call any other business objects in your current one in a similar way than calling a connector, using the following syntax:

Simplifier.BusinessObject.<BOName>.<MethodName>(payload?: string|object, parametrized?: boolean = true): object

Simplifier.CurrentBusinessObject.<MethodName>(payload?: string|object, parametrized?: boolean = true): object 

The payload has to be a stringified JSON object. The result of the business object method is a string and therefore it has to be parsed.

Example:

var otherMethodResult = Simplifier.BusinessObject.OtherBO.someMethod({"foo""bar"});

var unparamtetrizedResult = Simplifier.BusinessObject.OtherBO.someMethod("{\"foo\": \"baz\"}"false);

var sameBoResult = Simplifier.CurrentBusinessObject.someMethodOnSameBO({"baz""baz"});

var noArgsResult = Simplifier.CurrentBusinessObject.methodWithoutArgs();

Test Business Object Functions

You can test the function by clicking on the ‘Test Function’ icon in the functions overview of a business object or click on ‘Save & Test’ within the creation of a function.


The upcoming dialog provides an input field for all input parameters, that do not have a constant value.

After entering the test values, click on the ‘Test’ button. It runs the template and displays the result in JSON format.

A history entry is created for each test and displayed in a closable panel on the left side of the dialog. Parameters from a current template can be imported into the next test by clicking the corresponding icon of the history entry.

Values that are marked as constants in the current call definition are not imported!

History entries can be deleted by pressing the trash icon. The history entries also display detailed error messages if a call was unsuccessful (hover over the info symbol).

Generate Data Type

You can automatically create simple or complex data types in the test dialog by pressing the button Generate data type after a successful test.

Access Business Object via Script

this.callBusinessObject(businessObjectName, method, payload, callback, showBusyIndicator, failOnError, failCallback, parametrized)
businessObjectName the name of the business object
method name of the script template to be called
payload JSON object with parameters as required by the called script
callback function, which is called after the successful execution of the connector
showBusyIndicator boolean value that indicates whether the screen has to be blocked by a loading bar (true) or not (false)
failOnError boolean value that indicates whether the connector should be called in case of an error of the function passed via “failCallback” (false) or not (true)
failCallback function, which is called in case of an error in the connector, if false “failOnError” is passed
parametrized boolean value that indicates whether the called parameters in the payload according to the rules in the script template are to be verified (true) or not (false)

 

Connectors

Connectors are the interface between a backend system and Simplifier to communicate with each other. They consist of at least one connector call.

Connector Addresses a specific backend system (like SAP, or Database, etc.)
Connector Call Leads a connector into action and contains input and output parameters

Standardized Connectors in Simplifier

Connector Type
Description
SOAP Use the SOAP connector to access a Simple Object Access Protocol based on HTTP and XML Format.
REST The REST (REpresentational State Transfer) connector is used for HTTP REST Services. The architecture uses standardized operations (GET, PUT, POST, DELETE) on web services. REST API is an alternative to other interfaces like SOAP. However, REST itself is neither protocol nor standard.
SQL With the SQL (Structured Query Language) connector, SQL statements are executed in a database schema, to request or edit based databases.
OPC/UA The OPC/UA (Open Platform Communications Unified Architecture) connector accesses to an OPC-UA server and performs READ/WRITE/SUBSCRIBE operations.
SAP RFC The SAP RFC (SAP Remote Function Call) connector is based on standard JCo SAP RFC to call functions in remote systems.
MQTT MQTT (Message Queuing Telemetry Transport) is an open message protocol for machine-to-machine communication (M2M) that allows telemetry data to be transmitted as messages between devices, despite high delays or limited networks.
This connector acts as a client and can publish or subscribe messages from an MQTT server (broker).
Push The Push connector sends push notifications over WebSockets directly to Simplifier Clients or Simplifier Browser Apps without using Google or Apple’s Cloud Services to support data protection and privacy.
CSV Use the CSV (Comma-separated values) connector to read and/or write comma-separated files on a local file store.
OData V2 OData (Open Data Protocol) is an open protocol based on HTTP for data access to enable CRUD operations. It enables the creation of REST-based data services to be published and edited by Web clients using simple HTTP messages.
Email Use the Email connector to send emails over SMTP (Simple Mail Transfer Protocol) with or without SSL Encryption.
Logging The Logging connector transfers the Simplifier application logs to a central monitoring tool/logwatch.
Proxy The Proxy Connector allows the usage of any HTTP services that are not based on specific protocol architectures such as REST, SOAP or OData.

Create and Manage Connectors

Connector Type | LoginMethod | Connector Details | Copy a Connector | Usage of Connector

To create a new connector, click on the plus icon on the upper right corner within the connector overview. It opens a new pop up where you can select the connector type and enter the required and optional information. 

Connector Type

Name The connector needs a unique name
Connector Type Set the technical protocol of the interface
Description Add a description
Active Set the connector active. You can see within the overview which connector is active
Timeout time (in seconds) Set the time in seconds until the connector request will run. After the set timeout, the request will be discontinued
Tags You can add tags to your connector (e.g. the name of a project)

Endpoints

After you have created the connector information, add your endpoints by clicking the plus icon.

You can set several, but at least one is required.

You can switch between endpoints and customize the Specific Parameters. Each connector has specific parameters that depend on the properties of the communication protocol. Read more on the following pages.

Login Method

You can add or select the login method for the specific backend systems. To select an existing login method, click on the corresponding field. It opens a drop-down where you can select it.

If you want to create a new one, you can choose between using Username/Password, Single-Sign-On, OAuth2 and SAML2.0.

If you’d like to get an overview of your existing login methods and manage them, click on the “Logins” tab in the connector overview.

Edit Calls

By clicking on Edit calls, you directly jump to the overview of connector calls.


Copy a Connector

You can copy an existing connector by clicking on Copy connector.

It opens the following dialog. Set a new name for the copied connector.
The complete configuration of the connector, including its connector calls, is copied and created with the duplicate.

Usage of Connector

You can see which artifacts are using the connector. For that, click on the appropriate icon within the connector overview underneath ‘Actions’.

 

It opens a pop-up that displays all artifacts that use the connector:

By clicking on an entry, you jump directly into the item.

REST Connector

Connector endpoint

The URL defines the REST endpoint.

Take a look at REST Connector Calls to define the connector calls for the connector.

Push Notification Connector

With the Push Notification Connector, you are able to send a notification to all logged in users who have the selected role or are in the selected group on the Simplifier instance.

Select via the value helper the roles and/or the groups to which you want to send a message in the connector configuration mask. Unfortunately, a multi-select is not yet possible and you have to select several roles in succession.

To create the connector calls for this connector, take a look at Push Notification Connector Calls.


How to use a Push Connector in a REST-Client (e.g. the Advanced Rest-Client)

Step 1: You need a Token

Request Type: POST
Content Type: application/json
Payload:
{"user":"<username>", "pass": "<password>"}
Returns:
{
"result""someprettylongtoken",
"success"true
}

Step 2: Make a Connector request with this Token

XHR Type: POST
Content Type: application/json
Header: SimplifierToken
Payload:
{
 "connectorName" : "<connector_name>",
 "json": {
 "msg" : "<some_string>"
 }
}
Sample:
{
 "connectorName" : "Push",
 "json": {
 "msg" : "test"
 }
}

  • Example 2: Send an order as push notification
XHR Type: POST 
Content Type: application/json 
Header: SimplifierToken 
Payload: 
{  
  "connectorName" : "<connector_name>",  
  "json": {  
  "msg": "{"order_id":"<NotificationMessage> <header> <message_id>  1234567890</message_id><created>date_time</created> <request> <site>9999</site> // Asset Nr.<resource>Station_1</resource> // Ressource/ Workplace<order>variant_123</order> // Order-/ SFC Nr.<variant>variant_123</variant> // Variant Nr.<assy>assembly_123</assy> // Assembly Group Nr. <time>180</time> // Time allowance </request> </header> </NotificationMessage>"}"
}
}

 

Take a look at Push Notification Connector Calls.

Assign Roles

Roles control who receives the messages. Any user who has the corresponding role and uses the Simplifier client at the time of sending a message will receive the message.

Enter the required roles in JSON notation as follows:

{
"roles": [
"<Role-1>", 
"<Role-2>", 
...
"<Role-n>"
]
}

Send message via Script

An object can be passed as a message by converting it into a JSON string:

JSON.stringify({propertyOne: 'abc', propertyTwo: 5})

var lo_payload = {
'msg:'<requested message>'
};

function successCallback(po_result) {
//Enter any code that will be executed in case of success
}

function errorCallback(po_result) {
//Enter any code that will be executed in case of error
}

this.callConnector("<connector-name>", lo_payload, successCallback, true, true, errorCallback);

Send message via Process Dashboard

To send messages via the Process Dashboard, you need to take the following steps:

  1. Drag the Asynchronous Data Object activity into the drawing area.
  2. Select the appropriate connector and the connector call for sending the message.
  3. Fill the parameters in the input mapping.

Receive message via Process Dashboard

To receive messages via the Process Dashboard, you need to perform the following steps:

  1. Drag the Asynchronous Data Object into the drawing area.
  2. Select the appropriate connector and the connector call for receiving the message.
  3. You can continue with or without script.

Continue with script:

var lv_msg = data.data.msg;

data.data.msg must eventually be adapted to the output parameter specified in the connector call. lv_msg is the received message (type String, can be e.g. a JSON string, then parse to get object:

JSON.parse(data.data.msg)

It returns the object:

{propertyOne: 'abc', propertyTwo: 5}

Continue without script:

Use the output mapping to map received messages, e. g. to a widget or to save it in a variable.

SOAP Connector


WSDL URL

The URL to the Web Service Description Language Document (WSDL) of the SOAP Service. Please don’t mix up with the SOAP Service Endpoint.

You can refresh the WSDL, show parsed bindings or download the WSDL with the according buttons.

 

Take a look at SOAP Connector Calls.

CSV Connector

Path
Filepath and Filename to local .CSV File that should be written, relative to the current working directory of the application server. It is recommended to give an absolute path, so it doesn’t matter which directory is set as “Current Working Directory” from the app server start script.

If you want to provide the files by the Html5 uploader you have to specify the path to the uploads directory. By default the path to the upload directory is

/opt/simplifier/data/storage/uploads. 
Please consider: If you have defined a different path in your Simplifier configuration file (settings.conf) or in your docker environment, then change the path accordingly.

 


Delimiter

Delimiter of the columns that separate the values like comma or semicolon. This must be exactly one character, more than one character is not supported by the library.
**In order to use the tabulator character, the expression ‘\t’ can be used in the Admin UI.** If more than one character is specified, all but the first character will be discarded.


Charset

The character encoding used to read/write the file. If a charset is used that is unknown to the application server JVM, all read/write operations will fail.


Mode

Operation Mode of the Connector, either READ, WRITE or READ/WRITE – the CSV Connector can currently only read the referenced CSV file.

Attention!

Please make sure that the Simplifier application Server has the right permissions to access and read the file on the operating system level.

If you use the uploads directory, the Simplifier has full access rights by default. So please beware.

Header

Activate the checkbox if the CSV File has a header in the first row.


Quote all Items

Activate the checkbox if all items should be quoted in terms of strings (“). Otherwise only values that contain the delimiter are put in quotes. This setting is ignored when reading.

 


Go to CSV Connector Calls to configure the corresponding Calls.

MQTT Connector

Broker Name The name of the broker. This is used by the Call to select the correct broker.
Broker Hostname Hostname of the broker IPv4 OR hostname!
Port The port, the broker is running on (1883 is standard for TCP and 8883 is standard for SSL).
TLS TLS Encryption. Not yet available!
Keep-Alive The number of seconds the client should be kept alive if no activity takes place.
Clean-Session Determines whether the session is cleaned after a reconnection.
Last will topic The topic for which a message is sent if the client dies (testament).
Last will payload The message for the testament.
Last will retained Flag to decide whether the message should be retained by the broker.
Last will QoS
(Quality of Service)
Flag to decide how often the message will be sent.
Allow multiple executions in reordering If you send the “order” list to rearrange the given operations, you can decide with the flag whether operations should be executed several times.
Continue after an exception Flag to decide whether the next operation should be executed after an error or whether the execution completely stops.

How to use a MQTT Connector in a REST-Client

You can choose between 2 operations: PUBLISH and SUBSCRIBE.

Build the payload like this:

Parameter Description
operationType Type of the operation, PUBLISH or SUBSCRIBE.
brokerName The name of the broker, as it is specified in the Connector Details. If no name is given, the default broker is selected.
returnSet (for SUBSCRIBE operations) Option which information the incoming messages contain.
“STANDARD”: Only the payload and the topic are displayed.
“WITH_QUALITY_INFORMATION”: Equivalent to the “STANDARD” but additionally with information whether the message is duplicated / withheld and QoS.
“VERBOSE”: As before but with Client ID as well as message ID.
 

Parameter for the Object “clientInformation”

clientId The ID of the client. Since no two clients can connect with identical ID on the same broker, caution is advised. Dropping this parameter causes a random ID to be generated by the program.
forceReconnection Setting whether the client should reconnect.
 

Parameter for the Object “messages”

qos The Quality of Service settings:
“AT_LEAST_ONCE”, the message is sent at least once.
“ONCE”, the message is sent exactly once.
“AT_MOST_ONCE”, the message is sent 0 or 1 time.
topic The topic for which the message is published.
retain Setting whether to keep the message in the broker.
payloadInformation Meta information for the payload. ***Is not being used at the moment.***
payload The payload as a String.

 

Publish

If you want to publish 1 message:

"operations": [
     {
         "operationType": "PUBLISH",
         "brokerName": "testBroker",
         "clientInformation": {
             "clientId": "client1",
             "forceReconnection": "true"         },
         "messages": [
             {
                 "qos": "AT_LEAST_ONCE",
                 "topic": "myTopic",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation",
                 "payload": "PayloadA"
             }
         ]
     }
 ]

If you want to publish n messages:

"operations": [
     {
         "operationType": "PUBLISH",
         "brokerName": "testBroker",
         "clientInformation": {
             "clientId": "client1",
             "forceReconnection": "true"
         },
         "messages": [
             {
                 "qos": "AT_LEAST_ONCE",
                 "topic": "myTopic",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation",
                 "payload": "PayloadA"
             },
             {
                 "qos": "AT_LEAST_ONCE",
                 "topic": "myTopic2",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation2",
                 "payload": "PayloadB"
             }
         ]
     },
 ]
Publish with multiple operations (publish + publish)
"operations": [
     {
         "operationType": "PUBLISH",
         "brokerName": "testBroker",
         "clientInformation": {
             "clientId": "client1",
             "forceReconnection": "true"
         },
         "messages": [
             {
                 "qos": " AT_LEAST_ONCE ",
                 "topic": "myTopic",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation",
                 "payload": "PayloadA"
             }
         ]
     },
     {
         "operationType": "PUBLISH",
         "brokerName": "testBroker",
         "clientInformation": {
             "clientId": "client1",
             "forceReconnection": "true"
         },
         "messages": [
             {
                 "qos": "AT_LEAST_ONCE",
                 "topic": "myTopic",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation",
                 "payload": "PayloadA"
             },
             {
                 "qos": "AT_LEAST_ONCE",
                 "topic": "myTopic2",
                 "retain": "true",
                 "payloadInformation": "JustMetaInformation2",
                 "payload": "PayloadB"
             }
         ]
     }
 ]
Subscribe

If you want to subscribe for n topics:

{
   "operationType": "SUBSCRIBE",
   "returnSet": "VERBOSE",
   "brokerName": "testBroker",
   "clientInformation": {
     "clientId": "clientSubscribe",
     "forceReconnection": "true"
   },
   "topics": [
     "test","myFancyTopic"
   ]
 }

OData V2 Connector

OData (Open Data Protocol) enables the creation of REST-based data services that allow resources identified by Uniform Resource Identifiers (URIs) and defined in a data model to be published and edited through the use of HTTP messages by Web clients.

It allows flexible access to the databases and to create, read, update and delete (CRUD) valid data on the web. OData is able to provide consistent semantics for data exchange in client-server communication.

Contrary to the other connectors, OData does not require any connector calls because the metadata is updated automatically.


Create a new connector and select OData V2 as a connector type. Within the specific data on the right, define the endpoint. Optionally, you can also define request headers to pass through and response headers to pass through.

Logging Connector

Choose the Connector Path:


How to use a Logging Connector in a REST-Client

You can choose between READ and WRITE.

Write Logging Connector Handler
{
   "connectorName": "WriteLoggingConnectorHandler",
   "json": {
             "msg": "Test Log Konnektor umgeschrieben",
             "logLvl": "debug",
             "logGroup": "pickIt",
             "deviceMac": "",
             "timestamp": 1425293416
   }
 }

Read Logging Connector Handler
{
   "connectorName": "ReadLoggingConnectorHandler",
   "json": {
             "logGroup": "pickIt",
             "logLvl": "debug"
   }
 }

SQL Connector

Configuration of new SQL Connector

Datasource

The JDBC Driver of the supported database: MySQL, Sybase, Oracle, PostgreSQL, SQLite, HANA, Microsoft SQL, IBM DB2 and IBM DB2 for AS-400 systems.


 

Connection-String

The connection string specifies information about a data source and the means of connecting to it. It is generated automatically, depending on your previous selections.


Result Type

The result type is a Monadic type holding a returned value or an error code. Choose between Multiple Results (e.g. Array), Single Result and No Result.

 

If you have created an SQL connector with the SQLite data source, files are created for a special directory for SQLite data files. The connector creates an SQLite database on the Simplifier server in the connector properties if it’s not available. When changing the connector, a backup of the file is created.

Attention: Deleting the connector also deletes the data file.

 

Take a look at the SQL Connector Calls.

Email Connector

SMTP host

Hostname of SMTP Server


SMPT port

Port of SMTP server


SMTP authentication

If enabled, the client attempt to authenticate the user using the AUTH command. Default to false.


SMTP StartTLS

If activated, it enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Note that an appropriate trust store must be configured, so that the client will trust the server’s certificate. Default to false.

 

Take a look at Email Connector Call.

OPC/UA Connector

Endpoint Address

The IPv4 address of the OPC-UA server, this server should connect.

Endpoint Port

The port of the OPC-UA server, this server should connect.


Timeout Time

The timeout time for one OPC-UA operation. The maximum possible timeout time will be one hour regardless of the given input.

Timeout Unit

The corresponding timeout unit for one OPC-UA operation. Three units are supported
  1. MILLISECONDS
  2. SECONDS
  3. MINUTES

Security Mode

The security mode the OPC-UA server.  The following modes are available (For now only “None” is accepted)
  1. Sign
  2. None
  3. Sign and Encrypt

Security Policy

The encryption of the OPC-UA server connection. The following four modes are available (For now only “None” is accepted)
  1. None
  2. Basic 128 Bit RSA 15
  3. Basic 128 Bit
  4. Basic 128 Bit SHA 256

Multiple Executions

If you reorder the operations in your code and want the possibility to do multiple executions, activate the switch.


Exceptions depending on status

Not implemented yet!


Permissions

Determines what kind of OPC-UA operations this connector might perform. There are currently 7 modes
  1. Read
  2. Write
  3. Browse
  4. Read History
  5. Write History
  6. Monitoring
  7. Call

 

Take a look at OPC-UA Connector Calls.

SAP RFC Quickstart

1. Fill mandatory information for basic SAP RFC setup
  • System ID
  • System Number
  • Client Number
  • Language
  • Application Server/Host Name
2. Find mandatory information within SAP Launch SAP Logon on your local machine, right click on the system and choose Properties.

Find the needed information in the following dialog.

Close the dialog and double-click on the system you want to log in to. You will see the following login screen where you can obtain the client ID and language.

 

3. Enter the information in the SAP RFC connector configuration within Simplifier

 

Create and manage connector calls

Connectors define the connection (entry point) to an external system. Given such a connection, you might send several different requests to the connected system. We call one such concrete pair of request / response a “connector call”. In order to use a connector call in the edit mode of a user story (Process Designer), you must create at least one connector call for each connector.

Attention

To use a connector within an app, you have to configure a specific connector call and assign data types within the configuration! Otherwise the connector will not be visible in the Process Designer.

Step 1

Choose a connector from the overview and click the call icon. In the call overview add a new call for each connector operation.

 


Step 2

For SOAP and SQL connectors, you have the possibility to use the Connector Wizard. It helps you to create your connector calls much easier and faster. If you click on it, you can choose the ones that you need.

Otherwise click on the plus icon in the upper right and enter a unique call name that describes the operation (e.g. read, write, update, delete, search, …).

Connector Call name
Unique name without spaces to describe the operation.

Description

Description of the operation.


 Step 3

For configuring a connector call, you have to specify input and output parameters in the following tables:
Each connector call has its own specific parameters

Validate

You can validate the Input and Output parameter in the backend. It validates:

If the validation is not successful, the client is notified of all failed validations and it’s written to the Connector log or System log at the same time.

For every new Connector Call, this flag is set by default. Already existing Connector Calls do not have this checkbox flagged to guarantee the compatibility.


Parametername

The technical path or name within a rest api definition or web service description language or csv header column.

 

Alias

A meaningful non-technical description for the technical parameter. This wording is used in the edit mode for a user story (Process Designer) for mapping data with ui elements.

 

Description

Optional description of the parameter.

 

Constant Value

A constant value like SAP Client or company code that can’t be overwritten by any business apps. The value will be validated, so that it’s not possible to use a constant value with a wrong base type in Connector Calls and Buisness Objects.

 

Data Type

Assigned Simplifier data type for validating data before it gets back or from a backend system.


Step 4

After finishing the parameters, you can save the connector call settings.

Connector Call Specific Parameters

The user interface for configuring a connector call is generic, thus it looks the same for all kinds of underlying types of connectors. Having the same interface for all kinds of connector calls is very convenient. But one drawback of this approach is, that some connectors require fixed parameters to be set, in order to work properly. This section tells you more about these details.


You can declare parameters of Connectors as optional.

When declaring a parameter as non optional, the validation of the call will fail if the parameter is not provided.


Data Type Selector

If you click on the data type field, a selector opens.

Number Description
1 The currently selected data type.
2 In this filtering list of all data types, you can find manually and automatically built data types. Custom data types are only manual data types. When the dialog opens in an automatically generated connector call, the data types of the connector can also be selected.
3 Prefilter of base and domain types, structs and collections.
4 You can always step deeper in the structure to select a data type.

 

Push Notification Connector Calls

The Push Notifiaction Connector Call requires only one input parameter to be defined:

Parameter Name Data Type
msg String
Example:

You can subscribe to a push notification connector. For this, create a new connector call in which you only have to define one output parameter. Input parameters are not necessary for this.
Parameter Name Data Type
msg String

Email Connector Call

The email connector call requires 3 input parameters to be defined:

receiver The email address of the receiver. Several email addresses can be specified separated by a comma String
subject The subject of your message String
msg The message itself String

All data types should be set as String.

There are 3 optional parameters that can be configured as well:

receiverCC The email address of the copy receiver. Several email addresses can be specified separated by a comma String
receiverBCC The email address of the blind copy receiver. Several email addresses can be specified separated by a comma String
sender The email address of the sender String
attachments A list of all attachments List[ByteAttachment]
ByteAttachment
{
    "session": String,
    "fileName": String,
    "attachmentMimeType": String
}
session The session id of an uploaded file by the HTMLUploader in the frontend.
fileName The filename which will be displayed in the email
attachmentMimeType The file’s MIME type, representing the file’s encoding e.g. image/jpeg, audio/wav, text/xml etc.

 

Example:

SOAP Connector Calls

Stick to the standard protocol | Use the protocol manually | Connector Wizard

SOAP is a network protocol. You can either stick to the standard when using the protocol like SAP or use it manually like Microsoft. The way the protocol is used to decide on how you have to build your connector call.

A) Stick to the standard protocol

In this case, the SOAP connector call requires two input parameters to be defined:

bindingName The name attribute of your wsdl:binding attribute in your WSDL file
operationName The name of the wsdl:operation attribute in your WSDL file for the operation that you want to call in your connector call

Example:

Parameters, that are required by the called SOAP operation, take the following form:

soap/<operationName>/<parameterName>, e.g. soap/_-ITIZ_-BUS2038_CREATE/index

SOAP connectors provide one or more optional parameters prefixed with ‘queryParams/‘.

Those fields are appended as query parameters on the SOAP request URL to provide additional meta information. It works in the same way as queryParams on REST connectors.

B) Use the protocol manually

In this case, the SOAP Connector Call requires two additional input parameters to be defined:

bindingName The name attribute of your wsdl:binding attribute in your WSDL file.
operationName The name of the wsdl:operation attribute in your WSDL file for the operation that you want to call in your connector call.
strict Determines whether services (strict == true) or local bindings (strict == false) are used to determine endpoints in the WSDL.
If you don’t use the standards, you have to set this parameter.
The Data Type is “boolean”. Set the value to “false”.
endpoint By adding this as parameter, you can choose the endpoint manually. If the endpoint is not set, the endpoint which is defined in the WSDL file will be used.

Example:

All possible nodes (even if marked as optional) have to be defined in the Connector Call. They take the same form as in the standard use of the protocol:

soap/<operationName>/<parameterName>, e.g. soap/Query/index

Inline attributes are characterized by this:

soap/<xml-node>/@attribute, e.g. soap/RequestServerVersion/@Version

C) Use the protocol as an expert

In this case, the SOAP Connector Call requires one or two additional input parameters to be defined:

bindingName The name attribute of your wsdl:binding attribute in your WSDL file.
operationName The name of the wsdl:operation attribute in your WSDL file for the operation that you want to call in your connector call.
configuration/soap/soapMode Determines the mode the SOAP connector operates in.
endpoint By adding this as parameter, you can choose the endpoint manually. If the endpoint is not set, the endpoint which is defined in the WSDL file will be used.
If the SOAP Mode (Direct_Ignore) is used the endpoint must be provided or an exception will occur.

The possible SOAP Modes are the following ones

Direct Sends the SOAP-Envelope directly. The WSDL will be used only for determining the correct endpoint.
Direct_Ignore Sends the SOAP-Envelope directly and returns the result directly without fetching and parsing of the WSDL. An endpoint ist required in with this mode
WSDL The default mode, the WSDL will be used for parsing the request parameters and result.

Example:

The payload must be provided by the parameter soap/ which must be a String.

The payload must be a valid SOAP envelope.

Connector Wizard

In the connector call overview, you can find the Connector Wizard in the top right corner.

By clicking on it, the assistant helps you to create the connector calls.

First Step – Select Operations:

In the first step, you can select the operations you want to execute.

Second Step – Configure Operations:

In the second step, you can edit the name and description of the connector calls.

 

SQL Connector Calls

Simple Call | Query Call | Execute Call | Connector Wizard

When creating a SQL connector call, you can create your SQL statement in the first tab “SQL”. Select the Mode parameter: simple, execute, query or transaction.

In the tab “Input Parameters”, the “mode” and “request” parameters are filled with the values from the “SQL” tab. These parameters are not optional and cannot be removed.

Their data type is “string” and the name cannot be changed.

An SQL connector call requires the two parameters “mode” and “request“.

You can choose between 3 different modes:

Simple Call

The ‘Simple Call’ corresponds to an unparameterized SQL call.

The SQL request is defined by a ‘String’ without variable substitution.

In order to be able to process the output of the SQL request, it must be defined in the output parameter of the connector call.

Currently, you can still map the entire JSON result to a single parameter.
This is possible by specifying a ‘/’ as the parameter name and the data type ‘String’ in the output parameters.

 

Query Call

The ‘Query Call’ is used to transfer the result from an SQL statement to the Simplifier.
(Usually, SELECT statements have a result)

The SQL request of the ‘Query Call’ is parameterized (in contrary to the ‘Simple Call’).

Definition of the constant value for the request parameter

The input value of the request parameter is represented by a name and a Simplifier data type. In our example, we used the name ‘mail’ and the data type ‘String’.
A parameter definition is initiated and ended with a colon. Between the colons is a pair of values, separated by a colon as well, which represents the name and the type of the parameter.
In a parameterized SQL request: select * from USER_Data where email like :mail:
If you use more values in an SQL statement you have to use a syntax separated by a comma, e.g. VALUES (:id:,:mail:).

Definition of the parameter in the Connector Call

In order to use the parameter that has been defined in the SQL request via the connector call interface, a new connector call parameter must now be inserted, which corresponds to the parameter definition of the SQL request.
All connector call parameters that refer to an SQL request have the prefix /params/.
In the example above, a new parameter name /params/mail with the Simplifier data type ‘String’ has been created.
The parameter expressions ‘alias’, ‘description’ and ‘constant value’ are equivalent to the usual connector calls.
The result of a ‘Query Call’ can be assigned via the output parameters equivalent to the ‘Simple Call’.

Execute Call

The ‘Execute Call’ is quite similar to the ‘Query Call’. But with the ‘Execute Call’, no result is sent back to the Simplifier.

Typically SQL INSERTs, UPDATEs, or DELETEs are displayed in that way.

Transaction Call

To execute multiple queries in a single transaction, use the mode ‘Transaction’.  bundles all executed statements as one database transaction.

The transaction mode has a delimiter setting, which is semicolon by default. Each statement is executed in the specified order and returns the result set. MySql, MS SQL, and SQLite additionally return values for automatic increment.

 

Connector Wizard

In the connector call overview, you can find the Connector Wizard in the top right corner.

With the SQL Wizard, it’s easy to configure new connector calls based on SQL Connectors for MySQL and Oracle.

When opening the Wizard, all tables available for the schema are displayed.

First Step – Select Queries:

In the first step, you can search for the table, and then select under “Actions” whether you want to select all columns (right icon) or only certain ones (left icon).

If you only want to select certain ones, click on the left icon. A new popup opens in which you can select the desired columns. Then click OK.

Second Step – Configure Connector Calls:

After you have selected the desired tables and, if necessary, their columns, you can edit the connector calls by clicking on “Edit Connector Calls”.

When you have edited the calls, click on “Create connectorcalls”.

CSV Connector Calls

Go to CSV Connector Details for more information about the CSV Connector.


A CSV Connector can be configured in 3 different modes:

* READ: The connector can only read from the specified CSV file path, no write operations are permitted.

* WRITE: The connector can only write to the CSV file, but not read from it.

* READ/WRITE: The connector can read from the file and also write to it.

 

 

READ

The CSV Connector Call for a READ operation requires 2 Input parameters: “action” and “resultmode“.

To execute a read operation, call the Connector with the parameter actionand the constant valueread.

Reading Connectors get the result as JSON array of arrays by default. There can be definied two “resultmode“parameter:

WRITE

The CSV Connector Call for a WRITE operation requires also 2 Input parameters: “action” and “data“.

The data parameter must be a two-dimensional array consisting of only Strings. You can specify the array in the call itself by adding the respective indices after the data parameter name e.g.

data[0][0], data[0][1]. In this case you can provide multiple fields of the parameter data. You have to be sure, that the indices are unique.


The Connector returns everything if you use “/” as Output parameter.

REST Connector Calls

This section describes the necessary parameters and data types for REST connector calls.

Connector execute result

When the connector is executed, it will only return a JSON as a result, if the content-type of the http result is “application/json”. In all other cases, the connector will return a JSON object with the following keys:

SAP RFC Connector Calls

This section describes the necessary parameters and data types for RFC connector calls. There are two different kind of calls

SAP RFC Connector Call – GET

To use the RFC Connector Call with the operation GET, you have to configure the following input parameter in the Simplifier:


operation

In this case: GET


operationTarget

Defines the exact information you want to return from the function block. Choose between:

With the following values (but the value may only appear once in the list, e.g. [import, template];[export])


returnInformation

Lists the complete structure (with SAP metadata) of the function block. Choose between:

Enter the value as a list. [STRUCTURE, METADATA]

Structure is the default.

SAP RFC Connector Call – EXECUTE

To use the RFC Connector Call with the operation EXECUTE, you have to configure the following input parameter in Simplifier:

 

If you want to use batched execution i.e. calling multiple function modules after another use this syntax

If you want to execute a function module, which has no parameter at all, you can either

  1. Provide ONE non-existing parameter with an arbitrary value
  2. Use this syntax [FUNCTION_MODULE_NAME_2]   and pass an arbitrary value
  3. Use the operationTarget configuration parameter and provide an empty array.

 

Please note:

 


Optional configuration parameters

 

You can modify the behavior of the connector in various ways. By providing the appropriate configuration key and value.

 

operation

key: configuraton/operation/operationType

value: EXECUTE or GET

default: EXECUTE

description: Changes the operation. An EXECUTE operation executes a function module, a GET operation retrieves the function modules structure and metadarta.

 


operationTarget (Optional)

key: configuration/operation/operationTarget

value: An array consisting of an arbitraty or no combination of the following values

default: All of the above mentioned values

description: Defines which parameters of the provided type will be passed to the function. If an empty array is provided, then no parameters will be passed to the function module. If nothing ist defined, then all parameters will be passed to the function module.

examples : The following parameters will be used for each exampls

example 1: If no operationTarget has been provided, then the following parameters will be passed to the function module.

example 2: If an operationTarget with an empty array has been provided, then the following parameters will be passed to the function module.

example 3: If an operationTarget with the following array has been provided

configuration/operation/operationTarget: [CHANGING, TABLE]

then the following parameters will be passed to the function module.

 


returnInformation

key: configuration/operation/returnInformation

value: An array consisting of an arbitraty or no combination of the following values

default: OUTPUT

description: Defines which parameter classes will be returned. If NONE is provided then regardless of the combination no parameters will be returned.


additionalReturnSetInformation

key: configuration/operation/additionalReturnInformation

value: An array consisting of an arbitrary combination of the following falues

default: The default value is determined by the provided parameter.

Provided Parametertype Recevied Parametertype
IMPORT EXPORT
CHANGING CHANGING
TABLE TABLE

description: Defines which parameter types will be returned. If an empty array is returned then no parameter types will be returned at all.

 


useBase64

key: configuration/output/useBase64

value: A boolean (true or false)

default: true (Base64 will be returned)

description: Defines whether binary data (ABAP: XSTRING/BYTE) will be returned as Base64 or as a ByteArray.

 


soapCompatibility

key: configuration/output/soapCompatibility

value: A boolean (true or false)

default: true (Table data will be wrapped in the item-pseudoElement)

description: Defines whether Table data will be wrapped in a structure with the pseudo-key item. By default the RFC-Connector is SOAP-compatible, meaning you can pass SOAP responses from an SAP system to a RFC-Connector and vice-versa. This flag provides you the possibility to retrieve the original RFC-output

 

OPC-UA Connector Calls

This section describes the necessary parameters and data types for OPC-UA connector calls. There are 3 different kinds of calls

NOTE: Please refer for the necessary data types here.

READ Call – OPC/UA Connector

Call for READ operations  (the name TIA_READ is the arbitrarily chosen name for this call)


Input Parameter

For the READ Connector Call, you need to configure the “operationType ” and the “nodeId” (consisting of 2 parameters: identifier and namespaceIndex). Furthermore, you can define the Identifier Type (optional) and the order of the operations in the code (optional).

 

operationType: Defines which operation you want to execute, in this case, “READ”.
Parameter Name: operations[0]/operationType
Constant Value: READ
Data Type: String


nodeID: Defines the identification of the OPC/UA node. It is split in 2 Parameter:


order (optional): Order in which the actions should be performed.
This parameter changes the execution order of the specified READ commands e.g. if we have three READ commands. Command 1 reads from node x, command 2 reads from node y and command 3 from node z, the normal execution order would be: x, y, z.

By specifying the read order with numbers starting from 0 to the last command number subtracted by one (e.g. for three commands it would be 2), the execution will be changed according to the defined number.

For example, by adding “order”:[2,1,0] to your code, you switched the operations, so the read commands would be executed the following way. z, x, y.


NOTE: The specific commands are NOT defined here!


Output parameters

You can return all Output Parameter like this:

Parameter Name: /
Data Type: String

If you want to get only selected Output Parameter, use the following syntax:

Parameter Name: operationsResult/[0]/dataType/name (exemplary)
Data Type: depends on the Parameter you want to be returned.


For now, only the complete unformatted JSON will be returned.

WRITE Call – OPC/UA Connector

Call for WRITE operations (the name TIA_WRITE is the arbitrarily chosen name for this call)


Input Parameter

For the WRITE Connector Call, you need to configure the “operationType ” and the “nodeId” (consisting of 2 parameters: identifier and namespaceIndex). Furthermore, you need to define the operationTarget and the value.

 

operationType: Defines which operation you want to execute, in this case, “WRITE”.
Parameter Name: operations/arrayItem[0]/operationType
Constant Value: WRITE
Data Type: String


nodeID: Defines the identification of the OPC/UA node. It is split in 2 parameter:


operationTarget:
Parameter Name: operations[0]/operationTarget
Constant Value: Choose between

values The values, which are going to be written into the nodes.
Parameter Name: operations[0]/value
Data Type: String
The position of the values will equal the position of the node. For example, if node a is on the first position and node b on the second, whereas value x is on the first and value y on the second position then value x will be written into node a and value y into node b.


NOTE: The specific commands are NOT defined here!


Output parameters

You can return all output parameter like this:

Parameter Name: /
Data Type: String

If you want to get only selected output parameter, use the following syntax:

Parameter Name: operationsResult/[0]/newValue/value (exemplary)
Data Type: depends on the parameter you want to be returned.


For now, only the complete unformatted JSON will be returned.

BROWSE Call – OPC/UA Connector

Call for BROWSE operations (the name TIA_BROWSE_ALL_VARIABLES is the arbitrarily chosen name for this call)


Input Parameter

For the Browse connector call, you need to configure the “operationType ” and the “nodeId” (consisting of 2 parameter: identifier and namespaceIndex). Furthermore, you need to define the operationTarget, a returnSet and filterSettings (optional).

 

operationType: Defines which operation you want to execute, in this case, “BROWSE”.
Parameter Name: operations/arrayItem[0]/operationType
Constant Value: BROWSE
Data Type: String


nodeID: Defines the identification of the OPC/UA node. It is split in 2 parameter:


operationTarget: You can browse references forward, backward or in both directions. Choose between the basic attributes (simple) or further ones, depending on the class (extended).
Parameter Name: operations/arrayItem[0]/operationTarget
Data Type: String
Constant Value: Choose between

returnSet:
Parameter Name: operations[0]/returnSet
Data Type: String
Constant Value: LIST

filterSettings (optional):


NOTE: The specific commands are NOT defined here!


Output parameters

You can return all output parameter like this:

Parameter Name: /
Data Type: String

If you want to get only selected output parameter, use the following syntax:

Parameter Name: operationsResult/[0]/browseResult/children/nodes/
Data Type: depends on the parameter you want to be returned.


For now only the complete unformatted JSON will be returned.

Connector Call via Script

In order to execute a connector call please use this code snippet:

this.callConnectorCall(connectorName, connectorCallName, payload, callback, showBusyIndicator, failOnError, failCallback)
connectorName the name of the connector
connectorCallName the name of the connector call name
payload a JSON object with the required parameters for the call
callback function, which is called after the successful execution of the connector call
showBusyIndicator boolean value that indicates whether the screen has to be blocked by a loading bar during the call (true) or not (false)
failOnError boolean value that indicates whether the connector call should be called in case of an error of the function passed via “failCallback” (false) or not (true)
failCallback function, which is called in case of an error in the connector call, if false for “failOnError” is passed

 

 

Copy Connector Calls

You can copy a connector call within a connector in the connector call overview by clicking the appropriate copy button.

By clicking the button a new pop up opens in which you can specify the name of the copied connector call. The default value is the name of the copied connector call added _copy.

Once you have assigned a name, click on the save button. Your connector call has been copied with all input and output parameters.

Test a Connector Call

As an admin, you can test your connector call by clicking on the ‘Test Connectorcall’ icon in the connector call overview or click on ‘Save & Test’ within the create/edit dialog of a connector call.

The upcoming dialog provides an input field for all input parameters, that to not have a constant value.

After entering the test values, click on the ‘Test’ button. It runs the call and displays the result in JSON format.

A history entry is created for each test and displayed in a closable panel on the left side of the dialog. Parameters from a current call can be imported into the next test by clicking the corresponding icon of the history entry.

Note: Values that are marked as constants in the current call definition are not imported!

History entries can be deleted by pressing the trash icon. The history entries also display detailed error messages if a call was unsuccessful.

Parameter- and constant names, -aliases and datatypes can be inspected by hovering over the parameter name. If the parameter is of a complex type, an info symbol is displayed. Hovering over this symbol will show a tooltip containing the value.

Generate data type

You can automatically create simple or complex data types from connector requirements in the test dialog by pressing the button Generate data type after a successful test.

The input validation in the test UI only takes place if ‘Validate’ is active for input parameters. The test parameters are always passed as a string.

Websocket Communication

The following sections contain information about how to use asynchronous connector subscriptions and unsubscriptions. For now, the subscription and unsubscription process can be initialized only programmatically and solely with the OPC/UA Connector.

Token Generation

A token is required for a secure communictation with the application server. You can generate a token with the following AJAX-Request

var token = null;
$.ajax("http://localhost:8080/genToken/client/1.0", {
method: 'GET',
headers: {'Authorization': '[Authorization]' // [userName] : [userPassword]},
success: function(data) {
if (!data.result) {
alert("Error retrieving token: " + data.message);
return;
}
token = data.result;
}});

 


[userName]

The name of the user as String.


[userPassword]

The passsword of the respective user as String.


[Authorization]

The authorization data required for identification. Consisting of the authorization method here the String Basic and the [userName]:[userPassword] as a Base64 encoded String.

Websocket Generation

After receiving a token, as described here, a websocket connection can be established with the application server with the following code:

var webSocket = null
webSocket = new WebSocket("ws://localhost:8080/client/1.0/connectorAsync/" + [ConnectorName] + "?SimplifierToken=" + [Token]);


[ConnectorName]

This parameter represents the connector, that the websocket connection will be established to.


[Token]

The generated token object.

Websocket API Documentation (Incomplete)

This section contains a description for the websocket methods. As for now this API is considered incomplete.


onOpen

The function, which will be executed, when the websocket is opend. The code block can be found below:

webSocket.onopen = function(message) {[FunctionLogic]};


onClose

The function, which will be executed, when the websocket is beign closed. The code block can be found below:

webSocket.onclose = function(message) {[FunctionLogic]};


onError

The function, which will be exceuted, when the websocket throws an error. The code block can be found below:

webSocket.onerror = function(message) {[FunctionLogic]};


onMessage

The function, which will be executed, when the websocket returns a message. The code block can be found below:

webSocket.onmessage = function(message) {[FunctionLogic]};


close

This function closes the websocket.

webSocket.close();


send

A specific request will be send to the websocket and interpreted by the other side of the connection. In this case a connector:

webSocket.send([request]);


[FunctionLogic]

This parameter contains the function, which will be executed.


[request]

This parameter is a JSON object send to the respective function. The requests for the Connector can be found here.

Request Types (Asynchronous Connectors)

This section contains a description of all possible websocket requests for an asynchronous connector (For now only the subscription and unsubscription are documented).


Subscription Request

This request subscribes the websocket to an asynchronous connector and will receive messages from it.

var request = null;
request = {
"frameType": "subscribe",
"subscriptionKey":[requestUUID],
"json": [requestData]
};


Unsubscription Request

This request unsubscribes the websocket from an asynchronous connector and will not receive messages from it any more. Whether the connector stops working or not depends on the connector implementation.

 

var request = null;
request = {
"frameType": "unsubscribe",
"subscriptionKey": [requestUUID]
};


[requestUUID]

A unique String, which acts as the identification key.
An example key might be “bb827118-f1b0-2170-9937-f8c7e1620107”.


[requestData]

A JSON object, which will be sent to the respective connector. Examples can be found here and here.

Token, Websocket and Request Sending Example

This section contains a detailed code example for generating a token and establishing a websocket with a connector, then a complete subscription followed by a complete unsubscription example. The arbitrary chosen connector is the “TIA_Connector”


Token Generation Example

var token = null;
$.ajax("http://localhost:8080/genToken/client/1.0", {
method: 'GET',
headers: {'Authorization': 'Basic YWRtaW46YWRtaW4=' // admin : admin},
success: function(data) {
if (!data.result) {
alert("Error retrieving token: " + data.message);
return;
}
token = data.result;
}});

Attention

Using the admin as user might be a security risk. In productive systems the admin should be changed into an authorized user with the respective permissions.


Websocket Connection Example

var webSocket = null
webSocket = new WebSocket("ws://localhost:8080/client/1.0/connectorAsync/" + "TIA_Connector" + "?SimplifierToken=" + token)
;


Complete Subscription Example

var requestSubscribeData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode","myOtherNode"],
"namespaceIndices": [2,2],
"publishingInterval":1000.0,
"clientHandlingID": 1,
"samplingInterval": 1000.0,
"queueSize": 2,
"discardOldestItem": true,
"monitoringMode": "Reporting",
"returnedTimestamps": "Both"
}

 

var requestSubscribe = null;
request = {
"frameType": "unsubscribe",
"subscriptionKey":"bb827118-f1b0-2170-9937-f8c7e1620107"
};

var requestSubscribe = null;
requestSubscribe = {
"frameType": "subscribe",
"subscriptionKey":"bb827118-f1b0-2170-9937-f8c7e1620107",
"json": requestData
};

webSocket.send(requestSubscribe);


Complete Subscription Example

var requestUnsubscribe = null;
requestUnsubscribe = {
"frameType": "unsubscribe",
"subscriptionKey":"bb827118-f1b0-2170-9937-f8c7e1620107"
};

webSocket.send(requestUnsubscribe);

Asynchronous Connector Request Json Examples

This section contains the required request data Jsons for different connectors and the description of each individual field.

 

The following Connectors are described with an example:

 

OPC-UA Monitoring Requests

After sending the subscription, the OPC-UA Connector will subscribe the given nodes for monitoring requests. Every change will be sent through the websocket to the client and can be received by the onMessage function, which has been described here.


Request JSON

var requestData = {
"operation": String,
"nodes": Array of String,
"namespaceIndices": Array of String,
"publishingInterval": Float,
"clientHandlingID": Integer,
"samplingInterval": Float,
"queueSize": Integer,
"discardOldestItem": Boolean,
"monitoringMode": String,
"returnedTimestamps": String
}


operation

The operation, which should be done by the asynchronous OPC-UA connector. Only the following options are valid at the moment.


nodes

The names of the nodes, which should be subscribed. The name is one of two parts, which defines a node Id.

NOTE: If more than one item should be subscribed with one request, then the amount of nodes must be the same as the amount of namespaceIndices.


namespaceIndices

The namespace indices where the nodes resides

NOTE: If more than one item should be subscribed with one request, then the amount of namespaceIndices must be the same as the amount of nodes.


publishingInterval

The interval, in which the OPC-UA server will publish the changes in the subscribed nodes. According to the queueSize all changes, which are still stored in the queue will be published. The used timeunit are milliseconds.


clientHandlingID

An internal unique handling key for the OPC-UA server to distinguish the monitoring subscriptions.

NOTE: Each request must have an unique clientHandlingID or else only message from the latest subscription will be returned.


samplingInterval

The interval in which the OPC-UA server will sample the subscribed nodes for changes. This parameter will be only used if SAMPLING is the chosen monitoringMode. The used timeunit are milliseconds.


queueSize

The size of the queue that logs all changes of the subscribed nodes. Each node has an own queue. If the queue is full and new changes occurs, then the oldest changes are discarded automatically.


discardOldestItem

If this option is selected, then the oldest entry in the queue of each subscribed node will be discarded regardless whether the queue is not full or not.


monitoringMode

The monitoring mode. The following two modes are available:


returnedTimestamps

This option decides what timestamps are returned in each message. The application server timestamp will be returned every time. For now the following options are allowed:

OPC-UA Monitoring Requests Examples

This section contains examples for the OPC-UA Monitoring Request Subscriptions

Attention

The status code of a frame might return either “Good” or “Bad” if later case occurs, then also the OPC-UA Error Message will be returned!


Request with Reporting Both Timestamps


var requestData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode","myOtherNode"],
"namespaceIndices": [2,2],
"publishingInterval":1000.0,
"clientHandlingID": 1,
"samplingInterval": 1000.0,
"queueSize": 2,
"discardOldestItem": true,
"monitoringMode": "Reporting",
"returnedTimestamps": "Both"
}

This request subscribes the nodes “myNode” and “myOtherNode” that resides in namespace 2 to the OPC-UA server, which will report the latest 2 changes after 1 second. The returning message frame contains the application server, OPC-UA server and source timestamps. The oldest item will be dropped.


Returning Message Frames

{

“frameType”:”data”,
“subscriptionKey”:”bb827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myNode”,
“namespaceIndex”:2,
“value”:”448828049″,
“appServerTime”:”Wed Oct 19 19:37:42 CEST 2016″,
“OPCUAServerTime”:”Mon Jan 01 01:00:00 CET 1601″,
“OPCUASourceTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}

{

“frameType”:”data”,
“subscriptionKey”:”bb827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myOtherNode”,
“namespaceIndex”:2,
“value”:”22223423″,
“appServerTime”:”Wed Oct 19 19:37:43 CEST 2016″,
“OPCUAServerTime”:”Mon Jan 01 01:00:00 CET 1601″,
“OPCUASourceTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}


Request with Reporting Source Timestamp

var requestData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode","myOtherNode"],
"namespaceIndices": [2,2],
"publishingInterval":500.0,
"clientHandlingID": 1,
"samplingInterval": 1000.0,
"queueSize": 1,
"discardOldestItem": true,
"monitoringMode": "Reporting",
"returnedTimestamps": "Source"
}

This request subscribes the nodes “myNode” and “myOtherNode” that resides in namespace 2 to the OPC-UA server, which will report the last change after 500 milliseconds. The returning message frame contains the application server and source timestamps. The oldest item will be dropped but it does not matter, as the queue can contain only one element.


Returning Message Frames

{

“frameType”:”data”,
“subscriptionKey”:”aa827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myNode”,
“namespaceIndex”:2,
“value”:”324234″,
“appServerTime”:”Wed Oct 19 19:37:42 CEST 2016″,
“OPCUASourceTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}

{

“frameType”:”data”,
“subscriptionKey”:”aa827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myOtherNode”,
“namespaceIndex”:2,
“value”:”2333543″,
“appServerTime”:”Wed Oct 19 19:37:43 CEST 2016″,
“OPCUASourceTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}


Request with Reporting Server Timestamp

var requestData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode","myOtherNode"],
"namespaceIndices": [2,2],
"publishingInterval":2000.0,
"clientHandlingID": 1,
"samplingInterval": 1000.0,
"queueSize": 20,
"discardOldestItem": false,
"monitoringMode": "Reporting",
"returnedTimestamps": "Server"
}

This request subscribes the nodes “myNode” and “myOtherNode” that resides in namespace 2 to the OPC-UA server, which will report the last 20 changes after 2 seconds. The returning message frame contains the application server and OPC-UA server timestamps. The oldest item will not be dropped.


Returning Message Frame

{

“frameType”:”data”,
“subscriptionKey”:”cc827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myNode”,
“namespaceIndex”:2,
“value”:”4488280898″,
“appServerTime”:”Wed Oct 19 19:37:42 CEST 2016″,
“OPCUAServerTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}

{

“frameType”:”data”,
“subscriptionKey”:”cc827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myOtherNode”,
“namespaceIndex”:2,
“value”:”22223425″,
“appServerTime”:”Wed Oct 19 19:37:43 CEST 2016″,
“OPCUAServerTime”:”Mon Jan 01 01:00:00 CET 1601″,
“statusCode”:”Good”

},
“success”:true

}

}


Request with Reporting Neither Timestamps

var requestData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode","myOtherNode"],
"namespaceIndices": [2,2],
"publishingInterval":100.0,
"clientHandlingID": 1,
"samplingInterval": 1000.0,
"queueSize": 5,
"discardOldestItem": true,
"monitoringMode": "Reporting",
"returnedTimestamps": "Neither"
}

 

This request subscribes the nodes “myNode” and “myOtherNode” that resides in namespace 2 to the OPC-UA server, which will report the last 5 changes after 100 millieconds. The returning message frame contains only the application server timestamp. The oldest item will be dropped.


Returning Message Frames

{

“frameType”:”data”,
“subscriptionKey”:”dd827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myNode”,
“namespaceIndex”:2,
“value”:”448828042″,
“appServerTime”:”Wed Oct 19 19:37:42 CEST 2016″,
“statusCode”:”Good”

},
“success”:true

}

}

{

“frameType”:”data”,
“subscriptionKey”:”dd827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myOtherNode”,
“namespaceIndex”:2,
“value”:”22223421″,
“appServerTime”:”Wed Oct 19 19:37:43 CEST 2016″,
“statusCode”:”Good”

},
“success”:true

}

}


Request with Sampling

var requestData = {
"operation": "MONITORING_SUBSCRIBE",
"nodes": ["myNode"],
"namespaceIndices": [2],
"publishingInterval":1000.0,
"clientHandlingID": 1,
"samplingInterval": 100.0,
"queueSize": 10,
"discardOldestItem": true,
"monitoringMode": "Sampling",
"returnedTimestamps": "Neither"
}

This request subscribes the nodes “myNode” that resides in namespace 2 to the OPC-UA server, which will sample the node every 100 milliseconds and return  the last 10 changes after 1 seconds. The returning message frame contains only the application server timestamp. The oldest item will be dropped.


Returning Message Frame

{

“frameType”:”data”,
“subscriptionKey”:”ff827118-f1b0-2170-9937-f8c7e1620107″,
“content”:{

“data”:{

“nodeName”:”myNode”,
“namespaceIndex”:2,
“value”:”448828043″,
“appServerTime”:”Wed Oct 19 19:37:42 CEST 2016″,
“statusCode”:”Good”

},
“success”:true

}

}

Connector Access via Script

this.callConnector(connectorName, payload, callback, showBusyIndicator, failOnError, failCallback)
connectorName the name of the connector
payload a JSON object with the required parameters of the call
callback function, which is called after the successful execution of the connector
showBusyIndicator boolean value that indicates whether the screen has to be blocked by a loading bar during the call (true) or not (false)
failOnError boolean value that indicates whether the connector should be called in case of an error of the function passed via “failCallback” (false) or not (true)
failCallback function, which is called in case of an error in the connector, if false “failOnError” is passed

 

Simplifier SAP

Simplifier as SAP Silver Partner offers its own SAP Addon for Interfaces with supporting the whole bunch of SAP transactions within SAP ECC core and IS-U module.
 
These interfaces can be accessed via SOAP (SAP Enterprise Webservices)  and SAP RFC.
The following subpages contain the SAP interfaces.

SAP ERP6 Business Partner

SAP ERP6 (Enterprise-Resource-Planning) Business Partner

Method SAP Transaction Description
CREATE BP Create Business Partner master data.
READ BP Load a Business Partner.
UPDATE BP Update Business Partner master data.
DELETE BP Delete Business Partner.
CREATE_BANK_DATA BP Create bank data.
CREATE_TAX_DATA BP Create tax data.
CREATE_INDUSTRY_SECTOR BP Create industry sector.
LINK BP Create Business Partner Relation.
UNLINK BP Delete Business Partner Relation.

 

SAP ERP6 Object Status

SAP ERP6 (Enterprise-Resource-Planning) Object Status

Method SAP Transaction Description
READ Various (e.g. QM03) Read an object status based on the object numbers.
READ_HISTORY Read system / user status change documents.
SET_STATUS_OF_OBJ Set system / user status of an object.
RESET_STATUS_OF_OBJ Removing the system / user status with no reference number to object X.

 

SAP ERP6 Status Profile

SAP ERP6 (Enterprise-Resource-Planning) Status Profile

Method SAP Transaction Description
READ BS03 Load an status profile based on the object numbers.
SEARCH BS03 Search a status scheme.

 

SAP ERP6 Document

SAP ERP6 (Enterprise-Resource-Planning) Document

Method SAP Transaction Description
CREATE CV01N Create document object master data.
READ CV03N Load a document using the document object key.
UPDATE CV02N Update document object master data.
DELETE CV02N Mark document for deletion.
CREATE_ORIGINAL_FILE CV02N Create a file from raw content, including original.
READ_ORIGINAL_FILE CV03N Read a file’s contents with document number and file ID.
UPDATE_ORIGINAL_FILE CV02N Update file details.
DELETE_ORIGINAL_FILE CV02N Delete file from document, including original.

 

SAP ERP6 Change Document

SAP ERP6 (Enterprise-Resource-Planning) Change Document

Method SAP Transaction Description
READ SE38 – RSSCD200 Load a change document usign the object key.
SEARCH_BY_DATA SE38 – RSSCD200 Search for a change document.
SEARCH_BY_DATE SE38 – RSSCD200 Search for a change document via date range.
READ_ALL SE38 – RSSCD200 Read all change documents of an object class.

 

SAP ERP6 Material

SAP ERP6 (Enterprise-Resource-Planning) Material

Method SAP Transaction Description
CREATE MM01 Create material master data.
READ MM03 Load material using the material number.
UPDATE MM02 Update material master data.
DELETE MM02 Mark material for deletion.
READ_ADDITIONAL_DATA mm03 Read additional material master data.
READ_MATERIAL_AVAILABILITY ATP information.
READ_SALES_TEXT Read sales text.

 

SAP SD Sales Order

SAP SD (Sales & Distribution) Sales Order

Method SAP Transaction Description
CREATE VA01 Create sales order object master data.
READ VA03 Loading a sales order object based on the customer order object number.
UPDATE VA02 Update sales order object master data.
DELETE VA02 Mark a sales order for deletion.
SEARCH VA03 Search a sales order.
READ_ORD_STATUS VA03 Read sales order status.
CREATE_BY_CUSTOMER_QUOTATION VA01 Create a sales order with reference to the customer quotation.
REJECT VA02 Reject a sales order.
REJECT_POS_NO VA02 Reject sales order individually.

 

SAP ERP6 User

SAP ERP6 (Enterprise-Resource-Planning) User

Method SAP Transaction Description
READ SU01D Read an SAP User.
GET_CURRENT_USER SU01D Read current SAP User.

SAP SD Customer

SAP SD (Sales & Distribution) Customer

Method SAP Transaction Description
CREATE XD01 Create customer object master data.
READ XD03 Load a customer object based on the customer object number.
UPDATE XD02 Update of customer object master data.
DELETE XD06 Mark a customer for deletion.
SEARCH XD03 Search for customer.
CREATE_BY_REFERENCE XD01 Create a customer modelled on customer X.
SEARCH_BY_ADRC XD03 Search for a customer based on the address.
READ_LINE_ITEMS FBL5N Read customer line items.

 

SAP SD Customer Quotation

SAP SD (Sales & Distribution) Customer Quotation

Method SAP Transaction Description
CREATE VA21 Create Quotation object master data.
READ VA23 Loading a Quotation object using the offer object number.
UPDATE VA22 Update Quotation object master data.
DELETE VA22 Mark the Quotation for deletion.
DELETE_POSITION_BY_NO VA22 Delete a Quotation item.
CREATE_POSITION_BY_NO VA22 Create a Quotation item.
REJECT VA22 Select a reason for rejecting the Quotation.
REJECT_BY_POS VA22 Select a reason for rejecting the Quotation by position.
GET_COND_TYPE Get condition types from quotation.
GET_POSITION_TYPE Get position types from quotation position.
GET_TERMS_OF_PAY Get terms of payment from quotation.

 

SAP SD Vendor

SAP SD (Sales & Distribution) Vendor

Method SAP Transaction Description
CREATE XK01 Create an SD Vendor.
READ XK03 Load an SD Vendor.
UPDATE XK06 Update SD Vendor.
DELETE XK02 Mark an SD Vendor for deletion.
SEARCH XK02 Search an SD Vendor.
DELETE_UNDO XK06 Undo deletion of an SD Vendor.

 

SAP SD Billing Document

SAP SD (Sales & Distribution) Billing Document

Method SAP Transaction Description
CREATE VF01 Create a Billing Document.
READ VF03 Load a Billing Document based on the Billing Document Number.
DELETE VF02 Mark a Billing Document for deletion.
READ_ADDITIONAL_DATA VA03 Read additional data from a Billing Document.

 

SAP IS-U Connection Object

SAP ISU (Industry Solution for Utilities) Connection Object

Method SAP Transaction Description
CREATE ES55 Create connection object master data.
READ EBAA Loading a connection object based on the connection object number.
UPDATE ES64 Update connection object master data.
DELETE N/A Deletion of a connection object is not possible.
SEARCH EBAA Search for a connection object.
READ_HIERARCHY EBAA Read the hierarchy of a connection object.

 

SAP IS-U Business Partner

SAP ISU (Industry Solution for Utilities) Business Partner

Method SAP Transaction Description
CREATE BP Create ISU Business Partner master data.
READ BP Load a ISU Business Partner.
UPDATE BP Update ISU Business Partner master data.
DELETE BP Mark a ISU Business Partner for deletion.
SEARCH BP Search for a ISU Business Partner.
CREATE_FLAT BP Simplified creation of ISU Business Partner.

 

SAP ISU Premise

SAP ISU (Industry Solution for Utilities) Premise

Method SAP Transaction Description
CREATE ES60 Create premise master data.
READ ES62 Load a premise using the premise object number.
UPDATE ES61 Update premise master data.
DELETE ES61 Mark a premise for deletion.
SEARCH ES62 Search for a premise.

 

SAP ISU Device Location

SAP ISU (Industry Solution for Utilities) Device Location

Method SAP Transaction Description
CREATE ES65 Create device location master data.
READ ES67 Load a device location using the device location object number.
UPDATE ES66 Update device location data.
DELETE ES66 Set delete flag of device location.
INSTALL IE02 Installation of a device location.
DISMANTLE IE02 Dismantling of a device location.

 

SAP MM Service Master

SAP MM (Material Management) Service Master

Method SAP Transaction Description
CREATE AC01 Create MM Service Master.
READ AC03 Load a MM Service Master based on the Service Master number.
UPDATE AC02 Update MM Service Master.
DELETE AC02 Mark MM Service Master for deletion.

 

SAP MM Purchase Order

SAP MM (Material Management) Purchase Order

Method SAP Transaction Description
CREATE ME21N Create Purchase Order master data.
READ ME23N Load a Purchase Order using the Purchase Order object number.
UPDATE ME22N Update Purchase Order master data.
DELETE ME22N Mark a Purchase Order for deletion.
SEARCH ME23N Search for purchase orders by vendor ID / purchase organization / factory / group / order type / status.

 

SAP MM Entry Sheet

SAP MM (Material Management) Entry Sheet

Method SAP Transaction Description
CREATE ML81 Create a MM Entry Sheet.
READ ML82 Load a MM Entry Sheet using the Entry Sheet number.
DELETE ML81 Mark a MM Entry Sheet for deletion.

 

SAP MM Goods Movement

SAP PM (Material Management) Goods Movement

Method SAP Transaction Description
CREATE MIGO Create a goods movement.
READ MIGO Load a goods movement using the object key.
CANCEL MBST Cancel a goods movement.

 

SAP PM Equipment

SAP PM (Plant Maintenance) Equipment

Method SAP Transaction Description
CREATE IE01 Create equipment master data.
READ IE03 Load an equipment using the equipment number.
UPDATE IE02 Update equipment master data.
DELETE IE02 Mark an equipment for deletion.
SEARCH IE03 Search for an equipment.
READ_CLASSES IE03 Read the class characteristics of an equipment.
READ_STATUS IE03 Read the user and system status of an equipment.
CHANGE_CLASSES IE02 Update the equipment class charactersitics.
CREATE_BY_REFERENCE IE01 Create an equipment according to a model X.
LOAD_BY_BAPI_GETLIST Search for the point of use via BAPI_EQUI_GETLIST.
INSTALL IE02 Installation of an equuipment.
DISMANTLE IE02 Dismantle an equipment.
READ_STATUS Read status of equipment.
CHANGE Change equipment data.
GETDETAIL Read equipment informations.

 

SAP PM Functional Location

SAP PM (Plant Maintenance) Functional Location

Method SAP Transaction Description
CREATE IL01 Create functional location master data.
READ IL03 Load a functional location.
UPDATE IL02 Update a functional location.
DELETE IL02 Delete a functional location.
READ_HIER IL03 Read the hierarchy of a functional location.
SEARCH_GETLIST IL05 Search functional locations.
CONVERT_KEY IL03 Converts any Functional Location key to the internal and external format.
CONV_EXT_2_INT IL03 Converts the primary key from the external format to the internal format.
READ_CLASS IL02 Read class characteristics of a functional location.
READ_CD_CLASS Read change documents for class characteristics of a functional location.
CHDO_SEARCH_DATA Read change documents for functional location.

 

SAP PM Maintenance Notification

SAP PM (Plant Maintenance) Maintenance Notification

Method SAP Transaction Description
CREATE IQS1 Create a maintenance notification.
READ IQS3 Load a maintenance notification.
UPDATE IQS2 Update a maintenance notification.
DELETE IQS2 Delete a maintenance notification.
SEARCH IQS3 Search for maintenance notification.
ADD_DATA IQS2 Adds data to a maintenance notification.
ASSIGN_TO_ORDER Assign an order to a maintenance notification.
CLOSE Close a maintenance notification.
CREATE_BY_REFERE Create a maintenance notification with a reference notification.
DELETE_DATA IQS2 Deletes data from a maintenance notification.
PUT_IN_PROGRES Set the in-progress status of a maintenance notification.
QMGRP_BY_TECHREP Get codegroup definition of a given cataloge profile.
SEARCH_NOTF_LIST Search maintenance notifications.
SET_TASK_COMPL Set the completion.

 

SAP PM Service Notification

SAP PM (Plant Maintenance) Service Notification

Method SAP Transaction Description
CREATE IW54 Create a service notification.
READ IW53 Load a service notification using the object key.
UPDATE IW52 Update a service notification.
DELETE IW54 Delete a service notification.
ADD_DATA IW52 Add data to the service notification.
CREATE_BY_REF Create a service notification with a reference notification.
SEARCH Search for a service notification.
SEARCH_NOTF_LIST IW53 Search for a service notification with the notification list.

 

SAP PM Service Order

SAP PM (Plant Maintenance) Service Order

Method SAP Transaction Description
CREATE IW31 Create a service order using the object key.
READ IW33 Load a service order using the object key.
UPDATE IW32 Update a service order.
SEARCH_GETLIST Search for service orders.
SEARCH_OPERATION Search for service orders.
DEL_SRULE_BY_SEQ Remove settlement rule from a service order.

 

SAP WM Transfer Order

SAP WM (Warehouse Management) Transfer Order

Method SAP Transaction Description
CREATE LT01 Create a Transfer Order with a single position.
READ LT21 Load a Transfer Order using the stock number and the Transfer Order number.
DELETE LT15 Cancel a Transfer Order.
CONFIRM LT12 Confirm a Transfer Order.
CREATE_BY_REFERENCE Create a Transfer Order with reference to a delivery.

 

SAP PM Maintenance Order Confirmation

SAP PM (Plant Maintenance) Maintenance Order Confirmation

Method SAP Transaction Description
CREATE IW41 Create a maintenance order confirmation.
READ IW43 Load a maintenance order confirmation using the object key.

 

SAP ITIZ DB Table

SAP ITIZ DB (Database) Table

Method SAP Transaction Description
READ SE16n Read a database table.
READ_FIELDS SE16n Read the available fields to a database table.
READ_METADATA Read the Metadata of a database table.

 

SAP HR Personal Time Management

SAP HR Personal Time Management

Method SAP Transaction Description
CREATE PA61 Load contemporary document master data using the contemporary document object key.
READ PA61 Read contemporary document object master data.
UPDATE PA61 Update contemporary document object master data.
DELETE PA61 Delete a contemporary document.
READ_TIME_STATEMENT PT40 Read remaining leave.

 

SAP ITIZ Key Value

SAP ITIZ Key Value

Method SAP Transaction Description
READ SE16n Load data from the SAP database, which can be used as a key value.
READ_DATA_ELEM SE11 Read ABAP domain fixed values ​​of data element X.
READ_TEXT SE16n Load data from the SAP database, which can be used as a key value.

 

SAP QM Quality Notification

SAP QM Quality Notification

Method SAP Transaction Description
READ QM03 Read a quality notification with a primary key.

 

SAP PP Production Order Confirmation

SAP PP Production Order Confirmation

Method SAP Transaction Description
READ CO14 Read a Production Order Confirmation using the primary key.
CREATE_BY_HDR_LEVEL CO14 Creation of a confirmation message for the production order.
CREATE_BY_TIME_EVENT CO14 Creation of a confirmation message for the production order with time events.
CREATE_BY_TIME_TICKET CO14 Creation of a confirmation message for the production order with time ticket.

 

SAP PP Production Order

SAP PP Production Order

Method SAP Transaction Description
CREATE CO01 Create production order.
READ CO03 Load a production order using the primary key.
UPDATE CO02 Update a production order.
READ_DOCUMENTS CO03 Read the document overview of a production order.
RELEASE CO02  Release of a production order.

 

Data Types

The tile “Data Types” is the central way to define different types of data, structures and collection of Data Types and their validation rules.

Data Types are a way to ensure data are sent and received in the right type format to and from the backend systems.
With this feature, you can define data definitions to validate your data with client and server-side validation to prevent security issues and backend saving problems due to wrong data formats or hacker attacks.

Data Types can be assigned to widgets and connector calls to validate input and output data.

There are six Base Data Types defined in the Simplifier:

Date

Date Format

String

Characters, numbers and any other symbols from the Unicode Character Set

Boolean

True or False

Integer

Positive and negative numbers like -2, -1, 0, 1, 2 …

Float

Numbers with precisions like 2,503

Any

Accept all kind of Data Types even heterogeneous Arrays.

With the “Data Types” tile, you are able to enhance the Base Types and define your own logic.
The new Data Types are split into three different types:

You can assign tags to Data Types to find them easily in the search bar.

Domain Type

A Domain type represents a single Data Type that inherits from a Base Type like String, Integer, Float, Date, etc. and can include different properties.
For example, a ZIP Code is an inherited type of string with the property of a maximum of 5 chars length.

To create a new Domain Type click on the “+” button.

Enter a unique Name for the Domain Type and an optional Description.
Also, select a Parenttype to inherit from by clicking on the appropriate field.

In the area below you can set the properties of your Data Type:

Min 

Minimum length of a String, minimum number of a range, earliest date of a date range.

Max

Maximum length of a String, maximum number range, latest date of a date range.

RegEx

Regular expression to validate this Domain Type –  click here for more information.

Possible Values

Simple JSON Array of Strings repesenting literals of chosen Base Type.

Nullable

If activated, this value can be empty (null).

Struct Type

Structs describe a package of fields. For example, the Struct “address” contains different Domain Types like Name, Street, City, ZIP Code, Mobile Number, etc and Base Types.

To create a new Struct Type click on the “+” button.


You can define a unique struct name:

Click into the appropriate field to select the type.


Click e.g. on Domain Types on the top and search for the domain type in the search bar.


After clicking on apply, the type will be applied.


In the fields table can you add the following Data Types:

Name

Name of the field in the structure.

Optional

With this setting, it isn’t necessary to provide all fields in Connector or Business Object Calls.

Type

Base or Domain Type or even another structure or collection.

Description

Description of the field.

Collection Type

Collections represent multiple results of structs. For example, a database request may deliver a list of addresses from numerous people.

To create a new collection type click on the “+” button.

Define a unique collection name and a description.

By clicking on Parenttype a new pop up opens, where you can choose the parent type from.

After you have clicked on Apply, the parent type will be used.

Copy Data Types

You can copy any Data Type of Simplifier. The copy will have all attributes/fields and any tags are given to the copied template.


Click on the copy icon and a new pop-up will appear.

By default, “_Copy” is added to the current Data Type Name. However, you can also assign a new name. Click ‘Save’ and the copy has been created.

OPC-UA Connector Data Types

This section describes the nescessary collections as well as their meaning, required to use OPC-UA READ/WRITE connector calls.


Collections

Jobs

Jobs are server-side executed and recurring tasks that use business objects as logic. They can be found by clicking on the ‘Jobs‘ tile on the dashboard.

Jobs are used to automating business objects. The selected business object method will be executed by Simplifier on a periodic basis. You may schedule the jobs in order to trigger them without further user intervention.


To create a new job, you have to name it and set an interval after which the job is called in repeatedly. Selecting the business object and the function provides the job with functionality. Furthermore, you can choose the user who should execute the job (in case he has all the required permissions). The active time zone on the server applies to all dates and time settings.

Interval

It’s a recurring interval at which the job is executed in the format <hh>:<mm>:<ss>. If the new execution overlaps with a previous run, it’s only started after it has been completed and after a further interval.

One Time

With this you can set an actual date <dd>.<MM>.<yyyy> and time <hh>:<mm>:<ss>.

If the selected time is in the past, the job will not be executed!

Daily

You can set a daily time in the format: <hour>:<minute>:<second>

Weekly

If you select this interval, it will be repeated every week. Set it in <hour>:<minute>:<second> and the appropriate day(s).

Monthly

Set this interval if you want that it’s repeated monthly. Set it in <hour>:<minute>:<second> and the day(s) within this month.

If the selected day doesn’t occur in this month, e.g. the 30th February, the job will not be executed in this month.

Logs & Monitoring

The error log is the central logging and monitoring area where all data-streams and errors are logged and saved.

Filter

The Logs & Monitoring tile uses all search features of the backend (i.e. pagination or filtering).

On the left-hand side, you can set filters.

You can choose between the following filters.

Filter Function
User Filter for specific user actions
Log Level

Filters based on the severity of the message:

DEBUG, INFO, WARNING, ERROR, CRITICAL

Category

The categories:

System, Execution, Customize, User, Mobile

From From Date
Until Until Date

In the logs on the right-hand side, you can click a detail button, which will open further information.

 

 

User-Log

User-Log logs the Login and Logout activities of the users.

Execution Log

You can use the execution log to trace the execution of e.g. connectors.

The following type of entries are logged:

Type Description
Open App When the direct path to an app is opened (appDirect)
Download App When downloading the app to the client (user context is provided)
Connector Execution When using a connector directly, the execution and payload will be logged
Connector Call Execution When a connector call is invoked. All parameters, even the constant parameters are logged
Business Object Execution When using a business object, the payload and parameters are logged
Plugins Plugins which are called by the old Akka interface
Asynchronous Connectors When subscribing and unsubscribing a connector
Job Execution Every execution of the job
Any above Any exception by executing an artifact above

 

Plugins

Plugins extend the Simplifier core features in all manners. They are standalone programs that can contain


In short: Every time you are not able to configure logic, interfaces or UI elements within the Simplifier, you can do it with your own plugin.


Plugins are microservices that can be developed in any available coding language. Plugins run standalone and remotely and communicate with Simplifier via AKKA message bus system over HTTP. Every Plugin has its own port number and, if necessary, also its own IP addresses.

 

Overview

To see the active Plugins, click on the Plugin tile.

Every Plugin can be an own configuration app, that is visible in the upper menu bar.


You can see the following information:

List of Plugins

Simplifier comes with the following plugins:

Plugin Name Description
keyValueStorePlugin Offers a Key/Value Store Database based on Java MapDB
pdfPlugin Offers a PDF Template Designer and Generator based on wkthmltopdf
contentRepoPlugin Offers a Content Repository for saving and sharing documents in a folder hierarchy with own permission objects
jsonStore Offers a Database Plugin to save and read back customer information (and application data) from apps in json format.
sessionPlugin Offers a User-Session Plugin to save and manage User Session
stepByStepGuidancePlugin Offers a generator (like a wizard) to build simple apps consisting of one information (image, text, video) per screen and one of the predefined functions.
captcha Server-Side Generation of Captcha Images for the UI5 Captcha Widget

 

PDF Plugin

The PDF Plugin can be used to generate files with a fixed layout but dynamic values.

It is structured in such a way that you can create a new template for the PDF plugin on the left. Use the plus icon on the left. In the middle you see the content, which you can create according to your needs in HTML, CSS and JSON. On the right you will see a preview of your template. 

The sub-articles describe how to use it.

Installation PDF Plugin

Configuration

To use the pdf Plugin, you have to configure it first.
Copy the file “settings.conf.dist” from the directory “plugins/pdfPlugin/src/main/resources”, save it as “settings.conf” and adjust it as follows:

In order to start the conversion, you need to install the program wkhtmltopdf on your operation system. The path to the wkhtmltopdf executable must be stated in the “settings.conf” file. Furthermore you need two folders, one to file your template and the other for the temporary data during the conversion. You can either use relative or absolute paths for the folders.

For example:

settings.conf
pdfPlugin {
     storageDir = "templates"
     tempDir = "tmp"
     wkhtmltopdf = "C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe"
}

....

NOTE:

If you use wkhtmltopdf on a Linux without the X11 Server, the error  “wkhtmltopdf: cannot connect to X server” may occur.

In this case you need to install the program “xvfb” via the package manager to simulate the X11 server.

Create a wrapper (e.g. /usr/local/bin/wkhtmltopdf-xvfb) for the “wkhtmltopdf” program and write the path in the PdfPlugin Config.

wkhtmltopdf-xvfb
<#!/bin/bash>
xvfb-run --server-args="-screen 0, 1024x768x24"/usr/bin/wkhtmltopdf$*

Plugin Execution

The Plugin is located in the directory: plugins/pdfPlugins. It can be activated with the SBT/Activator via a “run” command. The STDIN command “stop” ends the Plugin execution.

You can adapt the logback-configuration file “plugins/pdfPlugin/src/main/resources/logback.xml” to configure the log output or display it in another file.

 

Build a PDF Template

Administration

To generate a PDF and manage templates, the role “pdfPlugin” has to be assigned to your user.


Templates

You can build a PDF Template by using HTML, CSS and JSON. A live preview is provided on the right, so you can see changes in real-time.

The rendering is executed with wkhtmltopdf, therefore every HTML format and feature that supports the QT Webkit render engine is working.

With every template, a stylesheet in LESS format is generated and will be embedded automatically. You can maintain this stylesheet via the same interface as the HTML template.

The inclusion of graphics (<img src=”…”>) and additional stylesheets (<link rel=”stylesheet” href=”…”>) is also supported.
These external asserts are retrieved via the “assets” slot of the AppServer (they should be uploaded there in advance). You can refer to them in the template with a relative filename (no “http://” prefix, no path, etc.!).
Example: <img src=”image.jpg”> (if the file was uploaded as “image.jpg”)

Furthermore, you can add expressions in mustache format. These “variables” are later replaced by values from the update file to a session.

The dynamic data is retrieved as a JSON string in the key-value-store with the key: “sessiondata/$session“.
($session = the session ID that is specified for the generation)


Merging

You can combine your PDF document with other PDFs or images from the key-value store.

For this purpose, you can call the list of all the resources you want to merge with the key “merge/$session” in the key-value store. The list should correspond to a JSON-Array, where the entries of the JSON-Array are the keys of the resources to be merged. For example: [“document1.pdf”, “document2.pdf”, “image.jpg”].

The binary data of the corresponding documents should be filed in the key-value store under the keys “document2.pdf”, “document2.pdf” and “image.jpg”.

If the list of merge resources is not found for a session or if the list is empty, the merge is skipped.


Saving the generated PDF

After a PDF has been successfully generated, the binary data is stored in the Key-Value Store under the key “pdf/$jobid.pdf“. ($jobid = the job ID, that will be returned after the generation has started)

If the generation can not be executed successfully due to an error, a fault reporting is stored under the key “pdf/$jobid.log” in the key-value store.

Technical call of a PDF Plugin

The following subpages show the calls that can be executed via the interface. Therefore they do not have to be implemented.

Administration and Generation

You can manage your templates or start a new creation via REST.

All calls are started via a POST request, which may contain parameters in JSON format in the body.
The return is always in JSON format. It includes the result parameter “success” to indicate whether the call was successful.

If the call is not successful, an error code (as a return parameter “code”) and an error message (as a return parameter “message”) are returned.

The following errors are possible:

Error Code Message At Request
1 template name invalid adminTemplateFetch, adminTemplateEdit, adminTemplateDelete, generatePdf, adminTemplateAdd
2 template not existing adminTemplateFetch, adminTemplateEdit, adminTemplateDelete, generatePdf
3 template name already in use adminTemplateAdd
400 bad request All
500 internal error All

(Errors 400 and 500 correspond to the HTTP status codes and indicate errors when parsing the parameter or processing errors)

The sub-sites describe the merging and saving of PDFs as well as the different requests to manage your templates.

Start PDF Generation

Start PDF Generation

URL /client/1.0/PLUGIN/pdfPlugin/generatePdf
Input-Parameter Template Template name
Session Session ID (to retrieve transaction data)
Config PDF parameter for the generation as JSON String (optional)
Output-Parameter Value JSON Object with the parameter “jobId” (contains the generated JobID)

 

Example for a call:

{

    "template": "templatename",

    "session": "12345678910",

    "config": "{\"orientation\" : \"Portrait\",\"page-size\" : \"A4\",\"margin-top\" : \"1in\",\"margin-bottom\" : \"1in\",\"margin-left\" : \"1in\",\"margin-right\" : \"1in\",\"footer-center\" : \"[page] / [toPage]\"}\"}"

}
Output example:
{

    "value": {

        "jobId": "a1ef6b46-1671-425a-947c-d9e552d4e755"

    },

    "success": true

}

The specified parameters for the config correspond to the parameters for wkhtmltopdf or the PdfConfig class of the wrapper. This can be used to control page formats, margins, headers, footers, etc.

Delete a PDF Template

Delete Template

To delete a template, you need the following parameter:

URL /client/1.0/PLUGIN/pdfPlugin/adminTemplateDelete
Input-Parameter Name Template name
Output-Parameter None

Example input::

{

    "name": "templatename"

}

Example output:

{

    "success": true

}

List your PDF Templates

List Templates

To list your templates, you need the following parameter:

URL /client/1.0/PLUGIN/pdfPlugin/adminTemplateList
Input-Parameter None
Output-Parameter Value JSON-Array with all template names

Example output:

{
    "success": true,
    "value": [
        "templatename1",
        "templatename2",
        "templatename3"
    ]
}

Fetch a PDF Template

Fetch Template

To fetch a PDF template, you need the following parameter:

URL /client/1.0/PLUGIN/pdfPlugin/adminTemplateFetch
Input-Parameter Name Template name
Output-Parameter Value Template HTML Template Content (Base64-coded)
Stylesheet Content of the LESS Stylesheets ((Base64-coded, optional)
PreviewJson Content of the sample data in JSON format (Base64-coded, optional)
 Example for a call:
{
    "name": "templatename"
}
Output example:
{
    "success": true,
    "value":  {
        "template": "SGFsbG8gV2VsdA==\",
        "stylesheet: "SGFsbG8gV2VsdA==\"
        "previewJson": "SGFsbG8gV2VsdA==\"
     }
}

Edit a PDF Template

Edit Template

To edit a PDF template, you need the following parameter:

URL /client/1.0/PLUGIN/pdfPlugin/adminTemplateEdit
Input-Parameter Name template name
Data New template content (Base64-coded)
Stylesheet Content of the LESS Stylesheets (Base64-coded, optional)
PreviewJson Content of the sample data in JSON format (Base64-coded, optional)
Output-Parameter None
Example for a call:
{
    "name": "templatename",
    "data": "SGFsbG8gV2VsdA==\",
    "stylesheet: "SGFsbG8gV2VsdA==\",
    "previewJson": "SGFsbG8gV2VsdA==\"
}
Output example:
{
    "success": true
}

Add a PDF Template

Typical Use-Case PDF Plugin

  1. Create a HTML template for PDF generation, including variables and loops in Mustache format.
  2. Upload the template with a selected name via the REST interface.
    1. If you want to correct your template later, change it via the REST interface.
    2. Upload all required images and stylesheets as uploads in the AppServer.
  3. In the App:
    1. Generation of dynamic data.
    2. Upload the generated dynamic data under a unique session ID in the key-value store (via the REST interface of the key-value store).
      The payload needs a unique key and the dynamic data you want to save.

      var payloadKeyValueStore = {
      
          key: "sessiondata/myTestApp/" + sap.ui.getCore().getModel().getData().sessionKey,
      
          content: btoa(JSON.stringify(sap.ui.getCore().getModel().getData()))
      
      );
      
      this.callPlugin("keyValueStorePlugin", "puthttp", payloadKeyValueStore, callbackStoreSession, true, false, onKeyValueStoreFail)
    3. Optional: Uploading additional documents for merging into the key-value store (via the REST interface of the key-value store).
    4. Optional: Uploading a list of these document keys as a merge list in the key-value store (via the REST interface of the key-value store).
    5. Start of the PDF generation with the template name, the session ID and (optional) configuration data for the PDF generation via the REST interface.
      var callbackStoreSession = function(data) {
      
          if(data.success) {
      
             var payloadGeneratePdf = {
      
                 "template": "templatename",
      
                 "session": "myTestApp/" + sap.ui.getCore().getModel().getData(). sessionKey,
      
                 //"config": "(\"orientation\" : \"Portrait", \"page-size\" : \"A4\", \"margin-top\" : \"1in\", \"margin-bottom\" : \"1in\",
      
                 //\"margin-left\" : \"1in\", \"margin-right\" : \"1in\", \"footer-center\" : \"[page] / [toPage]\"}\"}"
      
             };
      
             busyDialog.setText("Generates requested PDF. Kindly have some patience.");
      
             $this.callPlugin("pdfPlugin", "generatePdf", payloadGeneratePdf, callbackGeneratePdf, true, false, onGeneratePdfFail);
      
          }
      
      };
    6. Remember the jobID.
  4. Asynchronous execution of the PDF generation (background operation).
    1. Call the Template.
    2. Call the dynamic data.
    3. Evaluate the data in the template.
    4. Call the static assets (images, stylesheets) from the AppServer.
    5. Convert the finished HTML-file in a PDF.
    6. Get the merge list and the merge binaries.
    7. Merge the created PDF with the merge files.
    8. Save the finished PDF in the key-value store.
  5. Call the key-value store via the REST interface with the restrained jobID to see, if the PDF has already been finished.
    var jobId;
    
    var callbackGeneratePdf = function(data) {
    
        if (data.success) {
    
            jobId = {
    
              key: "pdf/"+data.value.jobId+".pdf"
    
            );
    
            //timeout for demo purpose
    
            setTimeout(function() {
    
               $this.callPlugin("keyValueStorePlugin", "gethttp", jobId, callbackFetchPdf, true, false, onKeyValueStoreFail);
    
            },10000);
    
         }
    
    };
    
    var callbackFetchPdf = function(data) {
    
        if(data.success) {
    
           var pdfData = data.result;
    
           window.open("data:application/pdf;base64,"pdfData);
    
         }
    
    };

Plugins via Script

this.callPlugin(pluginName, slot, payload, callback, showBusyIndicator, failonError, failCallback)

pluginName the name of the plugin
slot slot (function, interface) within the plugin
payload a JSON object with the required parameters for the plugin
callback function, which is called after the successful execution of the plugin
showBusyIndicator boolean value that indicates whether the screen has to be blocked by a loading bar (true) or not (false)
failonError boolean value that indicates whether the plugin should be called in case of an error of the function passed via “failCallback” (false) or not (true)
failCallback function, which is called in case of an error in the plugin, is false for “failOnError” is passed

 

Plugin development

Open developer plugin-Doc in new tab

Anonymous Profile for Plugins

If you want to access plugins, you can work with anonymous users. Therefore the PluginAPI works with AnonymousAppProfile.

So only the assigned role to your Application needs the permission to use the Plugin.

Read more about roles.

Templates

Within the tile for Templates, you can create templates in HTML-format.

Administrate Templates

Templates are HTML templates that allow you to create and consistently use patterns.

To create a new template, click on the plus icon in the template overview. Select the folder name and enter a template name, optionally a description. Now enter the HTML template content.  On the right side, you see a preview of the template. Once you have created the template content, click Save.

In the Template Editor, you have several options in the toolbar:

In addition, it is possible to parameterize templates. To do this, switch to the tab ‘Parameters’. Via the plus icon, you can add new input parameter.

Transports

If you’ve built an application on a Simplifier instance that you’ve reserved exclusively for development tasks, you may be faced with the question on how to bring this application finally to the quality assurance or productive Simplifier instance?

How to export and import it, preserving all its dependencies, like connectors and associated roles?

That’s when Transports come into play. They allow you to define all of your app’s artifacts and let Simplifier collect them to create a bundle.

By clicking on the tile “Transports” you get to the overview of all packages. From there you also have the possibility to switch to the tabs Transports and Import.

For more information, look at the subpages.

Create a Transport

If you switch to the Transports tab, the overview of transports appears. It allows you to define transport requests that group one or more packages.

Click on the plus icon to create a new transport. The name of a new transport is generated automatically and is unique within the server environment. It always consists of the instance name and a 10-digit number.

You can add a description, that will be displayed in the overview, and below you can add the packages to your transport with the > button and remove them again with the < button.

After you have saved your changes, you return to the overview of transports.

On the right side you have the following possibilities:

It executes the export, which contains all the items of the selected packages. A transport can only be released once and is stored in the file system of the current Simplifier instance. It retains the items at the time of the release and additional metadata about the release creation.

By releasing an application, you can no longer edit the transport.

It triggers automated transport to a remote Simplifier instance. The import-target can be selected from the instances that are defined within the Server Environment. In addition, the strategy (Overwrite or Don’t Overwrite) and login credentials on the remote instance must be specified.

During and after the import, a summary of the artifacts is collected and displayed in a progress dialog.

It downloads the transport file so that it can be imported manually.
A copy of the transport is created. The copied transport is not released automatically.

 

Import Manual Transport

Switch to the tab Import to import a file to the Simplifier instance.

Importfile Choose the file you want to import.
Options If you select Overwrite, all features that already exist are overwritten with those from your transport file. Otherwise, only the new features are transported.
Import If you select Dry Run, the content of the transport file is analyzed and a list of all features is displayed. It does not import the data so you can simply test how the transport would work out.

After selecting your transport file and setting it all up, click Start Import.

The whole import log will be copied to clipboard.

 

History

Switch to the History tab to view an overview of all imported transports.

On the right side, you get information about the Import Date, Strategy, Importer and Source.

If you click on Import Protocol, the list of all imported artifacts is displayed.

Create client-side Business Object

Business objects are managed under the module ‘Business Objects’. The main screen lists all existing business objects in table form. On the top left, you can switch between server-side and client-side business objects

 

Press ‘+’ in the upper right corner to create a new one from scratch. This fires up the following screen:

First, choose a name for your client-side business object and define a description (optional). Add some tags, so you can search in the overviews and the UI Designer by the tags.

You may then select any connector, plugin, server-side business object, client-side business object or managed libraries on the left side. It opens a dialog where you can select it. Each selected item appears in the list below, from where you might also remove it again by clicking the delete icon underneath ‘Actions’.

When you’re done, leave the screen by hitting the ‘Save’ button and return to the overview page. Your new business object appears in the table. 


Usage of client-side Business Objects

You can see which applications or interfaces are using the business object. For that, click on the appropriate icon within the business object overview underneath ‘Actions’.

 

It opens a popup that displays all used applications:

By clicking on an entry, the application opens so that you can edit it directly.


Accessing input and output parameters of client-side Business Objects

You can access your input parameters via oPayload.<myInputParameter>.

To use the output parameters you have to return an object that has your parameters as properties. E.g.

return {
      myOutputParameter : myOutputValue
}

As client-side Business Objects and their contents are called asynchronously, it may happen when a connector call is called that it is not yet finished and is returned undefined or null.

To avoid this, you must call fnSuccess instead.

fnSuccess ({
      myOutputParameter : myOutputValue 
})

It must be called in your last callback/function of your client-side Business Object and returns the data.

In the case of an error, the following can be specified:

fnError ({
      myErrorMessage : myErrorMessageValue 
})

Permissions

The ownership concept provides that a user only can use artifacts, that were created by himself.

 

You have the possibility to share your own artifacts with other users. The permissions a user receives for a shared artifact has to be set by the admin.

Testing WebSocket Connection through Reverse Proxy

Testing WebSocket Connections through Reverse Proxy

The WSS Protocol is used for realtime data communication and server to client push mechanism.

To test a successful connection, following the steps below

  1. Login via /UserInterface/ to the Administration Interface
  2. Set a System Message like “Web Connection Test” within Settings (Chapter Messages)
  3. Logout
  4. Login again into the Administration UI  via the Reverse Proxy and you should see the message pushed by Websocket from Server

If not, please check the  Reverse Proxy Requirements

Glossar

Here you will find general and Simplifier specific abbreviations, technical terms and their meaning.

DQP System

Simplifier usually consists of 3 environments:

An environment can be configured within global Simplifier Settings- Server Environment and is used to transport applications within the defined Simplifier Instances (D,Q,P). Following is an example for deploying a DQP system on three virtual machines.

Deployment and Integration Workflow D-Q-P

 

Please see also Transports and Remote Transports for detailed information on how to transport Apps within a Simplifier Server Environment

 

 

FQDN

A fully qualified domain name (FQDN) is sometimes also referred to as an absolute domain name.

Example on our Simplifier cloud:

Development dev-yourcompany.simplifier.io
Quality Assurance qa-yourcompany.simplifier.io
Productive yourcompany.simplifier.io

 

Example for onpremise installation:

Development dev-simplifier.yourcompany.com
Quality Assurance qa-simplifier.yourcompany.com
Productive simplifier.yourcompany.com

 

Checklist – Simplifier onPremise Installation

Here you will find a checklist for all On Premise installations. You can check off the points when you’ve finished them. During this time, please do not reload this page.

Have a FQDN (Fully-Qualified Domain Name) for each instance of the D (Development) Q (QA /Test System) P (Productive) System
Set the 3 DNS entries for the 3 FQDN
Make sure that the Simplifier server reaches the Internet and make sure that the clients have access to the required ports of the Simplifier: 80 (TCP), 443 (TCP), 8090 (TCP)
Install the latest version of docker engine
Create or specify the Simplifier workspace, set the environment variables, and ensure that enough space is available. Also for future updates.  We recommend at least 60 GB Storage.
Use the image from the Docker Hub “simplifierag/onpremise:latest” or use the image provided by our Infrastructure Team
Provide the SSL Certificate and Intermediate Certificate. Best practice is a globally valid certificate issued by a trusted certification authority.
If you do not want to use the database already provided in the on-premise Docker, set up an external database for the Simplifier Core platform
Start the Simplifier Docker by “docker run…” with the Docker Hub command

$ docker run -v $SIMPLIFIER_DIR:/opt/simplifier/data \

-p 80:80 -p 443:443 -p 8090:8090 \

-d --name simplifier simplifierag/onpremise:latest

Use the internal reverse proxy or your own external proxy. Take a look at the requirements
Contact your project manager or our sales team to get a license
Log in to Simplifier with username admin and password admin
To get Simplifier support the following requirements should be fulfilled:

  • Local user on the Simplifier Server with read and write access in the Simplifier directory and access to the Docker Engine
  • SSH and HTTP, HTTPS access to the Simplifier Server via a VPN connection (the VPN connection should be person-independent – no personal RSA token or similar)
  • Maintenance Contract
The web socket should be checked on port 443
Finally, you have to import the standard content

 

Security Guidelines

All security measures and recommendations are based on the BSI IT-Grundschutz Compendium.

The following tables refer to the OWASP Top 10 Security Measures 2017 and explain the security measurements and relevant settings to avoid security flaws within the Simplifier platform.

A1: Injection

Simplifier Prevention

User-supplied data is not validated, filtered or sanitized by the application. Double validation against data type definition (client and backend validation).
Hostile data is used directly with dynamic queries or non-parameterized calls for the interpreter without context-aware escaping. All connector calls are parameterized, including SQL queries.
Hostile data is directly used or concatenated so that the SQL or command contains both structure and hostile data in dynamic queries, commands, or in stored procedures. All connector calls are parameterized, including SQL queries.

 

A2: Broken Authentication

Simplifier Prevention

You may have authentication weakness if your application Simplifier is using token authentication. This token expires after x seconds (depends on the server security settings).
Permits credential stuffing, where the attacker has a list of valid usernames and passwords. The permission object view owns user details prevents the application to access all user data.
Permits brute force or other automated attacks. We secure the authentication by deactivating the account after x times of failed logins.

Permits default, weak or well-known passwords. The admin can secure the password by setting password rules in the password settings.

Uses weak or ineffectual credential recovery and forgot password processes, such as “knowledge-based answers”, which cannot be made safe. Actual we provide a one-time link to reset the password via email, but no other security questions.
Using plain text, encrypted, or weakly hashed passwords permit the rapid recovery of passwords using GPU crackers or brute force tools. Our password does not exist in the database. We are using encrypted hashes via bcrypt algorithm.
Has missing or ineffective multi-factor authentication. We provide multi-factor authentication through OAuth 2.0 authentication method.

 

A3: Sensitive Data Exposure

Simplifier Prevention

Data of a site is transmitted in clear text, internally or externally. Simplifier runs behind a web proxy and all data is encrypted via HTTPS based on TLS 1.2
Sensitive data is stored in clear text, including backups. Simplifier doesn’t save personal data or sensitive data on its own database – we are using existing backend systems for that.
Old or weak cryptographic algorithms are used either by default or in older code. We rely on bcrypt.
Default crypto keys are in use, weak crypto keys are generated or re-used, or proper key management or rotation is missing. We rely on bcrypt.
Encryption is not enforced, e.g. security policies or headers are missing. If you use our provided reverse proxy template, this can not happen.

 

A4: XML External Entities (XXE)

Simplifier Prevention

Your application accepts XML directly or XML uploads, especially from untrusted sources, or inserts untrusted data into XML documents, which is then parsed by an XML processor. We only support XML formats with REST and SOAP connectors from trusted backend sources and no direct upload or data processing within an application.
Any of the XML processors in the application or SOAP-based web services has document type definitions (DTDs) enabled. Yes, we parse WSDL and consider DTD if available and generate corresponding data type definitions within Simplifier itself.
If your application uses SOAP prior to version 1.2, it is likely susceptible to XXE attacks if XML entities are being passed to the SOAP framework. We support SOAP version 1.2
SAST tools can help detect XXE in source code, although manual code review is the best alternative in large, complex apps with many integrations. We only support XML formats with REST and SOAP connector from trusted backend sources and no direct upload or data processing within an application.
Being vulnerable to XXE attacks likely means that you are vulnerable to other billion laughs denial-of-service attacks. We only support XML formats with REST and SOAP connectors from trusted backend sources and no direct upload or data processing within an application.

 

A5: Broken Access Control

Simplifier Prevention

Bypassing access control checks by modifying the URL, internal app state, or the HTML page, or simply using a custom API attack tool. This can not happen because every API is secured by permission objects independent from the user interface itself.
Allowing the primary key to be changed to another’s users record, such as viewing or editing someone else’s account. This can not happen because every API is secured by permission objects independent from the user interface itself.
Elevation of privilege. Acting as a user without being logged in, or acting as an admin when logged in as a user. The Simplifier authentication token is assigned to the client fingerprint that contains a lot of unique attributes like system configuration, browser version, screen resolution, browser plugins, etc. If you use a foreign authentification token to gain privileges, you have to be on the same client system and using the same browser and user credentials – so it is very unlikely to misuse a foreign token.
Metadata manipulation, such as replaying or tampering with a JWT access control token or a cookie or hidden field manipulated to elevate privileges. The Simplifier authentication token is not stored in a cookie and is encrypted on the client with the client fingerprint.
CORS misconfiguration allows unauthorized API access. If you use our recommend reverse proxy example you will be safe in terms of CORS misconfiguration.
Force browsing to authenticated pages as an unauthenticated user or to privileged pages as a standard user or API not enforcing access controls for POST, PUT and DELETE. All APIs are secured by permission objects.

 

A6: Security Misconfiguration

Simplifier Prevention

Unnecessary features are enabled or installed. Features are enabled via permission objects.
Default accounts and their passwords are still enabled and unchanged. Every single installation will get an automatically generated complex administrator password. We are not using default passwords.
Does your error handling reveal stack traces or other overly informative error messages to users? The logging and monitoring feature clears backend passwords out of the logs, so we will not include security-related information within the logs.
Old configurations are used with updated software which may not be backward compatible. All configuration objects are automatically migrated to the newest release versions.
Security settings in application servers, application frameworks, libraries, databases, etc. are not set to secure values. In our cloud environment, we are using very strong passwords.
The server doesn’t send security directives to client agents or they are not set to secure values for web applications. HSTS headers are set in the web reverse proxy.
Any of your software is out of date. Every customer is forced to upgrade once a year – older versions are supported via long term support that includes also security patches.

 

A7: Cross-Site Scripting (XSS)

Simplifier Prevention

Reflected XSS: Your app or API includes unvalidated and unescaped user input as part of HTML output or there is no content security policy header. We use the content security header.
Stored XSS: Your app or API stores unsanitized user input that is viewed at a later time by another user or an administrator. All API fields are validated against data type definitions to prevent unsanitized data.
DOM XSS: JavaScript frameworks, single page apps, and APIs that dynamically include attacker-controllable data to a page are vulnerable to DOM XSS. We provide encoding function also for JavaScript for HTML, URL, CSS and JavaScript.

 

A8: Insecure Deserialization

Simplifier Prevention

The serialization mechanism allows for the creation of arbitrary data types, AND We transform every data to JSON format with sanitize options.
There are classes available to the application that can be chained together to change application behavior during or after deserialization, or unintended content can be used to influence application behavior, AND We only accept valid JSON data. Each data object will be checked against the API data definition by default.
The application or API accepts and deserializes hostile objects supplied by an attacker, or an application uses serialized opaque client-side state without appropriate tamper-resistant controls. OR We only accept valid JSON data. Each data object will be checked against the API data definition by default.
Security state sent to an untrusted client without some form of integrity control is likely vulnerable to deserialization. Every client has to be authenticated to check if the client is trusted.

 

A9: Using Components with Known Vulnerabilities

Simplifier Prevention

You don’t know the versions of all components you use (both client-side and server-side). This includes components you directly use as well as nested dependencies. All depending libraries are checked against security exploits with VersionEye Service.
Your software is out of date. This includes the OS, Web/App Server, DBMS, applications, APIs and all components, runtime environments, and libraries. All components are checked against update with VersionEye.
You don’t know if they are vulnerable. Either if you don’t research for this information or if you don’t scan them for vulnerabilities on a regular base. All components are checked against update with VersionEye.
You don’t fix nor upgrade the underlying platform, frameworks, and dependencies in a timely fashion. We provide security hotfixes for the last 2 major releases (1 year).
You don’t secure the components’ configurations. We secured the complete configuration.

 

A10: Insufficient Logging & Monitoring

Simplifier Prevention

Auditable events, such as logins, failed logins, and high-value transactions are not logged. Failed login attempts and valid logins are logged as such as every business object or connector call. No matter what kind of value this transaction is.
Logs of applications and APIs are not monitored for suspicious activity. All applications are monitored.
Alerting thresholds and response escalation according to the risk of the data held by the application is not in place or effective. Actual it is not possible to alert security response teams or administrator via email after certain security events – this will be available in further releases.

 

Checklist SAP SSO over SOAP

Check 1: SSO2 Check

  1. Start Transaction SE80
  2. Choose Type BSP Application
  3. Choose SYSTEM_TEST/test_sso2.htm
  4. Test/Run (F8)
    http://hostname.example.com:8000/sap(bD1kZSZjPTgwMA==)/bc/bsp/sap/system_test/test_sso2.htm
  5. Check if Cookie ‚MYSAPSSO2=…‘ available

Check 2: SSO Parameter

  1. Run transaction code RZ11(temporary) RZ10 ( permanent)
  2. Check if the following parameter has been set
    login/accept_sso2_ticket 1
    login/create_sso2_ticket 2 (without certificate)
    icm/host_name_full

    FQDN

    (e.g. hostname.example.com)

 

Check 3: SSO Login

  1. Open transaction SA38
  2. Choose report SEC_TRACE_ANALYZER

 

Check 4: Permissions

Every user needs the following permission object:

S_SERVICE

Attributes Values
SRV_NAME Name of Webservice
SRV_TYPE Type of Webservice (HS)

 

Troubleshooting / Common Errors & Solutions

The following section documents the most common errors with possible solutions.

Q: What should I do when HTTPS/SSL is not available?

A: If you have problems with the connection set it from SSL to None

Q: What if the WSDL Consumer has problems parsing the WSDL?

A: Manually replace the string ws_policy in the WSDL with standard

Q: How can I monitor the error log of SAP Web services?

A: The error log can be viewed with transaction “srt_util”.

Q: How can I change the SAP web service login language?

A: The standard login language is also via SAP Webservices in English. Thus, all data determinations according to e.g.: Status texts, material text ect. always return in English language.

To be able to change it to German, the following prefix must be appended to the SOAP Webservice operation URL: “?sap-language=DE”
This does NOT mean the WSDL URL!

Q: How can I call the web service from another SAP client?

A: The web service operation call must be done with the parameter?sap-client=[client] so that the system can recognize the client.

Q: What if the Simplifier does not have access to the SAP system?

A: Check the following points:

Please make sure that there is a physical connection between the Simplifer (host) instance and the system. Firewall/Ports may need to be enabled to allow communication in both directions.
The Simplifier Docker or host system must be maintained with the correct network settings for on premise installations. This includes, for example, the setting for DNS servers.

On Premise

On-Premise means that as a customer you run the Simplifier on your own servers. Whether this is a dedicated root server, a virtual machine in VM Ware or a cloud computing instance at a cloud provider like Amazon does not matter in this case.

You are responsible for the installation, operation, maintenance, updates of the Simplifier instance and guaranteed availability.

To learn how to deploy the Simplifier on-premises, look at the Checklist for onPremise installations.

General Instructions

Here you will find general instructions about Simplifier deployment:

 

 

Locally

You can install the Docker engine on your local machine and start the Simplifier Docker for development and testing.

The Docker Engine runs on

further Instructions to start the Simplifier 

Simplifier Cloud

The Simplifier Cloud is the default deployment option when you get started with the Simplifier. As an integrated solution, the Simplifier Cloud includes automatic backups, monitoring, high availability, and more. The availability is at least 99.7%.

The Simplifier Cloud will be deployed in Deutsche Telekom’s data centers OTC. Data protection and data security are a matter of trust.
The protection and security of your data has the highest priority. The Open Telekom Cloud is operated and data is secured in our own, highly secure twin-core data centers in Germany. Data processing is subject to the strict requirements of the European Data Protection Ordinance (DSGVO).

In addition, the Open Telekom Cloud is certified according to the Trusted Cloud Data Protection Profile (TCDP) 1.0. This certifies that the Open Telekom Cloud – currently one of the few cloud offerings on the market – offers companies the technical requirements necessary to meet the basic European data protection requirements (DSGVO).
Further information can be found here.

 

 

Other Clouds / PaaS

By providing the Simplifier Image on Docker Hub, we enable deployment on various public clouds and structures, e.g. Container as a Service (CaaS) on Amazon Web Services (AWS), Google Container Engine (GKE), Azure, SAP Cloud Platform, IBM Bluemix and Cloud Foundry.

Or launch your own instance by using the images on the various marketplaces:

AWS Marketplace

 

Azure Marketplace

 

SAP AppCenter

Docker Hub

The Simplifier is also available on Docker Hub.

Short Instructions

Create the directory which will host all external user-specific data:
$ mkdir -p /home/simplifier/data
$ export SIMPLIFIER_DIR="/home/simplifier/data"

Install SSL certificates:
$ mkdir -p $SIMPLIFIER_DIR/certs
$ cp <certificate.pem> SIMPLIFIER_DIR/certs/default.crt
$ cp <keyfile.pem> SIMPLIFIER_DIR/certs/default.key

Run docker:
Alternative 1: with SSL/Certificates
$ docker run -d -v $SIMPLIFIER_DIR:/opt/simplifier/data \
-p 80:80 -p 443:443 -p 8090:8090  \
--name=simplifier simplifierag/onpremise:latest

Alternative 2: without SSL/Certificates
$ docker run -d -v $SIMPLIFIER_DIR:/opt/simplifier/data \
-p 80:8080 -p 8090:8091 \
--name=simplifier simplifierag/onpremise:latest

Docker on Windows 10

Install Docker for Windows

Docker for Windows is the Community Edition (CE) of Docker for Microsoft Windows. To download Docker for Windows, head to Docker Store.

Download from Docker Store

What to know before you install

If your system does not meet the requirements to run Docker for Windows, you can install Docker Toolbox, which uses Oracle Virtual Box instead of Hyper-V.

About Windows containers

Looking for information on using Windows containers?

Install Docker for Windows desktop app

  1. Double-click Docker for Windows Installer.exe to run the installer.If you haven’t already downloaded the installer (Docker for Windows Installer.exe), you can get it from download.docker.com. It typically downloads to your Downloads folder, or you can run it from the recent downloads bar at the bottom of your web browser.
  2. Follow the install wizard to accept the license, authorize the installer, and proceed with the install.You are asked to authorize Docker.app with your system password during the install process. Privileged access is needed to install networking components, links to the Docker apps, and manage the Hyper-V VMs.
  3. Click Finish on the setup complete dialog to launch Docker.

Start Docker for Windows

Docker does not start automatically after installation. To start it, search for Docker, select Docker for Windows in the search results, and click it (or hit Enter).

When the whale in the status bar stays steady, Docker is up-and-running, and accessible from any terminal window.

If the whale is hidden in the Notifications area, click the up arrow on the taskbar to show it. To learn more, see Docker Settings.

If you just installed the app, you also get a popup success message with suggested next steps, and a link to this documentation.

When initialization is complete, select About Docker from the notification area icon to verify that you have the latest version.

Congratulations! You are up and running with Docker for Windows.

Docker on Mac

Install Docker for Mac

Docker for Mac is the Community Edition (CE) of Docker for MacOS. To download Docker for Mac, head to Docker Store.

Download from Docker Store

What to know before you install

README FIRST for Docker Toolbox and Docker Machine users

If you are already running Docker on your machine, first read Docker for Mac vs. Docker Toolbox to understand the impact of this installation on your existing setup, how to set your environment for Docker for Mac, and how the two products can coexist.

Note: If your system does not satisfy these requirements, you can install Docker Toolbox, which uses Oracle VirtualBox instead of HyperKit.

Install and run Docker for Mac

  1. Double-click Docker.dmg to open the installer, then drag Moby the whale to the Applications folder.
  2. Double-click Docker.app in the Applications folder to start Docker. (In the example below, the Applications folder is in “grid” view mode.)

    You are prompted to authorize Docker.app with your system password after you launch it. Privileged access is needed to install networking components and links to the Docker apps.The whale in the top status bar indicates that Docker is running, and accessible from a terminal.Whale in menu barIf you just installed the app, you also get a success message with suggested next steps and a link to this documentation. Click the whale (whale menu) in the status bar to dismiss this popup.

  3. Click the whale (whale menu) to get Preferences and other options.
  4. Select About Docker to verify that you have the latest version.

Congratulations! You are up and running with Docker for Mac.

Docker on Ubuntu / Debian

Get Docker CE

Referenced to the official Docker instructions.

Note: This installation instructions is based on the example of the operating system Ubuntu 16.04 LTS.

SET UP THE REPOSITORY

Update the apt package index:
$ sudo apt-get update

Install packages to allow apt to use a repository over HTTPS:
$ sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    software-properties-common

Add Docker’s official GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22

      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

uid                  Docker Release (CE deb) <docker@docker.com>

sub   4096R/F273FCD8 2017-02-22

Use the following command to set up the stable repository. You always need the stable repository, even if you want to install builds from the edge or test repositories as well. To add the edge or test repository, add the word edge or test (or both) after the word stable in the commands below.

Note: The lsb_release -cs sub-command below returns the name of your Ubuntu distribution, such as xenial. Sometimes, in a distribution like Linux Mint, you might have to change $(lsb_release -cs) to your parent Ubuntu distribution. For example, if you are using Linux Mint Rafaela, you could use trusty.


amd64:
$ sudo add-apt-repository \

   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

   $(lsb_release -cs) \

   stable"

INSTALL DOCKER CE

Update the apt package index:
$ sudo apt-get update

Install the latest version of Docker CE:
$ sudo apt-get install docker-ce

Run Simplifier Docker locally

Short Instructions

Create the directory which will host all external user-specific data

For Linux and Mac

$ mkdir -p /home/simplifier/data
$ export SIMPLIFIER_DIR="/home/simplifier/data"

For Windows, please replace “SIMPLIFIER_DIR” with an absolute path.
Example: “C:\Docker\Simplifer\Data”

Install SSL certificates:

$ mkdir -p SIMPLIFIER_DIR/certs
$ cp <certificate.pem> SIMPLIFIER_DIR/certs/default.crt
$ cp <keyfile.pem> SIMPLIFIER_DIR/certs/default.key

Run docker:
Alternative 1: with SSL/Certificates

$ docker run  -d -v $SIMPLIFIER_DIR:/opt/simplifier/data \
-p 80:80 -p 443:443 -p 8090:8090 \
--name=simplifier simplifierag/onpremise:latest

Alternative 2: without SSL/Certificates

$ docker run  -d -v $SIMPLIFIER_DIR:/opt/simplifier/data \
-p 80:8080 -p 8090:8091 \
--name=simplifier simplifierag/onpremise:latest

Access Simplifier on localhost:

Now you can open the Simplifier in your browser.
http(s)://localhost/UserInterface

To avoid certificate errors, you can create a local host entry for your domain stored in the certificate for the HTTPS connection.

e.g. https://simplifier.<yourcompany>/UserInterface

Backups

Every instance is backed up daily in the Simplifier Cloud.

Both files and a logical database backup (dump) are stored directly on the machine. These are held locally for 4 weeks. This is very useful when restoring a single Simplifier instance.
Furthermore, the Simplifier Cloud is image-based backed up every day. These backups are held for 14 days.
Should the system fail completely, we can initiate a complete restore at any time.

Type of backup Backup interval How long are the backups stored?
tarball of files and a logical database backup daily 4 weeks
image-based backup of the whole Simplifier Cloud daily 2 weeks

Data Centers of Simplifier Cloud

The Simplifier Cloud is hosted in data centers of T-Systems Germany.

The locations of the twin-core data centers are:

Lübecker Str. 2
39124 Magdeburg
Germany
Am Schiens 10-11
39221 Bördeland/Biere
Germany

T-Systems data center

ISO Certificates and Audits

Our cloud infrastructure provider, T-Systems operates data networks for customers worldwide and processes data in its own data centers – data protection and data security have absolute priority. The ICT provider, therefore, has its services regularly audited by independent institutions and has itself certified that it complies with global standards and norms, for example through ISO certifications.

Here you will find an overview of the current certificates:

Certificate Description Download
Quality management according to DIN EN ISO 9001 ISO 9001
Information security management according to ISO/IEC 27001 ISO/IEC 27001
Business continuity management according to ISO 22301 ISO 22301
Environmental management according to ISO 14001 ISO 14001
Occupational health and safety management according to OHSAS 18001 OHSAS 18001
Information security measures for cloud services according to ISO/IEC 27017 ISO/IEC 27017
Protection of personal data in public clouds according to ISO/IEC 27018 ISO/IEC 27018
Trusted cloud privacy profile for cloud services (TCDP) Open Telekom Cloud
Security of cloud service providers according to CSA CLOUD CONTROL MATRIX CSA STAR
Dekra certified data protection requirement for order data processing Trusted Cloud Service
Zero outage as a certified service process Zero Outage
Compliance management systems (CMS) according to IDW PS 980 auditor’s certificate

 

Change your Password

For security reasons, it is always a good idea to update your password regularly.

In order to change your password, you have to switch to the ‘Users‘ tile in the Simplifier dashboard. After that, search for the user whose password you want to change and click on Send Change password link on the right side.

You will receive an email with a link to change your password.

If you need help, please contact an admin.


If you’re an admin and want to change someones password, click on the ‚Password‘ tab in the upper left corner. Now all you have to do is enter the new password, confirm it and finally click on ‚Change Password‘.

Simplifier Cloud SLA

You will find the SLA of the Simplifier Cloud below:

  1. The Licensor operates the provided Platform under the criteria of highest possible care, reliability, and availability of 99.7%, 7 days a week, 24 hours a day, 365 days a year.
    Downtimes are not considererd in the calculation of availability if the Licensee expressly agreed to it in writing or if these downtimes are default times mentioned in paragraphs 4 and 5.
  2. The Licensee has the right to reduce the agreed monthly fee for the maximum of 2% for every full percentage point that is below the assured availability. Any further claims of the customer remain unaffected.
  3. Down times for maintenance, servicing and upgrades are explicitly pre-announced in writing between the parties, if these deviate from the default times mentioned in paragraphs 4 and 5.
  4. The maintenance of the Simplifier is carried out by default on Saturday from 22:00 to 24:00 CET (Central European Time). Divergent or in addition necessary maintenance must be announced to the Licensee in writing, at least four weeks in advance and require the Licensee‘s written approval.
  5. Every six months a release upgrade will be installed, namely on Saturday of the month’s last weekend, unless the contracting parties agree in a specific case for a different arrangement.
  6. Updates and upgrades, that change the process, have to be announced to the Licensee in writing and before the implementation and will require written approval.

iOS Client

Below is a description of the Simplifier Mobile Client for iOS.

After you have downloaded the Simplifier Mobile Client from the App Store, start it on your mobile device.

Make sure that the explored app exists on your Simplifier instance. 

Authenticate

First, you have to authenticate yourself on the login screen with your Simplifier username and password.

Enter the instance you want to access.

If the device has Touch ID or Face ID, you can choose to restore your password with it.

You can save your login so you don’t have to re-enter it every time.

Tip: Use the QR code login that fills in your username, password and instance URL. Read here how to create a corresponding QR code in Simplifier.

 

Application Overview

Once you have been successfully authenticated, you are in the overview of all applications.

 

Start your apps easily by clicking on the desired entry.

To return to the general overview from a started app, use the “Exit” button in the upper left corner.

A dialog pops up asking if you really want to leave the application.

If so, confirm this dialog.

Settings

To get to the settings or to logout, click on the hamburger menu button in the upper left corner. In addition, you get the information about which username you are logged in with and on which version the client is running.


By clicking on Settings, you have several options.

Section Setting Description
General Automatic login After opening the client login directly (default off).
Automatically update authentication Sessions will be automatically extended (default off).
Remote Call Default settings Uses default remote call settings (default on). Custom settings will be visible if default is off.
Local Stream
Resolution Select a maximum target resolution supported by a camera (640x480px).
Frames per second
Set the frames per seconds to be sent (default 30).
Maximum video bandwith
Set the maximum video bandwith in kb/s (default 5000 kb/s).
Maximum audio bandwidth
Set the maximum audio bandwidth in kb/s (default 200 kb/s).
Audio codec
Set the audio codec: OPUS (default), PCMA, PCMU
Remote Stream
Resolution
Select a maximum target resolution supported by a camera (640x480px).
Frames per second
Set the frames per seconds to be sent (default 30).
Bitrate multiplier
Reduce the bitrate by chosen value (default 1.0).
Developer Mode Developer mode
With this setting, the developer mode can be activated (default off).
WebView Caching
Enable or disable webview caching (default enabled).
Show JavaScript logs
Show a separate view with JavaScript logs (default off).
Send JavaScript logs
The application will send all JavaScript to the Simplifier instance (default off).
Transmission interval The logs are being buffered until the specified time has passed (default 15 min).
Log level Specify the minimum level of logs to be sent (default Error).
Error Handling Send error logs You can choose to send logs to the following destinations:

 

Android Client

Below is a description of the Simplifier Mobile Client for Android. After you have downloaded the Simplifier Mobile Client from the Play Store, start it on your mobile device.

First, you have to authenticate yourself on the login screen with your Simplifier username and password. Enter the instance you want to access. If the device has Touch ID, you can choose to restore your password with it. You can save your login so you don’t have to re-enter it every time.

Tip: Use the QR code login that fills in your username, password and instance URL. Read here how to create a corresponding QR code in Simplifier.

Once you have been successfully authenticated, you are in the overview of installed applications. In the beginning, this overview is empty. At any time, you can log out by clicking on the logout button in the top left corner. At the top right, on the Simplifier icon, various information will be displayed.

Browse Apps

To use apps on your mobile device, switch to the screen Browse Apps. You see an overview of all applications that are on the specified instance. To install apps, simply click on the entries. When the apps are downloaded, Installed will display a notification with the number of newly installed apps. You can delete the installed application by swiping to the left.

Application Updates

If an app, that you have already installed, has been newly deployed on the instance, you will be informed about updates of the application.

 

Settings

To define the settings, click on the right tab Settings.

Section Setting Description
General Autostart Business Application Choose an application to start automatically after login (default none).
Application start delay Delay the autostart for a number of seconds (default 3 seconds).
Automatic Login After opening the client login directly (default off).
Automatically update authentication Sessions will be automatically extended (default off).
Dark theme Enable the dark theme (default off).
Storage Libraries Number of downloaded libraries.
Used storage Displays the used storage of libraries.
Remove unused libraries Removes unused libraries (it’s a button).
Modules Number of downloaded modules.
Used storage Displays the used storage of modules.
Remove unused modules Removes unused modules (it’s a button).
Installed applications Displays the number of installed applications.
Used storage Displays the used storage of applications.
Remove all applications Removes all business applications from the device.
Automatic updates Updates business application before launch (default off).
Remote Call Default settings Uses default remote call settings (default on). Custom settings will be visible if default is off.
Local Stream
Resolution Select a maximum target resolution supported by a camera (640x480px).
Frames per second Set the frames per seconds to be sent (default 30).
Maximum video bandwidth
Set the maximum video bandwidth in kb/s (default 5000 kb/s).
Maximum audio bandwidth
Set the maximum audio bandwidth in kb/s (default 200 kb/s).
Video codec
Choose the video codec for the streams (default H264).
Audio codec
Choose the audio codec for the streams (default OPUS).
Remote Stream
Resolution
Select a maximum target resolution supported by a camera (640x480px).
Frames per second
Set the frames per seconds to be sent (default 30).
Bitrate multiplier
Reduce the bitrate by chosen value (default 1.0).
Developer Mode Developer mode
With this setting, the developer mode can be activated (default off).
WebView Caching
Enable or disable webview caching (default enabled).
Show JavaScript logs
Show a separate view with JavaScript logs (default off).
Send JavaScript logs
The application will send all JavaScript to the Simplifier instance (default off).
Transmission interval The logs are being buffered until the specified time has passed (default 15 min).
Log level Specify the minimum level of logs to be sent (default Error).
Enable Webview debugging Debug the webview with Chrome Dev Tools (requires adb on your pc)(default depends on activated or deactivated Developer mode).
Default Network Adapter Force all connections through a selected and available network (default: system default).
Error Handling Send error logs You can choose to send logs to the following destinations:

Server-Side Business Object API

You can access any methods, like Logging, Utils/Tools, Email, Connectors, Business Objects, Plugins, Users, Permissions, Groups and Roles of Simplifier by using the Simplifier object.

Variables marked with question marks are optional parameters.

Logging

Simplifier.Log.info
Creates a log entry with level INFO.
Input : (string) Result: ()
message: string
Simplifier.Log.info(message: string, details: string|object): void

 

Simplifier.Log.warn
Creates a log entry with level WARNING.
Input : (string) Result: ()
message: string
Simplifier.Log.warn(message: string, details: string|object): void

 

Simplifier.Log.error
Creates a log entry with level ERROR.
Input : (string) Result: ()
message: string
Simplifier.Log.error(message: string, details: string|object): void

 

Simplifier.Log.critical
Creates a log entry with level CRITICAL.
Input : (string) Result: ()
message: string
Simplifier.Log.critical(message: string, details: string|object): void

 

Simplifier.Log.debug
Creates a log entry with level DEBUG.
Input : (string) Result: ()
message: string
Simplifier.Log.debug(message: string, details: string|object): void

Examples:

These examples apply to all log levels.

Simplifier.Log.warn("Test log entry");

Simplifier.Log.info("Test log entry with Details", "Details String");

Simplifier.Log.error("Test log entry with Details", {'key': 'value'}); 
 
Simplifier.Log.info("test", ["Array",1337,42.1,null,true, {key:"value"},[1,3,3,7]])
 
Simplifier.Log.critical("test", 1337)
 
Simplifier.Log.debug("test", 42.1)
 
Simplifier.Log.info("test", null)
 
Simplifier.Log.warn("test", true)

 

Utils/Tools

Simplifier.Util.xml2json(xml: string): string

Simplifier.Util.json2xml(json: string): string

Simplifier.Util.xml2jsonValue(xml: string): object

Simplifier.Util.jsonValue2xml(json: string): string

Simplifier.Util.encodeBase64(string: string): string

Simplifier.Util.decodeBase64(json: string): string

Examples:

var encoded = Simplifier.Util.encodeBase64("String to encode");

var decoded = Simplifier.Util.decodeBase64(encoded);
output.jsonResult = Simplifier.Util.xml2jsonValue("<root><test>hello</test></root>");
output.stringResult = Simplifier.Util.xml2json("<root><test>hello</test></root>");
output.stringInput = Simplifier.Util.json2xml(JSON.stringify({test: "hello"}));
output.jsonInput = Simplifier.Util.jsonValue2xml({test: "hello"});

 

Email

Simplifier.Email.sendTemplateMail(payload: string|object): void

Examples:

Simplifier.Email.sendTemplateMail({    

templateNamespace: "MyNamespace", templateName: "MyTemplate", emailCharset: "UTF-8", emailMime: "text/html",    

sender: "sender@test.de", receiver: "test@test.de", receiverCC: ["cc@test.de"], receiverBCC: ["bcc@test.de"], subject: "My Mail", "data": {"Var1": "Replacement1"}

});

 

Connectors

Simplifier.Connector.<ConnectorName>(payload?: string|object): object 

Simplifier.Connector.<ConnectorName>.<CallName>(payload?: string|object): object

Examples:

var connectorResult = Simplifier.Connector.MySoap({bindingName: "Binding", "operationName": "MyOp", "soap": {"foo": "bar"}});

var connectorCallResult = Simplifier.Connector.MySoap.myCall({"Foo": "bar"});

 

Business Objects

Simplifier.BusinessObject.<BOName>.<MethodName>(payload?: string|object, parametrized?: boolean = true): object

Simplifier.CurrentBusinessObject.<MethodName>(payload?: string|object, parametrized?: boolean = true): object  (--> BOName = Currently executed Business Object)

Examples:

var otherMethodResult = Simplifier.BusinessObject.OtherBO.someMethod({"foo": "bar"});

var unparamtetrizedResult = Simplifier.BusinessObject.OtherBO.someMethod("{\"foo\": \"baz\"}", false);

var sameBoResult = Simplifier.CurrentBusinessObject.someMethodOnSameBO({"baz": "baz"});

var noArgsResult = Simplifier.CurrentBusinessObject.methodWithoutArgs();

 

Plugins

Simplifier.Plugin.<PluginName>.<SlotName>(payload?: string|object): object

Examples:

var repos = Simplifier.Plugin.contentRepoPlugin.listRepos(); 

var newRepo = Simplifier.Plugin.contentRepoPlugin.createRepo({name: "MyRepo"}); 

Simplifier.Plugin.contentRepoPlugin.updateRepo("{\"id\": 15}");

 

Users

Simplifier.User.getAll
Retrieves all created users.
Input : () Result: Array(object)
[id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}]?]

 

Simplifier.User.getById
Retrieves the user with the given id.
Input: (number) Result: object|null
id: number id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}] | null

 

Simplifier.User.getByName
Retrieves the user with the given login name.
Input: (string) Result: object|null
loginName: string id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}] | null

 

Simplifier.User.getCurrentUser
Retrieves the currently logged in user.
Input: () Result: object|null
id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}] | null

 

Simplifier.User.create
Creates a new user.
Input: (object) Result: object
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [String]?,
groups: [Number]?,
attributes: [{ name: String, category: String, value: String, description: String? }]?
id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}]

 

Simplifier.User.update
Updates a user identified by the assigned id.
Input: (number, object) Result: object
id:Number id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}]
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [String]?,
groups: [Number]?,
attributes: [{ name: String, category: String, value: String, description: String? }]?

 

Simplifier.User.update
Updates a user identified by the assigned login name.
Input: (string, object) Result: object
login: String id: Number,
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [{ id: String, name: String, description: String, active: Boolean}]?,
groups: [{id: Number, name: String, description: String}]?,
attributes: [{name: String, category: String, value: String, description: String?}]
login: String,
firstName: String,
lastName: String,
email: String,
mobileNumber: String?,
activeFrom: String?,
activeTill: String?,
active: Boolean?,
salutation: String?,
roles: [String]?,
groups: [Number]?,
attributes: [{ name: String, category: String, value: String, description: String? }]?

 

Simplifier.User.delete
Deletes a user identified by the assigned id.
Input: (number) Result: ()

id: Number

 

Simplifier.User.checkLogin
Checks whether a user can login providing the given credentials.
Input: (string, string) Result: (boolean)

login: string

true, false

password: string

 

Simplifier.User.assignRole
Assigns the role with the given ID to the user, identified by the given login name. 
Input: (string, string) Result: ()

loginName: string

roleId: string

 

Simplifier.User.assignRole
Assigns the role with the given ID to the user, identified by the given login name. 
Input: (number, string) Result: ()

id: number

roleId: string

 

Simplifier.User.unassignRole
Dissolves the user-role relation of the given user and role.
Input: (string, string) Result: ()

loginName: string

roleId: string

 

Simplifier.User.unassignRole
Dissolves the user-role relation of the given user and role.
Input: (number, string) Result: ()

id: number

roleId: string

 

Simplifier.User.assignGroup
Assigns the group with the given ID to the user, identified by the given login name. 
Input: (string, number) Result: ()

loginName: string

groupId: number

 

Simplifier.User.assignGroup
Assigns the group with the given ID to the user, identified by the given login name. 
Input: (number, number) Result: ()

id: number

groupId: number

 

Simplifier.User.unassignGroup
Dissolves the user-group relation of the given user and group.
Input: (string, number) Result: ()

loginName: string

groupId: number

 

Simplifier.User.unassignGroup
Dissolves the user-group relation of the given user and group.
Input: (number, number) Result: ()

id: number

groupId: number

 

Simplifier.User.getAttribute
Retrieves the attribute with the given name and category of a user identified by the user’s ID. 
Input: (number, string, string) Result: (object | null)

id: number

name: string

category: string

name: string

category: string

value: string

description: string?| null

 

Simplifier.User.getAttribute
Retrieves the attribute with the given name and category of a user identified by the user’s ID. 
Input: (string, string, string) Result: (object | null)

loginName: string

name: string

category: string

name: string

category: string

value: string

description: string?| null

 

Simplifier.User.getAttributes
Retrieves all attributes of the user identified by the given ID.
Input: (string) Result: Array (object)

loginName: string

[name: stringcategory: string

value: string

description: string?]

 

Simplifier.User.getAttributes
Retrieves all attributes of the user identified by the given ID.
Input: (number) Result: Array (object)
 

id: number

 

[name: stringcategory: string

value: string

description: string?]

 

Simplifier.User.setAttribute
Sets (add or update) a user attribute of the user identified by the given ID.
Input: (number, string, string, object) Result: ()

id: number

name: string

category: string

value: object

 

Simplifier.User.setAttribute
Delete a user attribute of the user identified by the given ID.
Input: (number, string, string) Result: ()

id: number

name: string

category: string

 

Simplifier.User.setAttribute
Sets (add or update) a user attribute of the user identified by the given name.
Input: (number, string, string, object) Result: ()

loginName: string

name: string

category: string

value: object

 

Simplifier.User.setAttribute
Delete a user attribute of the user identified by the given name.
Input: (number, string, string) Result: ()

loginName: string

name: string

category: string

 

Simplifier.User.resetPasswordWithEmailTemplate
Sends an email with a template for password restoration and resets the password for the provided user identified by the given ID.
Input: (number, object) Result: ()

id: number

templateNamespace: string,
templateName: string,
resetURI: string,
subject: string?,
emailMime: string = “text/html”,
emailCharset: string = “UTF-8”,
additionalData: object?

 

Simplifier.User.resetPasswordWithEmailTemplate
Sends an email with a template for password restoration and resets the password for the provided user identified by the given name.
Input: (number, object) Result: ()

loginName: string

templateNamespace: string,
templateName: string,
resetURI: string,
subject: string?,
emailMime: string = “text/html”,
emailCharset: string = “UTF-8”,
additionalData: object?

 

Simplifier.User.setPassword
Set a user password for the provided one-time-hash
Input: (number, string) Result: ()

oneTimeHash: string

tnewPassword: string

 

Permissions

Simplifier.Permission.checkPermission
Checks whether the current logged in user has the granted permission characteristic for the provided permission name.
Input : (string,string) Result: Boolean
permissionName: string true, false
characteristic: string

 

Simplifier.Permission.checkPermission
Checks whether the current logged in user has the granted permission characteristic value for the provided characteristic for the provided permission name.
Input : (string,string) Result: Boolean
permissionName: string true, false
characteristic: string
characteristicValue: string

 

Groups

Simplifier.Group.getAll
Returns all groups with all assigned users
Input : () Result: Array[object]
[id: Long,
groupName: String,
description: String,
assignedUsers: [{id: Long, loginName: String, firstName: String, lastName: String, email: String}]?

 

Simplifier.Group.getById
Returns all groups with all assigned users
Input : (number) Result: object|null
id: number

id: Long,

groupName: String,

description: String,

assignedUsers:

[{id: Long,

loginName: String,

firstName: String,

lastName: String,

email: String} | null

Simplifier.Group.create(data: object|string): object

Simplifier.Group.update(id: number, data: object|string): object

Simplifier.Group.delete(id: number): void

Simplifier.Group.getUsersByGroup(id: number): Array<object>

 

Roles

Simplifier.Role.getAll(): Array<object>

Simplifier.Role.getById(id: string): object|null

Simplifier.Role.getByName(id: string): object|null

Simplifier.Role.create(data: object|string): object

Simplifier.Role.update(id: string, data: object|string): object

Simplifier.Role.delete(id: string): void

Simplifier.Role.getUsersByRole(id: string): Array<object>

NumeralJS

It is possible to make use of the NumeralJS API in server-side business objects.

The API can be found here.

 

Client-Side Business Object API

You can access any methods of the Simplifier by using the Simplifier Object.

Connectors

Simplifier.Connector.<ConnectorName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function): void
Simplifier.Connector.<ConnectorName>.<CallName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function): void

Example:

var payload = {bindingName"Binding", operationName"MyOp", soap: {foo"bar"}};
function onSuccess (data) { resolve(data); };
Simplifier.Connector.MySoap(payload, onSuccess, truetrue);
Simplifier.Connector.MySoap.myCall(payload, onSuccess, truefalsefunction () { console.log("something went wrong"); });

 

Business Objects

 Simplifier.BusinessObject.<BOName>.<MethodName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function, parametrized?: boolean = true): void

 

Example:

var payload = {leftOperand: 3operation"add", rightOperand: 4};
function onSuccess (data) { resolve(data); };
Simplifier.BusinessObject.OtherBO.someMethod(payload, onSuccess, truefalsefunction () { console.log("something went wrong"); }, true);

 

Client-side Business Objects

Simplifier.ClientsideBusinessObject.<CSBOName>.<FunctionName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function): void
Simplifier.CurrentClientsideBusinessObject.<FunctionName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function): void

 

Example:

var payload = {leftOperand: 3operation"add", rightOperand: 4};
function onSuccess (data) { resolve(data); };
Simplifier.ClientsideBusinessObject.OtherBO.someMethod(payload, onSuccess, truefalsefunction () { console.log("something went wrong"); });
Simplifier.CurrentClientsideBusinessObject.someMethod(null, onSuccess, truefalsefunction () { console.log("something went wrong"); });

 

Plugins

Simplifier.Plugin.<PluginName>.<SlotName>(payload: object, successCallback: function, busyFlag?: boolean, failOnError?: boolean, errorCallback?: function): void

 

Example:

var payload = {name""};
function onSuccess (data) { resolve(data); };
Simplifier.Plugin.contentRepoPlugin.listRepos(null, onSuccess);
Simplifier.Plugin.contentRepoPlugin.createRepo(payload, onSuccess);

 

CryptoJS

var sMySecretKey = "secret";
var oCrypted = CryptoJS.AES.encrypt("dontStealMyData", sMySecretKey);
output.result = CryptoJS.AES.decrypt(oCrypted, sMySecretKey).toString(CryptoJS.enc.Utf8)

Take also a look at crypto-js.

Content Repository

The Content Repository Plugin is used to implement a persistence layer for data so that you can store images and videos using this plugin. It contains a repository, folders and files, so you create a repository (parent folder) in which subfolders can be stored in any hierarchy.

Example call of a Content Repository Plugin function via a server-side Business Object:

var payloadClearFileSystem = {
    slot: "contentRepositoryAdd",
                payload: {
                               "provider": "ClearFileSystem",
                               "name": input.name,
                               "description": input.description
                }
};

var result = JSON.parse(PLUGIN_contentRepoPlugin.run(JSON.stringify(payloadClearFileSystem)))

The payload configuration depends on the required slot.

Difference between File System and Clear File System:

The file system stores the received content repository data in a database.
The clear file system stores this data in an actual file system (compare Windows Explorer).

Content Repositories

Add

Slot Description
contentRepositoryAdd This function adds a new content repository
FileSystem:
Input parameters
Key Type Description
name String Name of the repository
description String (optional) Description of the repository
provider String Content provider (must be specified as ‘FileSystem’)
permissionObjectType String Must be specified as ‘App’
permissionObjectID String The ID of the Object Type can be freely selected
{
    "permissionObjectType" : "App",
    "permissionObjectID""DummyApp",
    "provider" : "FileSystem",
    "name""MyTestRepo",
    "description""MyTestRepoDescription"
}

 

Output parameter
Key Type Description
id String The ID of the created repository
{
    "id": 15
}

 

ClearFileSystem:
Input parameters
Key Type Description
name String Name of the repository
description String (optional) Description of the repository
provider String Content provider (must be specified as ‘ClearFileSystem’)
{  
    "name""MyTestRepo",
    "provider" : "ClearFileSystem",
    "description""MyTestRepoDescription"
}

 

Output parameters
Key Type Description
id Integer ID of the created ContentRepository
description String Description of the repository
{
    "id"15,
    "description""MyTestRepoDescription"
}

Find

Slot Description
contentRepositoryFind This function lists only repositories for which the user has authorizations
FileSystem:
Input parameter
Key Type Description
name String Name of the searched repository
{
    "name""MyRepo"
}

Output parameters
Key Type Description
repositories Array Array of all repositories (max. 1 element)
id Integer ID of the repository
name String Name of the repository
description String Description of the repository
permissionObjectType String Must be specified as ‘App’
permissionObjectID String The ID of the Object Type can be freely selected
provider String Content provider (must be specified as ‘FileSystem’)
{
    "repositories": [
        {
            "id"3,
            "name""MyRepo",
            "description""My repo description",
            "permissionObjectType""App",
            "permissionObjectID""DummyApp",
            "provider""FileSystem",           
        }
    ]
}

 

ClearFileSystem:
Input parameter
Key Type Description
name String Name of the searched repository
{
    "name""MyRepo"
}
Output parameters
Key Type Description
repositories Array  Array of all repositories (max. 1 element)
id Integer  ID of the repository
name String Name of the repository
description String Description of the repository
provider String  Content provider (must be specified as ‘ClearFileSystem’)
{
    "repositories": [
        {
            "id"3,
            "name""MyRepo",
            "description""My repo description",
            "provider""ClearFileSystem"
        }
    ]
}

List

Slot Description
contentRepositoryList This function finds only repositories for which the user has authorizations
FileSystem:
Input parameter
Key Type Description
provider String (optional) Content provider (must be specified as ‘FileSystem’)
If no provider is specified, all repositories are returned
{
    "provider""FileSystem"
}

 

Output parameters
Key Type Description
repositories Array Array of all repositories
id Integer ID of the repository
name String Name of the repository
description String Description of the repository
permissionObjectType String Must be specified as ‘App’
permissionObjectID String The ID of the Object Type can be freely selected
provider String Content provider
{
    "repositories": [
        {
            "id"3,
            "name""MyRepo",
            "description""My repo description",
            "permissionObjectType""App",
            "permissionObjectID""DummyApp",
            "provider""FileSystem",          
        },
        {
            "id"4,
            "name""MyRepo2",
            "description""My repo description 2",
            "permissionObjectType""Session",
            "permissionObjectID""abc",
            "provider""FileSystem",          
        }
    ]
}
ClearFileSystem:
Input parameter
Key Type Description
provider String (optional) Content provider (must be specified as ‘ClearFileSystem’)
If no provider is specified, all repositories are returned
{
    "provider""ClearFileSystem"
}

 

Output parameters
Key Type Description
repositories Array Array of all repositories
id Integer ID of the repository
name String Name of the repository
description String Description of the repository
provider String Content provider
{
    "repositories": [
        {
            "id"5,
            "name""MyRepo5",
            "description""My repo description 5",
            "provider""ClearFileSystem"
        },
        {
            "id"6,
            "name""MyRepo6",
            "description""My repo description 6",
            "provider""ClearFileSystem"
        }
    ]
}

Get

Slot
contentRepositoryGet
FileSystem:
Input parameter
Key Type Description
id Integer Primary key
{
    "id"3
}

 

Output parameters
Key Type Description
id Integer ID of the repository
name String Name of the repository
description String Description of the repository
permissionObjectType String Must be specified as ‘App’
permissionObjectID String The ID of the Object Type can be freely selected
provider String Content provider (must be specified as ‘FileSystem’)
{
    "id"3,
    "name""MyRepo",
    "description""My repo description",
    "permissionObjectType""App",
    "permissionObjectID""DummyApp",
    "provider""FileSystem",
}

 

ClearFileSystem:
Input parameter
Key Type Description
id Integer Primary key
{
    "id"3
}

 

Output parameters
Key Type Description
id Integer ID of the repository
name String Name of the repository
description String Description of the repository
provider String Content provider (must be specified as ‘ClearFileSystem’)
{
    "id"3,
    "name""MyRepo",
    "description""My repo description",
    "provider""ClearFileSystem",
}

Edit

Slot Description
contentRepositoryEdit This function edits a content repository
FileSystem:
Input parameters
Key Type Description
id Integer Primary key (ID of the repository)
name String Name of the repository
description String (optional) Description of the repository
permissionObjectType String Must be specified as ‘App’
permissionObjectID String The ID of the Object Type can be freely selected
{
    "id" : 15,
    "permissionObjectType" : "App",
    "permissionObjectID""DummyApp",
    "name""MyTestRepo",
    "description""My new description",  
}
ClearFileSystem:
Input parameters
Key Type Description
id Integer Primary key (ID of the repository)
name String Name of the repository
description String (optional) Description of the repository
{
    "id" : 15,
    "name""MyTestRepo",
    "description""My new description"
}

Delete

A repository can only be deleted if it does not contain any content folders.

Slot Description
contentRepositoryDelete This function deletes a content repository
Input parameter
Key Type Description
id Integer Primary key
{
    "id"15
}

Security Assertion Markup Language (SAML)

SAML (Security Assertion Markup Language) is an Extensible Markup Language (XML) standard that allows users to log in to networked but separate websites with just a single login.

To set SAML 2.0 as authentication, make sure you have administrator rights.

After you have logged in as usual in the login mask with your user credentials, click on your name in the upper right corner and then on the settings.

Switch to the Authentication tab in the upper toolbar.

To add a new authentication mechanism, click on the plus icon in the upper right corner.

General Settings

Name Name under which this authentication mechanism settings is saved
Priority The position of the execution of the respective authentication mechanism – the higher the number, the earlier the respective authentication mechanism is used. If same numbers are available, the sequence is determined lexicographically ascending
Mechanism The authentication mechanism

Mechanism Settings

Service Provider Endpoint
The endpoint URL which needs to be configured in the SAML IDP Provider
Display Name
The display name is shown on the login button
Force Authentication If set, the identity provider must authenticate the presenter directly rather than rely on a previous security context. When both ‘Force Authentication’ and ‘Passive’ are activated, the identity provider must not freshly authenticate the presenter unless the constraints of ‘Passive’ can be met
Passive If set, the identity provider and the user agent itself must not visibly take control of the user interface from the requester and interact with the presenter in a noticeable manner
Sign Assertions
If set, also the assertions within the SAML Response will be signed
Maximum Lifetime (in seconds) Used to determine whether a user login request is sent within a valid time period of the user’s last login. If yes, the user is automatically logged in without the need to enter a user name and password again.
Important: ADFS setting is 480 minutes (8 hours), so increase this value if authenticating with an ADFS service
Service Provider Entity ID By default, the entity ID of your application (the Service Provider) is equal to the callback URL, but you can force your own entity ID by setting this parameter
IDP Metadata XML containing the configuration of your IDP (Identity Provider). Contains e.g. the certificate to sign the communication. This file is usually distributed by your IDP
Icon
Configures an icon, which will be shown on the login page for this authentication mechanism

 

Automated Testing

On application deployment, the app generator provides a basic self-test for the business application. The automated tests are based on the SAP OPA5 test framework.

The URL of the test page is relative to the deployed business application used under the subpath /test/integration/opaTests.qunit.html and can be opened with a browser.

As an admin, you can perform an automated test. Make sure you are already in the UI Designer for the testing application. Switch to the tab Testing.

To create a new test case, click on the plus icon.

Select the type in the opened pop-up and enter a test case name.

Click on Save.

Select the new Journey or Page Object on the left and add the testing code.

Deploy the Journeys or Page Objects and click on Show test page.

Using OAuth for authorization on Google

Authentication Settings


OAuth 2.0 Settings

These settings depend on the third-party provider.

Display Name The display name is shown on the login button.
Client ID The client ID identifies the application and is defined by the configuration on the OAuth server.
Client Secret The client secret authenticates the application and is defined by the configuration on the OAuth server.
Scope The scope determines which rights are gained with the access token. E.g. ‘profile’, ’email’, etc. for gaining rights to access the user profile/user email.
Authorization Endpoint The authorization endpoint is the URL to which an authorization request is sent.
Token Endpoint The token endpoint is the URL to which an access token request is sent.
Redirect Endpoint The redirect endpoint is the URL to which the browser is directed after successful authorization. This URL needs to be entered in the OAuth server configuration.
Additional Query Parameters You can add additional query parameters, such as name and value.
Icon The icon will be displayed on the login mask above the display name.

OAuth Profile

Profile URL The URL to which a user profile request is sent.
Profile Path The path which points to the user profile. E.g. ‘/’, ‘profile’, ‘profiles[0]’ etc.
Profile Verb GET, POST, PUT
First Name The path which points to the entry of the user profile containing the first name. E.g. ‘givenName’, ‘person/firstName’, etc.
Last Name The path which points to the entry of the user profile containing the last name. E.g. ‘surName’, ‘person/lastName’, etc.
E-Mail Address The path which points to the entry of the user profile containing the email address. E.g. ‘mail’, ’emails[0]/value’, etc.
Mobile Phone Number The path which points to the entry of the user profile containing the mobile phone number. E.g. ‘phone’, ‘phones/mobile’, etc.


Test Authentication

The settings for OAuth 2.0 can be tested within the configuration. Since the test procedure includes several steps, it is necessary to save the settings first.

The assignment of an access token can be tested by pressing the ‘Test authentication’ button, while pressing the ‘Test profile extraction’ button initiates the complete OAuth 2.0 procedure, which assigns an access token and also collects a user profile with the required data.

Using OAuth for authorization on Amazon

Authentication Settings


OAuth 2.0 Settings

These settings depend on the third-party provider.
Display Name The display name is shown on the login button.
Client ID The client ID identifies the application and is defined by the configuration on the OAuth server.
Client Secret The client secret authenticates the application and is defined by the configuration on the OAuth server.
Scope The scope determines which rights are gained with the access token. E.g. ‘profile’, ’email’, etc. for gaining rights to access the user profile/user email.
Authorization Endpoint The authorization endpoint is the URL to which an authorization request is sent.
Token Endpoint The token endpoint is the URL to which an access token request is sent.
Redirect Endpoint The redirect endpoint is the URL to which the browser is directed after successful authorization. This URL needs to be entered in the OAuth server configuration.
Additional Query Parameters You can add additional query parameters, such as name and value.
Icon The icon will be displayed on the login mask above the display name.

OAuth Profile

Profile URL The URL to which a user profile request is sent.
Profile Path The path which points to the user profile. E.g. ‘/’, ‘profile’, ‘profiles[0]’ etc.
Profile Verb GET, POST, PUT
First Name The path which points to the entry of the user profile containing the first name. E.g. ‘givenName’, ‘person.firstName’, etc.
Last Name The path which points to the entry of the user profile containing the last name. E.g. ‘surName’, ‘person.lastName’, etc.
E-Mail Address The path which points to the entry of the user profile containing the email address. E.g. ‘mail’, ’emails./value’, etc.
Mobile Phone Number The path which points to the entry of the user profile containing the mobile phone number. E.g. ‘phone’, ‘phones.mobile’, etc.


Test Authentication

The settings for OAuth 2.0 can be tested within the configuration. Since the test procedure includes several steps, it is necessary to save the settings first.

The assignment of an access token can be tested by pressing the ‘Test authentication’ button, while pressing the ‘Test profile extraction’ button initiates the complete OAuth 2.0 procedure, which assigns an access token and also collects a user profile with the required data.

Using OAuth for authorization on Azure

Authentication Settings


OAuth 2.0 Settings

These settings depend on the third-party provider.
Display Name The display name is shown on the login button.
Client ID The client ID identifies the application and is defined by the configuration on the OAuth server.
Client Secret The client secret authenticates the application and is defined by the configuration on the OAuth server.
Scope The scope determines which rights are gained with the access token. E.g. ‘profile’, ’email’, etc. for gaining rights to access the user profile/user email.
Authorization Endpoint The authorization endpoint is the URL to which an authorization request is sent.
Token Endpoint The token endpoint is the URL to which an access token request is sent.
Redirect Endpoint The redirect endpoint is the URL to which the browser is directed after successful authorization. This URL needs to be entered in the OAuth server configuration.
Additional Query Parameters You can add additional query parameters, such as name and value.
Icon The icon will be displayed on the login mask above the display name.

OAuth Profile

 
Profile URL The URL to which a user profile request is sent.
Profile Path The path which points to the user profile. E.g. ‘/’, ‘profile’, ‘profiles[0]’ etc.
Profile Verb GET, POST, PUT
First Name The path which points to the entry of the user profile containing the first name. E.g. ‘givenName’, ‘person/firstName’, etc.
Last Name The path which points to the entry of the user profile containing the last name. E.g. ‘surName’, ‘person/lastName’, etc.
E-Mail Address The path which points to the entry of the user profile containing the email address. E.g. ‘mail’, ’emails[0]/value’, etc.
Mobile Phone Number The path which points to the entry of the user profile containing the mobile phone number. E.g. ‘phone’, ‘phones/mobile’, etc.


Test Authentication

The settings for OAuth 2.0 can be tested within the configuration. Since the test procedure includes several steps, it is necessary to save the settings first.

The assignment of an access token can be tested by pressing the ‘Test authentication’ button, while pressing the ‘Test profile extraction’ button initiates the complete OAuth 2.0 procedure, which assigns an access token and also collects a user profile with the required data.

Content Files

Add

Slot Description
contentFileAdd This function adds a new content file
FileSystem:
Input parameters
Key Type Description
folderId Integer ID of the parent folder
name String File name (also used to determine the MimeType)
description String (optional) Description of the file
securitySchemeID String ‘public’: file is public, ‘private’: file is not public
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
data String (optional) Base64 encoded content of the file
uploadSession String (optional) Session of an AppServer Html5 Upload
copyFrom Integer (optional) ID of the copied file

Note:

The content of the file can be transferred in three different ways. Exactly one of the following parameters must be passed:

{
    "folderId" : 5,
    "name" : "test.txt",
    "description" : "My file description",
    "securitySchemeID" : "public",
    "permissionObjectType" : "Session",
    "permissionObjectID" : "abc",
    "data" : "dGVzdA=="
}

 

Output parameters
Key Type Description
id Integer ID of the created content file
name String Name of the created content file
{
    "id"15,
    "name""test.txt"
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the content repository
fileName String Name of the file
folderPath String Path under which the file is to be stored
data String (optional) Base64 encoded content of the file
uploadSession String (optional) Session of an AppServer Html5 Upload
copyFrom String (optional) ID of the copied file
forceOverwrite Boolean (optional) If the flag has the value ‘true’, any existing file with the same name will be overwritten;
If not set or ‘false’, the creation leads to an error if a file with the same name already exists

Note:

The content of the file can be transferred in three different ways. Exactly one of the following parameters must be passed:

{
    "contentId" : 5,
    "fileName" : "test.txt",
    "folderPath" : "MyParentFolder/MyChildFolder"
    "data" : "dGVzdA=="
}

Find

Slot Description
contentFileFind This function lists the searched content file
FileSystem:
Input parameters
Key Type Description
folderId Integer ID of the content folder in which the content is listed
name String Name of the searched file
{
    "folderId"3,
    "name""test.txt"
}

 

Output parameters
Key Type Description
files Array Array of all files (max. 1 element)
id Integer ID of the file
name String Name of the file
description String Description of the file
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
securitySchemeID String Security scheme (‘public’/’private’)
statusSchemeID String Status scheme (not implemented yet; always ‘default’)
statusID String Status scheme (not implemented yet; always ‘default’)
mimeType Object  MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "files": [
        {
            "id"3,
            "name""test.txt",
            "description""My file description 1",
            "statusSchemeID""Default",
            "statusID""Default",
            "securitySchemeID""public",
            "permissionObjectType""Session",
            "permissionObjectID""abc",
            "mimeType": {
                "extension""jpg",
                "mimeType""image"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/ParentFolder/ChildFolder/file.jpg/",
        }
    ]
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the content repository in which you want to search
fileName String Name of the searched file
folderPath String (optional) Path of the folder to search in
{
    "contentId": 3,
    "filename""test.txt",
    "folderPath: "MyParentFolder/MyChildfolder"
}

 

Output parameters
Key Type Description
files Array Array of all files
filePath String Path of the file
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "files": [
        {
            "filePath""MyParentFolder/MyChildFolder/test.txt",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt/"
        },
        {
            "filePath""MyParentFolder/MyChildFolder/MyFolder/test.txt",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/MyFolder/test.txt/"
        }
    ]
}

List

Slot Description
contentFileList This function lists a file
FileSystem:
Input parameters
Key Type Description
folderId Integer ID of the listed content folder
{
    "folderId"3
}

 

Output parameters
Key Type Description
files Array Array of all files
id Integer ID of the file
name String Name of the file
description String Description of the file
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
securitySchemeID String Security scheme (‘public’/’private’)
statusSchemeID String Status scheme (not implemented yet; always ‘default’)
statusID String Status scheme (not implemented yet; always ‘default’)
mimeType Object  MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "files": [
        {
            "id"3,
            "name""test.txt",
            "description""My file description 1",
            "statusSchemeID""Default",
            "statusID""Default",
            "securitySchemeID""public",
            "permissionObjectType""Session",
            "permissionObjectID""abc",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt/"
        },
        {
            "id"4,
            "name""test2.txt",
            "description""My file description 2",
            "statusSchemeID""Default",
            "statusID""Default",
            "securitySchemeID""public",
            "permissionObjectType""Session",
            "permissionObjectID""abc",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test2.txt/"
        }
    ]
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the listed content repository
folderPath String (optional) Path of the folder of the listed files
{
    "contentId"3,
    "folderPath""MyFolder"
}

 

Output parameters
Key Type Description
files Array Array of all files
fileName String Name of the file
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "files": [
        {
            "fileName""test.txt",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt/"
        },
        {
            "name""test2.txt",
            "mimeType": {
                "extension""txt",
                "mimeType""text"
            },
            "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test2.txt/"
        }
    ]
}

Get

Slot Description
contentFileGet This function queries
FileSystem:
Input parameters
Key Type Description
id Integer Primary key
{
    "id"3
}

 

Output parameters
Key Type Description
id Integer ID of the file
folderId Integer ID of the parent folder
name String Name of the file
description String Description of the file
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
securitySchemeID String Security scheme (‘public’/’private’)
statusSchemeID String Status scheme (not implemented yet; always ‘default’)
statusID String Status scheme (not implemented yet; always ‘default’)
data String Base64 encoded content of the file
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "id"3,
    "folderId"5,
    "name""test.txt",
    "description""My file description",
    "statusSchemeID""Default",
    "statusID""Default",
    "securitySchemeID""public",
    "permissionObjectType""Session",
    "permissionObjectID""abc",
    "data""dGVzdA==",
    "mimeType": {
        "extension""txt",
        "mimeType""text"
    },
    "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt/"
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the listed content repository
filePath String Path of the file
{
    "contentId"3,
    "filePath""MyFolder/test.txt"
}

 

Output parameters
Key Type Description
filePath String File name
data String Base64 encoded content of the file
length Integer Length of the file in bytes
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "filePath""MyFolder/test.txt",
    "data""dGVzdA==",
    "length"59570,
    "mimeType": {
        "extension""txt",
        "mimeType""text"
    },
    "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyFolder/test.txt/"
}

Get Metadata

Slot Description
contentFileGetMetadata This function queries the metadata
FileSystem:
Input parameters
Key Type Description
id Integer Primary key
{
    "id"3
}

 

Output parameters
Key Type Description
id Integer ID of the file
folderId Integer ID of the parent folder
name String File name
description String Description of the file
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
securitySchemeID String Security scheme (‘public’/’private’)
statusSchemeID String Status scheme (not implemented yet; always ‘default’)
statusID String Status scheme (not implemented yet; always ‘default’)
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "id"3,
    "folderId"5,
    "name""test.txt",
    "description""My file description",
    "statusSchemeID""Default",
    "statusID""Default",
    "securitySchemeID""public",
    "permissionObjectType""Session",
    "permissionObjectID""abc",
    "mimeType": {
        "extension""txt",
        "mimeType""text"
    },
    "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt"
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the listed content repository
filePath String Path of the file
{
    "contentId"3,
    "filePath""MyFolder/test.txt"
}

 

Output parameters
Key Type Description
filePath String File name
mimeType Object MimeType information
mimeType/extension String The file extension
mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
url String The download URL of the file
{
    "filePath""MyFolder/test.txt",
    "mimeType": {
        "extension""txt",
        "mimeType""text"
    },
    "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyFolder/test.txt"
}

Get Metadata batched

Slot Description
contentFileGetMetadataBatched This function queries the metadata batched
FileSystem:
Input parameters
Key Type Description
contentId Integer ID of the repository in which the files are stored
files Array[Object] A list of file objects
files/id Integer ID of the file
{
    "contentId"1,
    "files": [{
        "id"1
    },
    {
        "id"2
    }]
}

 

Output parameters
Key Type Description
fileMetadata Array[Object]  A list of metadata objects
fileMetadata/id Integer ID of the file
fileMetadata/folderId Integer ID of the parent folder
fileMetadata/name String Name of the file
fileMetadata/description String Description of the file
fileMetadata/permissionObjectType String Must be specified as ‘Session’
fileMetadata/permissionObjectID String The ID of the Object Type can be freely selected
fileMetadata/securitySchemeID String Security scheme (‘public’/’private’)
fileMetadata/statusSchemeID String Status scheme (not implemented yet; always ‘default’)
fileMetadata/statusID String Status scheme (not implemented yet; always ‘default’)
fileMetadata/mimeType Object MimeType information
fileMetadata/mimeType/extension String The file extension
fileMetadata/mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
fileMetadata/url String The download URL of the file
{
    fileMetadata: [{
        "id": 1,
        "folderId": 5,
        "name""test.txt",
        "description""My file description",
        "statusSchemeID""Default",
        "statusID""Default",
        "securitySchemeID""public",
        "permissionObjectType""Session",
        "permissionObjectID""abc",
        "mimeType": {
            "extension""txt",
            "mimeType""text"
        },
        "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder/test.txt"
    },
    {
        "id": 2,
        "folderId": 3,
        "name""picture.jpg",
        "description""My file description",
        "statusSchemeID""Default",
        "statusID""Default",
        "securitySchemeID""public",
        "permissionObjectType""Session",
        "permissionObjectID""abc",
        "mimeType": {
            "extension""jpg",
            "mimeType""picture"
        },
        "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/MyParentFolder/MyChildFolder2/picture.jpg"
    }]
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the listed content repository
files Array[Object]  A list of file objects
files/filePath String Path of the file
{
    "contentId"6,
    "files": [{
        "filePath""Folder/picture.jpg"
    },
    {
        "filePath""Folder2/text.txt"
    }]
}

 

Output parameters
Key Type Description
fileMetadata Array[Object] A list of metadata object
fileMetadata/filePath String File name
fileMetadata/mimeType Object  MimeType information
fileMetadata/mimeType/extension String The file extension
fileMetadata/mimeType/mimeType String The mimeType stored in the MimeMapping for the file extension
fileMetadata/url String The download URL of the file
{
    fileMetadata: [{
        "filePath""Folder/picutre.jpg",
        "mimeType": {
            "extension""jpg",
            "mimeType""picture"
        },
        "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/Folder/picture.jpg"
    },
    {
        "filePath""Folder2/test.txt",
        "mimeType": {
            "extension""txt",
            "mimeType""text"
        },
        "url""http://localhost:8080/client/2.0/plugin/contentRepoPlugin/file/RepoName/Folder2/test.txt"
    }]
}

Edit

Slot Description
contentFileEdit This function edits a content file
FileSystem:
Input parameters
Key Type Description
id Integer ID of the data to be processed
name String File name (also used to determine the MimeType)
description String (Optional) Description of the file
securitySchemeID String ‘public’: file is public, ‘private’: file is not public
permissionObjectType String Must be specified as ‘Session’
permissionObjectID String The ID of the Object Type can be freely selected
data String Base64 encoded content of the file
{
    "id" : 5,
    "name" : "test.txt",
    "description""My new file description",
    "securitySchemeID" : "public",
    "permissionObjectType" : "Session",
    "permissionObjectID" : "abc",
    "data" : "dGVzdA=="
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the content repository in which the file is stored
sourceFilePath String Path of the file to be edited
destFilePath String Path incl. new name under which the file is to be stored
forceOverwrite Boolean (optional) If the flag has the value ‘true’, any existing file with the same name will be overwritten;
If not set or ‘false’, the creation leads to an error if a file with the same name already exists
{
    "contentId" : 5,
    "sourceFilePath" : "MyParentFolder/test.txt",
    "destFilePath""MyParentFolder/MyChildFolder/myRenamedMovedFile.txt"
}

Delete

Slot Description
contentFileDelete This function deletes a content file
FileSystem:
Input parameters
Key Type  Description
id Integer Primary key
{
    "id"15
}

 

ClearFileSystem:
Input parameters
Key Type Description
contentId Integer ID of the content repository in which the file is stored
filePath String Path of the file to be deleted
{
    "contentId"10,
    "filePath" : "MyFolder/myFile.txt"
}

Private: Example of using OData

In this example, the data of an OData service is displayed in a table by pressing a button.

The connector is configured as follows:

Endpoint:

http://sapid405.itizzimo.kinamu.at:8001/sap/opu/odata/sap/Z_SALES_ORDER_SRV
Important: Do not skip the login method.

The connector calls were generated automatically using the Connector Wizard:

Aside from the automated generated connector calls, you always have the possibility to add other connector calls via the plus icon.

In this example, we will only go in detail on SalesOrderCollection_ReadAll.

Test the connector call to make sure it works before you use it in the application.

Create the UI

Remember, we want to display the data of the Odata service in a table. The data should be loaded by pressing a button.

So at first, add the widget Button to the screen. Change the ID of the button accordingly (e.g. Button_Read) and add the appropriate text (e.g. Read) to the Properties.

For the UI you also need the Widget Table, so add it to the screen. Here you have to customize the properties as follows:

1. Make sure that itemsTemplate is activated.

2. Click on the Selection Helper at items.

A dialog opens in which you have to select the connector on the left and then the Collection SalesOrder_Collection.

Since we want to display three values of the OData service, we still need three Columns in the table and a ColumnListItem that contains three Text widgets.
Your screen content should look like this:

Switch to the Process Designer and create the user story for the process logic.

Configure the Process Logic

Start the process with a Subscribe event of the read button (Widget Event: press). Then add the Data Object Connector and select the Connector and the corresponding Connector Call Categories_ReadAll.

For the Read Connector Call you don’t need an Input Mapping, because you don’t have to pass a value to read all data.

Only the output mapping has to be defined.

Open the Output Mapping and drag the Parameter from the left. Go deeper into OutputSalesOrderCollection.

Select the fields you need. For example, select BuyerId, GrossAmount and CurrencyCode by clicking on the plus.

After you have added the fields, click Ok.

Now you have to define the widgets (drag it from the right) in which the selected parameters should be mapped.

Select the screen, the widget Table and switch to Data Aggregation within the section Properties and Aggregations.

Go deeper into items.

Now go deeper into the items of the Table – ColumnListItem.

You will now see the three Text widgets as cells of the list item. For each Text you have to select String text as property. It then appears on the right under Selected Properties.

When you’ve done this for all three of them, click Ok.

Now map the parameters into the table. The Output Mapping should look like this:

Connect the two shapes with each other:

Make sure that the business application has the appropriate permissions to execute the connector.

After successful deployment the data will be read and displayed by clicking the button.

For this screenshot, in the UI Designer a label has been added to each column for the Buyer Id, Gross Amount and Currency Code.

SAP ERP6 ArchiveLink

SAP ERP6 (Enterprise-Resource-Planning) ArchiveLInk

Method SAP Transaction Description
READ Read ArchiveLink Object.
READ_DOC Read ArchiveLink Document.
UPLNK Upload and link file to ArchiveLink.

 

SAP ERP6 Generic Object Services

SAP ERP6 (Enterprise-Resource-Planning) Generic Object Services

Method SAP Transaction Description
READ Read Generic Object Service.
ADD_ATTACHEMENT Add File to Generic Object Service.
DELETE_ATTACHEMENT Delete File of Generic Object Service.
READ_ATTACHEMENT Read File of Generic Object Service.

 

SAP ERP6 Object Classification

SAP ERP6 (Enterprise-Resource-Planning) Object Classification

Method SAP Transaction Description
READ Read Object Classification.
CHANGE_CLASSES Change Object Classification.
READ_CD_CLASS Read Change Documents of Classification.
READ_CHARACTERISTIC Read Characteristic.

 

SAP ERP6 Text

SAP ERP6 (Enterprise-Resource-Planning) Text

Method SAP Transaction Description
READ Read a Text Object.
UPDATE Update a Text Object.

 

SAP ERP6 Partner Schema

SAP ERP6 (Enterprise-Resource-Planning) Partner Schema

Method SAP Transaction Description
READ Read a Partner Schema.
SEARCH Search a Partner Schema.

 

SAP HR Time Sheet

SAP HR (Human Resources) Time Sheet

Method SAP Transaction Description
CREATE CAT2 Create entries within a time sheet.

 

SAP IS-U Account

SAP IS-U (Industry Solution for Utilities) Account

Method SAP Transaction Description
READ CAA3 Load an Account based on the Account number.

 

SAP IS-U Contract

SAP ISU (Industry Solution for Utilities) Contract

Method SAP Transaction Description
READ ES22 Load a Contract based on the Contract number.
SEARCH_BY_INSTALLATION Search Contracts based on Installation numbers.
SEARCH_BY_LIST Search Contracts.

 

SAP ISU Meter Reading Order

SAP ISU (Industry Solution for Utilities) Meter Reading Order

Method SAP Transaction Description
CREATE EL01 Create a Meter Reading Order object master data.
READ EL31 Load a Meter Reading Order with the Meter object number.
SEARCH_BY_DEV Search a Meter Reading Order by a Device object.
UPDATE_BY_DEV Update a Meter Reading Order by a Device object.

 

SAP ISU Installation

SAP ISU (Industry Solution for Utilities) Installation

Method SAP Transaction Description
CREATE ES30 Create Utility Installation object master data.
READ ES32 Load a Utility Installation based on the Utility Installation object number.
UPDATE  ES31 Update Utility Installation.
CREATE_WITH_POD  ES30 Create Utility Installation object with Point of Delivery object.
DEVICE_INSTALL EG34 Install Device into Installation object.
DEVICE_REMOVE EG35 Remove Device from Installation object.
GET_SYNPROF_CONSUMPTION Get Consumption values from Synthetic load profile.
SEARCH Search Installation object.
SEARCH_BY_POD Search Installation object based on Point of Delivery object.

 

SAP ISU Meter

SAP ISU (Industry Solution for Utilities) Meter

Method SAP Transaction Description
READ IE30 Load a Meter with the Meter object number.
SEARCH_BY_INSTLN Search a Meter by Installation object.

 

SAP ISU Owner Allocation

SAP ISU (Industry Solution for Utilities) Owner Allocation

Method SAP Transaction Description
CREATE ES51 Create Owner Allocation object master data.
READ ES53 Load an Owner Allocation on the Owner Allocation object number.
UPDATE ES52 Update Owner Allocation.
CANCEL ES54 Cancel an Owner Allocation object.

 

SAP ISU Point of Delivery

SAP ISU (Industry Solution for Utilities) Point of Delivery

Method SAP Transaction Description
CREATE EEDM11 Create Point of Delivery object master data.
READ EEDM11 Load a Point of Delivery based on the Point of Delivery object number.
UPDATE EEDM11 Update Point of Delivery.
SEARCH Search Point of Delivery object.
UPDATE_EXT_UI Update External identification of Point of Delivery object.

 

SAP ISU Service Order

SAP ISU (Industry Solution for Utilities) Service Order

Method SAP Transaction Description
CREATE EE73 Create Service Order object master data.
READ EE73 Load a Service Order with the Service Order object number.

 

SAP ISU Street

SAP ISU (Industry Solution for Utilities) Street

Method SAP Transaction Description
READ SR22 Load a Street using the Street object number.

 

SAP ITIZ Handler

SAP ITIZ Handler

Method SAP Transaction Description
EXECUTE Execute the Handler Object.

 

SAP ITIZ SDSH

SAP ITIZ SDSH (SAP Determine Search Help)

Method SAP Transaction Description
EXECUTE SE11 Execute a Search Help
READ_METADATA SE11 Read Metadata of a Search Help

 

SAP ITIZ UI5

SAP ITIZ UI5

Method SAP Transaction Description
CREATE Upload an UI5 App

 

SAP MM Purchase Requisition

SAP MM (Material Management) Purchase Requisition

Method SAP Transaction Description
READ ME53N Load a MM Purchase Requisition using the Purchase Requisition number.

 

SAP PM Measurement Point

SAP PM (Plant Management) Measurement Point

Method SAP Transaction Description
READ IK03 Load a measurement point using the object key.
SEARCH_BY_REPORT Search for measurement point by a report.

 

SAP PP Material BOM

SAP PP Material BOM

Method SAP Transaction Description
CREATE CS01 Create a material BOM object.
READ CS03 Load a material BOM using the object key.

 

Collaboration

You will receive a notification at the bottom right as soon as another user starts editing the same application:

As soon as the user starts editing the same screen, the color of the button (in the upper right as well as in the screen content tree) changes to red. To show all editors, click on the button to open a popover with the editing users.

The list of editors is always up to date, so you get an immediate response if someone else starts editing the screen.


Due to the autosave function, there are possibilities to make changes undo or redo. That means, that user actions within the screen content and properties can be undone by clicking on the undo-icon.

The undo-list offers the last actions on the current screen, starting with the last one. If you select an entry from the list, it will be undone including its subsequent actions.

An avatar screen of the corresponding user is displayed within the list. In the case of collaboration, it becomes obvious that the operation will eventually undo the work of another user.

The following actions are listed:

Please note:

The undo lists at the application level are only retained as long as a user is active in the UI Designer. When the last user leaves the application, the lists and all deleted screens are permanently deleted.


The redo-icon provides recently undone actions to redo. The list is cleared when regular editing takes place.

SAP RFC Connector

Mandatory Information | Optional Information | Connection Pool | Host Information | Use External System (optional) | Settings | SAP Router (optional) | SNC Settings (optional)

Here you can find information about all specific data of an SAP RFC connector. To set up a basic SAP RFC connector, please follow the instructions in SAP RFC Quickstart.

SAP System Mandatory Information

The following parameters are mandatory:

Parameter Description Example Mandatory JCo Configuration Key
System ID Unique ID of the SAP System ID4 Yes
System Number SAP System instance number, maximum two digits 80 Yes
jco.client.sysnr
Client Number Number of the SAP Client, always three digits 100 Yes
jco.client.client
Language Default language of the SAP System that must have the language installed en Yes
jco.client.lang

SAP System Optional Information

The following parameters are optional:

Parameter Description Example Mandatory JCo Configuration Key
User name alias Alias for the user name RFCtest No
jco.client.alias_user
R3 system number Number of the SAP R3 system 80 No
jco.client.r3name
SAP system group SAP system group GRP No
jco.client.group
SAP Client Type SAP internal value Not Defined No
jco.client.type
SAP Internal Value
Name Description SAP Internal Value
Not Defined It is never set in the configuration, it serves only as default value.
R2 System The R2 system. 2
R3 System The R3 system. 3
External System An external system. E

Connection Pool

Parameter Description Mandatory JCo Column Key
Peak Limit Peak Limit in [Milliseconds] No
jco.destination.peak_limit
Pool capacity Pool capacity (default value is 1) No
jco.destination.pool_capacity
Expiration Time Expiration Time in [Milliseconds] No
jco.destination.expiration_time
Expiration Period Expiration Period in [Milliseconds] No
jco.destination.expiration_check_period
Maximum Client Get Time Maximum Client Get Time in [Milliseconds] No
jco.destination.max_get_client_time

SAP System Host-Information

Please fill out either application server or gateway server hostname to define the endpoint to the SAP backend system.

Parameter Description Example Mandatory JCo Configuration Key
Application Server Hostname Application Server IPv4 address or hostname 10.111.25.7 Yes
jco.client.ashost
(or) Message Server Hostname Message Server IPv4 address or hostname 10.111.29.0 Yes
jco.client.mshost
Gateway Service Hostname Gateway Service IPv4 address or hostname 10.101.26.0 No jco.client.gwserv
Gateway Host Hostname Gateway Host IPv4 address or hostname 10.111.29.9 No
jco.client.gwhost

Use External System (Optional)

Parameter Description Mandatory JCo Configuration Key
Use external system Activate the usage of an external system No
External Server External Server IPv4 address or hostname No
jco.client.tphost
External Program The external program ID No
jco.client.tpname

Settings

Activate the following settings as you need them.


SAP Router (Optional)

JCo Configuration Key: jco.client.saprouter

A maximum of one router can be configured, so it is currently not possible to connect them in series.

Parameter Description Mandatory
Use an SAP Router Activate the use of an SAP Router No
Router name The IPv4 address or hostname of the SAP router Yes
Use a default port Activate the use of a default port No
Port Port of Router (0-65535) Yes

SNC Settings (Optional)

The Simplifier can authenticate itself via X509 server certificates for RFC connections to SAP systems.
It is necessary that the environment variables for the SAP Key Store and Secure Lib are set correctly. The user name of the X509 certificate must match the name specified with the user name of the specified User Credentials login method.

 

Parameter Description Mandatory JCo Configuration Key
SNC Mode Active Activates the SNC communication. SNC Parameters may be configured Yes
jco.client.snc_mode
SNC Name The name of the SNC user that is used for the SNC communication No
jco.client.snc_myname
SNC Partner The name of the SNC Communication Partner Yes
jco.client.snc_partnername
SNC-SSO Mode Determines whether SSO attempts should be included in SNC communication Yes
jco.client.snc_sso
SNC Quality of Protection The protection quality of the SNC communication determines which part of the communication is encrypted Yes
jco.client.snc_qop
SNC Quality of Protection
Name Description SAP Internal Value
Only Authentication Minimum protection 1
Integrity Protection on top of authentication Authentication and integrity 2
Privacy Protection on top of integrity protection and authentication Maximum protection 3
Default Protection Use the value from snc/data_protection/use on the application server 8
Maximum Protection Use the value from snc/data_protection/max on the application server 9

Client-Side – Access Connectors

To access a connector using your business object, you must first add the connector to it.

 
var lfx_success = function(data) {
console.log(data)
};
var lfx_error = function(data) {
console.log(data)
};
var lb_showBusyIndicator = true;
var lb_failOnError = true;
Simplifier.Connector.GIS.getGisDivision({}, lfx_success, lb_showBusyIndicator, lb_failOnError, lfx_error)

Client-Side – Access Plugins

To access a plugin using your business object, you must first add the plugin to it.

 

var lfx_success = function(data) {
console.log(data)
};
var lfx_error = function(data) {
console.log(data)
};
var lb_showBusyIndicator = true;
var lb_failOnError = true;
Simplifier.Plugin.contentRepoPlugin.contentFileEdit({}, lfx_success, lb_showBusyIndicator, lb_failOnError, lfx_error)

Client-Side – Access other Business Objects

To access other business objects using your business object, you must first add them to your current business object.

Access Server-Side Business Object

Simplifier.BusinessObject.ContentRepository.contentFolderEdit({}, lfx_success, lb_showBusyIndicator, lb_failOnError, lfx_error

Access Client-Side Business Object

Simplifier.ClientsideBusinessObject.ClientSideBO.getData({}, lfx_success, lb_showBusyIndicator, lb_failOnError, lfx_error)

SUBSCRIBE Call – OPC/UA Connector

This call can only be used with an asynchronous connector.

 

Parameter Description Data Type Mandatory
operationType The type of the performed operation here: MONITORING String Yes
publishingInterval The interval in [milliseconds] when changes are published Double Yes
returnedTimestamps Enumeration value, which type of timestamp should be returned, see ReturnedTimestampEnumeration String Yes
globalMonitoringParameters Global configuration for all monitored items. See MonitoringParameters MonitoringParameters Yes
monitoredItems The list of items, which should be monitored i.e. from which value changes should be pushed by the connector. List[MonitoredItem] Yes

 

ReturnedTimestampEnumeration

MonitoringParameters
Parameter Description Data Type Mandatory
monitoringMode The monitoring mode enumeration value see MonitoringModeEnumeration String Yes
samplingInterval The sampling interval in [milliseconds] in which the OPC-UA Server looks if changes occurred for the monitored items Double Yes
queueSize The queue size of changes, which are aggregated for a publishing interval Int Yes
discardOldestItem A flag, which indicates, that the oldest change may be dropped. Boolean Yes

 

MonitoringModeEnumeration

 

MonitoredItem
Parameter Description Data Type Mandatory
nodeId The node Id information, see NodeId [NodeId] Yes
monitoringParameters The optional monitored item parameter definition, see MonitoringParameters [MonitoringParameters] No

 

NodeId
Parameter Description Data Type Mandatory 
identifier
The identifier name. String Yes
namespaceIndex The namespace index from 0 to 65535 String Yes
identifierType The identifier type enumeration, see IdentifierTypeEnumeration, the identifier will be searched as the provided identifier type. String No

IdentifierTypeEnumeration

Using SAML with Google – G Suite

The prerequisite for using SAML with Google is G Suite with administration rights.

Log in at admin.google.com with your Google account, select the item “Apps” and then the item “SAML-Apps”.

Use the “+” button to create an SSO for a SAML application.

At the bottom of the pop-up, you can select “SETUP MY OWN CUSTOM APP”.

Google will provide you with two options. Please download the IDP Metadatafile under option two and press NEXT.

Here you can assign a freely selectable name, in our example “Simplifier-Tutorial” with the description “Simplifier SAML”. In the lower area you can upload a logo. Here you can download the Simplifier logo.

Now open the user interface of Simplifier parallel in a new tab and open the settings and select “Authentication”.
Here you create a new authentication method with the “+” symbol, set a name for this method e.g. “Google”, set priority to “0” and select Mechanism to “SAML 2.0”.

Now you can specify a display name and set the maximum lifetime to “486000” seconds (8 hours) as suggested by us.

Copy the Service Provider Endpoint and paste it into the Service Provider Entity ID.

Now open the IDP Metadata File already downloaded from Google: GoogleIDPMetadata-<your-domain>.xml with a text editor of your choice and copy the content into IDP Metadata. Additionally you can define a logo.

Please copy the Service Provider Entity ID again and switch to the Google Admin Portal. There you paste the previously copied URL under ACS URL and Entity ID. In the field ACS URL, the domain must be added “:443”.

Leave the Start URL field empty and tick the checkbox at Signet Response.

Click on NEXT and then on FINISH.

Then you have to edit the attributes Mapping.

Click on ADD NEW MAPPING.

Please transfer the values from the Simplifier Settings page as in the example and save them in Simplifier as well as in the Google Admin Portal.

Finally, the SAML app must be activated for all or certain users in Google. Click on EDIT SERVICE and select “ON for everyone” and SAVE.

Now you can login to Simplifier with your Google account by clicking on the SAML button, in our case “Google”. This will open the Google Login page. After successful authentication, you will be redirected to the Simplifier dashboard.

 

Using SAML with Microsoft ADFS

Open the user interface of Simplifier, open the settings and select “Authentication”.
Here you create a new authentication method with the “+” icon, set a name for this method e.g. “ADFS”, set priority to “0” and select Mechanism to “SAML 2.0”.

Now you can specify a display name and set the maximum lifetime to “486000” seconds (8 hours) as suggested by us.

Important: The ADFS setting for maximum lifetime is 480 minutes (8 hours), so increase this value when authenticating with an ADFS service.

Copy the Service Provider Endpoint and paste it into the Service Provider Entity ID.

For using Microsoft ADFS as SAML Service Provider, you must build an XML metadata file with the use of SAML TOOL.

Go to SAML TOOL to build the XML metadata and fill out the required fields:

SAML TOOL Simplifier Description
Attribute Consume Service Endpoint (HTTP-POST) Service Provider Entity ID Endpoint URL that needs to be configured in SAML IDP. It is set by the instance name and the previously assigned authentication name by Simplifier.
EntityId Service Provider Endpoint At default, the entity ID of your application (Service Provider) is equal to the callback URL, but you can force your own entity ID by setting this parameter.
SP X.509 cert The certificate bundle is created in the next step and inserted into Simplifier data storage. Only the certificate (*.crt) is required.

A certificate bundle is required for SAML authentication. To create the XML metadata, the CRT in x.509 format is needed and Simplifier needs a JKS bundle.

To create the required certificates, we have created a bash script in the Simplifier Docker Container.

docker exec –it <Simplifier Container Name> \ bash –c “/opt/simplifier/bin/create_saml_keystore.sh”

Insert the output of the script (certificate) into the SAML tool and click on the button ‘BUILD SP METADATA’.

Now copy the content into IDP Metadata into a text editor of your choice and save the IDP Metadata File with a suffix equal to .xml

Now open the AD FS Management.

Open the “Add Relying Party Trust…” wizard, choose “Claims aware” and click on “Start”.

Use the option “Import data about the relying party from a file”, upload the previously created XML file and click on “Next”.

Enter a name, a note if necessary and click on “Next”.

Use the default setting “Allow everyone access” and click “Next”.

Make sure that the checkbox “Configure claims issuance policy for this application” is ticked.

Then click on “Close”.

A new pop-up will open, in which a new rule has to be created.

Set: “Send LDAP Attributes as Claims” and click on “Next”.

Enter a name for the rule, select Attribute store to “Active Directory”, transfer the values from the Simplifier Admin UI to the role and add an additional entry:

“User-Principal-Name” ->  “Namens-ID”

Press “Finish” and then “OK”.

The IDP metadata file required for Simplifier can now be obtained from the SPE. This must be entered in the IDP metadata field.
With ADFS ( Windows Server 2016 ) this would be:

https://<ADFS-SERVER>/FederationMetadata/2007-06/FederationMetadata.xml

After you have saved the Simplifier settings, the Simplifier Container must be restarted.

docker restart <Simplifier Container Name>

Now you can log in to Simplifier via SAML.

Users newly created by SAML do not yet have any permissions in Simplifier and only see their own user. You can assign them the desired rights and roles after the initial login.

Packages

The Packages define a number of items that are bundled in an export.

Once you have selected a package, you will see information about Creator and Create Date on the right. If the package is not approved yet, you can do it with the button “Approve”, if you have the appropriate rights. Below you can see which items are assigned to the package.

By pressing the “Export” button, the current versions of all selected items are written to an export file and downloaded.

Furthermore, you have the possibility to edit a package, to switch to the detail view or to delete it.

 

Edit a package

If you edit a package (you can do this by pressing the Edit button or double-clicking on the entry), you will be redirected to the package’s edit screen.

Tick the items on the left that should be in your package.

Click the > button to add the item to your package. With the < button you can remove items from your package.

Save your changes.

Server Environment

Within the settings of the Server Environment, you can declare your Simplifier environment into a logical development, quality assurance and productive system. It provides the foundation for customizing multiple backend systems within a connector and deploying transport requests.

You can add a new instance by pressing the plus icon in the upper right corner.

The following dialog appears:

Set a name, the URL, optional a description. Select the type and upload an icon, otherwise a default icon is set. Save your settings.

In the overview, you have the usual possibilities. Once you have selected an entry, you can adjust your previously defined settings on the right and activate or deactivate the instance.

Connector calls are always executed with the settings of the active instance.

Modules

Modules enable the logical separation of user interfaces and application logic. It divides your application into smaller components, increasing reusability, improving runtime performance through dynamic loading, and improving maintenance.

Add a new module by pressing the plus button in the top right corner.

Set a Name and a Description. The Default Language is American English; you can change it by pressing the drop down. You don’t need to set the Transport-Name, because it is generated automatically.

Now the module has been created and is displayed in the overview. You can search for name, description, author or framework.

On the right side, you have the usual possibilities. You can edit the module, which leads you to its UI Designer, switch to the preview, or delete it. There is also the option to edit the description, copy the module or show the module usage in apps, which allows you to jump directly into the application by clicking on it.

Within the editing of the modules, you have almost the same possibilities as in the editing of applications.

By editing the module, you get directly to the UI Designer. You can switch to the Process Designer, Data Workbench, Security, Testing, Interfaces and of course the Code Designer.

Please note: The use of modules is restricted and has some implications.
Dependencies/Scripted Widgets All dependencies that a module uses will be available within its own namespace as follows:
Before: io.simplifier.widgets.Text→ After: <ModulName>Widgets.io.simplifier.widgets.Text→ MyModuleWidgets.io.simplifier.widgets.Text (example)
Permissions and Auto fields A module has its own permissions and auto fields when it is launched standalone, i.e. anonymous logins, user logins, and auto fields, etc. are handled as in a normal app. When the module is loaded within an app, it does not provide its own auto fields or permissions but instead uses the permissions and auto fields of the parent app.
Assets (Libraries, CSS, Images, etc.) When a module is loaded by an app and defines any asset that is also defined by the app itself, the module’s assets are overwritten by the app’s assets. If there is a conflict between the modules, a warning is displayed explaining the merge behavior:

  1. If libraries with the same name and different versions are used in different modules within the same app, all these libraries will be loaded. The library definition therefore determines what happens when running the app. (One could overwrite the other, or both could coexist, based on the include section of the library).
  2. CSS is merged in the order in which modules are received by the app generator (randomly). If two modules define the same CSS rule, one wins randomly. The same rule applies to images, .js or other files.
Languages Translation files of modules loaded by apps are merged into the app’s translation files so that the app’s language files contain all translations. The module’s translation keys are therefore prefixed with the module name, but if a module defines a language that does not exist in the main application, it is not included.
Theming Modules cannot provide their own design, therefore the design of the app is used when loading.
FrontendIdentifier For modules, the FrontendIdentifier cannot be edited and is fixed to the name of the module to avoid conflicts. It is still possible to edit the frontend identifier of apps.
Simplifier Client Modules are not listed in the app list of the Simplifier Client.
HTML-Ids Prefixed HTML elements in modules are always prefixed with the module name to avoid conflicts with elements of the same name in apps.

 

Take a look at how to use modules in the Process Designer.

Interfaces

Interfaces are used for communication between the application and the modules to exchange data bidirectionally.

When creating a new interface via the plus button on the top right, the following pop-up appears:

An interface of a module is defined by its unique name and a set of parameters, where Input Parameters are passed from the application to a module and Output Parameters are sent from a module to an application.

Use Interfaces in Process Designer

The Process Designer of the modules is similar to the Process Designer of the applications. However, among the activities, there is an explicit point for modules: App Interface.

Receive from App This shape starts an action when the application is calling the module via an interface. Double click on it or open the selection helper on the right side to configure the shape by selecting an interface of the current module and the mapping of parameters, that are received from the app.
Send to App This shape is used to return parameter data and/or trigger an action in the controlling app. Double click on it or open the selection helper on the right side to configure the shape by selecting an interface of the current module and the mapping of parameters to send it to the application.

You also have the option to switch between these two activities.

Use Modules

To integrate a module into an app, a sap.ui.core.ComponentContainer must first be defined in the UI Designer.

In the Process Designer, you can configure your process with the activity “Module”, that includes Setup Module, Receive from Module and Send to Module.

Setup Module

The shape Setup Module has two different types, “Load” and “Unload”. You can change the type within the settings panel on the right. By changing the type, the shape and the settings are changed. The default type of Setup Module is “Load”.

Load Module
This shape has one input port and two output ports (Success and Error). Its setting options are the selection of a module and the selection of a container element.
Unload Module

This shape has one input port and two output ports (Success and Error). By selecting a Module, it will be unloaded in the process.

Receive from Module

This shape has only one output port. In the settings panel on the right you can select the Module, the Interface and set the mapping of the selected interface. Only output parameters of the interface can be mapped for the subscription.

 

Send to Module

This shape is the counterpart to “Receive from Module”. It has only one input port. In the settings panel on the right you can select the Module, the Interface and set the mapping of the selected interface. Only input parameters of the interface can be mapped.

OData V2 Connector Calls

Once you have created the connector, you are navigated directly to the overview of connector calls. You can either create them yourself using the “+” or simply use the Connector Wizard.

 

First Step – Select Entity Sets:

In the first step, select the required entity sets. The table on the left shows all possible entity sets. Select the required entity sets and move them to the right table using the arrow keys in the middle.

Second Step – Select Operations:

In the second step, select the operations for that connector calls should be created. The left table shows all possible operations for the previously selected entity sets. Select the required ones and move them to the right table using the arrow keys in the middle. Operations that already have a connector call are printed bold.

Third Step – Configure Connector Calls:

In the third step, you can edit the name and description of the connector calls. Create the connector calls by clicking on “Create Connector Calls”.

 

You can read about how to use and address the connector in an application here.

Proxy Connector

The Proxy Connector allows the usage of any HTTP services that are not based on specific protocol architectures such as REST, SOAP or OData.

Create a new connector and select Proxy as a connector type. Within the specific data on the right, define the endpoint. Optionally, you can also define request headers to pass through and response headers to pass through.

Take a look at how to create and manage connector calls.

Extended Functionality

MomentJS

To Parse, validate, manipulate, and display dates and times we integrate MomentJS

For more help, visit the official documentation

NumeralJS

It is possible to make use of the NumeralJS library in server-side business objects.

The library can be found here.

CryptoJS

The full CryptoJS library can be used in server-side business objects of Simplifier.

AES

The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated.

File Type Usage Example
aes.js Cipher Data CryptoJS.AES.encrypt(“Message”, “Secret Passphrase”)
CryptoJS.AES.decrypt(encrypted, “Secret Passphrase”)
HMAC

Keyed-hash message authentication codes (HMAC) is a mechanism for message authentication using cryptographic hash functions.

HMAC can be used in combination with any iterated cryptographic hash function.

File Type Usage Example
hmac-md5.js Hash Messages CryptoJS.HmacMD5(“Message”, “Secret Passphrase”)
hmac-ripemd160.js CryptoJS.HmacRIPEMD160(“Message”, “Secret Passphrase”)
hmac-sha1.js CryptoJS.HmacSHA1(“Message”, “Secret Passphrase”)
hmac-sha3.js CryptoJS.HmacSHA3(“Message”, “Secret Passphrase”)
hmac-sha224.js CryptoJS.HmacSHA224(“Message”, “Secret Passphrase”)
hmac-sha256.js CryptoJS.HmacSHA256(“Message”, “Secret Passphrase”)
hmac-sha384.js CryptoJS.HmacSHA384(“Message”, “Secret Passphrase”)
hmac-sha512.js CryptoJS.HmacSHA512(“Message”, “Secret Passphrase”)
MD5

MD5 is a widely used hash function. It’s been used in a variety of security applications and is also commonly used to check the integrity of files. Though, MD5 is not collision resistant, and it isn’t suitable for applications like SSL certificates or digital signatures that rely on this property.

File Type Usage Example
md5.js Hash Integrity checks CryptoJS.MD5(“Message”)
PBKDF2

PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can’t be used directly as a cryptographic key, some processing is required.

A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack.

File Type Usage Example
pbkdf2.js Hash Passwords

var salt = CryptoJS.lib.WordArray.random(128/ 8)

CryptoJS.PBKDF2(“Secret Passphrase”, salt, {keySize: 512 / 32})

Rabbit

Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2-year process where 22 designs were evaluated.

File Type Usage Example
rabbit.js Cipher Streams CryptoJS.Rabbit.encrypt(“Message”, “Secret Passphrase”);
CryptoJS.Rabbit.decrypt(encrypted, “Secret Passphrase”)
rabbit-legacy.js CryptoJS.RabbitLegacy.encrypt(“Message”, “Secret Passphrase”)
CryptoJS.RabbitLegacy.decrypt(encryptedLeg, “Secret Passphrase”)
RC4

RC4 is a widely-used stream cipher. It’s used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm’s history doesn’t inspire confidence in its security.

File Type Usage Example
rc4.js Cipher Streams CryptoJS.RC4.encrypt(“Message”, “Secret Passphrase”)
CryptoJS.RC4.decrypt(encrypted, “Secret Passphrase”)
RC4Drop

It was discovered that the first few bytes of keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop.

By default, 192 words (768 bytes) are dropped, but you can configure the algorithm to drop any number of words.

File Type Usage Example
rc4.js Cipher Streams CryptoJS.RC4Drop.encrypt(“Message”,”Secret Passphrase”)
CryptoJS.RC4Drop.decrypt(encrypted, “Secret Passphrase”, {drop: 3072 / 4})
RIPEMD-160

Strengthend version of the now insecure RIPEMD hash function.

File Type Usage Example
ripemd160.js Hash Cryptocurrencies CryptoJS.RIPEMD160(“Message”)
SHA-1

The SHA hash functions were designed by the National Security Agency (NSA). SHA-1 is the most established of the existing SHA hash functions, and it’s used in a variety of security applications and protocols. Though, SHA-1’s collision resistance has been weakening as new attacks are discovered or improved.

File Type Usage Example
sha1.js Hash Integrity checks CryptoJS.SHA1(“Message”)
SHA-2
File Description Type Usage Example
sha256.js SHA-256 is one of the four variants in the SHA-2 set. It isn’t as widely used as SHA-1, though it appears to provide much better security. Hash Integrity checks CryptoJS.SHA256(“Message”)
sha512.js SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32. CryptoJS.SHA512(“Message”)
sha224.js CryptoJS also supports SHA-224 and SHA-384, which are largely identical but truncated versions of SHA-256 and SHA-512 respectively. CryptoJS.SHA224(“Message”)
sha384.js CryptoJS.SHA384(“Message”)
SHA-3

SHA-3 is the winner of a five-year competition to select a new cryptographic hash algorithm where 64 competing designs were evaluated.

NOTE: I made a mistake when I named this implementation SHA-3. It should be named Keccak

 

. Each of the SHA-3 functions is based on an instance of the Keccak algorithm, which NIST selected as the winner of the SHA-3 competition, but those SHA-3 functions won’t produce hashes identical to Keccak.

File Type Usage Example
sha3.js Hash Integrity checks CryptoJS.SHA3(“Message”)
DES

DES is a previously dominant algorithm for encryption and was published as an official Federal Information Processing Standard (FIPS). DES is now considered to be insecure due to the small key size.

File Type Usage Example
tripledes.js Cipher Data CryptoJS.DES.encrypt(“Message”, “Secret Passphrase”)
CryptoJS.DES.decrypt(encrypted, “Secret Passphrase”)
Triple DES

Triple DES applies DES three times to each block to increase the key size. The algorithm is believed to be secure in this form.

File Type Usage Example
tripledes.js Cipher Data CryptoJS.TripleDES.encrypt(“Message”,”Secret Passphrase”)
CryptoJS.TripleDES.decrypt(encrypted,”Secret Passphrase”)

Lodash

We integrate Lodash for manipulating, search or build complex javascript objects.

For more information, read the documentation

User Details Mapping

Username Attribute or path which points to the entry of the user profile containing the first name, e.g. ‘id’, ‘user.userName’, etc
First Name Attribute or path which points to the entry of the user profile containing the first name, e.g. ‘givenName’, ‘person.firstName’, etc
Last Name Attribute or path which points to the entry of the user profile containing the last name, e.g. ‘surName’, ‘person.lastName’, etc
E-Mail Address Attributes or path which points to the entry of the user profile containing the email address, e.g. ‘mail’, ’emails.0.value’, etc
Mobile Phone Number Attribute or path which points to the entry of the user profile containing the mobile phone number, e.g. ‘phone’, ‘phones.mobile’, etc
Salutation Attribute or path which points to the entry of the user profile containing the salutation, e.g. ‘salutation’, ‘user.salutation’, etc

 

User Attributes Synchronization

To map attributes from external authentication systems, activate the toggle Activate External Attribute Synchronization.

It is possible to control which attribute of the external user profile should be assigned to the Simplifier user.

User Attribute Describes the key under which the external attribute is assigned to the Simplifier user.
Profile Attribute Describes the value which should be taken from the external user profile

If the external user profile does not possess an entry for the provided attribute, then no attribute will be assigned to the Simplifier user. Already existing attributes under names, which are not defined in the table are not affected.

User Roles Synchronization

The specified roles are assigned if external role synchronization is deactivated (default roles).
If no roles are specified, the role iTZ_Ext_Auth_User is assigned.

If external role synchronization is activated, the default roles are only assigned if no mapping criteria could be applied (fallback roles).

It is possible to define a ruleset to add roles for external Simplifier users. The rules work with the profile attributes returned by the external authentication mechanism.

By defining one or more rules for a Simplifier user role in combination with a profile attribute, the desired value and the desired rule, at least one rule that matches is assigned to the user.

 

There are 14 condition rules to choose from:

 

Symbol Name Description
Profile Attribute exists The profile attribute for the provided name was returned by the external authentication system
Profile Attribute does not exist The profile attribute for the provided name was not returned by the external authentication system
= Equals The profile attribute value for the provided name equals the provided value to check against
Not equal The profile attribute value for the provided name does not the provided value to check against
> Greater The profile attribute value for the provided name is greater than the provided value to check against
Greater or equal The profile attribute value for the provided name is greater or equal than the provided value to check against
< Lower The profile attribute value for the provided name is lower than the provided value to check against
Lower or equal The profile attribute value for the provided name is lower or equal than the provided value to check against
Contains

The profile attribute value for the provided name contains than the provided value to check against

Contains does not mean, Equal! Equality will not match.

Does not contain

The profile attribute value for the provided name contains than the provided value to check against

Contains does not mean, Equal! Equality will not match.

⊃ Key Key exists The profile attribute value for the provided name is an object/array and has the provided value as key
⊅ Key Key does not exist The profile attribute value for the provided name is an object/array and does not have the provided value as key
⊃ Value Value exists The profile attribute value for the provided name is an object/array and has the provided value as value
⊅ Value Value does not exist The profile attribute value for the provided name is an object/array and does not have the provided value as value

Test Authentication

The settings for the mechanism can be tested within the configuration. Since the test procedure includes several steps, it is necessary to save the settings first.

The assignment of an access token can be tested by pressing the Test authentication button.

SAP RFC Connector Call Configuration

Each call can have its own configuration. With this, the behavior relayed input and output can be configured. Values can depend on the operation, therefore this page is an overview page. Each configuration parameter has to be provided with the keyword configuration. Meaning configuration parameter X  should be configuration/X. When using batch calls you have to provide the configuration parameters for each entry [0]/configuration/X for the first entry or [2]/configuration/X for the third entry.  If a parameter requires a special path it will be mentioned, it has to be applied before the parameter and after the configuration key.

Configuration Parameters
Parameter Path Datatype Possible Values Default
clearCache Boolean true/false false
operationType operation String EXECUTE, GET EXECUTE
operationTarget operation String Array Depends on operation ALL
returnInformation operation String Array Depends on operation OUTPUT
additionalReturnInformation operation String Array IMPORT, CHANGING, TABLE,  EXPORT, EXCEPTION Automatically decided by the provided parameters
useBase64 output Boolean true/false true
soapCompatibility output Boolean true/false true
useDefaultValues output Boolean true/false false
codePage overridingDefaults String Depending on SAP System Value in the respective Connector settings
language overridingDefaults String Depending on SAP System Value in the respective Connector settings
pcs overridingDefaults String 1, 2 Value in the respective Connector settings
autocommit autocommit Boolean true/false false

 

Configuration Parameters
Parameter Complete Key Description
clearCache configuration/clearCache Flag whether the metadata repository cache will be cleared before executing the function module
operationType configuration/operation/operationType The operation which will be executed
operationTarget configuration/operation/operationTarget The parameters which should be filled before execution. If this parameter is provided and no value is provided, then no values will be used
returnInformation configuration/operation/returnInformation Depends on the operation, changes the output
additionalReturnInformation configuration/operation/additionalReturnInformation Depends on the operation, changes the output more specific
useBase64 configuration/output/useBase64 Changes the output format of binaries (Array[Byte] or Base64 String)
soapCompatibility configuration/output/soapCompatibility Changes the output format of tables (item-pseudo object to keep compatibility with the SAP SOAP-Format)
useDefaultValues configuration/output/useDefaultValues Changes the output format of field values which have a default value neither in the function module nor in the data type definition itself
codePage configuration/overridingDefaults/codePage Overrides the used codepage for the destination associated with the call
language configuration/overridingDefaults/language Overrides the language for the destination associated with the call
pcs configuration/overridingDefaults/pcs Overrides the PCS value for the destination associated with the call
autocommit configuration/autocommit Do an auto commit after rfc transaction

 

Basic Protection of Internet Access

To ensure the security of the Simplifier instance, you should get familiar with the paths in the table below.

These paths, with the exception of /UserInterface/, should be accessible to the application user.

Location / Path Description
“^/genToken/$” The Simplifier Authentification Service based on Tokens
“^/assets/(.*)$” The static assets like images, pdf files, etc for an Application
“^/client/(.*)$” The Client REST API to access business objects, connector or plugins
“^/library-managed/(.*)$” Third-Party Javascript Libraries that need for the HTML5 Applications
“^/library-static/(.*)$” Third-Party Javascript Libraries that need for the HTML5 Applications
“^/appDirect/(.*)$” Hosting Path for the created HTML5 Applications
“^/UserInterface/(.*)$” Admin Backend Interface Application

should only be accessible in a secure environment, internal network
“^/authentication/(.*)$” External Authentication Provider for e.g. oAuth
 “^/passwordExpired/(.*)$” Password Reset Page for Admin Interface
“^/marketplace/(.*)$” Simplifier Marketplace
“^/develop/(.*)$” Plugin Interface

In various cases, it is necessary to differentiate between internal and public applications.

The structure of the URL for an application consists of the following:

https://FQDN/appDirect/ApplicationName/index.html

 

Examples

As an example, an internal employee administration application – it should not be available to the public.

https://tutorial.simplifier.io/appDirect/EmployeeAdministration/index.html

As a further example, a customer registration portal should be available to the public.

https://tutorial.simplifier.io/appDirect/CustomerRegistrationPortal/index.html

Using the examples above, you can allow or block the paths to the applications for the public in your firewall, web application firewall, load balancer or reverse proxy settings.

Remote Transport

Before creating a remote transport, you have to define the server environment.

In the overview, select the entry of the transport that you want to transport.

By clicking on Transport on the right, a pop-up opens.

Select the Target Instance and the Strategy (Overwrite or Don’t Overwrite).  Authenticate with your username and password of the target instance.

Click on OK and wait a moment until the transport is finished.

After the remote transport is finished, you see an overview of all imported artefacts and possible failed imports.

On the right you see a transport history.
You can view the transport protocol for every transport, e.g.

Standard Widgets

Here you find a selection of our standard widgets. Please take a look at the OpenUI5 Documentation if the widget you are looking for is not listed here.

Action

Button The user triggers an action by clicking or tapping the Button or by pressing certain keyboard keys, such as Enter.

Container

Bar The Bar control consists of three areas to hold its content. It has the capability to center content, such as a title, while having other controls on the left and right side.
IconTabFilter Represents a selectable item inside an IconTabBar.
Panel The panel is a container that has a header and content for grouping and displaying information. It can be collapsed to save space on the screen.
Toolbar Horizontal containers most commonly used to display buttons, labels, selects and various other input controls.
ToolbarSpacer Adds horizontal space between the items used within a sap.m.Toolbar.

Display

Image A wrapper around the IMG tag. The image can be loaded from a remote or local server.
Density related image will be loaded if image with density awareness name in format [imageName]@[densityValue].[extension] is provided. The valid desity values are 1, 1.5, 2. If the original devicePixelRatio isn’t one of the three valid numbers, it’s rounded up to the nearest one.
There are various size setting options available, and the images can be combined with actions.
Label Provides a textual label for other controls. Labels are used as titles for single controls or groups of controls. Labels for required fields are marked with an asterisk.
Label appearance can be influenced by properties, such as textAlign, design, displayOnly, wrapping and wrappingType.
Text The Text control can be used for embedding longer text paragraphs, that need text wrapping, into your app. If the configured text value contains HTML code or script tags, those will be escaped.
Title The Title control is a simple, large-sized text containing additional semantic information for accessibility purposes.

Layout

FlexBox The sap.m.FlexBox control builds the container for a flexible box layout.
Note: Be sure to check the renderType setting to avoid issues due to browser inconsistencies.
ui_layout_form_SimpleForm The SimpleForm control provides an easy-to-use API to create simple forms. Inside a SimpleForm control, a Form control is created along with its FormContainer elements and FormElement elements, but the complexity in the API is not exposed to the user.
ui_layout_Grid A layout control which positions its child controls in a 12 column flow layout.
The Grid control’s children can be specified to take on a variable amount of columns depending on available screen size. With this control, it is possible to achieve flexible layouts and line-breaks for extra large-, large-, medium- and small-sized screens, such as large desktop, desktop, tablet, and mobile.
The Grid control’s width can be percentage- or pixel-based and the spacing between its columns can be set to various predefined values.
ui_layout_GridData Defines layout data for the sap.ui.layout.Grid.
Note: When GridData is used for controls inside a form, the linebreak property has to be set to true if the next form element has to be displayed on a new line. Otherwise, the GridData overrides the layout provided by the Form.

List

Column The sap.m.Column allows defining column specific properties that will be applied when rendering the sap.m.Table.
ColumnListItem sap.m.ColumnListItem can be used with the cells aggregation to create rows for the sap.m.Table control. The columns aggregation of the sap.m.Table should match with the cells aggregation.
Note: This control should only be used within the sap.m.Table control. The inherited counter property of sap.m.ListItemBase is not supported.
List The List control provides a container for all types of list items. For mobile devices, the recommended limit of list items is 100 to assure proper performance. To improve the initial rendering of large lists, use the “growing” feature. Please refer to the SAPUI5 Developer Guide for more information.
Table sap.m.Table control provides a set of sophisticated and convenience functions for responsive table design. To render the sap.m.Table properly, the order of the columns aggregation should match with the order of the items cells aggregation (sap.m.ColumnListItem). Also sap.m.Table requires at least one visible sap.m.Column in columns aggregation. For mobile devices, the recommended limit of table rows is 100 (based on 4 columns) to assure proper performance. To improve initial rendering on large tables, use the growing feature.
ui_core_Item A control base type.

Popup

Dialog A popup that interrupts the current processing and prompts the user for an action or an input in a modal mode.

User Input

CheckBox The CheckBox control consists of a box and a label that describes its purpose. If it’s checked, an indicator is displayed inside the box.
To select/deselect the CheckBox, the user has to click or tap the square box or its label. Clicking or tapping toggles the CheckBox between checked and unchecked states. The CheckBox control only has 3 states – checked, unchecked and partially selected.
ComboBox The control represents a drop-down menu with a list of the available options and a text input field to narrow down the options.
Input Allows the user to enter and edit text or numeric values in one line.
Select The sap.m.Select control provides a list of items that allows users to select an item.
TextArea The text area is used to enter multiple lines of text. When empty, it can hold a placeholder similar to an input. You can define the height and width of the text area and also determine specific behavior when handling long texts.

 

Implementation of Web Application Firewalls

As an example, a policy configuration of the OTC WAF for the use of the customer marketplace application “KUN” based on Simplifier

Rule Name Description
Block_userInterface Blocks the user interface for external access
Allow_KUN Allows dedicated access to the customer marketplace application
Allow_Simplifier Allows basic functions
Block_AllOtherApps Blocks all non-dedicated released applications

Activation of Basic Web Protection is recommended

Operation Best Practice – Public Access

Example as an intuitive graphic of the network structure for public access to Simplifier

Network – High Secure Modell

The used structure is a redundant data storage in two data centers. The Web Application Firewall, as well as the database and block storage, are operated redundantly in both data centers. If the active data center fails, the passive instance is made completely automatically operational and is now activated by the load balancer.

Authentication for Web Applications

When authenticating for web applications, you should differentiate between internal and external employees.

Internal employees should only authenticate via single sign-on and internal IDP.

For external employees, you should define password policies and set up a logon configuration.

Access Control for Web Applications

Access control is very important because it prevents unauthorized persons from having access.

Use the standard roles for access control

SF_Administrator This is a role for all AdminUI permissions
SF_AppBuilder This role provides the permissions for App creation
SF_AppUser This role provides the permission to execute Apps
SF_Developer This role provides the permissions to create Apps and building blocks such as Business Objects, Connectors, etc.
SF_ExtAuthUser This is a role for read-only users that are synced from an external authentication-service

In general, you should only assign permissions with the Characteristic Execute to end-users.

Never assign the Permission Roles with the Characteristic Assign to external users!

Never select this checkbox for external or non-administrative users!

 

Monitor role changes in the system centrally

All changes are written to the system log. This enables you to monitor role changes centrally, as well as role and permission assignments.

Secure Session Management

To ensure a secure session management, you should configure the session parameters as required.

If you set the authentication token to active, the checking interval to e.g. 10 seconds and the maximum lifetime of the authentication token to 3600 seconds, that means that every 10 seconds it will be checked if you are inactive. If you are inactive for about 3600 seconds, you will be automatically logged out.

Controlled Integration of Data and Content into Web Applications

Recommendation: In general, uploads to Simplifier should be checked by a Web Application Firewall (WAF) virus scanner or by connecting an external virus scanner via ICAP interface in the configuration of the reverse proxy.

If a virus is found, the WAF or ICAP connected virus scanner should respond with an HTTP header status code to 409 (Conflict).

The body of the response (JSON format) should look like this:

{
  success: false,
  msg: "A virus was found in the file. The file cannot be uploaded."
}

 

The widget “FileUploader” is configured to process a status code 409 as a virus discovery.

Logging of security-relevant Events of Web Applications

You can centrally monitor Simplifier for security-relevant events.

 

Protection against Unauthorized Automated Usage of Web Applications

To protect the web application from unauthorized automated usage, you should:

Protection against SQL Injection

In order to protect against SQL injections, you should only use parameterized SQL connectors with active validation.


Database Setup

In the following article, you find a description of how to set up an external database for the Simplifier Core platform.

1. Switch to configuration persistence path, e.g. /opt/simplifier/data/conf/

2. Create new include.conf file with the following format:

database {

  dbms: "oracle"

  user: ""

  pass: ""

  host: ""

  port: 1521

  database: ""

  table_prefix: ""

}

 

Database Credentials

dbms mysql or oracle
user Username of the database
pass Password of the database user
host IP address of the database server
port Port of the database server
database Name of the database / database scheme
table_prefix Prefix of the table

 

Widget Categories

In the tab Widget Categories, you get an overview of all categories. These are the categories including the widgets, that are displayed in the UI Designer.

On the right side, you can create a new category, delete a category and take a look at the description or which widgets are assigned to the category.

Click on the + on the right side to create a new category.

The category needs to be assigned on the widget itself, not in the overview of the widgets.

Mobile Real-Time Preview

Use the Mobile Real-Time Preview to see the changes in UI Designer directly on several mobile devices simultaneously.

Click on the Show on Mobile Device button

and scan the QR code with the mobile client on your mobile device.

For this you need to activate the developer mode in the Mobile Client.

The mobile device is not only able to display the current screen preview, but even shows all changes made during editing. If you switch to another screen, the mobile device follows accordingly.

If you leave the editor, the live preview on the mobile device is also closed.

Database Designer

Introduction

With the Database Designer, it is possible to easily define database schemas and deploy them to a database endpoint via Connectors. Deployed database schemas can be used as a backend for the Simplifier applications.

This documentation covers the whole functionality of the Database Designer.

Schema Overview

The Database Designer can be reached via the tile “Database Designer“. The main screen of the Database designer contains a list of all currently existing database schemas. The user has the option to create a new database schema via the “plus”-icon in the top-right corner. It is also possible to select an existing database schema and view, edit or even delete it.

Schema Details

Schema-Details-View

When you decide to create a new schema or view/edit an existing schema, you get to the Schema-Details view. Here you can see all the important information about the schema.

On the left side, there is an Entity-Relation Diagram (ER-Diagram) representing the schema. Each database table in the schema is represented as a box. In the box, you can see the name of the database table and a list of all columns of the table. If the database table has a foreign key to another table, it is displayed as an arrow pointing to the target table. When creating or editing a database schema, you can add a new entity to the diagram by hitting the “Add Entity” button in the top right corner of the ER-Diagram.

In the ER-Diagram, you can select a table to see or edit its properties like name or description. These are displayed on the right side of the screen in the “Properties“-section. You can also select a foreign key to view its properties. These can however only be changed in the Table-Details-View (see below). If no table or foreign key is selected, you can see the general properties of the database schema.

Properties can only be edited if the table or foreign key is not deployed to a data source.

When a database table is selected, you can edit the columns, indexes and foreign keys of that table by clicking on the “Edit table details“-button in the Properties section. This will take you to the Table-Details-View.

Table-Details-View

The Table-Details-View consists of three sub-views: Columns, Indexes, and Foreign Keys.

Columns

In this view, you can add new columns to the database table or edit the properties of existing columns. It is also possible to remove a column from the table.

The following properties can be edited for a column:

Name The name of the column (cannot be edited if the column is already deployed to a data source).
Description A description for the column.
Type The datatype of the Column (e.g. String, Integer, …).
Character limit With a checkbox whether or not the column should be limited. Only String-Type columns can have a character limit.
Default Value With a checkbox whether or not a default value should be used.
NotNull Indicating if the column is able to store null values or not.
Auto-Increment Whether or not the column should have automatically incrementing values. It is only possible to have one Auto-Increment column per table and it has to be an Integer-Type column.

Indexes

In this view, you can add new indexes to the database table or edit the properties of existing indexes. It is also possible to remove an index from the table.

The following properties can be edited for an index:

Name A unique name for the Index.
Description A description for the index.
Type The type for the index (Index, Primary Key, Unique).
Columns The columns to which the index should be mapped. This input provides an auto-complete for the existing column names in the table.

Foreign Keys

In this view, you can add new foreign keys to the database table or edit the properties of existing foreign keys. It is also possible to remove a foreign key from the table.

The following properties can be edited for a foreign key:

Name A unique name for the foreign key.
Description A description of the foreign key.
Target table The target table for the foreign key. The dropdown contains the names of existing tables of the schema.
Target columns The Column mapping to the target table. When a target table is selected, you can see a list of all primary key columns of the target table. You can then choose a column of the current table that should be mapped for each of these primary key columns. You can only choose columns that match the datatype of the target column (e.g. if the target column is an Integer-Type column, only the Integer-Type columns of the current table are listed as possible mapping columns).
On Update The “ON UPDATE” property of the foreign key. Can be set to “RESTRICT”, “CASCADE”, “SET_NULL”, or “SET_DEFAULT”. The default value is “RESTRICTED”, which is also the default value for most databases.
On Delete The “ON DELETE” property of the foreign key. Can be set to “RESTRICT”, “CASCADE”, “SET_NULL”, or “SET_DEFAULT”. The default value is “RESTRICTED”, which is also the default value for most databases.

Deploy Schema to Datasource

You can deploy a schema to a data source by clicking the “Deploy schema to data source“-Button in the top right corner of the SchemaDetails-View. This will open the schema deployment dialog. You can deploy a schema to any SQL Connector that is defined in the system. Deployment is currently only supported for MySQL, SQLite, MSSQL, and Oracle Databases.

In the schema deployment dialog, you can choose a target SQL connector. After choosing a SQL connector you can start the deployment to the data source. Additionally, there are two flags that can change the mode of deployment:

Safe Mode The safe mode flag only impacts the deployment when you are re-deploying a schema that was already deployed and edited afterward. In this case, the deployment will not start if any ALTER or DELETE operations would be performed on the deployed schema to ensure that no data is lost in the database.
Dry Run With the Dry Run flag set, the system will only run a simulation of the deployment instead of the deployment itself.

Deployment Log

The Deployment Log stores information about all past schema deployments. It can be accessed from the Schema Overview by switching to the “Deploy Log”-Tab. Here you find a list of all deployments with the name of the deployed schema, the target SQL connector, the user who executed the deployment, the date and time when the deployment was started and whether the deployment was successful.

For each Deployment, you can open a view containing further details.
The details contain parameters of the deployment like which schema was deployed to which connector and other metadata. The statements executed during the deployment are shown in the Statements tab. For debugging purposes the deployed schema, the state of the database before and after the deployment are displayed in the Schema, Before and Afterwards tabs. A Zip-Archive containing all these detail information can be downloaded both from the Deploy log overview and the details view by clicking on the “Download as Zip“-Button.

Login Methods

Login Methods are credentials which will be used by connectors to authenticate each connection. They can be either static like Username/Password credentials or dynamic like an OAuth2 Token, which requires a previous login.

Standardized Login Method Types in Simplifier

Login Method Type
Description
Username or Alias Only a username is used as theredential.
Username or Password A username and password combination is used as the credential.
SAP Logon Ticket An SAP Logon Ticket is used as the credential.
Token A generic token is used as the credential.
OAuth 2.0 A OAuth 2.0 token is used as the credential.
SAML 2.0 A SAML 2.0 assertion token is used as the credential.
Certificate A certificate is used as the credential.

 

Simplifier Conferencing Server

Checklist Conferencing – Installation and Configuration

1. Download the Docker Image from Docker Repository

docker pull simplifierag/conferencing:latest

2. Execute the Run Command

Don’t forget to change the parameters to match your environment.

docker run -d -p 40000-40250:40000-40250/udp -p 8082:8082 -p 8092:8092 --network simpleNetwork -v c:/opt/intelmcu/data:/opt/mcu_server/data -h conferencing --name conferencing conferencing
Ports Description
40000-40250:40000-40250/udp video and audio stream ports
8082:8082 socket.io for signaling
8092:8092 WebSocket for call negotiation and chat function

3. Change the Settings of Config Files

network_interfaces = [{name = "...", replaced_ip_address = "..."}] #default: []
maxport = 40250 #default: 0 

minport = 40000 #default: 0

#Note: Two ports per user (for audio/video streams)
Sample settings.json
{
  "registration": [{
    "host": "simplifier-dcmr",
    "port": 8085,
    "simplifierInstance": "simplifier-dcmr",
    "secret": "Generate a Secret under Plugins -> Plugin Secrets"
  }],
  "http": {
    "interface": "0.0.0.0",
    "port": 9877,
    "exposedHost": "conferencing"
  },
  "timeoutSeconds": 60,
  "mcu": {
        "clearRoomsIntervalMinutes": 0
  },
  "websocket": {
        "port": 8092
  }
}

4. Add your SSL Certificate

To use HTTPS and/or secure socket.io connection, you should use your own certificate for each server. MCU works with PFX formatted certificates. Add your SSL certificates to …/data/certs.

You can also add .crt and .key files to this directory – the .pfx file is generated during initialization of the Docker.

5. Change the settings.conf in Simplifier Docker

plugins {
  akka {
    enabled: true
    interface: "127.0.0.1"
    port: 5432
    exposed_host: "127.0.0.1"
    actor_system: "AppServerPluginReceiver"
  }
  http {
    enabled: true
    interface: "0.0.0.0"    <- Change to "0.0.0.0"
    port: 8085
  }

6. Restart the Docker Container

If the config files have been updated, the Conferencing Docker can be restarted to apply all changes:

docker restart conferencing

Finally, the Conferencing Docker registers to Simplifier and installs the conferencing plugin. If the installation is complete, you can check the results by navigating to the Simplifier plugin section (web browser) and test the conferencing plugin.

AAC Codec and FFmpeg

If you want to use the audio codec aac for external stream output or mp4 format recording, you have to compile and deploy libfdk_aac manually.

Without aac you can’t create .mp4 files, only MKV is available.

Invite Developer

In addition to the Collaboration, with which you work together on an application, you can also invite another developer to a particular application, who does not yet have an account on your instance.

Click on Share in the tab Other.

Enter the email address of the developer and confirm. A user will be automatically created and will be active for 30 days to work on your current application project.

Username or -alias

General Information | Sources | Targets | Configuration

General Information

The Login Method type Username or -alias consists of a username or alias.
It can be accessed through 5 sources and has currently 1 possible targets. This Login Method type does not feature any configuration.
Possible Sources
Shortname Longname Description Requires configuration
Default Default Source The default source for this Login Method Type (Provided) Yes
System Reference Source referenced by the System The currently logged in user No
Profile Reference User Profile Reference An attribute in the user profile. Yes
User Attribute Reference User Attribute Reference An attribute in the User attributes of the currently logged in user. Yes
Provided Provided Source A statically provided username or -alias Yes
Possible Targets
Shortname Longname Description
Default Default Target The default target for this Login Method Type (System will determine the target)

Sources

Sources define the kind how the value of this Login Method is obtained.

 

Default Source / Provided Source:

Parameter Datatype Description Mandatory
username String The username or alias Yes
Source referenced by the System:
The system reference uses the login name of the currently logged-in user. If an Anonymous User logs in and this Login Method will be used, then an exception will occur.
User Profile Reference:
An attribute in the currently logged-in user’s profile which is referenced by the provided key will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The key to the attribute for the currently logged in user. Yes
User Attribute Reference:
An attribute in the currently logged-in user’s user attributes which is referenced by the provided name and category will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The name of the referenced attribute in the user attributes. Yes
User Attribute Category
String The category of the referenced attribute in the user attributes. Yes

Targets

Targets define how the Login Method should be used in connectors.

 

Default Target:

The Default Target let the Simplifier define how this Login Method should be used. For example in SQL, this Login Method will result in an user without a password.


Configure

This Login Method does not require specific configuration parameters.

Username/Password

General Information | Sources | Targets | Configuration

General Information

The Login Method type Username/Password consists of a username and an optional password.
It can be accessed through 4 sources and has currently 1 possible targets. This Login Method type does not feature any configuration.
Possible Sources
Shortname Longname Description Requires configuration
Default Default Source The default source for this Login Method Type (Provided) Yes
System Reference Source referenced by the System The currently logged in user No
Profile Reference User Profile Reference An attribute in the user profile. Yes
User Attribute Reference User Attribute Reference An attribute in the User attributes of the currently logged in user. Yes
Provided Provided Source A statically provided username and optional password. Yes
Possible Targets
Shortname Longname Description
Default Default Target The default target for this Login Method Type (System will determine the target)

Sources

Sources define the kind how the value of this Login Method is obtained.

 

Default Source / Provided Source:

Parameter Datatype Description Mandatory
Username String The username Yes
Password String The password for this user No
User Profile Reference:
An attribute in the currently logged-in user’s profile which is referenced by the provided key will be used as a login method. The attribute in the profile must be an object. This object must contain the username and optional password with the following keys (username, user) for the username and (password, pass) for the password.
Parameter Datatype Description Mandatory
String The key to the attribute for the currently logged in user. Yes
User Attribute Reference:
An attribute in the currently logged-in user’s user attributes which is referenced by the provided name and category will be used as a login method. The user attribute must be an object. This object must contain the username and optional password with the following keys (username, user) for the username and (password, pass) for the password.
Parameter Datatype Description Mandatory
String The name of the referenced attribute in the user attributes. Yes
User Attribute Category
String The category of the referenced attribute in the user attributes. Yes

Targets

Targets define how the Login Method should be used in connectors.

 

Default Target:

The Default Target let the Simplifier define how this Login Method should be used. For example in SQL, this Login Method will result in an user without a password.


Configure

This Login Method does not require specific configuration parameters.

SAP Logon Ticket

General Information | Sources | Targets | Configuration

General Information

The Login Method type SAP Logon Ticket consists of a specific valid SAP Logon Ticket.
This Method is formerly known as Single-Sign-On.
It can be accessed through 5 sources and has currently 1 possible targets. This Login Method type does not feature any configuration.
Possible Sources
Shortname Longname Description Requires configuration
Default Default Source The default source for this Login Method Type (System Reference) No
System Reference Source referenced by the System The SAP Logon Ticket of the currently logged in user No
Profile Reference User Profile Reference An attribute in the user profile. Yes
User Attribute Reference User Attribute Reference An attribute in the User attributes of the currently logged in user. Yes
Provided Provided Source A statically provided valid SAP Logon Ticket. Yes
Possible Targets
Shortname Longname Description
Default Default Target The default target for this Login Method Type (System will determine the target)

Sources

Sources define the kind how the value of this Login Method is obtained.

 

Default Source / Provided Source:

Parameter Datatype Description Mandatory
String The valid SAP Logon Ticket Yes
Source referenced by the System:
The system reference uses the the provided SAP Logon-Ticket of the currently logged in user. The user must have been authenticated through an SAP-SSO Client beforehand.
User Profile Reference:
An attribute in the currently logged-in user’s profile which is referenced by the provided key will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The key to the attribute for the currently logged in user. Yes
User Attribute Reference:
An attribute in the currently logged-in user’s user attributes which is referenced by the provided name and category will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The name of the referenced attribute in the user attributes. Yes
User Attribute Category
String The category of the referenced attribute in the user attributes. Yes

Targets

Targets define how the Login Method should be used in connectors.

 

Default Target:

The Default Target let the Simplifier define how this Login Method should be used. The SAP-RFC Connector will use the SAP Logon Ticket in its properties.


Configure

This Login Method does not require specific configuration parameters.

Plugin Secrets

Create your own keys in the plugin administration to register your own plugins securely.

For that, switch from the Overview to the Plugin Secrets.

Create a new secret via the plus and enter a name and description (optional)

…and then generate the secret.

Afterward, you can download the generated secret.

Plugin Secrets Overview

After you have created a Secret, it appears in the Plugin Secrets Overview.

All existing entries are displayed.
On the right side, you can delete it or generate a new secret if necessary.

Attention: If you generate a new secret, it must be changed in every plugin.

Besides that, the Total Registrations and Registrations per plugin are displayed on the right.

Token

General Information | Sources | Targets | Configuration

General Information

The Login Method type Token consists of a generic token.
It can be accessed through 5 sources and has currently 1 possible targets. This Login Method type does not feature any configuration.
Possible Sources
Shortname Longname Description Requires configuration
Default Default Source The default source for this Login Method Type (System Reference) No
System Reference Source referenced by the System The Simplifier Token of the currently logged in user No
Profile Reference User Profile Reference An attribute in the user profile. Yes
User Attribute Reference User Attribute Reference An attribute in the User attributes of the currently logged in user. Yes
Provided Provided Source A statically provided valid Token. Yes
Possible Targets
Shortname Longname Description
Default Default Target The default target for this Login Method Type (System will determine the target)
Header Header Parameter The token will be provided in a header.

Sources

Sources define the kind how the value of this Login Method is obtained.

 

Default Source / Provided Source:

Parameter Datatype Description Mandatory
String The valid Token Yes
Source referenced by the System:
The system reference uses the the provided Simplifier Token of the currently logged in user.
User Profile Reference:
An attribute in the currently logged-in user’s profile which is referenced by the provided key will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The key to the attribute for the currently logged in user. Yes
User Attribute Reference:
An attribute in the currently logged-in user’s user attributes which is referenced by the provided name and category will be used as a login method. The attribute in the profile must be a string.
Parameter Datatype Description Mandatory
String The name of the referenced attribute in the user attributes. Yes
User Attribute Category
String The category of the referenced attribute in the user attributes. Yes

Targets

Targets define how the Login Method should be used in connectors.

 

Default Target:

The Default Target let the Simplifier define how this Login Method should be used. It is the same as the header parameter

 

Header Parameter:

The Header Parameter will provide the Token in an Http-Header.

Parameter Datatype Description Mandatory
String The name of the (Http) Header Yes

Configure

This Login Method does not require specific configuration parameters.

Support

The Simplifier Support occurs as 3rd level support as standard. In general we’ll provide support if it is a clear technical malfunction in Simplifier or in an application (if a additional  support contract exists for this purpose).

The Simplifier Support will provide an error correction for the fastest possible restoration of the defined operating state.

A differentiation is made for support between freemium users and paying customers:

Paying Customer You get support with service hours. The SLA listed below apply. Paid License needed
Freemium User Use the forum for free to ask questions to the community. No SLA applies. Non-paid License

Service-Level-Agreement

The response times, as well as the versed solution times, are defined as follows depending on the priority of the support case:

Priority Level Description Availability Time until qualified feedback Planned solution time
1 Emergency A complete shutdown of the productive system, no more work can be done. No availability < 4 hours 24 hours
2 Critical A problem causes a failure of central functions, which leads to the disruption of productive daily business. Limited availability 12 hours 48 hours
3 Non-Critical Minor interruptions to normal business operations due to malfunctions. In addition, any error in a test- or consolidation system. Availability 24 hours 28 days
4 Minor Problems with non-critical functions that cause no or minor malfunctions. These can be caused by malfunctions or functions that are used irregularly or not in standard operation. Availability 48 hours 28 days

Below you see the process of the standard support.

Enabling

What is Enabling?

Enabling is a special consulting service by Simplifier AG – we are here to provide you with the right skills to work with Simplifier. Low Code and Simplifier can unlock tremendous potential through the combination of the right persons, methods and tools. When used in the right way this approach can drive your application creation capabilities and boost your digitization initiatives to a new level.

Our Mission:

We want to empower your app builders to become experts in building apps with Simplifier

The following topics are covered by our enabling team:

To get in touch with us, we offer the following services:

How to get Enabling?

Contact your Account Manager to request and order Enabling Packages via this form.

Please have a look at the following tutorial on how to use our Enabling Services:

1. Get Credentials to our Support System

If you don’t have user and login credentials, please fill out this form to get access.

2. Logon to our Support Ticket System

Go to Support Portal https://support.simplifier.io

Create a new Ticket with your Request

Choose Ticket-Type Enabling and add as URL your Simplifier Instance

Describe the matter and the way you want to solve the issue (ticket answer,  remote enabling, training on the job)

Send it to us and we will take care of your request.

Response Times for Enabling Tickets

For our monthly hour packages, we guarantee the following response times to provide you valuable support:

Package Response Time*
Bronze < 5 Workdays
Silver < 3 Workdays
Gold < 2 Workdays
Platin < 4 hours
*workday means Monday till Friday except weekend and public holidays in Germany.

Account Creation for Support Portal

Before creating a user, please ensure that you fulfill the requirements for support.

The following information is used to create a personalized user account. With this personalized access you can create tickets via this page:
https://support.simplifier.io

Please fill out this form to get access to the support portal.

Support Portal – Quick Guide

Get Credentials to our Support System

If you don’t have user and login credentials, please fill out this form to get access.

 

The Simplifier Support Portal can be accessed via the following link:

https://support.simplifier.io

Important for the first login:

To activate your access to this support portal, you must reset your password. The following video shows you how to do this:

 

Change the Profile

If you have logged in with your user name and password, click in the Overview on the icon below and then on Profile:

You now have the possibility to adjust the language and save it with Submit:

You can also change the avatar of your profile:

Select your desired image and click on Save.

 

Change the Initial Password

You can change the initial password by selecting Password. Enter your current password and your new password and confirm it. You can save your entry by clicking Submit.

Accounts such as Facebook or Twitter can be linked via Linked Accounts. This function is not provided in the Simplifier Support System for the moment.

 

Create Ticket

Click the “+” symbol to create a ticket:

Please enter the following information:

After you have filled in all fields, you can submit your ticket via Create.

 

Ticket Overview

Via My assigned Tickets you can view all tickets you have created including their state:

You can also view all tickets created by your company including their state.

Support Requirements

To ensure fast support, the following two prerequisites are mandatory.

  1. All necessary logs should be collected centrally and accessible to the Simplifier support team:
  1. The Simplifier Instance should be reachable by our Support Office via Site 2 Site VPN

UI5 Framework

What is the UI5 framework?

The UI5 framework is a JavaScript UI framework for building client-side, responsive and enterprise-ready Web applications. Enterprise-ready means that the Web applications are globalizedsecureaccessibletheme-able and backward-compatible.

The UI5 framework provides concepts such as components (referred to in other frameworks as applications and/or reuse composite components), Model-View-Controller pattern to structure the applicationrouting to manage navigation between views, integrated data binding and more.

In UI5, so-called controls (respectively UI elements; in Simplifier they are called Widgets) are used to assemble the user interface. A major benefit of UI5 is that they come with a wide variety of bread & butter, layout, and complex controls to build your application.

Today, OpenUI5 offers more than 300 and SAPUI5 adds more than 350 additional UI5 controls to OpenUI5.

Learn more about the difference between OpenUI5 and SAPUI5 here.

What is SAP Fiori?

SAP Fiori is the design language that defines the user experience of SAP enterprise applications.

The SAP Fiori design philosophy is based on five core principles. The SAP Fiori user experience is role-based, adaptive, simple, coherent, and delightful.

The UI5 framework is aligned with the SAP Fiori design guidelines so that Web applications created with UI5 deliver a consistent user experience.

Is UI5 self-contained or does it use open source?

UI5 uses open-source software. There are a number of open-source libraries that are included in the UI5 framework. The best-known example of using open-source is jQuery.

Many more open-source libraries are used, and a complete list of these libraries can be found in the OpenUI5 project’s LICENSE.txt.

What is a UI5 control?

UI5 control is a UI element that consists of its API:

the metadata (such as properties, aggregations, events), the behavior (the internal event handling), the renderer (the markup creation) and the CSS. In Simplifier the UI5 controls are called Widgets.

UI5 controls are the built-in offering of the UI5 framework for writing UI elements. A special feature is the out-of-the-box data binding support, which allows the controls to be easily bound to data from different models. 

 

Take a look at this blog post to learn more about UI5 Framework and UI5 Web Components.

Login with invalid SSL Certificates

Normally you should operate the simplifier server with a valid, certified SSL Certificate. In case of expired ssl certificates or self-signed certificates, the connection from mobile client to server can’t be established due security restrictions.

To login in such a situation, you can enable the developer mode with several clicks on the simplifier logo see video below:

from

Widgets

A widget represents a specific element in the user interface (e.g. checkbox, button or login screen, etc).

To customize a widget, click on the Applications tile in the Simplifier dashboard and choose the Widgets tab.

Within the overview, you can edit, take a look at the details, delete or copy a widget or take a look at the description, category, tags, and set it to deprecated or not.

Press the ‘+’ button on the right to add a new one.

Add a name and select the OpenUI5 version.

By clicking OK you will be forwarded to the Widget Customizer.  On the left side are three different tabs: General, Template and Script.

General

In the tab General, you find the general information like Name, Version, Category, and Description. You can add tags or set the widget to deprecated.

Deprecated widgets are no longer displayed in the UI Designer. Deprecated widgets that were used before they were marked as deprecated are still displayed within the application content. The application will continue to be saved and deployed without issues or warnings and runs as before.

Add an icon to the widget by uploading it. You can delete it at any time.

 

Template

Enter the widget type in the tab Template – take a look at the constructor details in its API reference. It must match the name of the UI5 control. Use the wizard to automatically extract the widget data.
Choose a framework – OpenUI5 or SapUI5
By clicking on Next, the template for the widget is generated as well as the properties, events, and aggregations.

Script

The script of the widget is generated automatically if you use the widget assistant.

After hitting the Save button, you’ve successfully created or edited a widget.