# Einrichtung eines dynamischen Ordners

Ein dynamischer Ordner wird durch einen speziellen Eintrag im Zusatztext definiert. Dieser Text muss ganz am Anfang des Feldes stehen, und es darf auch kein weiterer Text vorhanden sein. Damit die Definition nicht irrtümlich verändert werden kann, sollte der Ordner nur für Administratoren im Schreibzugriff vorliegen, für alle anderen reicht ein Lesezugriff. Durch diese Einschränkung können Sie auch vermeiden, dass dort manuell Untereinträge angelegt werden, da diese nicht angezeigt würden und somit "verschwunden" wären.

Beispiel eines Statements für einen dynamischen Ordner

# !+[Kommando]

Das Kommando !+ ersetzt das SQL-Statement SELECT * FROM für die Datenbanktabelle dbo.objekte. Sie können nach dem Kommando !+ den kompletten WHERE-Anteil der Abfrage festlegen.

Beispiel für ein SQL-Statement mit dem Kommando '!+'

Achten Sie bei der Formulierung Ihrer WHERE-Klausel darauf, dass Sie eine Einschränkung auf die gewünschten Objekttypen vornehmen (falls diese nicht ohnehin durch die weitere Sucheinschränkung festgelegt wird). Gelöschte Einträge, also alle Einträge mit einem objstatus ungleich 0, sollten Sie ausschließen.

# Abfrage über mehrere Tabellen

Zusätzlich zur Objekte-Tabelle können Sie weitere Tabellen in die Abfrage aufnehmen. Dafür müssen Sie die weiteren Tabellen mit führendem Komma eintragen.

# Beispiel 1

In diesem Beispiel wird die Abfrage auf die Maske EMail (hier durch objmask = 2) eingeschränkt. Weiterhin wird nur nach Dokumenten gesucht, die im Feld Von (ELOOUTL1) einen bestimmten Namen (hier: Sorglos) enthalten.

!+ , objkeys WHERE objid = parentid
AND objmask = 2
AND (okeyname LIKE 'ELOOUTL1' AND okeydata LIKE '%sorglos')

# Beispiel 2

Das folgende Beispiel führt eine Abfrage durch, in der nach zwei unterschiedlichen Feldern sortiert werden soll. Aus diesem Grund muss die Tabelle objkeys doppelt aufgenommen werden.

!+ , objkeys ok1, objkeys ok2 WHERE
objid=ok1.parentid AND objid=ok2.parentid AND
ok1.okeyno=0 AND ok2.okeyno=1 AND
objtype=254 AND objmask=5 AND
ok1.okeydata LIKE 'p1%'
ORDER BY ok2.okeydata, ok1.okeydata

Erläuterung zu den einzelnen Zeilen:

Die Tabelle objkeys wird doppelt aufgenommen unter den Namen ok1 und ok2. Beachten Sie das führende Komma. Ohne Komma erzeugen Sie auf der SQL-Ebene einen Syntaxfehler, wodurch der Zielordner leer bleibt.

Die Basisdatentabelle objekte wird über den eindeutigen Schlüssel objid mit den beiden Tabellen verbunden.

Es sollen nicht beliebige Felder, sondern zwei ganz bestimmte Felder betrachtet werden (die internen Zeilennummern 0 und 1 entsprechen dem ersten und zweiten Feld).

Es sollen nur Dokumente vom Maskentyp 5 gefunden werden, die im ersten Feld mit dem Wert p1 anfangen.

Die Dokumente werden dann nach dem zweiten Feld sortiert. Alle identischen Einträge werden nach dem ersten Feld sortiert.

Beachten Sie

Das Beispiel sucht nach einem beliebigen Feld, dessen Inhalt mit p1 beginnt, d. h., es wird auch dann ein Treffer erzeugt, wenn ein p1 in einem unsichtbaren Feld steht. Der Benutzer sieht jedoch kein passendes Feld. In einem Produktivsystem sollten Sie das Feld konkret benennen.

Beachten Sie

Der Teil objid=parentid ist in jedem Fall notwendig. Dieser verbindet die Basisdatentabelle mit der Feldertabelle. Wenn Sie diesen weglassen, bekommen Sie eine riesige Treffertabelle mit unsinnigen Einträgen.

# !?[Kommando]

Im Anschluss an das Kommando !? muss eine RegisteredFunction folgen. Die RegisteredFunction muss eine Collection an IDs oder GUIDs zurückgeben, die einem Repository-Eintrag entsprechen. Was eine RegisteredFunction ist und wie man sie anlegt, entnehmen Sie der Dokumentation Funktionserweiterung durch registrierte Funktionen (opens new window).

Ein Beispiel für ein dynamisches Register:

!?RF_getSordIdsForDynamicWhere

Eine Script-Datei kann wie folgt aussehen:

function RF_getSordIdsForDynamicWhere(ec, args)
{
        log.info("RF_getSordIdsForDynamicWhere(");
        var sord = args[0];
        log.info("sord=" + sord);
        var folderId = parseInt(args[1]);
        log.info("folderId=" + folderId);
        var db = new Packages.de.elo.ix.jscript.DBConnection();
        var ret = db.query("select objectid from relation where parentid=? order by objectid desc", folderId);
        log.info(")RF_getSordIdsForDynamicWhere" + ret);
        return ret;
}

# !=[Kommando]

Dem Kommando != können Sie eine gespeicherte Suche übergeben. Der Ordner sollte aber nicht manuell, sondern nur automatisiert erstellt werden. Über den ELO Java Client können Sie einen dynamischen Ordner nach einer Suche über Menüband > Suche > Ergebnis > Dynamischer Ordner erstellen.

Um einen dynamischen Ordner in Ihrer eigenen ELOix Anwendung zu erstellen, müssen Sie auch zunächst eine Suche durchführen. Den entsprechenden Text entnehmen Sie dann dem Feld FindResult.dynamicFolder, welches über die ELOix Schnittstelle bereitgestellt wird.

Beispiel:

FindResult fr = ixConnection.ix().findFirstSords();
ixConnection.ix().findClose(fr.getSearchId());
Sord sord = ixConnection.ix().checkoutSord();
sord.setDesc(fr.getDynamicFolder());
ixConnection.ix().checkinSord(sord,);

# Veraltete Kommandos

Die Kommandos !! und !* sind veraltet und werden von aktuellen ELO Versionen nicht mehr unterstützt.

Zuletzt aktualisiert: 2. August 2024 um 15:32