# Basic Settings

**Use the menu item *Basic Settings* to access all of JaniWeb’s general settings.**

<p class="callout warning">**Changes made here may affect the application itself or its interfaces. Please only make changes here that you have discussed with your contact person.**</p>

[![image.png](https://manual.drakos.de/uploads/images/gallery/2025-10/scaled-1680-/JCUimage.png)](https://manual.drakos.de/uploads/images/gallery/2025-10/JCUimage.png)

## Tab *Clients*

This is where you manage different clients in the system. Clients describe the origin of the data and are linked to the objects (e.g. persons, devices, device groups, etc.). The list contains the clients that have already been created. Select an entry to view details.

Press *New* to create a new client. Enter the required data and press *Save.*

### Detail area

- *ID:* Enter the 10-digit client ID.
- *Description:* Enter a meaningful name.
- *Visitor Client*: Select this option if the client is to be used for visitor management.
- *SAP Client:* This field is automatically filled when importing data from SAP.
- *BS\_DIR:* Specify the base directory of the application here.
- *Folder:* Specify the name of the SAP exchange directory here.
- *Control Management File Path:* In the field *Control Management File Path*, enter the directory in which parameter files for devices from the manufacturer Dormakaba are to be stored when they are created using control management. - this setting is applied only to devices for the connected client.
- *terminal.localfile:* Enter the directory for the trigger file that triggers the creation of the *terminal.ini* file.- this setting is applied only to devices for the connected client.
- *terminal.parameter:* Enter the directory in which parameter files for devices from the manufacturer Dormakaba are to be stored. - this setting is applied only to devices for the connected client.

## Tab *License*

Here you can see which license you are using.

### Tab *Configuration*

You can import a new license via the *License Key* field. Enter the new license key and press the *Update License* button.

The list displays the features that are currently licensed.

### Tab *Monitoring*

Any features whose use is restricted are displayed here together with their level of use.

If required, activate the option *Alert for license violation for all users* and enter a note.

### Tab *Pay Per Use*

Use the *Due Date* field to specify the day of the month on which the E-Mail for pay-per-use consumption should be generated. Consumption is always calculated for the previous month.

Enter the recipient's email address in the *E-Mail* field. You can delete this using the *trash can* button or add additional E-Mail addresses using the *+* button.

You can manually trigger the sending of the E-Mail using the *Send E-Mail* button. Then select the billing period for which you want to generate the email and confirm with the *Send E-Mail* button.

You can check the status of the last email sendings using the *Show Log* button.

## Tab *Password Rules*

Specify the strength of the passwords used. Enter the minimum *Password length* and select the desired options for the composition of passwords.

- *Failed attempts:* Specify here after how many failed login attempts the user is blocked.
- *Password expiration:* Specify here after how many days users are prompted to enter a new password. Enter the number 0 if passwords should be valid indefinitely.

## Tab *GDPR*

Specify the number of days after which expired records are automatically deleted. This is also possible for the server log files.

## Tab *SAP Settings*

Specify the number of days for which the backups of the SAP import files should be kept. You can also specify the file name for exported bookings.

- *PTEX …:* Use these fields to define the file name and the client for deleted bookings.
- *Enable API Gateway Data Import:* Activate this option to enable importing master data via the API gateway.
- *Enable API Gateway Data Export:* Activate this option to enable exporting master data via the API gateway.
- *Threshold person import (%)*: Use this field to set the threshold value for the import of persons. If the current import of persons falls below the threshold value (comparison with the number of persons from the last import), the import is rejected. You can use the *Import anyway* button to import a rejected import anyway. If the number of persons for import remains unchanged for 5 consecutive days, the persons will be imported on the 5th day.

### Tabs *General / Balance Data*

Use these tabs to map the fields of an imported SAP record to the fields in JaniWeb.

## Tab *Database*

Connection and other status information for the databases used is displayed here.

- Press *Show function status* to display a list of the functions used for all databases in a pop-up window.
- Press *Show procedure status* to display a list of the procedures used for all databases in a pop-up window.

Information about the version of a function or procedure can be found in the column *Comment*.

## Tab *Holiday Calendar*

Manage different holiday calendars here. These are used to group holidays regionally and assign them to persons.

Press *New* to create a new holiday calendar. Enter an *ID* and a *Description*. Use the respective trash icon to delete a holiday calendar.

## Tab *Event Types*

This is where you can specify the event types that should be available at the terminals. The event types are also used for the web terminal. For each booking type, specify whether the booking is triggered by the device itself or by a person (e.g. clock-in, clock-out).

To set the *Text* for a event type, press *Translate*. Enter the names for the respective languages and press *Save.*

With the *Booking Type* column you can select whether the booking marks the person as present or absent (this is particularly important for calculating working hours in the *Overview Bookings* menu item).

Use the respective trash icon to delete a event type.

## Tab *Document Types*

This is where you can manage the document types that are available for selection on the tab *Documents* in the personal master data.

## Tab *General*

This is where you can define which areas and tiles should be preset in the launchpad.

- *Background image:* Here you can upload a background image that will be displayed in the login screen.
- *Logo:* Here you can upload a logo that will be displayed in the login screen.
- *All Tiles:* Select this option to display all menu items as tiles on the launchpad by default.
- *Info text* / *Info mail address:* Enter the text and email address that will be displayed in the info area (accessible via the user icon in the top right &gt; Info).
- *Image Aspect Ratio:* Define the aspect ratio (width:heigth) for images added in the menu items Persons/Visitors (e.g. *4:3*, *16:9*).

### Area *Launchpad Areas*

Create areas here that will appear by default on the launchpad.

- Press *Add* to create a new area.
- To set the *Text* for an area, press *Translate*. Enter the names for the respective languages and press *Save.*
- Enter a number in the *Sequence* column to determine the sequence in which the areas are displayed.

### Area *Visible Tiles*

Create tiles here that are linked to a PDF or link. When the tile is pressed, the PDF or linked page opens.

To set the *Text* and the *Description* for a tile, press *Translate*. Enter the names for the respective languages and press *Save.*

## Tab *Login*

Specify here how users login.

### Area *Username and Password*

If your system does not use LDAP login, you can assign fields from the HR master record as the *Username* and *Password*.

- *Username:* Select the desired field from the personnel master record (for example, *Personnel No.*).
- Password: Select the desired field from the personnel master record (e.g. *Personal PIN*).   
    Select *Own Password* if the user should be able to set their own password. The user receives an *Initial Password* for the first login. Select a field from the personnel master record in the field of the same name.

Forgotten passwords can be reset. To do this, remove the corresponding entry from the list. The user must then login again with their initial password.

### Area *Login Restrictions*  


Here you can specify which persons are allowed to login to JaniWeb.

- *Criterion:* Select the database field that is used to check the login authorization.
- *Filter:* Enter values separated by semicolons for users who are not allowed to login.
- *Whitelist:* Press this button to enter IP addresses and DNS names of all clients from which the kiosk application, for example, may be accessed.

## Tab *Properties*

This is where you make settings for the SMTP server, LDAP connection, database backup, and SAP exchange directory. Any changes made here require a restart of the Tomcat server.

### Area *Device Master Record Calculation*

- *Enable FTP/SFTP for Master Record Dispatch:* Use this option to specify that master data is to be transferred to devices from the manufacturer Dormakaba using FTP/SFTP.
- *BPA9 Fallback:* Specify an alternative method here for when transmission to a device via FTP/SFTP is not possible (e.g. for older devices). 
    - Select *Server File System* if the master data file is to be created in a directory on the server.
    - Select *Network Directory* if the master data file is to be stored in a network directory via SFTP.
- Press *Base supply* to recalculate all master data and send it to the devices.
- *Trigger File Master Record Calculation :* Enter the path for the trigger file that is to be created after the master data calculation. If no file is to be created, the field can be left empty.

### Area *Device Models*

Specify the various device types that can be selected in the menu *Devices*.

### Area *Login*

Specify here the required settings for logging in via LDAP or SSO.

- If *Type* SSO is selected 
    - *sso\_oidc\_authority:* authentication endpoint (https://login.microsoftonline.com/{tenant-id})
    - *sso\_client\_id:* client ID of the registered application
    - *sso\_client\_secret:* application’s secret key
    - *sso\_redirect\_uri:* redirect URL after authentication (https://hostname-janiweb-server/janiweb/oidc-callback)
    - *sso\_redirect\_scope:* requested permissions
    - *sso\_field:* Enter the SSO field that is to be compared with the system field *sso\_person\_table* (hrcc1dnperso01, hrcc1dnbalan01, hrcc1dnperso01\_data\_relation) and *sso\_person\_field* in order to assign the correct person.
- If *Type* LDAP is selected 
    - *ldap\_host*: IP address of the LDAP server
    - *ldap\_port*: Port of the LDAP server
    - *ldap\_user:* Enter the full Distinguished Name (DN) for the LDAP user to search the Active Directory (AD) with.
    - *ldap\_pwd:* Password of the LDAP user
    - *ldap\_base\_dn:* Enter the AD directories to be searched (separate multiple directories with commas).
    - *ldap\_field:* Enter the LDAP field that is to be compared with the system field *ldap\_person\_table* (hrcc1dnperso01, hrcc1dnbalan01, hrcc1dnperso01\_data\_relation) and *ldap\_person\_field* in order to assign the correct person.
    - *ldap\_object\_catergory:* Enter the AD field to be searched for the permissions assigned in the roles under *LDAP Group*.
    - *using\_ssl:* Activate this option if SSL is to be used for the connection (LDAPS).
    - *ignore\_leading\_0:* Activate this option if leading zeros are to be ignored when matching the *ldap\_field*.

### Area *Email*  


Here you define the access data for the SMTP server used.

- If *Authentication Type Basic Authentication* is selected 
    - *smtp\_username:* Enter the user name.
    - *smtp\_password:* Enter the password.
    - *smtp\_server:* Enter the server address of the SMTP server.
    - *smtp\_port:* Enter the port of the SMTP server.
- If *Authentication Type OAuth2* is selected 
    - *smtp\_oauth2\_tenant\_id:* Microsoft tenant ID
    - *smtp\_oauth2\_client\_id:* client ID of the registered application
    - *smtp\_oauth2\_client\_secret:* application’s secret key
    - *smtp\_oauth2\_token\_endpoint:* URL to obtain OAuth 2.0 tokens (https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token)
    - *smtp\_oauth2\_scope:* requested permissions (https://graph.microsoft.com/.default)
    - *smtp\_oauth2\_redirect\_uri:* redirect URL after authentication (optional)
- If *Authentication Type* *OAuth2 Delegated* gesetzt ist 
    - *oauth2\_delegated\_tenant\_id:* Microsoft tenant ID
    - *oauth2\_delegated\_client\_id:* client ID of the registered application
    - *oauth2\_delegated\_client\_secret:* application’s secret key
    - *oauth2\_delegated\_auth\_endpoint:* URL to obtain OAuth 2.0 authorization (https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token)
    - *oauth2\_delegated\_token\_endpoint:* URL to obtain OAuth 2.0 tokens (https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize)
    - *oauth2\_delegated\_scope:* requested permissions (https://graph.microsoft.com/.default)
    - *oauth2\_delegated\_redirect\_uri:* redirect URL after authentication (https://hostname-janiweb-server/janiweb/oauth2-callback)
- *admin\_mail:* Enter the email address that the system uses to send messages.

<p class="callout warning">If the email address in the *admin\_mail* field differs from the one in the *smtp\_username* field, then the user in the *smtp\_username* field needs authorisation to send emails as the user in the *admin\_mail* field.</p>

### Area *Master Record Lock*

Activate the automatic master record lock here. You can specify after how many error attempts (*number of failed attempts*) within a certain period (*time period in seconds*) a master record should be locked. In addition, you can use the field *event types* to specify which booking errors should be taken into account.

### Area *SAP Settings*

Make settings for updating SAP data here.

- *sap\_refresh\_data\_dir:* Enter the directory from which the SAP import is to be read. Click the plus icon to select multiple directories.
- *sap\_refresh\_archiving:* Activate this option if you want to archive the imported data.
- *booking\_job\_archiving*: Activate this option if you want to archive the exported booking data.

### Area *Database Backup*

Here you can configure an automatic database backup. The backup is performed once a day at night.

- *db\_backup\_days:* Enter the number of days for which the backup is to be stored.
- *db\_backup\_dir:* Enter the path where the backup should be saved.
- *db\_backup\_filename:* Enter the file name of the backup.
- *db\_backup\_tables:* Select the database tables to be backed up.

### Area *Devices*

- *terminal.localfile:* Enter the directory for the trigger file that triggers the creation of the *terminal.ini* file.
- *terminal.parameter:* Enter the directory in which parameter files for devices from the manufacturer Dormakaba are to be stored.
- *term.ip.gid:* Specify the limit for the GID that can be assigned to a device.
- term.ip.did: Specify the limit for the DID that can be assigned to a device.
- *INTUS COM Directory:* Enter the directory where INTUSCOM is located.

### Area *Control Management*  


In the field *control.management.filelocation*, enter the directory in which parameter files for devices from the manufacturer Dormakaba are to be stored when they are created using control management.

### Area *Logging*

In this area, you can use the field *logs\_directory* to specify the directory to be sent to the recipients (specified in the field *logs\_recipients*). Press *Send logs* to start sending.

- *log\_directory*: The directory in which JaniWeb stores log files.
- *log\_limit*: The maximum size of log files.
- *log\_count*: The maximum number of log files.
- *log\_level*: The logging level.

### Area *License Violation*

Specify the threshold from which you would like to be informed about the current license usage.

- *license\_usage\_email\_recipient:* Enter the email address to which information about license usage should be sent. Press the plus icon to add additional email recipients.
- *license\_violation\_email\_recipient:* Enter the email address to which license violation information should be sent. Press the plus icon to add additional email recipients.

### Area *Other*

Here you can define various other basic settings.

- *inactivity\_time:* This value defines after how many minutes of inactivity a user will be automatically logged out. This is a global value that applies to all users. It can be overridden for individual users using the *Session Timeout (minutes)* setting in the [Users](https://manual.drakos.de/books/janiweb-j92/page/users) menu.
- *booking\_report\_limit*: Use this option to define the maximum number of results displayed in the booking report.
- *Delete archived booking records after (days):* Use this option to specify the number of days after which archived bookings are deleted. This does not affect archived bookings themselves.
- *badges\_limit:* Specify here how many people can be loaded at once (e.g. via the menu item *Persons*).
- *disable\_cookie\_login:* Activate this option if you do not want a cookie to be stored when logging in via the mobile application.
- *Force Desktop Version:* Once this option is activated, the application will be shown always in the desktop version, even if it will be called from a mobile device.
- *Extended names search:* This option must be activated if the first name and surname are split between the database fields hrcc1dnperso01.edit\_name and hrcc1dnperso01.sort\_name.
- *Old Design*: Starting with version 2.0, JaniWeb has a new look. If you want to use the old look, you must enable this option.

## Tab *Literals*

This is where you can edit the terms used in the JaniWeb user interface (tab *Literals*) and *Help texts* for various languages.

<p class="callout warning">**IMPORTANT:** If you change the terms used in the user interface, the operating instructions will no longer match the product. Drakos assumes no liability for the consequences of such changes.</p>

## Tab *Import*

You have the option to initially import personnel master records from a CSV file. The following fields describe a personnel master record. Entries with an *X* in the column *Mandatory* must be filled.

<table border="0" cellpadding="0" cellspacing="0" id="bkmrk-name-datentyp-table-" style="border-collapse: collapse; width: 793px;" width="754"><colgroup><col style="width: 235.75px;" width="231"></col> <col style="width: 101.75px;" width="97"></col> <col style="width: 343.75px;" width="339"></col> <col style="width: 91.75px;" width="87"></col> </colgroup><tbody><tr style="height: 16.0pt;"><td class="xl66" height="21" style="height: 16.0pt; width: 173pt;" width="231">**Name**</td><td class="xl66" style="width: 73pt;" width="97">**Data type**</td><td class="xl66" style="width: 254pt;" width="339">**Table**</td><td class="xl66" style="width: 65pt;" width="87">**Mandatory**</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">admin\_unit\_id</td><td class="xl65">char (4)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">source\_sys</td><td class="xl65">varchar (10)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">timeid\_no</td><td class="xl65">char (24)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">from\_date</td><td class="xl65">date</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">to\_date</td><td class="xl65">date</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">timeid\_version</td><td class="xl65">char (1)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">perno</td><td class="xl65">varchar (11)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">first\_name</td><td class="xl65">varchar (40)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">last\_name</td><td class="xl65">varchar (40)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65">X</td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">langu</td><td class="xl65">char (1)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">langu\_iso</td><td class="xl65">char (2)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">subsystem\_grouping</td><td class="xl65">char (3)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">access\_control\_group</td><td class="xl65">char (2)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">personal\_code</td><td class="xl65">char (4)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">comp\_code</td><td class="xl65">char (4)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">costcenter</td><td class="xl65">varchar (10)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">customer\_field\_1</td><td class="xl65">varchar (20)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">customer\_field\_2</td><td class="xl65">varchar (40)</td><td class="xl65">hrcc1dnperso01</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">company\_id</td><td class="xl65">varchar (4)</td><td class="xl65">hrcc1dnperso01\_data\_relation</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">prohibition</td><td class="xl65">char (1)</td><td class="xl65">hrcc1dnperso01\_data\_relation</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">prohibition\_reason</td><td class="xl65">varchar (150)</td><td class="xl65">hrcc1dnperso01\_data\_relation</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">ident</td><td class="xl65">varchar (2)</td><td class="xl65">hrcc1dnperso01\_data\_relation</td><td class="xl65"> </td></tr><tr style="height: 16.0pt;"><td class="xl65" height="21" style="height: 16.0pt;">email</td><td class="xl65">varchar (100)<span style="mso-spacerun: yes;"> </span></td><td class="xl65">hrcc1dnperso01\_data\_relation</td><td>  
</td></tr></tbody></table>

A sample file for importing persons in CSV format can be found here: [Sample Personen CSV Import](https://kunden.drakos.de/www/?a=d&i=9129992588)

## Texts for functions

<div class="table-wrap" id="bkmrk-feld-werte-beschreib"><table class="wrapped confluenceTable" style="width: 100%;"><colgroup><col style="width: 12.9917%;"></col><col style="width: 14.6487%;"></col><col style="width: 20.0355%;"></col><col style="width: 52.3242%;"></col></colgroup><tbody><tr><th class="confluenceTh align-left">**Field**</th><th class="confluenceTh align-left">**Values**</th><th class="confluenceTh align-left" colspan="2">**Description**</th></tr><tr><td class="confluenceTd">gruppe</td><td class="confluenceTd">  
</td><td class="confluenceTd">Terminal group from term\_down =&gt; htyp. If no match is found, DEFAULT is used.</td><td class="confluenceTd" rowspan="4">These 4 columns declare from where to start loading the options for a booking.</td></tr><tr><td class="confluenceTd">sprache</td><td class="confluenceTd">  
</td><td class="confluenceTd">ISO language code from hrcc1dnperso01 =&gt; langu\_iso. If the language is not available, DE is used.</td></tr><tr><td class="confluenceTd">hersteller\_id</td><td class="confluenceTd">D, K, PCS</td><td class="confluenceTd">Manufacturer from term\_down =&gt; hersteller\_id</td></tr><tr><td class="confluenceTd">satza</td><td class="confluenceTd">  
</td><td class="confluenceTd">Terminal record type of the booking. If not available, the record type falls back to an empty string.</td></tr><tr><td class="confluenceTd">sapsatza</td><td class="confluenceTd">  
</td><td class="confluenceTd">SAP record type (e.g. P10, P20) to be transferred to SAP. If this field is filled, hrcc1upteven01 is served.</td><td class="confluenceTd" rowspan="2">Fields for hrcc1upteven01</td></tr><tr><td class="confluenceTd">sapinfo</td><td class="confluenceTd">  
</td><td class="confluenceTd">Additional SAP information, which is transmitted in customer\_field\_1. Mainly for P60 (e.g. }{AM0001).</td></tr><tr><td class="confluenceTd">security answer</td><td class="confluenceTd">  
</td><td class="confluenceTd">**Comma separated**  **Semicolon separated**   
Static response text to the terminal.</td><td class="confluenceTd" rowspan="4">Field antwort 1 / field info 1  
The texts of the two fields are concatenated.  
  
Field antwort 1 / fields info x  
antwort is output first, followed by all info fields with the length specified in ilen.  
  
Fields antwort x / fields info x  
A field from antwort and one from info are displayed alternately.  
  
Fields are separated by commas.  
  
The fields separated by a semicolon are applied in the anhang\_flag field with the saldo flag set.

zmail = hrcc1dnperso01.mail\_indicator

imail = hrcc1dnbalan01.time\_eval\_mail\_indicator

Literals for zmail, imail will be configured in following table:

imail = (**SELECT** **`text`** **FROM** **`mail\_texte`** **WHERE** **`kennzeichen`** = 'I' **AND** **`wert`** = iflag);

zmail = (**SELECT** **`text`** **FROM** **`mail\_texte`** **WHERE** **`kennzeichen`** = 'Z' **AND** **`wert`** = zflag);

</td></tr><tr><td class="confluenceTd">info</td><td class="confluenceTd">name, statv, info1, info2, info3, info4, info5, info6, info7, info8, info9, infoa, imail, zmail, lbook</td><td class="confluenceTd">**Comma separated**  **Semicolon separated**   
Dynamic response text to the terminal. Is mainly read from hrcc1dnbalan01.</td></tr><tr><td class="confluenceTd">iform</td><td class="confluenceTd">R, L</td><td class="confluenceTd">Specifies on which side the spaces are output for stretching to the length specified in the field of the dynamic texts. R stands for right-aligned text and thus for the left side. With L, it is exactly the other way around.</td></tr><tr><td class="confluenceTd">ilen</td><td class="confluenceTd">  
</td><td class="confluenceTd">Determines the length with which the fields for info are read, left-aligned. If the field is 0 or empty, the function section is skipped.</td></tr><tr><td class="confluenceTd">db</td><td class="confluenceTd">  
</td><td class="confluenceTd">**Separated by commas**  
Number of seconds searched backwards for a dynamic booking error.</td><td class="confluenceTd" rowspan="4">If a dynamic booking error is triggered, this refers to a new line in the funktion\_texte. The original 4 fields (gruppe, sprache, hersteller\_id and satza) are queried again, regardless of whether one or more of the criteria could not be found. This means that even if the sentence type, for example, was not available in the language langu\_iso, the new check still starts with this.  
  
Dynamic booking errors can take the form of double bookings, plausibility checks, booking sequences and replacement bookings.  
  
**Attention:** This function can be used to configure an endless loop that is not intercepted by the dmgr function!</td></tr><tr><td class="confluenceTd">ppc</td><td class="confluenceTd">  
</td><td class="confluenceTd">**Regex field** **Separated by commas**  
One or more record types that trigger the dynamic posting error. A leading exclamation mark negates the field.</td></tr><tr><td class="confluenceTd">pps</td><td class="confluenceTd">  
</td><td class="confluenceTd">**Regex field** **Separated by commas**  
Describes all postings that should be held against the check. The triggering posting must also be represented.</td></tr><tr><td class="confluenceTd">ppe</td><td class="confluenceTd">  
</td><td class="confluenceTd">**Separated by commas**  
Reference to the record type in the field satza, with which the program should continue when the trigger occurs.</td></tr><tr><td class="confluenceTd">statv</td><td class="confluenceTd">  
</td><td class="confluenceTd" colspan="2">**Separated by commas**  
Has two fields that provide the text for a clock-in and clock-out response when tracking status.  
  
Can only be used in connection with a sapsatza P01 or S*NN*. With P10, the status is checked for a flat rate of 10 hours in the past, but a P01 booking is also transferred to SAP for this. With S*NN*, *NN* indicates the number of hours until the reset. In this case, a P10 or P20 booking is also transferred to SAP.</td></tr><tr><td class="confluenceTd">anhang</td><td class="confluenceTd">  
</td><td class="confluenceTd" colspan="2">Defines a fixed booking attachment, which is set if the booking does not have its own booking attachment.</td></tr><tr><td class="confluenceTd">anhang\_flag</td><td class="confluenceTd">anab, costc, extwa, saldo</td><td class="confluenceTd" colspan="2">Defines how the booking attachment is to be interpreted.  
  
**anab** Causes the attachment to be written to the att\_abs\_reason field in hrcc1upteven01.  
  
**costc** Causes the attachment to be written to the costc field in hrcc1upteven01.  
  
**extwa** This is only defined, but does not yet fulfill any function.  
  
**saldo** If this flag is set, an integer is expected as a booking attachment. This number then selects the respective field from the columns antwort and info, separated by semicolons. If the number is larger than answers and infos are defined, the last field is used.</td></tr><tr><td class="confluenceTd">24x7</td><td class="confluenceTd">  
</td><td class="confluenceTd" colspan="2">**OBSOLET** Overrides the time profile check.</td></tr></tbody></table>

</div>#### Examples

**Terminal replies**

<div class="table-wrap" id="bkmrk-antwort-info-iform-i"><table class="wrapped confluenceTable tablesorter tablesorter-default stickyTableHeaders" role="grid" style="width: 100%;"><colgroup><col style="width: 10.6079%;"></col><col style="width: 8.70083%;"></col><col style="width: 6.19785%;"></col><col style="width: 5.83674%;"></col><col style="width: 68.6567%;"></col></colgroup><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="antwort: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">antwort</div></th><th aria-disabled="false" aria-label="info: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">info</div></th><th aria-disabled="false" aria-label="iform: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="2" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">iform</div></th><th aria-disabled="false" aria-label="ilen: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="3" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">ilen</div></th><th aria-disabled="false" aria-label=": No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="4" role="columnheader" scope="col" tabindex="0"><div class="tablesorter-header-inner">  
</div></th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">R1</td><td class="confluenceTd">  
</td><td class="confluenceTd">  
</td><td class="confluenceTd">0</td><td class="confluenceTd">Returns a simple “R1” to the terminal. By setting ilen to 0, the function skips reading hrcc1dnbalan01 and formatting the values, thus saving processing time.</td></tr><tr role="row"><td class="confluenceTd">R1Hello</td><td class="confluenceTd">name</td><td class="confluenceTd">L</td><td class="confluenceTd">20</td><td class="confluenceTd">Outputs a booking confirmation, a greeting, and the name from hrcc1dnperso01 left-aligned, limited to 20 characters. It is important to ensure that the correct number of spaces is inserted after the greeting to obtain a line break. The length specified in ilen does not influence the response!</td></tr><tr role="row"><td class="confluenceTd">R40</td><td class="confluenceTd">info1,info2,info3</td><td class="confluenceTd">R</td><td class="confluenceTd">8</td><td class="confluenceTd">First outputs an “R40” and then outputs the fields info\_1, info\_2 and info\_3 from hrcc1dnbalan01, fixed to 8 characters, right-aligned.</td></tr><tr role="row"><td class="confluenceTd">R1Hello,Balance:</td><td class="confluenceTd">name,info\_1</td><td class="confluenceTd">L</td><td class="confluenceTd">20</td><td class="confluenceTd">First “R1Hello” is displayed, then the name (20 characters long, left-aligned), the text “Balance: ” and finally the info\_1 field from hrcc1dnbalan01. Again, make sure that the number of spaces in the column antwort is correct so that the texts are properly indented on the terminal.</td></tr><tr role="row"><td class="confluenceTd">R40</td><td class="confluenceTd">info1,info2,info3;info4,info5,info6</td><td class="confluenceTd">R</td><td class="confluenceTd">8</td><td class="confluenceTd">If the anhang\_flag is set to saldo, an integer is expected in the booking attachment. This determines which of the fields separated by semicolons is selected. If the integer is greater than the number of fields, the last field is selected. In this example, if the value is 2, the only available field in antwort and the second (i.e. info4-6) would be used.</td></tr></tbody></table>

</div>**Dynamic booking error**

<div class="table-wrap" id="bkmrk-satza-db-ppc-pps-ppe"><table class="wrapped confluenceTable tablesorter tablesorter-default stickyTableHeaders" role="grid" style="width: 100%;"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="satza: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 6.7938%;" tabindex="0"><div class="tablesorter-header-inner">satza</div></th><th aria-disabled="false" aria-label="db: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 4.29082%;" tabindex="0"><div class="tablesorter-header-inner">db</div></th><th aria-disabled="false" aria-label="ppc: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="2" role="columnheader" scope="col" style="width: 6.91299%;" tabindex="0"><div class="tablesorter-header-inner">ppc</div></th><th aria-disabled="false" aria-label="pps: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="3" role="columnheader" scope="col" style="width: 7.50894%;" tabindex="0"><div class="tablesorter-header-inner">pps</div></th><th aria-disabled="false" aria-label="ppe: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="4" role="columnheader" scope="col" style="width: 9.89273%;" tabindex="0"><div class="tablesorter-header-inner">ppe</div></th><th aria-disabled="false" aria-label=": No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="5" role="columnheader" scope="col" style="width: 64.6007%;" tabindex="0"><div class="tablesorter-header-inner">  
</div></th></tr><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="satza: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 6.7938%;" tabindex="0"> </th><th aria-disabled="false" aria-label="db: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 4.29082%;" tabindex="0"> </th><th aria-disabled="false" aria-label="ppc: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="2" role="columnheader" scope="col" style="width: 6.91299%;" tabindex="0"> </th><th aria-disabled="false" aria-label="pps: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="3" role="columnheader" scope="col" style="width: 7.50894%;" tabindex="0"> </th><th aria-disabled="false" aria-label="ppe: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="4" role="columnheader" scope="col" style="width: 9.89273%;" tabindex="0"> </th><th aria-disabled="false" aria-label=": No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="5" role="columnheader" scope="col" style="width: 64.6007%;" tabindex="0"> </th></tr></thead><thead class="tableFloatingHeader"></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd" style="width: 6.7938%;">BT</td><td class="confluenceTd" style="width: 4.29082%;">60</td><td class="confluenceTd" style="width: 6.91299%;">BT</td><td class="confluenceTd" style="width: 7.50894%;">BT</td><td class="confluenceTd" style="width: 9.89273%;">@</td><td class="confluenceTd" style="width: 64.6007%;">Checks in the last 60 seconds against itself in a BT and thus triggers a simple double booking block.</td></tr><tr role="row"><td class="confluenceTd" style="width: 6.7938%;">B1</td><td class="confluenceTd" style="width: 4.29082%;">36000</td><td class="confluenceTd" style="width: 6.91299%;">B1</td><td class="confluenceTd" style="width: 7.50894%;">B\[12\]</td><td class="confluenceTd" style="width: 9.89273%;">@</td><td class="confluenceTd" style="width: 64.6007%;">In the last 10 hours, checks B1 bookings against all B1 and B2 bookings. This is a plausibility check. If the last booking is B1, a double booking block is triggered.</td></tr><tr role="row"><td class="confluenceTd" style="width: 6.7938%;">A1</td><td class="confluenceTd" style="width: 4.29082%;">36000</td><td class="confluenceTd" style="width: 6.91299%;">!B1</td><td class="confluenceTd" style="width: 7.50894%;">B\[123\]</td><td class="confluenceTd" style="width: 9.89273%;">B1</td><td class="confluenceTd" style="width: 64.6007%;">Checks whether the last booking from B1, B2 and B3 is not B1 and then refers to B1. This is a replacement booking that could be checked at a turnstile entrance.</td></tr><tr role="row"><td class="confluenceTd" style="width: 6.7938%;">A1</td><td class="confluenceTd" style="width: 4.29082%;">36000</td><td class="confluenceTd" style="width: 6.91299%;">B\[23\]</td><td class="confluenceTd" style="width: 7.50894%;">B\[123\]</td><td class="confluenceTd" style="width: 9.89273%;">B1</td><td class="confluenceTd" style="width: 64.6007%;">Same check as in the example above, only without negation.</td></tr><tr role="row"><td class="confluenceTd" style="width: 6.7938%;">A1</td><td class="confluenceTd" style="width: 4.29082%;">36000,36000</td><td class="confluenceTd" style="width: 6.91299%;">BS,!B1</td><td class="confluenceTd" style="width: 7.50894%;">B\[ES123\],B\[123\]</td><td class="confluenceTd" style="width: 9.89273%;">BE,B1</td><td class="confluenceTd" style="width: 64.6007%;">First, BS (break start) is checked against BS, BE (break end), B1, B2 and B3. If a break start was last posted, the system now checks for a break end. It then checks again to see if another absence exists, as in the previous example. If this is the case, the system checks for B1. If none of these apply, it remains an A1 booking. **Important:** The db field must contain two values, otherwise the other fields in ppc, pps and ppe are not checked.</td></tr><tr><td style="width: 6.7938%;">A1</td><td style="width: 4.29082%;">84000</td><td style="width: 6.91299%;">!\[AB\]\[023\]</td><td style="width: 7.50894%;">  
</td><td style="width: 9.89273%;">X</td><td style="width: 64.6007%;">An A1 booking may only be made if an A0, A2, A3, B0, B2, or B3 booking has been made in advance.  
If this is not the case, error X will be displayed.</td></tr></tbody></table>

</div>**Status change booking**

If the booking sequence is to be used to automatically determine whether the response is issued for an arrival or departure booking, the function checks the last valid booking for the person and derives the next expected booking type from this.

To do this, the corresponding values in the function\_texts table must be configured accordingly.

<table class="wrapped confluenceTable tablesorter tablesorter-default stickyTableHeaders" id="bkmrk-satza-sapsatza-antwo" role="grid" style="width: 96.4286%;"><thead class="tableFloatingHeaderOriginal"><tr class="tablesorter-headerRow" role="row"><th scope="col" style="width: 9.86965%;"><div class="tablesorter-header-inner">satza</div></th><th scope="col" style="width: 14.1527%;"><div class="tablesorter-header-inner">sapsatza</div></th><th aria-disabled="false" aria-label="antwort: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" style="width: 12.6629%;" tabindex="0"><div class="tablesorter-header-inner">antwort</div></th><th aria-disabled="false" aria-label="info: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" style="width: 16.946%;" tabindex="0"><div class="tablesorter-header-inner">info</div></th><th aria-disabled="false" aria-label="ilen: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="3" role="columnheader" scope="col" style="width: 7.44879%;" tabindex="0"><div class="tablesorter-header-inner">ilen</div></th><th aria-disabled="false" aria-label=": No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="4" role="columnheader" scope="col" style="width: 38.9199%;" tabindex="0"><div class="tablesorter-header-inner">statv</div></th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td style="width: 9.86965%;">BT</td><td style="width: 14.1527%;">P01</td><td class="confluenceTd" style="width: 12.6629%;">R1</td><td class="confluenceTd" style="width: 16.946%;">statv, name</td><td class="confluenceTd" style="width: 7.44879%;">20</td><td class="confluenceTd" style="width: 38.9199%;">Guten Tag , Auf Wiedersehen </td></tr></tbody></table>

<div class="table-wrap" id="bkmrk--1"></div>