DEXICON Enterprise Webservice-Interface V5.2.0 10/2019

DEXICON Enterprise Webservice-Interface V5.2.0

Warning and indicating symbols

This warning symbol indicates hazards to your health and life (e.g. risk of coming into contact with mains voltage). You should always read and follow the text next to the symbol. This warning symbol indicates hazards that may cause damage to the device or system (malfunction, data loss, material damage, etc.)

Text pointed out in this way requires you to do something.

This symbol points to information that may facilitate your handling of the product or the use of this manual.

DEXICON Enterprise Webservice-Interface V5.2.0 10/2019

PCS Systemtechnik GmbH Pfälzer-Wald-Str. 36, D-81539 Munich, Germany, Phone +49 - 89 - 68004-0 Home page: http://www.pcs.com

Technical Support Phone: +49 - 89 - 68004-666 Fax: +49 - 89 - 68004-410 Email: [email protected]

Copying this manual in whole or in parts is forbidden without the express authority of PCS Systemtechnik GmbH. The information in this manual is subject to changes so that we can maintain the state of the art at all times. PCS, INTUS, DEXICON, INTUS LBus and „PCS. The Terminal People.“ are trademarks or registered trademark of PCS Systemtechnik GmbH. All other brands and product names are trademarks or registered trademarks of the respective companies and organizations.

Copyright 2019 by PCS Systemtechnik GmbH

2 10/2019 DEXICON Enterprise Webservice-Interface V5.2.0

Table of contents

Warning and indicating symbols ...... 2 1 Preface ...... 7 1.1 Scope of this document ...... 7 1.2 Additional manuals ...... 7 1.3 Using code examples ...... 7 2 Introduction ...... 9 2.1 Architecture of DEXICON Enterprise ...... 9 2.2 Properties of the Webservice-Interface ...... 9 2.2.1 Licensing ...... 9 2.2.2 Accessible via Browser ...... 9 2.3 Securing the Webservice-Interface ...... 10 3 Use cases ...... 11 3.1 Attendance states ...... 11 3.1.1 Web attendance panel ...... 11 3.1.2 Attendance report with SAP Crystal Reports ...... 13 3.2 Reporting on time bookings ...... 17 3.3 Archiving access records ...... 18 3.4 Active Directory as person master record source ...... 19 3.5 Integrating time recording with the PBX ...... 20 4 Protocol examples ...... 23 4.1 Person master records ...... 23 4.1.1 Bulk synchronization of person master records ...... 23 4.1.2 Creation of a single person master record ...... 24 4.1.3 Update of a single person master record ...... 25 4.1.4 Reading person master records ...... 25 4.1.5 Deletion of a person master record ...... 26 4.2 Accesses ...... 26 4.3 Attendance states ...... 27 4.3.1 Get attendance states ...... 27 4.3.2 Set attendance states ...... 29 5 REST API reference ...... 31 5.1 Basics ...... 32 5.1.1 Support for multiple superordinate systems...... 32 5.1.1.1 Authentication ...... 32 5.1.1.2 Available actions ...... 33 5.1.2 HTTP/1.1 ...... 33 5.1.2.1 Compliance ...... 33 5.1.2.2 Connection handling ...... 33 5.1.3 Unicode ...... 34 5.1.4 Character sets ...... 34 5.1.4.1 Byte order marks ...... 34

© PCS Systemtechnik GmbH 3 DEXICON Enterprise Webservice-Interface V5.2.0

5.1.4.2 HTTP-Authentication ...... 34 5.1.4.3 URIs ...... 35 5.1.5 Reliable transport ...... 35 5.1.6 Optimistic locking and caching ...... 35 5.1.7 Media type negotiation ...... 35 5.2 REST methods ...... 35 5.2.1 Person master records ...... 35 5.2.1.1 Operations on a single master record ...... 35 5.2.1.2 Setting the PIN of a single master record ...... 36 5.2.1.3 Bulk synchronization ...... 37 5.2.1.4 Attendance status ...... 37 5.2.1.5 Collections of person master records ...... 38 5.2.2 Authorizations and building logic ...... 40 5.2.2.1 Administration units...... 40 5.2.2.2 Roles ...... 41 5.2.2.3 Areas ...... 41 5.2.2.4 Time models ...... 42 5.2.2.5 Organization units ...... 43 5.2.2.6 Reader function groups (Authorization groups) ...... 43 5.2.2.7 Companies ...... 44 5.2.3 Infrastructure ...... 44 5.2.3.1 INTUS COM administration units ...... 44 5.2.3.2 Readers ...... 45 5.2.3.3 Doors ...... 45 5.2.4 Booking data ...... 47 5.2.4.1 Reading bookings ...... 47 5.2.4.2 Marking bookings as read ...... 48 5.3 HTTP error codes ...... 48 5.4 XML Schemata ...... 50 5.4.1 Notation ...... 50 5.4.2 Master records ...... 51 5.4.2.1 Basic type ...... 51 5.4.2.2 XML Schema for a single person record ...... 59 5.4.2.3 XML Schema for bulk synchronization ...... 59 5.4.2.4 XML Schema for person record collections ...... 61 5.4.2.5 Denotation of XML elements in ams.ini ...... 61 5.4.2.6 Default values ...... 62 5.4.3 Authorizations and building logic ...... 65 5.4.3.1 Administration units...... 66 5.4.3.2 Roles ...... 66 5.4.3.3 Areas ...... 67 5.4.3.4 Time models ...... 67 5.4.3.5 Organization units ...... 67 5.4.3.6 Reader function groups ...... 67 5.4.3.7 Companies ...... 68 5.4.4 Infrastructure ...... 68 5.4.4.1 INTUS COM administration units ...... 68 5.4.4.2 Readers ...... 68 5.4.4.3 Doors ...... 69 5.4.5 Booking data ...... 70 A. Appendix ...... 73 A.1. Change index ...... 73

4 10/2019 DEXICON Enterprise Webservice-Interface V5.2.0

A.1.1. Change index for Webservice-Interface 5.2.0 ...... 73 A.1.2. Change index for Webservice-Interface 2.1.0 ...... 73 A.1.3. Change index for HTTP-Interface 2.0.2 ...... 73 A.1.4. Change index for HTTP-Interface 2.0.1 ...... 73 A.1.5. Change index for HTTP-Interface 2.0.0 ...... 73 A.1.6. Change index for HTTP-Interface 1.3.0 ...... 74 A.1.7. Change index for HTTP-Interface 1.2.0 ...... 74 A.1.8. Change index for HTTP-Interface 1.1.0 ...... 74 A.1.9. Change index for HTTP-Interface 1.0.0 ...... 74 A.2. License agreements ...... 75 A.3. Tables and indices ...... 78 A.1.1. List of tables ...... 78 A.1.2. List of examples ...... 79 A.1.3. List of illustrations ...... 80 A.1.4. Index ...... 81 Any problems with this manual? ...... 83

© PCS Systemtechnik GmbH 5

1 - Preface

1 Preface

DEXICON Enterprise is an access management and time recording system. It is used in conjunction with INTUS terminals, INTUS access control managers, INTUS access readers, INTUS COM and INTUS TPI-tasc. DEXICON Enterprise offers deep integration with  an interface to SAP as a subsystem via the IDOC handler and SAP HR-PDC interface.  the file-based legacy SAP CC1 interface  a RESTful Web Service, called DEXICON Webservice-Interface  Active Directory integration for user management.  OPC for integration with security control stations.  video surveillance including license plate recognition.  card personalization software. All interfaces can be combined in a single installation of DEXICON Enterprise.

1.1 Scope of this document This manual describes the DEXICON Webservice-Interface. It addresses operators of a DEXICON Enterprise installation and developers who integrate DEXICON Enterprise in existing infrastructure. Previous knowledge of the operating system used, of its user interface, of DEXICON Enterprise and basic understanding of the HTTP protocol is recommended. Moreover, basic programming skills may be helpful.

1.2 Additional manuals In addition to this manual, the following manuals are available: DEXICON Installation Manual This manual describes the installation and configuration of DEXICON Enterprise, including the Webservice-Interface. DEXICON User Manual This manual describes the concepts and usage of DEXICON Enterprise. INTUS COM Terminal Management System User Manual This manual describes the INTUS COM Terminal Management System. INTUS COM OPC-Server Manual This manual describes the installation and configuration of the INTUS COM OPC-Server. The INTUS COM OPC-Server is an extension module of DEXICON Enterprise, which allows connecting DEXICON Enterprise with a factory master control system for instance.

1.3 Using code examples You may use the code in this document in your programs and documentation. You do not need to contact us for permission. The examples are provided “as is”, without warranty of any kind. They are explicitly not suitable for production use.

© PCS Systemtechnik GmbH 7

2 - Introduction

2 Introduction

2.1 Architecture of DEXICON Enterprise DEXICON Enterprise consists of several services which provide different interfaces, e.g. to the DEXICON Clients. They all access a central SQL database. Before a service accesses the database, it acquires a global lock which locks out all other services (pessimistic locking).

Time & Access Your solution PegaSys 3000 DEXICON Clients Attendance control

INTUS COM (Terminal management)

AMS-Web-Interface AMS-P3k-Interface AMS-Server AMS-Converter AMS-Online (HTTP-Interface)

Picture 2.1 – Services which access the DEXICON database This implies that if a service operates on the database, all other services cannot access the database. In such a case, the Webservice-Interface answers all requests with error code 503 Service unavailable. Your clients should be prepared to handle such situations.

2.2 Properties of the Webservice-Interface The Webservice-Interface is a RESTful Web Service. The general properties of the RESTful architecture style are considered general knowledge and are thus not detailed in this manual.

2.2.1 Licensing The Webservice-Interface is part of each installation of DEXICON Enterprise. You can always read (GET) data via this interface if you have a valid DEXICON Enterprise license. However, write access (POST, PUT, DELETE) is subject to a license option. The Webservice-Interface contains Open Source Software. The appendix contains the corresponding licenses.

2.2.2 Accessible via Browser The Webservice-Interface offers a simple web-browser interface. It provides among others access to  documentation (e.g. this manual, XML schemata)  booking data However, this interface is not for end-users but for ease of use during developing your solution.

© PCS Systemtechnik GmbH 9 DEXICON Enterprise Webservice-Interface V5.2.0

Picture 2.2 – HTML start page of the Webservice-Interface The ports (port and -port) for the Webservice-Interface can be configured. The default is port=8090 for connections via http, https-port=8093 for connections via https. TLS configuration is documented in DEXICON Installation Manual. TLS versions 1.1 and 1.2. are supported by default and deprecated TLS version 1.0 can be enabled optionally.

2.3 Securing the Webservice-Interface Starting with Version 2.1.0, secure connections via HTTPS are supported. The Webservice-Interface has been developed with great care and security in mind. However, due to the following reasons it should only be used within a secure environment when using:  There are currently no general means for defending attacks like Slowloris.  According to the RESTful architecture style, the Webservice-Interface does neither provide user management nor encryption. This enhances simplicity by providing a clean separation of concerns.

User Encryption Performance management

TLS/SSL Untrusted Proxy Reverse DEXICON Enterprise Firewall termination environment cache proxy HTTP-Interface proxy

Picture 2.3 – Securing the Webservice-Interface

The Webservice-Interface supports the X-Forwarded-For header for identifying the originating IP address of a client connecting to the Webservice-Interface through proxies. If it is necessary to use the Webservice-Interface outside a secure environment, please consult your risk management and IT staff which safeguards have to be implemented.

10 10/2019 3 - Use cases

3 Use cases

The following examples show how to solve common requests and can also give you some ideas how to optimize workflows. Please note that the solutions shown are not for production use but as a starting point for your developments. The given examples do also not imply that PCS Systemtechnik GmbH supports or promotes any of the referred products, neither now nor in future. We also ask for your understanding, that we cannot support you on reenacting the examples.

3.1 Attendance states The DEXICON Client provides highly customizable attendance panels and emergency lists. The DEXICON User Manual describes these features.

3.1.1 Web attendance panel This example shows how to create a simple HTML page which shows for certain persons whether they are attendant or not according to time recording.

The description assumes that the Webservice-Interface is installed on a host called dexicon. Abstract The HTML page is generated by applying XSL transformations to XML data received from the Webservice-Interface:

1. The URI http://dexicon:8090/persons?forceType=xml or https://host- IP:8093/persons?forceType=xml provides a list of all persons. The data is saved in the document all.xml.

2. The URI http://dexicon:8090/persons?forceType=xml&taStatus=att or https://host-IP:8093/persons?forceType=xml&taStatus=att provides a list of all attendant persons. The data is saved in the document attendant.xml.

3. The stylesheet listed below is applied to all.xml to create a second stylesheet, named attendance_panel.xsl. attendance_panel.xsl contains a hard-coded list of all persons together with some code for including the attendance states.

4. attendance_panel.xsl is applied to attendant.xml so that the list of persons is completed with attendance information. The steps 1 and 3 are necessary, if person master records are added or deleted. The steps 2 and 4 are executed regularly, e.g. every minute. The generated HTML document is published with a web server. The steps of fetching data, applying stylesheets, and publishing the result (e.g. with a PowerShell script) are left as finger exercise. XSL Transformations The following stylesheet transforms the list of all person master records to another stylesheet which in turn creates the HTML page when applied to the list of the attendant persons. Example 3.1 – XSL transformation for person master records

© PCS Systemtechnik GmbH 11 DEXICON Enterprise Webservice-Interface V5.2.0

Attendance panel

Attendance panel

Absent Attendant

The result of this stylesheet applied to person master records might look as follows: Attendance panel

Attendance panel

12 10/2019 3 - Use cases

[… for each person one row …]

SkywalkerLuke /persons/EXAMPLE/123
VaderDarth /persons/EXAMPLE/789

Absent Attendant

The result of this stylesheet applied to a XML document which contains only attendant persons might look as follows: Attendance panel

Attendance panel

[…] This is the final attendance panel: a table with the columns  surname  first name  status: Absent or Attendant Review Obviously, this approach can be enhanced in many ways, among others  formatting  different attendance panels for different users, e.g. based on some grouping criteria  performing the steps within a Web-Server script, e.g. PHP

 using the HTTP ETag mechanism and caching for improved performance It is important to note that this approach does not scale well, especially due to the second XML transformation:  The lookup of attendance states is not optimal.

 It suffices to get the URIs of the attendant persons. Therefore, the media type text/uri- list (see chapter 5.2.1.5) would be more suitable for this purpose.

3.1.2 Attendance report with SAP Crystal Reports This example shows how to create a list of all contractor employees who are currently attendant in a certain tracking area. We create the report with SAP Crystal Reports 2013. The description assumes that the Webservice-Interface is installed on a host called dexicon.

© PCS Systemtechnik GmbH 13 DEXICON Enterprise Webservice-Interface V5.2.0

Preparation The SAP Crystal Reports XML data source requires XML Schemata. Unfortunately, SAP Crystal Reports 2013 does not support XML Schemata which include other XML Schemata remotely. Therefore we have to adopt the XML Schema for person records manually: 1. Download the files personType.xsd and persons.xsd from your Webservice-Interface, e.g. with your browser from a URI like http://dexicon:8090/documentation or https://host-IP:8093/documentation. 2. Open the file personType.xsd in an editor, remove the first lines so that the document starts with . Remove also the last line. Now copy the whole content to the clipboard.

3. Open the file persons.xsd in an editor and replace the line with the content of the clipboard. 4. Save the changes to persons.xsd. It should now look like this (you can ignore line breaks and indentation):

[…]

Definition of data sources We need data sources for  Companies  Person master records

Data source for companies We create a new connection with the “XML and Web Services”:  In the menu bar, select “File” > “Log On or Off Server …” to create a new connection. A dialog appears. In this dialog we choose “Create New Connection” and below this item, “XML and Web Services”. The following dialog appears:

14 10/2019 3 - Use cases

Picture 3.1 – SAP Crystal Reports: XML data source dialog

Please note that it is important to add ?forceType=xml to the company URI.  In the next step “HTTP Authentication for XML file” we leave the fields empty because read access does not need any authentication.  SAP Crystal Reports needs XML schemata; the Webservice-Interface provides them. To get the URI of the schema, please open the documentation page of the Webservice- Interface in your browser, e.g. http://dexicon:8090/documentation or https://host- IP:8093/documentation. All schemas are listed there so that you can copy and paste the URI into the dialog.

Picture 3.2 – SAP Crystal Reports: XML Schema dialog  In the next step “HTTP Authentication for schema file” we leave the fields empty again.  In the final dialog we do not need to change anything.

Data source for person master records To create the data source for person master records, proceed analogous as above with the following adaptions:  Dialog “XML (data source) type and location”, “HTTP(S) XML URL”: http://dexicon:8090/persons?acStatus=/areas/eN7nxF_CuzM&forceType=xml or https://host-IP:8093/persons?acStatus=/areas/eN7nxF_CuzM&forceType=xml.

The /areas/eN7nxF_CuzM identifies the tracking area, in which the persons are attendant. To get the URI of your tracking area, you can open

© PCS Systemtechnik GmbH 15 DEXICON Enterprise Webservice-Interface V5.2.0

http://dexicon:8090/areas?purpose=tracking or https://host- IP:8093/areas?purpose=tracking in your browser and copy the URI of the area. Chapter 5.2.2.3 details this.  In dialog “Schema file type and location” we choose “Use Local Schema” and as “Local Schema File” we select the file which we prepared at the beginning.

Picture 3.3 – SAP Crystal Reports: Use local XML Schema Create the report Now we can create the report with these data sources, e.g. with the Report Wizard. From the companies data source we select companies/company. The person master record data source contains several “tables” due to the structure of a person record. For this example, we select persons/person/grouping (this table contains the company) and persons/person/name. Chapter 5.4.2.1 describes the structure of person master records.

Picture 3.4 – SAP Crystal Reports: Standard Report Creation Wizard The tables have to be linked together:

16 10/2019 3 - Use cases

Picture 3.5 – SAP Crystal Reports: Linking the tables

Then we can select for display the fields companies/company.name, persons/person/name.surname and persons/person/name.first-name and group by companies/company.name. Finally, you can design your report as usual.

3.2 Reporting on time bookings The DEXICON Client provides reports and elaborate filters for all kind of data. You can use these functions and export data in a CSV file. Please see the DEXICON User Manual for more information about this. However, this process is not always suitable, e.g. if you like to automate tasks or prefer XML data. The Webservice-Interface offers access to booking data in different formats, see chapter 5.2.4.1 for details. In this example, we create a Microsoft Windows PowerShell script, which creates for each person of a certain client a XML file containing her or his bookings of the last month. In addition, to be able to process the files, we need to provide the corresponding XML schema. We save the files on a network share so that the HR department can process the bookings in Microsoft Excel. Example 3.2 – Windows PowerShell script which writes bookings to XML files $dxHost = "http://localhost:8090" $sourceSys = "EXAMPLE" $bookingType = "time-events" $destDir = "X:\HR"

#------# Loads URLs of all persons of a source system #------function Get-Persons { Param([string]$dexiconHost, [string]$sourceSys)

[string[]]$persons = @()

$downloadFrom = "{0}/persons/{1}" -f $dexiconHost,$sourceSys $wc = New-Object System.Net.WebClient $wc.Headers.Add("Accept", "text/uri-list") $wc.DownloadString($downloadFrom).Split("`r`n") | ForEach { if ( $_.StartsWith("/persons") ) { $persons = $persons + $_ } }

write $persons }

© PCS Systemtechnik GmbH 17 DEXICON Enterprise Webservice-Interface V5.2.0

#------# Load schema file #------$schemaSrc = "{0}/xml-schemata/{1}.xsd" -f $dxHost,$bookingType $schemaDst = "{0}.xsd" -f $bookingType $schemaDstFull = "{0}/{1}" -f $destDir,$schemaDst $schemaClient = New-Object System.Net.WebClient $schemaClient.DownloadFile($schemaSrc, $schemaDstFull)

#------# Read booking data #------$lastMonth = (Get-Date).AddMonths(-1) $schemaLoc = "/xml-schemata/{0}.xsd" -f $bookingType $source = "{0}/{1}/{2}" -f $dxHost,$bookingType,$sourceSys Get-Persons $dxHost $sourceSys | ForEach { $id = $_.Split("/")[3] $destFile = "{0}\{1}.xml" -f $destDir,$id $wc = New-Object System.Net.WebClient $wc.Headers.Add("Accept", "application/xml") $wc.Headers.Add("Accept-Charset", "utf-8, *;q=0") # force UTF-8 $wc.QueryString.Add("person", $_) $wc.QueryString.Add("year", $lastMonth.Year) $wc.QueryString.Add("month", $lastMonth.Month) $bookingData = $wc.DownloadString($source).Replace($schemaLoc, $schemaDst) $bookingData | out-file -Encoding utf8 $destFile } To process the bookings of a person in Microsoft Excel 2013, we could  use a XML data source (“Data” Ribbon > “From Other Sources” > “From XML Data Import”)  open the corresponding XML file. If we choose to use the “XML Source task pane” in the next dialog, we can select the data elements which we need in our sheet. This assignment needs only to be done once since we can import different booking data files or reload data from the opened file. Remark: In Microsoft Excel, we could also use a Web Data Source (“Data” Ribbon > “From Web”). However, we would have to allow access to the Webservice-Interface to end users and Microsoft Excel cannot be kept from auto-detecting data types which can be counterproductive.

3.3 Archiving access records A common use case is archiving access records according to certain criteria. This example shows how to implement archiving of access records in an Oracle RDBMS by using the UTL_HTTP package of PL/SQL. For this example we create the following table: create table ACCESS_ARCHIVE( BOOKING_ID nvarchar2(40), PERSON_ID nvarchar2(40), READER nchar(6), BOOKING_DATE nchar(10), BOOKING_TIME nchar(8), MARKED nchar(1) ) The following script archives all accesses for the client EXAMPLE: DECLARE markReq UTL_HTTP.req; markResp UTL_HTTP.resp;

BEGIN

-- Read unread access records and stores them in ACCESS_ARCHIVE INSERT INTO ACCESS_ARCHIVE SELECT BOOKING_ID, PERSON_ID, READER, BOOKING_DATE, BOOKING_TIME, '0' FROM XMLTABLE( XMLNAMESPACES('http://www.pcs.com/2014/dexicon' AS "dx"), '/dx:accesses/dx:access' PASSING HttpUriType( 'http://dexicon:8090/accesses/EXAMPLE/.recent?forceType=xml').getXML()

18 10/2019 3 - Use cases

COLUMNS "BOOKING_ID" nvarchar2(40) PATH '@id', "PERSON_ID" nvarchar2(40) PATH 'dx:person/@domain-entity-id', "READER" nvarchar2(6) PATH 'dx:reader', "BOOKING_DATE" nvarchar2(10) PATH 'dx:date', "BOOKING_TIME" nvarchar2(8) PATH 'dx:time'); COMMIT;

-- Mark access records as read -- See chapter 5.2.4.2 for details like authentication. markReq := UTL_HTTP.BEGIN_REQUEST ( 'http://dexicon:8090/accesses/EXAMPLE/.read', 'POST'); UTL_HTTP.SET_AUTHENTICATION(markReq, 'EXAMPLE', 'Password'); UTL_HTTP.SET_HEADER (markReq, 'Transfer-Encoding', 'chunked'); UTL_HTTP.SET_HEADER (markReq, 'Content-Type', 'text/uri-list'); FOR r in (SELECT BOOKING_ID FROM ACCESS_ARCHIVE WHERE MARKED='0') LOOP UTL_HTTP.WRITE_TEXT (markReq, r.BOOKING_ID || chr(10)); END LOOP; markResp := UTL_HTTP.GET_RESPONSE(markReq); IF (markResp.status_code = UTL_HTTP.HTTP_NO_CONTENT) THEN UPDATE ACCESS_ARCHIVE SET MARKED='1'; END IF; COMMIT;

END; Please note the followings aspects:  Besides the obvious lack of any error handling, this script lacks provisions to avoid duplicates in our archive if the mark-as-read request fails. However, avoiding duplicates is straight-forward and left out for the sake of simplicity.

 It could be tempting to process the XMLTABLE row-wise in a loop which inserts each row and adds the corresponding BOOKING_ID to markReq. The COMMIT would be performed if the HTTP POST succeeds. However, this approach does not work since we could lose records if the HTTP POST reaches the Webservice-Interface but its response does not reach us, e.g. because a router dies.

3.4 Active Directory as person master record source This example shows how to use Microsoft Windows PowerShell to connect DEXICON Enterprise with your Active Directory: Once a day, the users, which the Active Directory contains, are synchronized to DEXICON with a so-called base supply. Chapter 5.2.1.3 explains the notion of a base supply. The following data is used from the Active Directory:  GUID as ID for DEXICON  Surname  First name The badge numbers are taken from a CSV file, since we do not want to change the Active Directory schema. The records are valid from the current day for nine days. All other fields will be initialized with default values. The CSV file looks like this: badge,login 00000001,luke.skywalker 00000002,darth.vader 00000003,han.solo

A prerequisite for such a base supply is an appropriate configuration in the file ams.ini. Chapter 4.1.1 contains an example of a configuration, which would be suitable for our script. import-module activedirectory

$fromDate = Get-Date -format yyyy-MM-dd $toDate = (Get-Date).AddDays(9).ToString('yyyy-MM-dd')

© PCS Systemtechnik GmbH 19 DEXICON Enterprise Webservice-Interface V5.2.0

$destUrl = "http://localhost:8090/base-supply/EXAMPLE/"+[guid]::NewGuid() $wc = New-Object System.Net.WebClient $wc.Credentials = New-Object System.Net.NetworkCredential("EXAMPLE", "Password") $wc.Headers.Add("Content-Type", "application-xml; charset=utf-8") $os = $wc.OpenWrite($destUrl, "PUT")

$utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False) $xmlWriter = New-Object System.XMl.XmlTextWriter($os, $utf8NoBomEncoding)

$xmlWriter.WriteStartDocument() $xmlWriter.WriteStartElement("base-supply") $xmlWriter.WriteAttributeString("xmlns", "http://www.pcs.com/2014/dexicon") $xmlWriter.WriteStartElement("persons") Import-CSV Badges.csv | ForEach-Object { $user = Get-ADUser -Identity $_.login -Properties objectGUID,sn,givenName

$xmlWriter.WriteStartElement("person") $xmlWriter.WriteAttributeString("domain-entity-id", $user.objectGUID)

$xmlWriter.WriteStartElement("name") $xmlWriter.WriteElementString("surname", $user.sn) $xmlWriter.WriteElementString("first-name", $user.givenName) $xmlWriter.WriteEndElement() #

$xmlWriter.WriteStartElement("authentication") $xmlWriter.WriteStartElement("badge") $xmlWriter.WriteElementString("number", $_.badge) $xmlWriter.WriteStartElement("valid-to") $xmlWriter.WriteElementString("date", $toDate) $xmlWriter.WriteElementString("time", "24:00") $xmlWriter.WriteEndElement() # $xmlWriter.WriteStartElement("valid-from") $xmlWriter.WriteElementString("date", $fromDate) $xmlWriter.WriteElementString("time", "00:00") $xmlWriter.WriteEndElement() # $xmlWriter.WriteEndElement() # $xmlWriter.WriteEndElement() #

$xmlWriter.WriteEndElement() # } $xmlWriter.WriteEndElement() # $xmlWriter.WriteEndElement() # $xmlWriter.WriteEndDocument() $xmlWriter.Flush() $xmlWriter.Close()

3.5 Integrating time recording with the PBX This example shows an integration of time recording with an Asterisk PBX: If a person, who is absent, is called, the call is immediately forwarded to the corresponding mailbox. For the sake of simplicity we assume that the extension of each person is saved in customer field 1 of the corresponding person master record. The integration consists of the following parts:  A Bash script which regularly updates attendance states in the Asterisk database: #!/bin/bash

cli="/usr/sbin/asterisk -rx" url="http://192.168.100.1:8090/persons?taStatus=abs"

curl -H Accept:application/xml $url > absent.xml cat absent.xml | grep -oPm1 "(?<=)[^<]+" > extn.txt

$cli "database deltree DEXICON" cat extn.txt | while read line; do $cli "database put DEXICON $line dummy" done This script uses curl to get a list of absent persons. From the returned XML data, the values in customer-field-1 are extracted (there are much better ways to do this) and written to the Asterisk database. Chapter 5.4.2.4 describes the XML data. A possible improvement would be the use of ETags to avoid unnecessary updates of the Asterisk database.

20 10/2019 3 - Use cases

 A custom dialplan which first checks the appropriate attendance status in the Asterisk database. exten => _X.,1,GotoIf(${DB_EXISTS(DEXICON/${EXTEN})}?absent:attendant) exten => _X.,n(absent),NoOp(${EXTEN} is absent) exten => _X.,n,VoiceMail(${EXTEN},us) exten => _X.,n,Hangup() exten => _X.,n(attendant),NoOp(${EXTEN} is attendant) exten => _X.,n,Dial(SIP/${EXTEN},20) The intermediate step of storing attendance states in the Asterisk database is due to the fact that the Webservice-Interface cannot provide attendance information in real time as described in chapter 2.1.

© PCS Systemtechnik GmbH 21

4 - Protocol examples

4 Protocol examples

This chapter introduces the REST API by a running example. We use the client EXAMPLE for all operations.

4.1 Person master records

4.1.1 Bulk synchronization of person master records The following person records are created in a transaction:

ID Surname First name Badge number Validity 123 Skywalker Luke 000001 01/01/2014 – 01/31/2014 789 Vader Darth 000002 01/01/2014 – 01/31/2014

Table 4.1 – Example records for bulk synchronization To be able to perform a so called base-supply we have to configure DEXICON Enterprise properly. For this example we need the following entries in the file ams.ini: [source-system.EXAMPLE] interface=web http-password=Password base-supply-fields=SURNAME,FIRST_NAME,TIMEID_NO,FROM_DATE,TO_DATE,  FROM_TIME,TO_TIME default-organisation_unit=001 The DEXICON Installation Manual describes the entries. Chapter 5.4.2 contains a mapping from XML entities to base-supply-fields entries. To create and/or update these records in DEXICON Enterprise we use the following request (see chapter 5.2.1.3 for details): Example 4.1 – Base supply For https please use https://host-IP:8093/... PUT http://localhost:8090/base-supply/EXAMPLE/EF9C3C72-D652AEE33FF0 HTTP/1.1 Content-Type: application-xml; charset=utf-8 Host: localhost:8090 Content-Length: 1113 Authorization: Basic RVhBTVBMRTpQYXNzd29yZA==

Skywalker Luke 000001 2014-01-31 2014-01-01 Vader Darth

© PCS Systemtechnik GmbH 23 DEXICON Enterprise Webservice-Interface V5.2.0

000002 2014-01-31 2014-01-01 Please note the following aspects:  We need no mapping of our ID to a DEXICON-specific ID because DEXICON Enterprise uses our domain specific ID.  HTTP Basic Authentication is required to ensure that no other client can write in our “namespace” which could lead to id collisions.  The XML data is subject to a XML schema which is described in chapter 5.4.2.3.

4.1.2 Creation of a single person master record Next, we create the following person record:

ID Surname First name Badge number Validity 456 Solo Han 000003 01/01/2014 – 01/31/2014

Table 4.2 – Example person master record To create a person master record in DEXICON Enterprise we use the following request (see chapter 5.2.1.1 for details): Example 4.2 – Creation of a new person master record For https please use https://host-IP:8093/... PUT http://localhost:8090/persons/EXAMPLE/456 HTTP/1.1 Host: localhost:8090 Content-Type: application/xml; charset=utf-8 Content-Length: 800 Authorization: Basic RVhBTVBMRTpQYXNzd29yZA==

001 Solo Han 000003 2014-01-31 2014-01-01 1 /reader-function-groups/aU6Qtp8NDNs

24 10/2019 4 - Protocol examples

Please note the following aspects:

 We make a PUT on a resource with consists of the client name and our id 456. It has to match with the domain-entity-id given in the person tag.  HTTP Basic Authentication is required to ensure that no other client can write in our “namespace” which could lead to id collisions.  The XML data is subject to a XML schema which is described in chapter 5.4.2.2.  If we would re-execute the previously shown base-supply, this record is deleted implicitly. Chapter 5.2.1.3 explains this behavior of base-supplies.

4.1.3 Update of a single person master record Updating a person master record consists of the following steps: 1. Reading the current record. We know its URI since it is constructed out of our client name and our person id. 2. Modifying the appropriate fields 3. Writing the record back.

We use ETags to make sure that there has not been any concurrent updates in the meanwhile. Example 4.3 – Update of a person master record For https please use https://host-IP:8093/... Request: GET http://localhost:8090/persons/EXAMPLE/456 HTTP/1.1 Accept: application/xml Host: localhost:8090 Response: HTTP/1.1 200 OK Content-Type: application/xml; charset=UTF-8 ETag: "H2qlHlDpuHQHu4LVl91XDw" Content-Length: 1510

 if the record was changed in the meanwhile, we get a 412 Precondition Failed error due to the If-Match header.  we do not need authentication for this request since it cannot lead to collisions with respect to ids.

4.1.4 Reading person master records

To read all person master records, simply perform GET on /persons:

© PCS Systemtechnik GmbH 25 DEXICON Enterprise Webservice-Interface V5.2.0

Example 4.4 – Reading person master records For https please use https://host-IP:8093/...

Request: GET http://localhost:8090/persons HTTP/1.1 Host: localhost:8090 Accept: application/xml Accept-Charset: UTF-8, *;q=0 TE: trailers Response: (Please note, that XML data is indented in the examples for improved readability. However, the Webservice-Interface does not pretty-print XML data in any way) HTTP/1.1 200 OK Connection: close Date: Tue, 10 Dec 2013 08:14:14 GMT Trailer: Content-MD5 Transfer-Encoding: chunked Server: AMS-Web-Interface/1.0.0 (DEXICON Enterprise) Content-Type: application/xml; charset=UTF-8 ETag: "6qsNnUBuj5gHPL8wleN6ig"

f91b /persons/EXAMPLE/456 001 [… data of person records …] 0 Content-MD5: 8OL7YkqGdM1aFHrtJriVrQ== We can apply several filters to our request:  Attendance status, e.g. for creating an attendance panel.  Client Chapter 5.2.1.5 describes the possibilities in detail.

4.1.5 Deletion of a person master record A person master record can be deleted by  a bulk synchronization. Records which are not supplied are deleted implicitly. Chapter 5.2.1.3 describes this behavior.

 performing DELETE on the person resource. Example 4.5 – Deletion of a person master record For https please use https://host-IP:8093/... DELETE http://localhost:8090/persons/EXAMPLE/456 HTTP/1.1 Host: localhost:8090 Authorization: Basic RVhBTVBMRTpQYXNzd29yZA== Again, we need authentication. You might want to consider disabling the record (see chapter 5.4.2.1) instead of deleting it, so that personal authorizations are not lost.

4.2 Accesses

GET /accesses returns all access records. Filters for date and person are available.

26 10/2019 4 - Protocol examples

Example 4.6 – Query all accesses from Darth Vader For https please use https://host-IP:8093/... GET http://myhost:8090/accesses?person=%2Fpersons%2FEXAMPLE%2F789 HTTP/1.1 Host: myhost:8090 Accept: text/csv Beside CSV, XML and HTML representations are supported. Chapter 5.2.4.1 describes the settings. Regardless of the format, each access record contains our id, so we can easily assign the accesses to the corresponding persons. The Webservice-Interface supports a bookmark-style mechanism so that it is possible to periodically poll for new access records. Example 4.7 – Query for all new accesses For https please use https://host-IP:8093/... The following request returns all accesses of our client, which we have not yet processed. GET http://myhost:8090/accesses/EXAMPLE/.recent HTTP/1.1 Host: myhost:8090 Accept: text/csv Every record has an id. To mark the records, which we have processed, as “read”, we use the following request: Example 4.8 – Mark access records as “read” For https please use https://host-IP:8093/... POST http://localhost:8090/accesses/EXAMPLE/.read HTTP/1.1 Authorization: Basic RVhBTVBMRTpQYXNzd29yZA== Content-Type: text/uri-list; charset=utf-8 Host: localhost:8090

/accesses/EXAMPLE/UX%2B%2F-A1c /accesses/EXAMPLE/UPVwqAAB /accesses/EXAMPLE/UPVs6AAA This request simply contains the record ids, which are URIs, in a list; each URI in a line. Please note that the bookmark mechanism works on a per-client basis and we need authentication to avoid that some other process marks access records as read which we have not processed yet.

4.3 Attendance states DEXICON Enterprise maintains the following distinct attendance states for each person:  Attendance according to time recording (at work, absent, off-site work, unknown).  Spatial attendance. DEXICON Enterprise evaluates access records to defer in which area a person is attendant. Maintaining the spatial attendance is only possible for tracking areas.

4.3.1 Get attendance states Attendance states can be queried for both, a single person as well as collections of persons. This example demonstrates the latter case. Chapter 5.2.1.4 describes how to get the attendance status of a certain person. Example 4.9 – Get all persons who are attendant in Cloud City We want to get all persons, who are attendant in Cloud City. As a prerequisite, we need the URI of Cloud City, which is a tracking area (see chapter 5.2.2.3 for details): For https please use https://host-IP:8093/...

© PCS Systemtechnik GmbH 27 DEXICON Enterprise Webservice-Interface V5.2.0

GET http://localhost:8090/areas?purpose=tracking HTTP/1.1 Host: localhost:8090 Accept: text/csv Response: HTTP/1.1 200 OK Connection: close Date: Tue, 08 Apr 2014 09:39:10 GMT Trailer: Content-MD5 Transfer-Encoding: chunked Server: AMS-Web-Interface/1.0.0 (DEXICON Enterprise) Content-Disposition: attachment; filename=Areas.csv Content-Type: text/csv; charset=UTF-8; header=present

24e area,area-name /areas/vSdXNaubezQ,Alderaan /areas/B_hSSc62dus,Cloud City /areas/6N3segCsU-k,Death Star /areas/Ixwg_x6nqMo,Tatooine […]

0

Now we can issue the actual request: GET http://localhost:8090/persons?acStatus=%2Fareas%2F6N3segCsU-k HTTP/1.1 Host: localhost:8090 Accept: text/uri-list

Please note, that this request specifies text/uri-list as return media type, so that we do not get complete master records but only their URIs. If we got all person master records in a previous request, this is sufficient and reduces traffic. Response: HTTP/1.1 200 OK Connection: close Date: Tue, 08 Apr 2014 09:58:51 GMT Transfer-Encoding: chunked Server: AMS-Web-Interface/1.0.0 (DEXICON Enterprise) Content-Type: text/uri-list; charset=UTF-8 ETag: "5I1kULpJ+KI0+n9mb+xySw"

109 # URLs of person master records. Source URL: /persons # Use these URLs to get the master records or request the # media type application/xml # from this URL to get all relevant master records # /persons/DEXICON/4LrbLH /persons/EXAMPLE/123 /persons/EXAMPLE/789 […]

0

Now we know, that Luke Skywalker (URI /persons/EXAMPLE/123) and Darth Vader (URI /persons/EXAMPLE/789) are attendant at Cloud City.

If we want to monitor who is attendant at Cloud City, we can use the ETag in our next request: GET http://localhost:8090/persons?acStatus=%2Fareas%2F6N3segCsU-k HTTP/1.1 Host: localhost:8090 Accept: text/uri-list If-None-Match: "5I1kULpJ+KI0+n9mb+xySw" Response (provided, nothing changed): HTTP/1.1 304 Not Modified Connection: close Date: Tue, 08 Apr 2014 10:13:40 GMT Server: AMS-Web-Interface/1.0.0 (DEXICON Enterprise) ETag: "5I1kULpJ+KI0+n9mb+xySw"

28 10/2019 4 - Protocol examples

4.3.2 Set attendance states Attendance states are set per-record. Luke Skywalker left Cloud City through a chute. Therefore, his attendance status is unknown: Example 4.10 – Set attendance status of Luke Skywalker to “unknown” For https please use https://host-IP:8093/... PUT http://localhost:8090/persons/EXAMPLE/123/acStatus HTTP/1.1 Host: localhost:8090 Content-Length: 3

unk Chapter 5.2.1.4 describes the supported attendance state values.

© PCS Systemtechnik GmbH 29

5 - REST API reference

5 REST API reference

The following table summarizes the resources REST API of the Webservice-Interface. The resources are detailed in chapter 5.2. Please pay attention to the different media types since they may differ in the extend of provided data. As a rule of thumb use the XML media types to get most information.

Resource Methods /administration-units GET Returns all administration units which are defined in DEXICON Enterprise. /areas GET Returns all areas which are defined in DEXICON Enterprise. /companies GET Returns all companies which are defined in DEXICON Enterprise. /doors GET, POST Returns all doors which are available in DEXICON Enterprise and provides the possibility to release doors. /{id}/single-release POST Releases the corresponding door for a single entrance. /{id}/permanent-release POST Releases the corresponding door for a certain time or unlimited. /intuscom-admin-units GET Returns all administration units which are defined in INTUS COM. /readers GET Returns all readers which are available in DEXICON Enterprise. /reader-function-groups GET Returns all authorization groups which are defined in DEXICON Enterprise. /roles GET Returns all person roles which are defined in DEXICON Enterprise. /subsystem-groupings GET Returns all organization units which are defined in DEXICON Enterprise. /time-models GET Returns all time models which are defined in DEXICON Enterprise. Master records /base-supply/{source system}/{tid} PUT Bulk synchronization of person master records. /persons GET Returns all person master records from DEXICON Enterprise. /{source system} GET Returns all person master records from the superordinate system identified by {source system}. /{id} GET, PUT, Create, read, update, delete on a person master record. DELETE /pin PUT Sets a person’s pin. /taStatus GET, PUT Read or set a person’s attendance status according to time recording. /acStatus GET, PUT

© PCS Systemtechnik GmbH 31 DEXICON Enterprise Webservice-Interface V5.2.0

Resource Methods Read or set a person’s attendance status according to access control.

Booking data /accesses GET Returns all accesses. /{source system} GET Returns all accesses which are made by persons whose master records belong to the superordinate system identified by {source system}. /.recent GET Returns all “recent” accesses, i.e. all accesses which have not been marked as “read”. /.read POST Marks accesses as “read”. /declined-accesses GET Returns all declines accesses – analogous to /accesses. /{source system} GET /.recent GET /.read POST /employee-expenditures GET Returns all employee expenditures – analogous to /accesses. /{source system} GET /.recent GET /.read POST /time-events GET Returns all time events, e.g. clock-in – analogous to /accesses. /{source system} GET /.recent GET /.read POST /declined-bookings GET Returns all declined time events and employee expenditures – analogous to /accesses. /{source system} GET /.recent GET /.read POST

Table 5.1 – Resources of the REST API Please note that the operations are subject to the restrictions mentioned in 5.1.1.2.

5.1 Basics

5.1.1 Support for multiple superordinate systems DEXICON Enterprise can be connected to multiple superordinate systems, e.g. HR and visitor management. Master record data from these systems in managed separately as well as the corresponding accesses and bookings. 5.1.1.1 Authentication The Webservice-Interface allows access to all data regardless of the superordinate systems. However, if access to data across the system boundaries could interfere, authentication is required.

32 10/2019 5 - REST API reference

In these cases, the user name is the name of the client. The password is configured in the ams.ini. The DEXICON Enterprise Installation Manual this file. Please be aware of the character set issues of HTTP Basic Authentication as described in 5.1.4.2. 5.1.1.2 Available actions Depending on the way a superordinate system is interfaced to DEXICON Enterprise, certain operations may not be available via the Webservice-Interface.

Interface Webservice- HR-PDC DEXICON internal Operation Interface Master records Create  Read    Update    Delete  Bulk synchronization  Accesses Read    Mark as read    Declined accesses Read    Mark as read    Time recording bookings Read    Mark as read   Employee expenditures Read    Mark as read   Declined time recording and employee expenditures Read    Mark as read   

Table 5.2 – Restrictions depending on interface of superordinate system

5.1.2 HTTP/1.1 5.1.2.1 Compliance The Webservice-Interface is a HTTP/1.1 (RFC 2616) compliant HTTP server. More specifically, according to RFC 2616 chapter 1.2, the Webservice-Interface is “conditionally compliant”, e.g. due to the aspects described in the next paragraph. 5.1.2.2 Connection handling The Webservice-Interface does not support pipelining (RFC 2616, chapter 8.1.2.2) and persistent connections.

© PCS Systemtechnik GmbH 33 DEXICON Enterprise Webservice-Interface V5.2.0

In case of errors, the Webservice-Interface sends an appropriate response and closes the connection without waiting until the client has finished sending data. In such a situation, the reset packet which the server sends may erase the client’s unacknowledged input buffer before it has been processed by the HTTP application. In this situation it may appear to the client as if the Webservice-Interface closed the connection without any response. RFC 2616 describes this situation in chapter 10.4.

5.1.3 Unicode The Webservice-Interface supports Unicode. However, DEXICON Enterprise supports only codepoints from within the Basic Multilingual Plane (abbr. “BMP”). If the Webservice- Interface receives data which codepoints are not within the BMP, these codepoints are replaced with the replacement character. DEXICON Enterprise normalizes all data to the Unicode Normalization Form C (abbr. “NFC”).

5.1.4 Character sets If not otherwise noted, the following character sets are supported:  ISO-8859-1  UTF-8  UTF-16  UTF-16LE  UTF-16BE 5.1.4.1 Byte order marks Please note in case of XML media types the requirements in RFC 3023 chapter 4 relating to Byte Order Marks (abbr. “BOM”): “Section 4.3.3 of [XML] specifies that XML MIME entities in the charset "utf-16" MUST begin with a byte order mark (BOM), which is a hexadecimal octet sequence 0xFE 0xFF (or 0xFF 0xFE, depending on endian). The XML Recommendation further states that the BOM is an encoding signature, and is not part of either the markup or the character data of the XML document. Due to the presence of the BOM, applications that convert XML from ‘utf-16’ to a non- Unicode encoding MUST strip the BOM before conversion. Similarly, when converting from another encoding into ‘utf-16’, the BOM MUST be added after conversion is complete. In addition to the charset ‘utf-16’, [RFC2781] introduces ‘utf-16le’ (little endian) and ‘utf-16be’ (big endian) as well. The BOM is prohibited for these charsets. When an XML MIME entity is encoded in ‘utf-16le’ or ‘utf-16be’, it MUST NOT begin with the BOM but SHOULD contain an encoding declaration. Conversion from ‘utf-16’ to ‘utf-16be’ or ‘utf- 16le’ and conversion in the other direction MUST strip or add the BOM, respectively.” 5.1.4.2 HTTP-Authentication There is no standard for how to encode characters in Basic Authentication which is required for certain operations. The Webservice-Interface interprets characters according to ISO-8859- 1.

34 10/2019 5 - REST API reference

5.1.4.3 URIs URIs are ASCII coded. However, by the use of percent encoding (e.g. the character “/” is encoded as “%2F”), it is possible to encode characters which are outside of the ASCII scope. The Webservice-Interface interprets such characters according to UTF-8.

5.1.5 Reliable transport If the Webservice-Interface talks to a HTTP/1.1 client, it sends data with chunked transfer coding. Optionally, if the TE: trailers header is given, the Content-MD5 header field in the trailer provides a checksum of the transmitted data.

If the Webservice-Interface receives messages which contain the Content-MD5 header it will use this checksum to verify the received data. Since the Webservice-Interface adheres to REST principles, no special client-side transaction handling is necessary.

5.1.6 Optimistic locking and caching

For certain resources, the Webservice-Interface supports ETags for  optimistic locking  caching.

The documentation of the respective REST method tells you whether ETags are supported.

5.1.7 Media type negotiation Several resources support more than one media type. Both ways of media type negotiation is supported:

 server-driven, by using the Accept HTTP header

 agent-driven, by using the query parameter forceType. The supported values for forceType are part of the REST method documentation below. If no media type is specified, a default is used. Since the default can change between different versions, please always specify the media type and do not rely on a certain undocumented behavior.

5.2 REST methods

5.2.1 Person master records

All person master record data is located under the base path /persons. The resources are subdivided by source system under the path /persons/{name of source system}. The URI of a person master record is /persons/{name of source system}/{id} where {id} is an identifier unique within the source system, e.g. a personnel number. Please see 5.1.4.3 how to encode identifiers with characters which cannot be ASCII encoded. 5.2.1.1 Operations on a single master record

HTTP Method GET, PUT, DELETE REST URI /persons/{source system}/{id}

A person master record is created and changed by a PUT on the respective URI: If the specified {id} does not exist, a new record is created. Otherwise, it will be changed. The {id} must have the same value as the domain-entity-id attribute (see chapter 5.4.2.2) of the enclosed entity.

© PCS Systemtechnik GmbH 35 DEXICON Enterprise Webservice-Interface V5.2.0

If you create a person master record, the {id} is a value of your choice which can be at most 40 characters long. As a rule of thumb, this is the ID of the person in your system, e.g. a personnel number or a UUID. Please keep in mind the encoding issues of URIs as described in 5.1.4.3. If a field of the enclosed entity is not set, a default value is used as described in chapter 5.4.2.6. Authentication Creating a person master record requires HTTP Basic Authentication as described in 5.1.1. Media type Person master records have the media type application/xml, see chapter 5.4.2.2. If an optional node is not set, a default value is used. Parameters None. Conditional requests The following HTTP headers are supported for conditional requests:

 ETag (Remark: The ETag of a single person master record does not cover the associated attendance states.)

 If-None-Match for GET requests

 If-Match for PUT and DELETE requests Warnings In case of PUT requests, the Webservice-Interface sends Warning headers with warn-code 199 and a corresponding warn-text in the following situations:  The subsystem-grouping field specifies an unknown organization unit.  The license is exceeded. 5.2.1.2 Setting the PIN of a single master record

HTTP Method PUT REST URI /persons/{source system}/{id}/pin

A pin can only be set. Valid pins consist of four decimal digits. Example 5.1 – Setting the PIN of a person For https please use https://host-IP:8093/... PUT http://localhost:8090/persons/DEXICON/4LrbLH/pin HTTP/1.1 Content-Type: text/plain; charset=ISO-8859-1 Host: localhost:8090 Content-Length: 4

1234 All terminals and ACMs always decline the pin “0000”. Consequently you can use this value as a secure default if a person has no pin. Media type Pins are transmitted as plain text with the media type text/plain (RFC 2046). The character sets ISO-8859-1 and UTF-8 are supported. Conditional requests Not supported since this could leak information about the current pin.

36 10/2019 5 - REST API reference

5.2.1.3 Bulk synchronization

HTTP Method PUT REST URI /base-supply/{source system}/{transaction-id} A so called “base supply” consists of all master records of the leading system, as identified by {source system}:  If a master record is part of a base supply but does not exist in DEXICON Enterprise, it is created.  If a master record is not part of a base supply but exists in DEXICON Enterprise, it is deleted.  If a master record is part of a base supply and exists in DEXICON Enterprise, it is updated. However, only the fields specified in the ams.ini (see below) are updated. Therefore, a base supply provides a simple way for synchronizing data.

The {transaction-id} is a unique id of your choice, e.g. a UUID, for the submitted base supply. The Webservice-Interface logs this id so that problems with base supplies can be traced. Authentication This method requires HTTP Basic Authentication as described in 5.1.1. Media type Person master records have the media type application/xml, see chapter 5.4.2.3. Please note that only those fields are accepted and updated, which are configured for the corresponding source system in the ams.ini. Moreover, you can define defaults in the ams.ini for most fields. The DEXICON Installation Manual describes this setting; chapter 5.4.2.5 contains the supported fields. Parameters None. Conditional requests Not supported. Warnings The Webservice-Interface sends Warning headers with warn-code 199 and a corresponding warn-text in the following situations:  The subsystem-grouping field of a record specifies an unknown organization unit.  The license is exceeded.  Master records are deactivated due to duplicate badge numbers. 5.2.1.4 Attendance status

HTTP Method GET, PUT REST URI /persons/{source system}/{id}/{type of status} For each person, there is an attendance status according to time recording and an attendance status according to access control. You can query and set both states with the above mentioned URI. {type of status} may be

 taStatus: attendance according to time recording

 acStatus: attendance according to access control

© PCS Systemtechnik GmbH 37 DEXICON Enterprise Webservice-Interface V5.2.0

Example 5.2 – Query the attendance status (access control) of a single person For https please use https://host-IP:8093/... Request: GET http://localhost:8090/persons/DEXICON/4LrbLH/acStatus HTTP/1.0 Response: HTTP/1.1 200 OK Connection: close Date: Mon, 07 Apr 2014 08:50:42 GMT Server: AMS-Web-Interface/1.0.0 (DEXICON Enterprise) Content-Type: text/plain; charset=UTF-8

unk

unk means, that the attendance status of the person is currently unknown, as described below. If you want to get the states of multiple persons, you might want to use the collection queries described in 5.2.1.5. Example 5.3 – Set the attendance status (access control) of a single person For https please use https://host-IP:8093/... The following request sets the attendance status of a person to a certain area, identified by its URI. Chapter 5.2.2.3 describes how to get the available areas. PUT http://localhost:8090/persons/DEXICON/4LrbLH/acStatus HTTP/1.1 Host: localhost:8090 Content-Length: 18

/areas/eN7nxF_CuzM Media type The states are set and returned with the media type text/plain where the charset is either UTF-8 or ISO-8859-1. The supported values depend on the type of the status:  Time recording:

 att: Attendant  abs: Absent  off: Off-site work  brk: Break  unk: Status unknown  Access control:

 abs: Absent  unk: Status unknown  The URI of any tracking area. Chapter 5.2.2.3 describes how to get the available URIs. Parameters None. Conditional requests Not supported. 5.2.1.5 Collections of person master records

HTTP Method GET REST URIs /persons /persons/{source system} Chapters 4.1.4 and 4.3.1 provide examples.

38 10/2019 5 - REST API reference

Media types Collections of person master records are available as

 application/xml, see chapter 5.4.2.4.

 text/uri-list, see RFC 2483 Parameters Parameter Meaning forceType Agent-driven : This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=xml: Returns a document of media type application/xml.  forceType=uri-list: Returns a document of media type text/uri- list. acStatus Filters person master records by attendance statuses according to access control. The filter can be  a comma-separated list which may include the following attendance statuses:  att: Attendant  abs: Absent  unk: Status unknown Example: acStatus=att,unk would return the records of all persons who are attendant or whose status is unknown.  the URI of a tracking area, optionally followed by the parameter recursive. Chapter 5.2.2.3 describes how to get the available tracking area URIs. Example 1: acStatus=%2Fareas%2FMQRMAwAAUNAAMDl would return the records of all persons which are attendant in the corresponding area. Example 2: acStatus=%2Fareas%2FMQRMAwAAUNAAMDl;recursive would return the records of all persons which are attendant in the corresponding area and all subordinate areas. taStatus Like acStatus but for attendance statuses according to time recording. Attendance statuses:  att: Attendant  abs: Absent  off: Off-site work  brk: Break  unk: Status unknown

Table 5.3 – Parameters of the persons collection resource Conditional requests For /persons, the following HTTP headers are supported for conditional requests:  ETag

Remark: If the persons collection resource is filtered by attendance status, the ETag also covers the corresponding attendance states so that changes in the attendance states are reflected in the ETag.

 If-None-Match

© PCS Systemtechnik GmbH 39 DEXICON Enterprise Webservice-Interface V5.2.0

5.2.2 Authorizations and building logic The Webservice-Interface provides access to following data sets:  Administration units  Roles  Areas  Time models  Organization units  Reader function groups  Companies With the exception of organization units, these objects are identified by URIs. The DEXICON user manual describes the objects and their use. 5.2.2.1 Administration units

HTTP Method GET REST URIs /administration-units Administration units are identified by URIs like /administration-units/AE021X0C12. The second part of the URI is the id of the administration unit as seen in the DEXICON Client. An administration unit can have different purposes in DEXICON. For the HTTP-Interface the following purpose is relevant:  Assignment to persons Example 5.4 – Query administration units which can be used to assign to persons Request: GET http://localhost:8090/administration-units?purpose=persons HTTP/1.0 Administration units are the base on which user authorizations in the DEXICON Client are restricted. They are irrelevant to access control and time recording. Media types The list of administration units is available as  text/html

 text/csv, see RFC 4180

 application/xml, see chapter 5.4.3.2. Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document. purpose Filters administration units according to their purpose. The filter may contain the following value:  persons: The administration unit can be assigned to persons.

Table 5.4 – Parameters of the administration units collection resources

40 10/2019 5 - REST API reference

5.2.2.2 Roles

HTTP Method GET REST URIs /roles Roles are identified by URIs like /roles/DE02100E45. The second part of the URI is the id of the role as seen in the DEXICON Client. Roles are the preferred concept of DEXICON Enterprise to assign rights for access control and time recording. Media types The list of roles is available as  text/html  text/csv, see RFC 4180

 application/xml, see chapter 5.4.3.2. Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.5 – Parameters of the roles collection resources 5.2.2.3 Areas

HTTP Method GET REST URIs /areas Areas are identified by URIs like /areas/eN7nxF_CuzM. An area can have different purposes in DEXICON. For the Webservice-Interface the following purposes are relevant:  Tracking, i.e. maintenance of attendance states  Assignment of authorizations Example 5.5 – Query areas which can be used to assign access authorizations For https please use https://host-IP:8093/... Request: GET http://localhost:8090/areas?purpose=ac HTTP/1.1 Media types The list of areas is available as  text/html

 text/csv, see RFC 4180

 application/xml, see chapter 5.4.3.2. Parameters Parameter Meaning

© PCS Systemtechnik GmbH 41 DEXICON Enterprise Webservice-Interface V5.2.0

forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document. purpose Filters areas according to their purpose. The value is a comma- separated list which may contain the following values:  auth: The area can be used for assigning authorizations to persons. No distinction is made between authorizations for access control and time recording. Therefore, the returned URIs can be used in access- auth/area and time-recording-auth/area elements.  ac: The area can be used for assigning access authorizations to persons. Therefore, the returned URIs can be used in access- ac/area elements.  ta: The area can be used for assigning time recording authorizations to persons. Therefore, the returned URIs can be used in time- recording-auth/area elements.  tracking: The returned areas are tracking areas. Therefore, the returned URIs can be used for querying and setting attendance statuses, see chapters 5.2.1.4 and 5.2.1.5. If multiple filters are applied, they are and-ed.

Table 5.6 – Parameters of the areas collection resources 5.2.2.4 Time models

HTTP Method GET REST URIs /time-models Time models are identified by URIs like /time-models/-7xMaSpNW64. A time model can have different purposes in DEXICON. For the Webservice-Interface, the only relevant purpose is assignment of authorizations. Media types The list of time models is available as  text/html  text/csv, see RFC 4180

 application/xml, see chapter 5.4.3.4 Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document. purpose Filters time models according to their purpose. The value is a comma- separated list which may contain the following values:  auth: The time model can be used for assigning authorizations to persons. No distinction is made between authorizations for access control and time recording. Therefore, the returned URIs can be

42 10/2019 5 - REST API reference

used in access-auth/time-model and time-recording-auth/time- model elements.  ac: The time model can be used for assigning access authorizations to persons. Therefore, the returned URIs can be used in access- auth/time-model elements.  ta: The time model can be used for assigning time recording authorizations to persons. Therefore, the returned URIs can be used in time-recording-auth/time-model elements. If multiple filters are applied, they are and-ed.

Table 5.7 – Parameters of the time-models collection resources 5.2.2.5 Organization units

HTTP Method GET REST URIs /subsystem-groupings Media types The list of organization units is available as  text/html  text/csv, see RFC 4180

 application/xml, see chapter 5.4.3 Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.8 – Parameters of the subsystem-groupings collection resources 5.2.2.6 Reader function groups (Authorization groups)

HTTP Method GET REST URIs /reader-function-groups Reader function groups are identified by URIs like /reader-function-groups/-wtqgXrzAAI. Authorization groups are created  in the DEXICON Client  automatically by the HR-PDC interface. Due to technical reasons, this collection resource only list authorization groups which are created in the DEXICON Client. However, if you are processing person master records, your client must be able to handle authorization groups which are not part of this resource. Media types The list of reader function groups is available as  text/html  text/csv (see RFC 4180)

 application/xml, see chapter 5.4.3.6

© PCS Systemtechnik GmbH 43 DEXICON Enterprise Webservice-Interface V5.2.0

Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.9 – Parameters of the reader-function-groups collection resources 5.2.2.7 Companies

HTTP Method GET REST URIs /companies Companies are identified by URIs like /companies/dOa2AkxUM_A. Media types The list of companies is available as  text/html  text/csv (see RFC 4180)

 application/xml, see chapter 5.4.3.7 Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.10 – Parameters of the companies collection resources

5.2.3 Infrastructure The Webservice-Interface provides access to following data sets:  INTUS COM administration units  Readers  Doors Please use the INTUSCOM-Monitor to configure these items. 5.2.3.1 INTUS COM administration units

HTTP Method GET REST URIs /intuscom-admin-units The resource provides a XML document which contains information about INTUS COM administration units and the readers which are assigned to them. Both, INTUS COM administration units and readers are managed in INTUSCOM-Monitor Media types The information is available as

44 10/2019 5 - REST API reference

 application/xml, see chapter 5.4.4.1 Parameters None. 5.2.3.2 Readers

HTTP Method GET REST URIs /readers Readers are identified by URIs like /readers/000400. The second part of the URI is the reader number as seen in the DEXICON Client and INTUSCOM-Monitor. Readers are managed in INTUSCOM-Monitor Media types The list of readers is available as  text/html  text/csv (see RFC 4180)

 application/xml, see chapter 5.4.4.2 Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.11 – Parameters of the readers collection resources 5.2.3.3 Doors

HTTP Method GET REST URIs /doors /doors/{id} Doors are identified by URIs like /doors/000400. The second part of the URI is the number of the reader which controls the door as seen in the DEXICON Client and INTUSCOM-Monitor. Doors are managed in INTUSCOM-Monitor. Media types The single door resource is available as application/xml, see chapter 5.4.4.3. The list of doors is available as  text/html  text/csv (see RFC 4180)

 application/xml, see chapter 5.4.4.3 Parameters for collection resource Parameter Meaning

© PCS Systemtechnik GmbH 45 DEXICON Enterprise Webservice-Interface V5.2.0

forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document.

Table 5.12 – Parameters of the doors collection resources

Releasing a door for a single entrance HTTP Method POST REST URI /doors/{id}/single-release

A single door release takes no parameter. The duration of the release is determined be the reader’s parameter setting. Example 5.6 – Releasing a door for a single entrance For https please use https://host-IP:8093/... POST http://localhost:8090/doors/010101/single-release HTTP/1.1 Content-Type: text/plain; charset=ISO-8859-1 Host: localhost:8090 Content-Length: 0

Please note that a 2xx response does not imply that a door is effectively released. If you need to monitor the door state, please use the status elements of the corresponding door resource. Releasing a door for a longer time HTTP Method POST REST URI /doors/{id}/ permanent-release There are several ways for a permanent door release:  Specifiying a timer in tenths of seconds  Starting and stopping without timer The mode is passed as plain text in the body of the request:  Number in [1;9999]: Release the door for the number of tenth of seconds

 unlimited: Releases the door without expiration.

 stop: Undoes a door release. Example 5.7 – Releasing a door for 1 minute For https please use https://host-IP:8093/... POST http://localhost:8090/doors/010101/permanent-release HTTP/1.1 Content-Type: text/plain; charset=ISO-8859-1 Host: localhost:8090 Content-Length: 3

600

Please note that a 2xx response does not imply that the command is executed as expected. If you need to monitor the door state, please use the status elements of the corresponding door resource.

46 10/2019 5 - REST API reference

5.2.4 Booking data The Webservice-Interface provides access to following data sets:  Accesses  Declined accesses  Time recording bookings  Employee expenditure bookings  Declined time recording and employee expenditure bookings These data sets are available in distinct collections which can be filtered. The collections are subdivided by clients and by records which are recent and those which have already been marked as “read”. This features allows secure subsequent read operations without duplicates or data losses. DEXICON Enterprise automatically deletes booking data, when its retention period expires. Optionally, the deletion can be deferred until the record has been marked as “read” by another system. The DEXICON Enterprise User Manual describes the configuration of retention periods.

Each record has a URI: /{type}/{source system}/{id}

 {type}: type of the booking (accesses, declined-accesses, time-events, employee- expenditures, declined-bookings)

 {source system}: client of the master record to which the record refers. 5.2.4.1 Reading bookings

HTTP Method GET REST URIs /{type} /{type}/{source system} /{type}/{source system}/.recent where {type} may be accesses, declined-accesses, time-events, employee-expenditures, declined-bookings The URI /{type}/{source system}/.recent returns only “recent” bookings. A booking is considered “recent” if has not been marked as read. Chapter 5.2.4.2 describes how to mark a booking as read. Media types Booking data is available as  text/html  text/csv, see RFC 4180

 application/xml, see chapter 5.4.4 Parameters Parameter Meaning forceType Agent-driven content negotiation: This parameter overrides the normally applied content negotiation based on the Accept header field:  forceType=html: The data is returned as HTML document.  forceType=csv: Returns a document of media type text/csv.  forceType=xml: The data is returned as XML document. year Year (4 digits) at which the record was recorded.

© PCS Systemtechnik GmbH 47 DEXICON Enterprise Webservice-Interface V5.2.0

month Month (2 digits) at which the record was recorded. Requires that the year parameter is set. day Day of month (2 digits) at which the record was recorded. Requires that the year and month parameters are set. person If the person={master record URI} parameter is set, only those records are returned which refer to the given master record. Please note, that it might not be possible to assign records to persons.

Table 5.13 – Parameters of the booking collection resources Conditional requests Not supported. 5.2.4.2 Marking bookings as read

HTTP Method POST REST URI /{type}/{source system}/.read where {type} may be accesses, declined-accesses, time-events, employee-expenditures, declined-bookings You can mark bookings that you have already processed as “read”. The next time you load booking data via a /{type}/{source system}/.recent URI, you only get records which you have not marked as read. Chapter 4.2 provides an example. Authentication This method requires HTTP Basic Authentication as described in 5.1.1. Media types The Webservice-Interface expects an entity of type text/uri-list (RFC 2483). The character sets ISO-8859-1 and UTF-8 are supported. A single POST request may contain up to 1,200,000 URIs. Conditional requests Not supported. A record can be marked as “read” several times.

5.3 HTTP error codes The Webservice-Interface currently uses the following status codes as specified in RFC 2616.

Status code Description 100 Continue The Webservice-Interface supports client requests with the header Expect: 100-continue and answers appropriately. 200 Ok 201 Created Returned for base-supplies (see chapter 5.2.1.3) and if a single master record has been created (see chapter 5.2.1.1). 204 No Content The Webservice-Interface normally responds with this code if PUT, POST, or DELETE operations succeed. 304 Not Modified See RFC 2616, chapter 10.3.5.

48 10/2019 5 - REST API reference

400 Bad Request See RFC 2616, chapter 10.4.1. The Webservice- Interface includes an HTML page with an error description. 401 Unauthorized The request requires user authentication. Chapter 5.1.1 describes the cases which require authentication. 403 Forbidden The following operations are forbidden:  Creating or deleting person master records for the client DEXICON or clients which are connected via another interface, e.g. HR-PDC. Therefore, base supplies for these clients are also forbidden.  Marking time recording bookings or employee expenditures as read for HR-PDC or KK1 clients. 404 Not Found Self-explanatory. This status is also returned, if the resource exists but query parameters are invalid. The HTML error page contains an error description. 405 Method Not Allowed See RFC 2616, chapter 10.4.5. As required by the RFC, the Allow header contains a list of supported methods. 406 Not Acceptable The server-driven content negotiation failed with respect to the media type or the character set. The documentation of the corresponding resource contains the list of supported media types and character sets. This status is also returned, if the media range or list of character sets is invalid. If you cannot change the Accept header, you might want to use client-driven negotiation. See chapter 5.1.7 for details. 412 Precondition Failed The ETag given in the If-Match header does not match the current version. Please see RFC 2616, chapter 14.24 for a discussion. 413 Request Entity Too Large See RFC 2616, chapter 10.4.14. If marking bookings as read fails with this status code, please see chapter 5.2.4.2 for limitations on the maximum number of booking URIs. 414 Request URI Too Large The Webservice-Interface supports URIs up to 1,000 characters. 415 Unsupported Media Type See RFC 2616, chapter 10.4.16. The documentation of the REST methods contains for each resource a list of supported media types. 417 Expectation failed Currently, the only accepted Expect header value is 100-continue. 500 Internal Server Error Presumably a bug in the Webservice-Interface or inconsistent data in the database. 501 Not Implemented Unsupported Transfer-Encoding (supported: chunked) or HTTP method (supported: DELETE, GET, POST, PUT). 503 Service Unavailable The Webservice-Interface could not access the DEXICON database due to the following reasons:

© PCS Systemtechnik GmbH 49 DEXICON Enterprise Webservice-Interface V5.2.0

 There is no connection to the database. The Webservice-Interface tries to reconnect every 20 seconds.  The database is currently locked, see chapter 2.1. 505 HTTP Version Not Supported The Webservice-Interface currently supports HTTP/1.0 and HTTP/1.1.

Table 5.14 – HTTP status codes Future version may use further HTTP status codes.

5.4 XML Schemata DEXICON Enterprise validates XML data against corresponding XML schemata. However, please be advised, that if your client validates data received from the Webservice-Interface it might not be compatible with newer versions of DEXICON Enterprise.

All elements are in the namespace http://www.pcs.com/2014/dexicon. The XML schema files are available for download from the Webservice-Interface under /documentation.

Picture 5.1 – HTML page with XML schema documentation

5.4.1 Notation The following documentation contains pictures for describing XML schemata. These pictures should be quite self-explanatory. Please pay attention to the used grouping constructs:

Symbol Name Description

The sequence group requires that each element in the group sequence appears in the specified order.

50 10/2019 5 - REST API reference

all In case of an all group, the order of the elements is not important. Table 5.15 – Notation of groups in XML schemata

5.4.2 Master records 5.4.2.1 Basic type

Regardless of single records or collections, all person master records refer to personType:

Attribute

domain-entity-id

dx:selfdx:

dx:groupingdx:

personType dx:namedx:

DEXIC O N Enterprise master record dx:authenticationdx:

dx:authorizationdx:

dx:personnel-numberdx:

dx:mailtext-on-bookingdx:

dx:customer-fieldsdx:

dx:info-fieldsdx:

dx:disableddx:

dx:visitordx:

dx:remarkdx:

Picture 5.2 – Overview of personType Most elements are optional because they can be filled with defaults. domain-entity-id

The domain-entity-id is the entity identifier of the person in the source client. Its value is opaque to DEXICON Enterprise. It is a constant set at creation time. The id is used amongst others in access records, so that a client can assign accesses to the corresponding entities.

The domain-entity-id can have up to 40 characters. self

The self element contains the URI of the record when accessed via the Webservice-Interface. It is ignored by the Webservice-Interface when receiving a record.

© PCS Systemtechnik GmbH 51 DEXICON Enterprise Webservice-Interface V5.2.0

grouping

dx:administration-unitdx:

dx:subsystem-groupingdx:

C orresponds to the organization unit in DEXIC O N Enterprise. dx:groupingdx: dx:company-codedx:

dx:costcenterdx:

dx:companydx:

Picture 5.3 – Overview of the personType/grouping element

The grouping element encapsulates all different types of groups to which a person can belong:

 administration-unit (URI): Administration unit to which the person belongs, e.g. /administration-units/DE02100D44.

Administration units define which DEXICON users have access to the record. Chapter 5.2.2.1 describes how to get a list of administration units. Please note that only administration units can be used, which have the purpose “persons”.

 subsystem-grouping (3 characters long): Organization unit to which the person belongs. A person can be assigned to an organization unit. If this element is not set, a default can beor used (see chapter 5.4.2.6). Chapter 5.2.2.5 describes how to get a list of organization units. Please note that it is possible for this field to refer to organization units which do currently not exist in DEXICON Enterprise. This exception is due to the HR-PDC interface.

 company-code (4 characters long): The company code. The value of this field is not evaluated by DEXICON Enterprise.

 costcenter (10 characters long): The costcenter. The value of this field is not evaluated by DEXICON Enterprise.

 company (URI): Company of the person, e.g. /companies/dOa2AkxUM_A. Chapter 5.2.2.7 describes how to get a list of companies. name

dx:surnamedx: dx:namedx: dx:first-namedx:

Picture 5.4 – Overview of the personType/name element The name element groups surname and first name of the person. Both elements can have up to 40 characters.

52 10/2019 Attribute

dx:selfdx:

URL of the record w hen accessed v ia the DEXIC O N HTTP-Interface. Ignored by 5 - REST API reference DEXIC O N Enterprise w hen receiv ing a record.

dx:groupingdx:

authentication dx:namedx:

dx:badgeType (extension)

dx:numberdx: personType dx:badgedx: dx:dateTimeType DEXIC O N Enterprise master record dx:datedx: dx:valid-todx: dx:timedx:

dx:dateTimeType

dx:datedx: dx:valid-fromdx: dx:timedx:

dx:authenticationdx: dx:badgeType

dx:numberdx:

dx:substitutedx: dx:dateTimeType

dx:datedx: dx:valid-todx: dx:timedx:

dx:allowdx: ed dx:biometricsdx: dx:alternative-authenticationdx: dx:remarkdx: dx:authorizationdx: Picture 5.5 – Overview of the personType/authentication element dx:personnel-numberdx: Every person must have a badge and can optionally have a substitute badge. If biometrics are used, dx:mailtext-on-bookingdx: certain persons might need an alternative. For example, the fingerprints of certain persons dx:customer-fieldsdx: cannot be evaluated electronically.

 dx:info-fieldsdx: badge

dx:disableddx:  number (up to 20 digits): The badge number. Padding with leading zeros is not dx:visitordx: required. Please note that the effective maximum length of the number is determined

dx:remarkdx: by a parameter of the configuration file ams.ini. The DEXICON Installation Manual describes this setting.  valid-to and valid-from: Validity period of the badge. The period is given as interval [valid-from;valid-to[ and is not timezoned. Both elements consist of the sub- elements date (yyyy-mm-dd) and time (HH:MM, 24:00 is supported).  substitute: A badge can be temporarily substituted with another one. The substitute becomes active as soon as the record is saved. Therefore, only the valid-to element is available.  biometrics Use this element to allow or deny a person alternative authentication, e.g. using a PIN instead of fingerprint. The configuration of the readers determine, what is meant by “alternative authentication”.

 allowed: One of not-available (denies alternative authentication), available (allowes alternative authentication) or governed-by-profile (alternative authentication is allowed or denied based on profiles, i.e. it is decided based on time and location).  remark (up to 100 characters): An optional remark, which gives reason why alternative authentication is allowed. authorization A person’s authorization consists of

© PCS Systemtechnik GmbH 53 DEXICON Enterprise Webservice-Interface V5.2.0

Attribute

dx:selfdx:

 URL foflags the record whether w hen the person may use access control and/or time recording. accessed v ia the DEXIC O N HTTP-Interface. Ignored by  DEXICreader O N Enterprise function w hen groups which define the functions which a person may use at a reader, e.g. receiv ing a record. open the door or disarm the EMA. dx:groupingdx:  role based spatial and temporal authorizations which are established by roles. dx:namedx:

 dx:authenticationdx:personal spatial and temporal authorizations.

dx:accessdx:

dx:time-recordingdx: personType dx:reader-function-groupdx: DEXIC O N Enterprise master record C orresponds to the authorization group in DEXIC O N Enterprise.

dx:areadx:

dx:time-modeldx:

dx:from-datedx: dx:additional-access-authdx: dx:access-authdx: dx:to-datedx: 0..¥

dx:toggle-opendx: dx:authorizationdx:

dx:toggle-closedx:

dx:areadx:

dx:time-modeldx: dx:additional-time-recording-a...dx: dx:time-recording-authdx: dx:from-datedx: 0..¥

dx:to-datedx:

Attribute

id

source

dx:rolesdx: dx:role-assignmentdx: dx:roledx: 0..¥

dx:from-datedx:

dx:to-datedx: dx:personnel-numberdx: Picture 5.6 – Overview of the personType/authorization element The dx:mailtext-on-bookingdx: optional authorization element consists of the following optional sub-elements: dx:customer-fieldsdx:  access (boolean): Specifies whether the person is authorized for access control. This flag dx:info-fieldsdx:is only a main switch. A person’s effective authorization is defined by profiles and allowed dx:disableddx:reader functions.

dx:visitordx: Please note that DEXICON is licensed for a certain number of records used in access

dx:remarkdx: control. If this flag is set, the record is counted in this regard.  time-recording (boolean): Specifies whether the person is authorized for time recording and employee expenditures. This flag is only a main switch. A person’s effective authorization is defined by profiles and allowed reader functions. Please note that DEXICON is licensed for a certain number of records used in time recording. If this flag is set, the record is counted in this regard.

 reader-function-group (URI): Specifies the set of reader functions which the person may use. Chapter 5.2.2.6 describes how to get a list of reader function groups.

54 10/2019 Attribute

dx:selfdx:

URL of the record w hen accessed v ia the DEXIC O N HTTP-Interface. Ignored by 5 - REST API reference DEXIC O N Enterprise w hen receiv ing a record.

dx:groupingdx: Please be prepared to receive person master records from the Webservice-Interface which

dx:namedx: use URIs which are not part of the collection resource /reader-function-groups.  additional-access-auth: Contains pairs of areas and time models (both given as URIs) dx:authenticationdx: which form an access authorization. Each pair can optionally be time limited with the interval [from-date;to-date]. Dates are given as yyyy-mm-dd. dx:accessdx: Chapter 5.2.2.3 describes how to get a list of areas; chapter 5.2.2.4 describes how to get list dx:time-recordingdx:of time models. Please note that only areas and time models can be used, which have personType the purpose “authorization”. dx:reader-function-groupdx: DEXIC O N Enterprise master The toggle-open and toggle-close elements (boolean) apply to readers which allow to record C orresponds to the authorization toggle group ain DEXICdoor O permanently N Enterprise. open. With these flags you can specify whether open and/or close is allowed. dx:areadx:  additional-time-recording-auth: Analogous to additional-access-auth but for time recording authorizations. dx:time-modeldx:

dx:from-datedx: area dx:additional-access-authdx: dx:access-authdx: dx:to-datedx: time-model additional-time-recording-auth time-recording-auth0..¥ from-date 0..¥ dx:toggle-opendx: dx:authorizationdx: to-date dx:toggle-closedx: Picture 5.7 – Overview of the personType/authorization/additional-time-recording-auth dx:areadx: element

 roles: Contains roles (given as URIs) which form an authorization. Each role dx:time-modeldx: can dx:additional-time-recording-a...dx: dx:time-recording-authdx: optionally be time limited with the interval [from-date;to-date]. Dates are given as yyyy- dx:from-datedx: mm-dd. 0..¥ Chapter 5.2.2.2 describes how to get a list of roles. dx:to-datedx:

Attribute

id

source

dx:rolesdx: dx:role-assignmentdx: dx:roledx: 0..¥

dx:from-datedx:

dx:to-datedx:

dx:personnel-numberdx: Picture 5.8 – Overview of the personType/authorization/roles element dx:mailtext-on-bookingdx: Attribute “source” defines, from which source the role is assigned. Sources for role assignments can be: dx:customer-fieldsdx:  "http" dx:info-fieldsdx: from Webservice-Interface

dx:disableddx:  "user" from DEXICON dx:visitordx:  "default-role"

dx:remarkdx: from DEXICON script (for default roles by change of organization unit assignment to a person)

© PCS Systemtechnik GmbH 55 DEXICON Enterprise Webservice-Interface V5.2.0

 "hr-pdc-config" from DEXICON script (for person from SAP clients)  "script" from external scripts Usage of role assignments differ for operation on base supply (bulk synchronization) and on a single master record. Role assignments in base supply In base supply, there is no need to specify “id” and “source” attributes for role assignments. They will be ignored internally and are deprecated. Via base supply you can add, change or delete role assignments to persons. Roles assigned by DEXICON client or other sources like scripts will not be modified by the base supply. Example 5.8 – Role assignment in base supply PUT http://localhost:8090/base-supply/EXAMPLE/EF9C3C72-D652AEE33FF0 HTTP/1.1 …

/roles/Imp0000007 2018-04-01 2021-06-30 /roles/Imp0000008

Role assignments in single person master record Version 2.1.0 or higher: For single master record only “source” attribute is needed for old assignments as received from the GET method. If the “source” attribute is omitted, the Webservice-Interface is assumed to be the source. Version 2.1.0 is compatible to Version 2.0.x. The “id” attribute will be ignored. For compatibility the “deliver-role-assignment-id” switch has to be set to “1” if your application needs the “id” attribute. Otherwise set the switch to “0” and implement requirements from the newer version. Version 2.0.x: For single master record, “id” and “source” attributes are needed for old assignments as received from the GET method. The received role assignments for the person can originate from different sources like DEXICON client, scripts or Webservice-Interface. To add new role assignments please omit its attributes. To delete a role assignment omit the role assignment. Only roles assigned by Webservice- Interface and DEXICON can be deleted. Role assignments from other sources like scripts remain unaffected. Role assignments are not mutable. Therefore its attributes are not mutable. If you want to change a role assignment simply remove its attributes and make your changes. Example 5.9 – Role assignment in single person master record in Version 2.1.0 ff PUT http://localhost:8090/persons/EXAMPLE/456 HTTP/1.1

56 10/2019 5 - REST API reference

/roles/Imp0000007 2019-04-01 2021-06-30 /roles/Imp0000008

/roles/6060606060 2019-04-15 2025-06-18 /roles/cccccccccc /roles/Imp0000099 Example 5.10 – Role assignment in single person master record in Version 2.0.x PUT http://localhost:8090/persons/EXAMPLE/456 HTTP/1.1 …

/roles/Imp0000007 2019-04-01 2021-06-30 /roles/Imp0000008

/roles/6060606060 2019-04-15 2025-06-18 /roles/cccccccccc /roles/Imp0000099 personnel-number Personnel number of the person, 8 characters long. mailtext-on-booking An integer [0;14]. The number corresponds to a text in the parameter settings of the readers. When the person makes a booking, the terminal displays the appropriate text. customer-fields Customer fields can be used for any purpose the customer likes to. The labels of these fields in the DEXICON Client can be configured in the configuration file ams.ini.

© PCS Systemtechnik GmbH 57 DEXICON Enterprise Webservice-Interface V5.2.0

dx:customer-field-1dx:

dx:customer-field-2dx: dx:customer-fieldsdx: dx:customer-field-3dx:

dx:customer-field-4dx:

Picture 5.9 – Overview of the personType/customer-fields element Each field can have up to 100 characters. info-fields

The info-fields contain the balance values which can be displayed at terminals. Therefore, the values and their order has to match the parameter settings of the terminals. Please note that the order of the balances may differ between the Webservice-Interface and the HR-PDC interface because of the info-field-order parameter in the configuration file ams.ini. This parameter re-sorts the balances received from the HR-PDC interface.

dx:info-field-1dx:

dx:info-field-2dx:

dx:info-field-3dx:

dx:info-field-4dx:

dx:info-field-5dx: dx:info-fieldsdx: dx:info-field-6dx:

dx:info-field-7dx:

dx:info-field-8dx:

dx:info-field-9dx:

dx:info-field-10dx:

Picture 5.10 – Overview of the personType/info-fields element Each field may have up to 13 characters. disabled

dx:manuallydx:

dx:badge-number-ambiguousdx: dx:disableddx: dx:too-many-failed-attemptsdx:

dx:too-long-inactivedx:

Picture 5.11 – Overview of the personType/disabled element A master record can be disabled due to different reasons:

 manually (bool): Can be set to disable a master record.

 badge-number-ambiguous (bool, read-only): DEXICON Enterprise automatically disables master records if a badge is assigned to more than one master record. This field is read- only and always provided by the Webservice-Interface.

58 10/2019 5 - REST API reference

 too-many-failed-attempts (bool, read-only): DEXICON Enterprise can disable master records if a certain number of access attempts is exceeded. This field is read-only and always provided by the Webservice-Interface.

 too-long-inactive (bool, read-only): DEXICON Enterprise can disable master records if a certain duration of inactivity is exceeded. This field is read-only and always provided by the DEXICON Webservice-Interface. visitor If the element exists, the person is a visitor. Visitors are listed separately in the DEXICON Client.

dx:visitordx: dx:hostdx:

Picture 5.12 – Overview of the personType/visitor element

If a person is a visitor, a host has to be specified. The host element is a plain text element and may contain up to 40 characters. remark

The remark element may contain up to 1,000 characters for a remark – including line breaks. 5.4.2.2 XML Schema for a single person record

A single person record, e.g. the resource http://myhost:8090/persons/EXAMPLE/123 is represented by a single person element of type personType: 5.4.2.3 XML Schema for bulk synchronization Bulk synchronizations (chapter 5.2.1.3) use the following schema:

© PCS Systemtechnik GmbH 59 DEXICON Enterprise Webservice-Interface V5.2.0

Picture 5.13 – XML Schema of a base supply

Normally, a base supply is a sequence of person elements of personType type. The unique- entity-id constraint enforces that entity ids (attribute domain-entity-id) have to be unique within a client and consequently within a base supply.

Since PINs are not part of personType, they are transmitted separately within the pins element, which is a sequence of pin elements. Each pin element references a person master record via the domain-entity-id and contains the actual PIN, which consists of 4 digits. All terminals and ACMs decline the pin “0000”. Consequently you can use this value as a secure default if a person has no pin. Example 5.11 – Base supply document with PINs

Skywalker Luke […] Vader

60 10/2019 5 - REST API reference

Darth […]

123 1478 789 8963

5.4.2.4 XML Schema for person record collections

The person collection resources (chapter 5.2.1.5), e.g. http://myhost:8090/persons or http://myhost:8090/persons/EXAMPLE are represented by a persons element which contains person elements of type personType.

persons dx:persondx: 0..¥ Picture 5.14 – XML schema for person collection resources 5.4.2.5 Denotation of XML elements in ams.ini

The base-supply-fields parameter in the ams.ini refers to sub-elements of the base-supply element. The mapping is as follows:

Parameter value XML element (relative to /base-supply) ADMIN_UNIT_ID persons/person/person/grouping/administration-unit ORGANISATION_UNIT persons/person/person/grouping/subsystem-grouping SURNAME persons/person/name/surname FIRST_NAME persons/person/name/first-name TIMEID_NO persons/person/authentication/badge/number FROM_DATE persons/person/authentication/badge/valid-from/date TO_DATE persons/person/authentication/badge/valid-to/date FROM_TIME persons/person/authentication/badge/valid-from/time TO_TIME persons/person/authentication/badge/valid-to/time PERNO person/personnel-number PERSONAL_CODE pins/pin/code MAIL_INDICATOR persons/person/mailtext-on-booking COMP_CODE persons/person/grouping/company-code COSTCENTER persons/person/grouping/costcenter CUSTOMER_FIELD_1 persons/person/customer-fields/customer-field-1 CUSTOMER_FIELD_2 persons/person/customer-fields/customer-field-2 CUSTOMER_FIELD_3 persons/person/customer-fields/customer-field-3 CUSTOMER_FIELD_4 persons/person/customer-fields/customer-field-4 INFO_FIELD_1 persons/person/info-fields/info-field-1 INFO_FIELD_2 persons/person/info-fields/info-field-2 INFO_FIELD_3 persons/person/info-fields/info-field-3 INFO_FIELD_4 persons/person/info-fields/info-field-4 INFO_FIELD_5 persons/person/info-fields/info-field-5 INFO_FIELD_6 persons/person/info-fields/info-field-6 INFO_FIELD_7 persons/person/info-fields/info-field-7

© PCS Systemtechnik GmbH 61 DEXICON Enterprise Webservice-Interface V5.2.0

INFO_FIELD_8 persons/person/info-fields/info-field-8 INFO_FIELD_9 persons/person/info-fields/info-field-9 INFO_FIELD_10 persons/person/info-fields/info-field-10 AUTHORISATION_GROUP persons/person/person/authorization/reader-function- group DEACTIVATED persons/person/disabled/manually SUBSTITUTE_FLAG persons/person/authentication/badge/substitute SUBSTITUTE_TIMEID_NO persons/person/authentication/badge/substitute/number SUBSTITUTE_TO_DATE persons/person/authentication/badge/substitute/valid- to/date SUBSTITUTE_TO_TIME persons/person/authentication/badge/substitute/valid- to/time ACCESS_FLAG persons/person/authorization/function BOOKING_FLAG persons/person/authorization/function VISITOR_FLAG persons/person/visitor VISITED_PERSON persons/person/visitor/host COMPANY_NO persons/person/grouping/company REMARK persons/person/remark ALTERNATIVE_AUTH persons/person/authentication/biometrics/alternative- authentication/allowed ALTERNATIVE_AUTH_REASON persons/person/authentication/biometrics/alternative- authentication/remark PERSON_PROFILES persons/person/authorization/additional-access-auth persons/person/authorization/additional-time- recording-auth PERSON_ROLE_ASSIGNMENTS persons/person/authorization/roles

Table 5.16 – Values for the base-supply-fields parameter The parameter values are case-insensitive. 5.4.2.6 Default values In the configuration file ams.ini, you can specify default values for person master record fields. The parameter name is built from the corresponding name of the base-supply-fields parameter (see above), appended to default. An exception to the naming is the administration unit field with “default-administration_unit” whereas in base-supply-fields it is named as ADMIN_UNIT_ID.

In addition, default values are not supported for the PERSON_ROLE_ASSIGNMENTS, PERSON_PROFILES and REMARK fields.

Possible name entries for example ORGANISATION_UNIT base-supply field: Allowed: “default” lower case and “field name” case-insensitive  default-ORGANISATION_UNIT=AAA  default-organisatioN_unit=AAA  default-organisation_unit=AAA Not allowed: “default” not lower case  DEFAULT-ORGANISATION_UNIT=AAA

Example 5.12 – Section of ams.ini with default values [source-system.EXAMPLE] interface = web http-password = Password base-supply-fields = SURNAME, FIRST_NAME, TIMEID_NO, FROM_DATE, TO_DATE,  FROM_TIME, TO_TIME editable-fields = SURNAME, ORGANISATION_UNIT, VISITOR_FLAG, TIMEID_NO, 

62 10/2019 5 - REST API reference

PERSONAL_CODE default-organisation_unit = 001 default-personal_code = 0000 Please note that the default values can refer to the internal ids or to the corresponding object’s URI. For organization unit in the example above the default value refer to the internal id of the corresponding object and not to its URI. Another examples are below. Please also note that some values are only applicable for the base supply such as default- TIMEID_NO, default-SUBSTITUTE_TIMEID_NO or default-PERSONAL_CODE. Further examples: default-administration_unit=1111111111 default-ORGANISATION_UNIT=BBB default-SURNAME=Hans default-FIRST_NAME=Muster #default-TIMEID_NO => only applicable for base supply default-TIMEID_NO=55555578 default-FROM_DATE=20100901 default-TO_DATE=20400731 default-FROM_TIME=0700 default-TO_TIME=1830 default-PERNO=12345678 default-MAIL_INDICATOR=x default-COMP_CODE=4444 default-COSTCENTER=1010 default-CUSTOMER_FIELD_1= 100 characters allowed default-CUSTOMER_FIELD_2=b default-CUSTOMER_FIELD_3=c default-CUSTOMER_FIELD_4=d default-INFO_FIELD_1=13 chars! default-INFO_FIELD_2=2 default-INFO_FIELD_3=y default-INFO_FIELD_4=4 default-INFO_FIELD_5=x default-INFO_FIELD_6=6 default-INFO_FIELD_7=7 default-INFO_FIELD_8=z default-INFO_FIELD_9=9 default-INFO_FIELD_10=10 #default-AUTHORISATION_GROUP => URI default-AUTHORISATION_GROUP=/reader-function-groups/9VU8zCiu1vg default-DEACTIVATED=0

© PCS Systemtechnik GmbH 63 DEXICON Enterprise Webservice-Interface V5.2.0

default-SUBSTITUTE_FLAG=1 #default-SUBSTITUTE_TIMEID_NO => only applicable for base supply default-SUBSTITUTE_TIMEID_NO=55555558 default-SUBSTITUTE_TO_DATE=20191028 default-SUBSTITUTE_TO_TIME=2400 default-ACCESS_FLAG=1 default-BOOKING_FLAG=1 default-VISITOR_FLAG=1 default-VISITED_PERSON=Sabine Muster #default-COMPANY_NO => URI default-COMPANY_NO=/companies/yRVZn7I3cko #default-ALTERNATIVE_AUTH: Values 0 for off, 1 for on, 2 for via profiles default-ALTERNATIVE_AUTH=1 default-ALTERNATIVE_AUTH_REASON=for test #default-PERSONAL_CODE => only applicable for base supply default-PERSONAL_CODE=5634

Effect of the different input options for the master record fields: Field value is Field value is Field value is Single master transferred via changed via specified in ams.ini record operation Webservice- DEXICON client as default value or bulk Interface synchronization ------Field value will be taken from System default value (Only optional fields) x Default value set in ams.ini x Value set in DEXICON client x x 1) If master record updated via Webservice- Interface: Default value set in ams.ini

2) If field updated via DEXICON client:

64 10/2019 5 - REST API reference

Value set in DEXICON client x Value set in Webservice- Interface x x Value set in Webservice- Interface x x 1) If master record updated via Webservice- Interface: Value set in Webservice- Interface

2) If field updated via DEXICON client: Value set in DEXICON client x x x 1) If master record updated via Webservice- Interface: Value set in Webservice- Interface

2) If field updated via DEXICON client: Value set in DEXICON client

Table 5.17 – Effect of the different input options for the master record fields

5.4.3 Authorizations and building logic The XML schemata for roles, administration units, areas, time models, organization units, reader function groups, and companies all follow the same scheme: They are a sequence of elements, each with an id attribute and a name element. Other elements e.g. administration- unit are specific to several of this schemata.

© PCS Systemtechnik GmbH 65 DEXICON Enterprise Webservice-Interface V5.2.0

5.4.3.1 Administration units

Attribute

id

administration-units dx:administration-unitdx: dx:iddx: 0..¥ dx:namedx:

dx:remarkdx:

Picture 5.15 – XML schema for adminisration units

The id attribute is of type anyURI and contains values such as

administration-units/AE021X0C12.

Element id is of type adminUnitIdType and contains values such as AE021X0C12.

adminUnitIdType ensures the correct usage of administration unit ids. 5.4.3.2 Roles

Attribute

id

roles dx:roledx: dx:iddx:

0..¥ dx:namedx:

dx:administration-unitdx:

dx:remarkdx:

Picture 5.16 – XML schema for roles

The id attribute is of type anyURI and contains values such as /roles/DE02100E45.

Element id is of type roleIdType and contains values such as DE02100E45.

roleIdType ensures the correct usage of role ids.

66 10/2019 5 - REST API reference

5.4.3.3 Areas

Attribute

id

areas dx:areadx: dx:namedx:

0..¥ dx:administration-unitdx:

dx:remarkdx:

dx:readersdx: dx:readerdx:

0..¥ Picture 5.17 – XML schema for areas

The id attribute is of type anyURI and contains values such as /areas/eN7nxF_CuzM. 5.4.3.4 Time models

Attribute

id

time-models dx:time-modeldx: dx:namedx: 0..¥ dx:administration-unitdx:

dx:remarkdx:

Picture 5.18 – XML schema for time models

The id attribute is of type anyURI and contains values such as /time-models/-7xMaSpNW64. 5.4.3.5 Organization units

Attribute

id

subsystem-groupings dx:subsystem-groupingdx: dx:namedx: 0..¥

dx:administration-unitdx:

Picture 5.19 – XML schema for organization units

The id attribute is of type string and contains the number of the organization units as seen in the DEXICON Client. 5.4.3.6 Reader function groups

Attribute

id reader-function-groups dx:reader-function-groupdx:

0..¥ dx:namedx:

Picture 5.20 – XML schema for reader functions

© PCS Systemtechnik GmbH 67 DEXICON Enterprise Webservice-Interface V5.2.0

The id attribute is of type anyURI and contains values such as /reader-function-groups/- wtqgXrzAAI. 5.4.3.7 Companies

Attribute

id

companies dx:companydx: dx:namedx: 0..¥

dx:administration-unitdx:

Picture 5.21 – XML schema for companies

The id attribute is of type anyURI and contains values such as /companies/dOa2AkxUM_A.

5.4.4 Infrastructure 5.4.4.1 INTUS COM administration units

dx:intuscomAdministrationUnitType

Attribute

id

dx:namedx: intuscom-root-administration-...

dx:readersdx: dx:readerdx:

0..¥

dx:intuscomAdministrationUnitType

Attribute dx:intuscom-administration-un...dx: dx:intuscom-administration-unitdx:

0..¥

Picture 5.22 – XML schema for INTUS COM administration units The structure of the XML schema is recursively defined according to the semantic of INTUS COM administration units which form a tree. An INTUS COM administration unit

 is identified by the id attribute which is of type normalizedString and contains the opaque INTUS COM id.

 can contain number of readers which are listed in the readers element. The reader elements are of type anyURI and contain values such as /readers/000400.  can contain any number of subordinate INTUS COM administration units. 5.4.4.2 Readers

68 10/2019 5 - REST API reference

Attribute

id

readers dx:readerdx: dx:addressdx: 0..¥ dx:locationdx:

dx:doordx:

Picture 5.23 – XML schema for readers

The id attribute is of type anyURI and contains values such as /readers/000400. The address element contains the reader number as used in the DEXICON Client. The location element contains the reader name resp. location. The reader number results of the wiring of the reader. The location is set in the INTUSCOM- Monitor.

The optional door element is available if a door is configured in the INTUSCOM-Monitor. It references the corresponding door resource which is described in the next chapter. 5.4.4.3 Doors

The /doors resources provide information about the current state of doors and mean to release them with POST to certain sub-resources.

dx:doorType

Attribute

dx:readerdx: doors dx:doordx: URL of the corresponding reader. 0..¥ dx:locationdx:

dx:statusdx:

dx:permanent-release-statusdx:

Picture 5.24 – XML schema for doors

The id attribute is of type anyURI and contains values such as /doors/000400. The reader element contains the URL of the reader which controls the door. The location element contains the reader name resp. location. Depending on the wiring and configuration, status information is available:  The status element provides information whether the door is currently open or closed. If it is opened, further information is available:

dx:unknowndx:

dx:closeddx: doorStatusType dx:authorizeddx: Description of a door status

dx:opendx: dx:too-longdx:

dx:unauthorizeddx:

© PCS Systemtechnik GmbH 69 DEXICON Enterprise Webservice-Interface V5.2.0

Picture 5.25 – XML schema for door status  The permanent-release-status element provides information whether the door is currently permanently released and the reason for the state:

dx:unknowndx:

dx:not-releaseddx:

permanentReleaseStatusType dx:by-fire-alarmdx: Description of a permanent release status of a door dx:by-control-recorddx: dx:releaseddx: dx:by-profiledx:

dx:by-toggle-functiondx:

Picture 5.26 – XML schema for a door’s permanent release status

5.4.5 Booking data For the different types of booking data, XML schemata are provided primarily as a help for automatic formatting. Some tools, e.g. Crystal Reports, even require an XML schema to be able to process data. Therefore, the XML schemata are not as sophisticated as they could be. All XML schemata follow the same scheme: They are sequences of records. Each record has an id attribute of type anyURI and has the following elements:

 person – if the record could be assigned to a person. The person element has the following sub-elements:  surname  first-name  personnel-number  customer-field-1 to customer-field-6  client  company-code  administration-unit  subsystem-grouping  company – if the person is assigned to a company These elements contain the person data at the time of the booking.

 badge-number used for authentication

 event-type – a 3 character code, e.g. for access or clock-in

 reader – the 6 character long id of the reader in INTUS COM

 date (not timezoned)

 time (not timezoned) Depending on the booking type, there is additional information available. However, this is not detailed here, because the XML schemata are quite simple. They are available for download from your Webservice-Interface at http://myhost:8090/documentation or https://host- IP:8093/documentation

70 10/2019 5 - REST API reference

Attribute

id

Attribute

domain-entity-id

dx:surnamedx:

dx:first-namedx:

dx:personnel-numberdx:

dx:persondx: dx:customer-field-1dx:

accesses dx:accessdx: dx:customer-field-2dx: 0..¥ dx:customer-field-3dx:

dx:customer-field-4dx:

dx:customer-field-5dx:

dx:customer-field-6dx:

dx:clientdx:

dx:company-codedx:

dx:costcenterdx:

dx:administration-unitdx:

dx:subsystem-groupingdx:

dx:companydx:

dx:badge-numberdx:

dx:event-typedx:

dx:readerdx:

dx:datedx:

dx:timedx:

dx:badge-retaineddx:

Picture 5.27 – XML schema for accesses

© PCS Systemtechnik GmbH 71

DEXICON Enterprise Webservice-Interface V5.2.0

A. Appendix

A.1. Change index

A.1.1. Change index for Webservice-Interface 5.2.0

Change Description Version of the manual The versions of all DEXICON services have been unified. changed Therefore the version of the manual has been updated.

A.1.2. Change index for Webservice-Interface 2.1.0

Change Description Interface name changed from HTTP-Interface to Webservice-Interface

Booking data Added new element: costcenter XML schema for accesses updated. Secure connections via When https is used for connections, the host reference in HTTPS are supported requests has to be set to https://host-IP:8093 Supported TLS versions: 1.1 and 1.2. and optionally 1.0 if configured At appropriate places hints are added. Role assignments Logic changed regarding attributes in single master records, see 5.4.2.1 paragraph about roles

A.1.3. Change index for HTTP-Interface 2.0.2

Change Description Updated description of roles Description of the roles in 5.4.2.1

Administration unit resource  Filter for purpose “persons” to get only administration enhanced units which can be assigned to the persons

A.1.4. Change index for HTTP-Interface 2.0.1

Change Description Updated formatting

A.1.5. Change index for HTTP-Interface 2.0.0

Change Description Areas, Time models, Organization units, All media types: Administration unit is provided

© PCS Systemtechnik GmbH 73 DEXICON Enterprise Webservice-Interface V5.2.0

Companies and Booking data resources enhanced New resource /roles See 5.2.2.2 and 5.4.3.2. New resource See 5.2.2.1 and 5.4.3.1. /administration-units New resource /doors See 5.2.3.3 and 5.4.4.3. Readers resource enhanced New element door references the door which is controlled by a reader.

A.1.6. Change index for HTTP-Interface 1.3.0

Change Description Areas resource enhanced  All media types: Remark is provided  XML only: Assigned readers are provided below /areas/area/readers.  Filters distinguish between the purposes authorization for T&A and access control. Time models resource  All media types: Remark is provided enhanced  Filters distinguish between the purposes authorization for T&A and access control. New resource /intuscom- See 5.2.3.1 and 5.4.4.1. admin-units New resource /readers See 5.2.3.2 and 5.4.4.2. Correction Fixed error in Example 4.2.

A.1.7. Change index for HTTP-Interface 1.2.0

Change Description Remarks enhanced The remark of a person record can now contain up to 1,000 characters including line breaks. Therefore the data type is now normalizedString. personType: new element New element personType/disabled/too-long-inactive, see 5.4.2.1.

A.1.8. Change index for HTTP-Interface 1.1.0 The public interface has not changed.

A.1.9. Change index for HTTP-Interface 1.0.0

Change Description Initial version

DEXICON Enterprise Webservice-Interface V5.2.0

A.2. License agreements DEXICON Enterprise contains Free software. The Free Software are third-party products and are copyrighted. You find a copy of the licenses below. libcurl Copyright (c) 1996 - 2015, Daniel Stenberg, [email protected]. All rights reserved. Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. nginx Copyright (C) 2002-2013 Igor Sysoev Copyright (C) 2011-2013 Nginx, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Node.js Additional changes are licensed under the same terms as NGINX and copyright Joyent, Inc. and other Node contributors. All rights reserved.

© PCS Systemtechnik GmbH 75 DEXICON Enterprise Webservice-Interface V5.2.0

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Python 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 3.6.2 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 3.6.2 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright © 2001-2017 Python Software Foundation; All Rights Reserved" are retained in Python 3.6.2 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 3.6.2 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 3.6.2. 4. PSF is making Python 3.6.2 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 3.6.2 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.6.2 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.6.2, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python 3.6.2, Licensee agrees to be bound by the terms and conditions of this License Agreement.

DEXICON Enterprise Webservice-Interface V5.2.0

TweetNaCL TweetNaCl is a self-contained public-domain C library.

© PCS Systemtechnik GmbH 77 DEXICON Enterprise Webservice-Interface V5.2.0

A.3. Tables and indices

A.1.1. List of tables Table 4.1 – Example records for bulk synchronization ...... 23 Table 4.2 – Example person master record ...... 24 Table 5.1 – Resources of the REST API ...... 32 Table 5.2 – Restrictions depending on interface of superordinate system ...... 33 Table 5.3 – Parameters of the persons collection resource ...... 39 Table 5.4 – Parameters of the administration units collection resources ...... 40 Table 5.5 – Parameters of the roles collection resources ...... 41 Table 5.6 – Parameters of the areas collection resources...... 42 Table 5.7 – Parameters of the time-models collection resources ...... 43 Table 5.8 – Parameters of the subsystem-groupings collection resources ...... 43 Table 5.9 – Parameters of the reader-function-groups collection resources ...... 44 Table 5.10 – Parameters of the companies collection resources ...... 44 Table 5.11 – Parameters of the readers collection resources ...... 45 Table 5.12 – Parameters of the doors collection resources ...... 46 Table 5.13 – Parameters of the booking collection resources ...... 48 Table 5.14 – HTTP status codes ...... 50 Table 5.15 – Notation of groups in XML schemata ...... 51 Table 5.16 – Values for the base-supply-fields parameter ...... 62 Table 5.17 – Effect of the different input options for the master record fields ...... 65

DEXICON Enterprise Webservice-Interface V5.2.0

A.1.2. List of examples Example 3.1 – XSL transformation for person master records ...... 11 Example 3.2 – Windows PowerShell script which writes bookings to XML files ...... 17 Example 4.1 – Base supply ...... 23 Example 4.2 – Creation of a new person master record ...... 24 Example 4.3 – Update of a person master record ...... 25 Example 4.4 – Reading person master records ...... 26 Example 4.5 – Deletion of a person master record ...... 26 Example 4.6 – Query all accesses from Darth Vader ...... 27 Example 4.7 – Query for all new accesses...... 27 Example 4.8 – Mark access records as “read” ...... 27 Example 4.9 – Get all persons who are attendant in Cloud City ...... 27 Example 4.10 – Set attendance status of Luke Skywalker to “unknown” ...... 29 Example 5.1 – Setting the PIN of a person ...... 36 Example 5.2 – Query the attendance status (access control) of a single person ...... 38 Example 5.3 – Set the attendance status (access control) of a single person ...... 38 Example 5.4 – Query administration units which can be used to assign to persons .... 40 Example 5.5 – Query areas which can be used to assign access authorizations ...... 41 Example 5.6 – Releasing a door for a single entrance ...... 46 Example 5.7 – Releasing a door for 1 minute ...... 46 Example 5.8 – Role assignment in base supply ...... 56 Example 5.9 – Role assignment in single person master record in Version 2.1.0 ff ... 56 Example 5.10 – Role assignment in single person master record in Version 2.0.x ..... 57 Example 5.11 – Base supply document with PINs ...... 60 Example 5.12 – Section of ams.ini with default values ...... 62

© PCS Systemtechnik GmbH 79 DEXICON Enterprise Webservice-Interface V5.2.0

A.1.3. List of illustrations Picture 2.1 – Services which access the DEXICON database ...... 9 Picture 2.2 – HTML start page of the Webservice-Interface ...... 10 Picture 2.3 – Securing the Webservice-Interface ...... 10 Picture 3.1 – SAP Crystal Reports: XML data source dialog ...... 15 Picture 3.2 – SAP Crystal Reports: XML Schema dialog ...... 15 Picture 3.3 – SAP Crystal Reports: Use local XML Schema ...... 16 Picture 3.4 – SAP Crystal Reports: Standard Report Creation Wizard ...... 16 Picture 3.5 – SAP Crystal Reports: Linking the tables ...... 17 Picture 5.1 – HTML page with XML schema documentation ...... 50 Picture 5.2 – Overview of personType ...... 51 Picture 5.3 – Overview of the personType/grouping element ...... 52 Picture 5.4 – Overview of the personType/name element ...... 52 Picture 5.5 – Overview of the personType/authentication element ...... 53 Picture 5.6 – Overview of the personType/authorization element ...... 54 Picture 5.7 – Overview of the personType/authorization/additional-time-recording-auth element 55 Picture 5.8 – Overview of the personType/authorization/roles element ...... 55 Picture 5.9 – Overview of the personType/customer-fields element ...... 58 Picture 5.10 – Overview of the personType/info-fields element ...... 58 Picture 5.11 – Overview of the personType/disabled element ...... 58 Picture 5.12 – Overview of the personType/visitor element ...... 59 Picture 5.13 – XML Schema of a base supply ...... 60 Picture 5.14 – XML schema for person collection resources ...... 61 Picture 5.15 – XML schema for adminisration units ...... 66 Picture 5.16 – XML schema for roles ...... 66 Picture 5.17 – XML schema for areas ...... 67 Picture 5.18 – XML schema for time models ...... 67 Picture 5.19 – XML schema for organization units ...... 67 Picture 5.20 – XML schema for reader functions ...... 67 Picture 5.21 – XML schema for companies ...... 68 Picture 5.22 – XML schema for INTUS COM administration units ...... 68 Picture 5.23 – XML schema for readers ...... 69 Picture 5.24 – XML schema for doors ...... 69 Picture 5.25 – XML schema for door status ...... 70 Picture 5.26 – XML schema for a door’s permanent release status ...... 70 Picture 5.27 – XML schema for accesses ...... 71

DEXICON Enterprise Webservice-Interface V5.2.0

A.1.4. Index

A H Accesses ...... 47, 48, 70 Header Active Directory ...... 19 Accept...... 17, 35 Administration units ...... 40, 66 Accept-Charset ...... 18 ams.ini ...... 23, 37, 53, 61, 62 Connection ...... 33 Area ...... 39, 41, 67 Content-MD5 ...... 35 Asterisk ...... 20 ETag ...... 35, 36, 39 Attendance panel ...... 11 If-Match ...... 36 Attendance status ...... 37, 39 If-None-Match ...... 36, 39 Authentication ...... 10, 19, 20, 34 TE 35 Authorization ...... 10, 53 Transfer-Encoding ...... 19, 35 Authorization group ...... 43, 54, 68 Warning ...... 36, 37 B X-Forwarded-For...... 10 HR-PDC interface ...... 7 Badge ...... 53 HTTP/1.1 ...... 33 Balances ...... 58 HTTP-Authentication ...... 19, 20 Base supply ...... 19, 23, 37, 59 Character set ...... 34 base-supply-fields parameter ...... 61 User name, password ...... 33 Bash...... 20 When needed ...... 32 Basic Multilingual Plane ...... 34 HttpUriType ...... 18 Biometrics ...... 53 I Bookings ...... 47, 48, 70 Browser ...... 9 IDOC handler ...... 7 Bulk synchronization ...... 19, 23, 37, 59 Info fields ...... 58 Byte order mark...... 34 Installation ...... 7 C INTUS COM ...... 7 INTUS COM administration units ...... 44, 68 Caching ...... 35 INTUS terminals ...... 7 Character sets ...... 34 INTUSCOM-Monitor ...... 44 Checksum ...... 26, 35 L Chunked transfer coding ...... 19, 26, 35 Companies ...... 44, 68 License ...... 9, 36, 37, 54 Compliance ...... 33 Locking ...... 9 Connection handling ...... 33 optimistic ...... 35 Content negotiation ...... 35 M Crystal Reports...... 13, 70 Curl ...... 20 Mailtext ...... 57 Customer fields...... 57 Manuals ...... 7 D MD5 ...... 26, 35 Media type negotiation ...... 35 Declined accesses ...... 47, 48, 70 Microsoft Excel ...... 18 Declined bookings ...... 47, 48, 70 Microsoft Windows PowerShell ...... 17, 19 Default port ...... 10 N Default values content negotiation ...... 35 Namespace ...... 18, 50 master records ...... 62 Normalization Form C ...... 34 Dialplan ...... 21 Notation of XML schema groups ...... 50 Disabled ...... 58 O Door Release ...... 46 OPC ...... 7 Doors...... 45, 69 Oracle ...... 18 Organization units ...... 43, 52, 67 E P Employee expenditures ...... 47, 48, 70 Error codes ...... 48 PBX ...... 20 Excel ...... 18 Percent encoding ...... 35 Persistent connections ...... 33 F Person master records ...... 35, 38 Factory master control system ...... 7 Personal profiles ...... 53 G PIN ...... 36, 60 Pipelining ...... 33 GUI ...... 9 PL/SQL ...... 18 Port ...... 10

© PCS Systemtechnik GmbH 81 DEXICON Enterprise Webservice-Interface V5.2.0

PowerShell ...... 17, 19 User management ...... 10 Presence service ...... 20 UTL_HTTP package ...... 18, 19 Profiles ...... 53 V Proxy ...... 10 R Voicemail ...... 20 W Reader administration units ...... 44, 68 Reader function group ...... 43, 54, 68 Web application ...... 9 Readers ...... 45, 69 Windows PowerShell ...... 17, 19 RESTful ...... 9 X Retention period ...... 47 Roles ...... 41, 66 X-Forwarded-For ...... 10 XML Namespace ...... 18, 50 S XML Schema ...... 50 SAP Crystal Reports ...... 13 /accesses ...... 70 SAP subsystem ...... 7 /administration-units ...... 66 Schema ...... 50 /areas ...... 67 Services ...... 9 /base-supply/{source system}/{tid} ...... 59 Slowloris...... 10 /companies ...... 68 SSL ...... 10 /declined-accesses ...... 70 Status codes ...... 48 /declined-bookings ...... 70 Subsystem groupings ...... 52, 67 /doors ...... 69 Superordinate systems ...... 32 /employee-expenditures ...... 70 System.Net.NetworkCredential ...... 20 /intuscom-admin-units ...... 68 System.Net.WebClient ...... 17, 18, 20 /persons ...... 61 System.Xml.XmlTextWriter ...... 20 /persons/{source system} ...... 61 T /persons/{source system}/{id} ...... 59 /reader-function-groups ...... 68 Telephone system ...... 20 /readers ...... 69 Time models ...... 42, 67 /roles ...... 66 Time recording bookings ...... 47, 48, 70 /subsystem-groupings ...... 67 Time zone ...... 53, 70 /time-events ...... 70 TLS ...... 10 /time-models ...... 67 Transaction ...... 35, 37 ams.ini ...... 61 U download ...... 50 notation of groups ...... 50 Unicode ...... 34 XMLTABLE ...... 18 URI encoding ...... 35 XSL Transformation ...... 11

DEXICON Enterprise Webservice-Interface V5.2.0

Any problems with this manual?

Have you noticed any mistakes, has anything been missed out, or was there something you didn’t understand? Do you have any ideas for improvement, or something to add to this manual? Although we try to make our manuals as useful as possible, it still may happen that we forget something or overlook some detail. And since it is you, the manual user, who always knows best what's good or bad about a manual, please don't hesitate to call us

and tell us what we can improve. Thank you in advance for your effort.

Sincerely: PCS Systemtechnik GmbH

PCS-Hotline: +49 - 89 - 68004-666 Email: [email protected]

© PCS Systemtechnik GmbH 83

PCS Systemtechnik GmbH Pfälzer-Wald-Str. 36 81539 Munich, Germany Fon +49-89-68004-550 [email protected]

Ruhrallee 311 45136 Essen, Germany Fon +49-201-89416-0

Hofzeile 24 1190 Vienna, Austria Fon +43-1-3670-302

SkywalkerLukeAbsent
VaderDarthAttendant