Menü der Dokumentation

Groovy-Skripte

Über d.3 server interface können neben den externen JPL-Skripten nun auch Groovy-Skripte ausgeführt werden.

In einer Groovy-Skriptdatei steht die d.3-Schnittstelle als Field-Variable d3 zur Verfügung und kann direkt genutzt werden.

d3.log.info("Groovy-Script started!")

Um in einer Entwicklungsumgebung den Typ des vordefinierten Fields d3 bekannt zu geben, damit Typprüfungen, Kommandovervollständigung etc. funktionieren können, sollten die folgenden beiden Zeilen am Anfang eines Skripts eingefügt werden.

import com.dvelop.d3.server.Document
import com.dvelop.d3.server.core.D3Interface
import com.dvelop.d3.server.exceptions.D3Exception
D3Interface d3 = getProperty("d3");
String scriptName = getClass().getName()

d3.log.info("Groovy-Script started!")

// d.3 User which executes the update of documents
String scriptUser = "d3_groovy"
final def maxRows = 3

//Einzelne Dokumente/Akten anhand der ID
def resultSet = d3.sql.executeAndGet("select doku_id from firmen_spezifisch where kue_dokuart = 'DTEST' and dok_dat_feld_1 = 'oldValue'", maxRows)
resultSet.each{
    try {
        d3.log.info (scriptName + "> Updating document with ID " + it.doku_id)
                //Get document object of doc id
        Document myDoc = d3.archive.getDocument(it.doku_id, scriptUser)
                //Set new value
                myDoc.field[1] = "newValue"
                //Update metadata without triggering hook entrypoints
        myDoc.updateAttributes(scriptUser, true)
    } catch (D3Exception e) {
        d3.log.error(scriptName + "> Error updating meta data " + e.getMessage())
    } 
}

Verwenden von Groovy-Klassen und Java-Bibliotheken in Skripten

Das Groovy-Skript Verzeichnis "ext_groovy" sowie die definierten Groovy-Hook-Verzeichnisse werden bei der Ausführung eines Skripts dem CLASSPATH hinzugefügt, sodass Klassen aus anderen Groovy-Skripten im auszuführenden Skript genutzt werden können. Außerdem werden auch für Skripte Classpath-Dateien (Dateiname: "<skriptname>.classpath") unterstützt. Auch die darin enthaltenden Pfade (zB. absoluter Pfad einer JAR-Datei) werden dem Classpath hinzugefügt, um diese Resourcen in dem Skript nutzen zu können.

Beispiel: In einem Skript ../ext_groovy/myScript.groovy soll die JavaMail API (javax.mail.jar) benutzt werden. Dazu wird der absolute Pfad der JAR-Datei in eine gleichnamige Classpath-Datei ../ext_groovy/myScript.classpath eingetragen:

Beispielhafter Dateinhalt: D:\downloads\java\ext_jars\javax.mail-1.5.6.jar

Skripte zeitgesteuert starten

Soll ein Skript nicht interaktiv gestartet werden, sondern automatisch und zeitgesteuert, kann dieses auch als sechster Kommandozeilenparameter eines Server-Prozesses in d.3 process manager angegeben werden. Der Target-Eintrag in d.3 process manager sieht dann ähnlich aus wie folgender:

..\d3odbc32.exe haupt "" d3_server d3_server D3P ext_groovy/myScript.groovy