Version 6.0.0

Wichtige Hinweise

docs365 documents ab Version 6.0 unterstützt für die Server-Installation kein Windows Server 2008 R2 mehr. Microsoft selbst hat den erweiterten Support für diese Windows-Version bereits am 14. Januar 2020 eingestellt.

Neue Oberfläche im Viewer

Die Oberfläche hat ein größeres Redesign erhalten. Archivieren- und Vorgangsdialog werden nun nicht mehr in einem virtuellen Fenster angezeigt, sondern legen sich direkt über die Tabellen-Ansicht.

Die Liste der Dokumente und die PDF-Vorschau werden nicht mehr nebeneinander angezeigt, sondern es gibt eine Listen-Ansicht (für die Dokumenten-Übersicht) und eine Viewer-Ansicht für die PDF-Vorschau, zwischen denen man beliebig wechseln kann. Insbesondere kann die PDF-Vorschau nun auch in der Tabellen-Ansicht aktiviert werden, sodass man den Inhalt der Dokumente betrachten kann, ohne den Vorgang öffnen zu müssen. Über das Zahnrad-Icon kann zwischen beiden Ansichten umgeschaltet werden. In der Viewer-Ansicht kann über den linken Button in der Titelzeile zwischen den Dokumenten gewechselt werden.

Die Breite des rechten Bereichs und die eingestellte Ansicht werden für die Tabellen-Ansicht und die Archivieren-/Vorgangsdialoge jeweils getrennt gespeichert. Somit ist es beispielsweise möglich, auch weiterhin die Dokumentenliste in der Tabellen-Ansicht und die PDF-Vorschau in den Dialogen anzuzeigen.

Im Archivieren-Dialog ist es durch diese Änderung nicht mehr möglich, in einem Schritt die Archivierung und Workflow-Funktionen durchzuführen. Das wurde jetzt mit dem Vorgangs-Dialog vereinheitlicht und ist nun ein zweistufiger Prozess:

  • Wenn man den Speichern-Button klickt, bleibt der Vorgang zunächst noch geöffnet, sodass man anschließend im Workflow-Menü die Funktionen auswählen kann, die man ausführen möchte.

  • Alternativ kann man über “Speichern und schließen” den Dialog auch direkt nach dem Speichern verlassen.

Formular-Editor

Bislang bestanden die Formulare in Archiven immer aus allen sichtbaren Datenfeldern untereinander, und zwar in der Reihenfolge, in der sie im Archiv konfiguriert sind.

Über den neuen Formular-Editor können nun für jedes Archiv eigene Formulare konfiguriert werden. Dafür gibt es in der Archiv-Konfiguration einen neuen Abschnitt “Formulare”, in dem diese angelegt werden können. Jedes Formular benötigt einen Namen, eines davon kann als “Aktiv” markiert werden und wird dann im Viewer verwendet (wenn es kein aktives Formular gibt, wird die alte Ansicht weiter verwendet). Über das Zahnrad-Icon kann der eigentliche Formular-Editor geöffnet werden.

Über das Menü können Datenfelder aus dem Formular versteckt und auch wieder hinzugefügt werden. Per Drag & Drop können die Datenfelder in eine andere Reihenfolge oder auch nebeneinander gebracht werden.

Die Breite der Beschriftung kann ebenfalls verändert werden, indem man mit dem Mauszeiger auf den linken Rand des angezeigten Datenfelds klickt und diesen Rand dann nach links oder recht verschiebt. Wenn der “Spalten-Modus” im Menü aktiviert ist, wird die Breite für alle Felder einer Spalte gleichzeitig verändert, ansonsten nur für das einzelne Datenfeld.

Wenn man auf ein Datenfeld klickt, können über den rechten Bereich Eigenschaften verändert werden (z.B. die Beschriftung umbenannt werden) oder Ereignisse konfiguriert werden (mehr dazu im nächsten Abschnitt).

Über die Vorschau kann man sich anzeigen lassen, wie das Formular dann im Viewer tatsächlich aussehen wird, außerdem können hier die Formular-Events getestet werden.

Formular-Events

Wenn man im Formular-Editor entweder auf das Formular oder auf einzelne Datenfelder klickt, können im rechten Bereich mit den Eigenschaften verschiedene Formular-Events konfiguriert werden.

Formular-Events werden in der neue Programmiersprache STAR geschrieben, die in einer separaten Dokumentation beschrieben wird. Sie können die Werte eines oder mehrerer Datenfelder veränderen und dabei beispielsweise Berechnungen durchführen oder mitgelieferte Funktionen aufrufen.

Im Formular gibt es folgende Ereignisse:

on_new

Wird serverseitig ausgeführt, wenn im Archivieren-Dialog die Vorgabe-Werte ausgefüllt werden.

on_save

Wird serverseitig unmittelbar vor dem Speichern des Vorgangs ausgeführt.

on_smartindexing

Wird ausgeführt, nachdem Feldwerte durch SmartIndexing gesetzt wurden.

In einzelnen Datenfeldern werden folgende Events ausgeführt:

on_enter

Wenn das Datenfeld den Fokus bekommt.

on_change

Wenn der Wert im Datenfeld sich ändert.

on_leave

Wenn der Fokus das Datenfeld verlässt.

Neue Syntax und Funktionen in Workflow-Bedingungen

Die Bedingungen in Workflow-Übergangen verwenden statt der Syntax für Spaltenfilter nun die Syntax von Expressions der Programmiersprache STAR. Bestehende Bedingungen werden automatisch migriert. Dadurch können nun auch Funktionen verwendet werden.

Automatisches Befüllen von Datenfeldern

Im Archivieren-Dialog können Datenfelder nun abhängig von einem anderen Datenfeld über einen Lookup in einer Datentabelle oder einem Archiv automatisch ausgefüllt werden.

Angenommen, man hat zwei Datenfelder “Postleitzahl” und “Ort” und möchte, dass nach Eingabe der Postleitzahl automatisch der Ort befüllt wird. Dafür gibt es eine Datentabelle, die alle Postleitzahlen mit ihrem zugehörigen Ort enthält.

Man stellt dafür in den erweiterten Datenfeld-Optionen des Datenfeldes “Postleitzahl” in der Tabelle unter “Autofill” ein, welche anderen Felder anhängig von diesem Feld gefüllt werden sollen. In der Spalte “Datenfeld” muss also “Ort” ausgewählt werden und in “Nachschlag-Tabelle” die Tabelle, die die Postleitzahlen und Orte enthält.

Das Nachschlag-Feld gibt das Feld der Datentabelle an, in dem nach dem Wert dieses Feldes gesucht wird. Wird er gefunden, wird der Inhalt des Wert-Feldes in der Datentabelle zum Ausfüllen des anderen Feldes verwendet.

Rollenrechte für Datentabellen

In den Rollen können nun auch Rechte auf einzelne Datentabellen vergeben werden. Pro Datentabelle können die drei Optionen “Unsichtbar”, “Nur lesen” und “Vollzugriff” eingestellt werden. Rollen mit Administrator-Rechten haben weiterhin Vollzugriff auf alle Datentabellen.

Das Recht “Nur lesen” wird für den im nachfolgenden Abschnitt beschriebenen Lookup-Dialog benötigt.

Das Recht “Vollzugriff” wird von Dienstbenutzern benötigt, die über das neue Tool für Datentabellen-Import automatisch Datentabellen befüllen.

Lookup-Dialoge für Datentabellen

Wenn man in einem Datenfeld als Vorschlagsquelle eine Datentabelle eingestellt hat und der Benutzer mindestens Leserechte auf die Datentabelle hat, ist es nun möglich, den zu übernehmenden Wert durch eine Suche in allen Spalten der Datentabelle zu ermitteln.

Im Eingabefeld erscheint in diesem Fall ganz rechts ein Such-Icon. Wenn man es anklickt, wird ein Dialog geöffnet, der den Inhalt der Datentabelle anzeigt. Wenn man nun etwas im Suchfeld eingibt, wird in allen Spalten der Datentabelle nach dem eingegebenen Wert gesucht, Suchtreffer werden (wie bei der Schnellsuche im Archiv) hervorgehoben.

Die gewünschte Zeile unter den Suchtreffern kann man nun mit den Pfeiltasten oder der Maus auswählen. Ein Doppelklick oder Enter bestätigt die Auswahl, dann wird der Wert aus der in der Vorschlagsquelle eingestellten Spalte in das Datenfeld übernommen.

Gruppen-Postfächer

In der Workflow-Aktion “Vorgang versenden” kann ein Vorgang nun auch an eine Gruppe verschickt werden. Alle Anwender, die Teil der Gruppe sind, sehen den Vorgang dann in ihrem Postfach. Über die Aktion “Vorgang aus Postfach entfernen” kann der Vorgang anschließend durch einen Status-Übergang wieder aus dem Gruppenpostfach entfernt werden.

Wenn man in der Workflow-Aktion als Empfänger “Freie Auswahl” einstellt, werden dem Benutzer als Empfänger nur die Gruppen angeboten, bei denen mindestens ein Mitglied Zugriff auf Vorgänge mit dem Zielstatus hat.

Ein manuelles Hinzufügen an Gruppenpostfächer ist in dieser Version noch nicht möglich.

Tool für Datentabellen-Import

Über den Befehl pa_client.exe import können nun CSV-Dateien oder ODBC-Datenbank-Tabellen automatisiert in Datentabellen importiert werden. Konfiguriert wird der Import über eine neue Konfigurations-Datei import.ini im config-Verzeichnis.

In dieser INI-Datei wird pro Sektion ein Import definiert, darüber hinaus gibt es noch eine besondere Sektion [DEFAULT], in der Vorgabe-Werte definiert werden, die für alle Sektionen gelten:

[DEFAULT]
URL = https://documents.example.com/
Token = mJVEFmvHJFGeqhsmPoWzRkVgHI6X8K9g

[Kunden]
Type = odbc
Datatable = kunden
UseAlias = true
Clear = true

DSN = MYDSN
UID = phoenix
PWD = phnxqdrt

SQL = SELECT name, iban FROM kunden

[CSV]
Type = csv
FileMask = D:\Import\L*.csv|D:\Lieferanten\**\lieferant.csv
Datatable = kunden
Active=true
Decimal = ,
MoveCompleted = D:\Imported
Mapping = index

[CSV/Mapping]
name = 1
iban = 2
URL

Die Basis-URL zum Server.

Token

Das Token des Dienstbenutzers, über den der Import durchgeführt wird.

Type

Mögliche Werte sind csv für Importe aus lokalen CSV-Dateien oder odbc für einen dynamischen Import aus einer Datenbank über eine ODBC-Datenquelle.

Datatable

Der Kurzname der Datentabelle, in die Importiert werden.

Es ist sinnvoll, Optionen wie URL und Token in die Sektion [DEFAULT] zu schreiben, da diese in der Regel in allen Sektionen identisch sind. Es ist aber auch möglich, einzelne Imports zu einem anderen Documents-Server durchzuführen, indem die URL in einer Sektion überschrieben wird.

Folgende Optionen sind optional:

Active

Wenn dieser Wert auf false gesetzt wird, wird die Sektion beim Import übersprungen.

Clear

Wenn dieser Wert auf true gesetzt wird, werden existierende Daten beim Import aus der Datentabelle gelöscht. Das gilt pro Sektion, d.h. wenn bei einem CSV-Import mehrere CSV-Dateien in einer Sektion in die gleiche Datentabelle importiert werden, wird diese nur einmalig geleert und anschließend alle CSV-Dateien gelöscht.

UpdateOn

Eine durch Kommas getrennte Liste von Spalten-Kurznamen, anhand derer Zeilen der Datentabelle aktualisiert werden. Wenn ein existierender Wert der Datentabellen in allen hier angegeben Spalten einen mit einer zu importierenden Zeile identischen Wert hat, wird die vorhandene Zeile aktualisiert und keine neue hinzugefügt.

OnRowError

Wenn bei einem Import einzelne Zeilen nicht importiert werden können (z.B. weil das Datumsformat falsch ist), bestimmt diese Option, was passieren soll: Beim Wert abort (Vorgabe) wird der gesamte Import abgebrochen und mit der nächsten Datei bzw. Sektion fortgefahren. Bei skip wird nur die fehlerhafte Zeile übersprungen.

Import-Typ csv

Importiert eine oder mehrere CSV-Dateien, die in einer Sektion alle das gleiche, konfigurierbare Format haben müssen. Die Liste der zu importierenden Dateien wird in der Option FileMask angegeben, die eine Dateimaske spezifiziert. Durch | getrennt können mehrere Dateimasken angegeben werden, * ist ein Platzhalter für beliebiger Zeichen.

FileMask = D:\Import\L*.csv|D:\Lieferanten\*\lieferant.csv

In diesem Beispiel werden alle mit “L” beginnenden CSV-Datein im Verzeichnis D:\Import importiert und darüber hinaus alle Dateien mit dem Namen lieferant.csv, die in einem Unterzeichnis von D:\Lieferanten liegen (der *-Platzhalter kann auch für Unterverzeichnisse stehen).

Die nachfolgenden Optionen haben die gleiche Auswirkung wie beim manuellen CSV-Import einer Datentabelle und definieren das Format der CSV-Datei:

Decimal

Dezimal-Trennzeichen (üblicherweise ein Komma für deutsche CSV-Dateien oder Punkt für englische). Vorgabe ist das Komma.

Delimiter

Feld-Trennzeichen. Vorgabe ist das Semikolon.

Quotechar

Textqualifizierer.

Mapping

Mögliche Werte sind index und title (siehe unten). Wenn diese Option nicht konfiguriert ist, werden die Spalten der CSV-Datei den Datenfeldern genau in der Reihenfolge zugeordnet, wie sie in der Datentabelle konfiguriert sind.

Module

Ein Python-Modul im Verzeichnis customisation\csv, mit dem der Import detailliert angepasst werden kann.

Skip

Gibt an, wie viele Zeilen am Anfang der CSV-Datei übersprungen werden sollen.

Limit

Limitiert den Import auf die ersten n Zeilen der CSV-Datei. Sinnvoll zum Debuggen, um die Import-Optionen von großen CSV-Dateien zu testen, ohne dass sofort viele Zeilen importiert werden.

Darüber hinaus gibt es zwei Optionen, die einstellen, was mit erfolgreich importieren CSV-Dateien passieren soll:

MoveCompleted

Gibt ein existierende Verzeichnis an, in das erfolgreich importierte CSV-Dateien verschoben werden soll.

DeleteCompleted

Wenn diese Option auf true eingestellt ist, werden erfolgreich importierte CSV-Dateien sofort gelöscht. Diese Option wird ignoriert, wenn MoveCompleted ebenfalls konfiguriert ist.

Zuordnung von Spalten aus der CSV-Datei

Wenn in der Sektion eines CSV-Import die Option Mapping konfiguriert ist, muss in einer Unter-Sektion [Sektionsname/Mapping] die Zurordnung konfiguriert werden.

Beispiel für die Option index:

[Lieferanten]
Type = csv
Mapping = index
...

[Lieferanten/Mapping]
name = 2
iban = 3

Hier werden die Werte aus der 2. Spalte der CSV in das Datenfeld mit dem Kurznamen name importiert und die aus der 3. Spalte in das Feld iban. Da für die erste Spalte keine Zurordnung konfiguriert, werden dessen Werte beim Import ignoriert.

Beispiel für die Option title:

[Lieferanten]
Type = csv
Mapping = title
...

[Lieferanten/Mapping]
name = Kunden-Name
iban = IBAN

Hier wird die erste Zeile der CSV dazu verwendet, die Zurordnung der Spalten anhand des Spalten-Titels automatisch zu ermitteln. Groß- und Kleinschreibung wird bei der Zurordnung des Titels ignoriert und nicht angegebene Spalten ignoriert.

Customisation-Skripte für CSV-Import

In der Option Module kann der Namen eines Python-Moduls angegeben werden, das sich im Verzeichnis customisation\csv befindet. Dieses Modul muss eine Klasse Transformer enthalten, die eine Methode transform enthält.

Die Klasse wird für eine Sektion nur einmal instantiiert, unabhängig von der Anzahl der Dateien. Die transform-Methode wird für die originale CSV-Zeile aufgerufen, bevor eine Zuordnung anhand der Mapping-Sektion durchgeführt wird.

class Transformer:
    def transform(self, row, context):
        # Gibt die Zeile unverändert zurück.
        return row

Der Parameter row enthält eine CSV-Zeile (als Liste). context ist ein Objekt, das folgende Attribute enthält:

line

Die aktuelle Zeilennummer (beginnend mit 1), um z.B. die erste Zeile gesondert zu behandeln.

filename

Den absoluten Pfad zur aktuell verarbeiteten CSV-Datein.

Die transform-Methode gibt eine Liste (die auch eine andere Länge haben kann) zurück, die die modifizierte Zeile enthält. Wenn der Wert None zurückgegeben wird, wird die aktuelle Zeile beim Import übersprungen.

Import-Typ odbc

Führt eine SQL-Abfrage über eine ODBC-Datenquelle aus und importiert das Ergebnis in eine Datentabellen.

Über die Parameter DSN (Pflichtfeld), UID, PWD, Server und Database wird die ODBC-Datenquelle konfiguriert. Werte, die bereits direkt in der DSN konfiguriert sind, müssen hier nicht noch zusätzlich angegeben werden. Auch diese Parameter können problemlos in der Sektion [DEFAULT] konfiguriert werden.

Ebenfalls Pflicht ist die Option SQL, die das aufzurufende SQL-Statement konfiguriert.

Die UseAlias bestimmt, wie das Resultat der SQL-Abfrage ausgewertet wird. Wenn diese Option fehlt werden die Datenfelder in der Datentabelle genau in der Reihenfolge in der Ergebnismenge des SQL-Statements importiert: Angenommen, in einer Datentabelle in zwei Spalten mit den Kurznamen lieferant und iban in genau dieser Reihenfolge konfiguriert. Es gibt eine SQL-Datenbank Lieferanten, in der diese Felder aber Name und Konto heißen. Dann muss bei der Feldauswahl im SELECT genau die Reihenfolge der Datentabelle abfragt werden:

SELECT Name, Konto FROM Lieferanten

Das folgende Statement würde die Werte jedoch in die falschen Spalten importieren:

SELECT Konto, Name FROM Lieferanten

Wenn man nun UseAlias=true einstellt, ist die Reihenfolge im SQL-Statement egal, stattdessen muss für jede Spalte ein Alias angegeben werden, der dem Kurznamen in der Datentabelle entspricht:

SELECT Konto AS iban, Name AS lieferant FROM Lieferanten

Wenn ein Alias verwendet wird, der keinem Kurznamen einer Spalte in der Datentabelle entspricht, wird diese Spalte beim Import ignoriert.

Verschiedenes

  • Zahlenwerte werden nun rechtsbündig dargestellt.

  • In der Workflow-Aktion “Vorgang versenden” werden bei der Ausführung nur noch Benutzer zur Auswahl angeboten, die im Archiv auch das Recht auf den Ziel-Status des Übergangs haben.

  • Im Benutzer-Dialog kann ein Benutzer nun E-Mail-Benachrichtigungen für neue Postfach-Einträge deaktivieren.