Files
d.velop/_Vorlagen/Groovy-Skripte/reminderFunction.groovy
2025-04-04 11:35:25 +02:00

148 lines
6.6 KiB
Groovy

// Das Skript prueft die Felder
// - Erinnerungsdatum
// - Erinnerung an
// - Erinnerung verschickt
// und sendet abhaengig hiervon Erinnerungen an die hinterlegten Benutzer
// Importe
import groovy.sql.GroovyRowResult
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
import com.dvelop.d3.server.exceptions.SQLException
import com.dvelop.d3.server.Document
import com.dvelop.d3.server.DocumentType
import com.dvelop.d3.server.core.D3Interface
import javax.net.ssl.HttpsURLConnection;
import java.text.SimpleDateFormat
// #################################################################################
// Konfigurationsbereich
// #################################################################################
String versandModus = "1" // 0 = Keine Erinnerungen verschicken, nur Logs ausgeben, 1 = Erinnerungen verschicken
int repoIdErinnerungVerschickt = 97
int repoIdErinnerungAn = 98
int repoIdErinnerungsdatum = 99
int dbPosErinnerungVerschickt = 33
int dbPosErinnerungAn = 34
int dbPosErinnerungsdatum = 58
String apiServiceUser = "D3APIServi"
String baseURi = "https://meinHost.meineDomain.de"
String repoId = "xxx"
String ServiceAPIKey = "xxx"
// #################################################################################
// Ende Konfigurationsbereich
// #################################################################################
try{
d3.log.info("Starte Skript TH_sendReminder");
d3.log.info("Ermittle Dokumente zur Erinnerung")
// Dokumente suchen, fuer die noch keine Erinnerung verschickt wurde
// Und dessen Erinnerungsdatum in der Vergangenheit liegt
def sqlQuery = """select doku_id, dok_dat_feld_$dbPosErinnerungAn as ErinnerungAn
from firmen_spezifisch
where dok_dat_feld_$dbPosErinnerungAn is not null and dok_dat_feld_$dbPosErinnerungsdatum is not null and dok_dat_feld_$dbPosErinnerungVerschickt is null
and kue_dokuart in (
select kue_dokuart from fispe_titel_dokuart
where repository_id = ${repoIdErinnerungVerschickt}
intersect
select kue_dokuart from fispe_titel_dokuart
where repository_id = ${repoIdErinnerungAn}
intersect
select kue_dokuart from fispe_titel_dokuart
where repository_id = ${repoIdErinnerungsdatum}
)
and dok_dat_feld_$dbPosErinnerungsdatum < getdate()"""
def resultSet = d3.sql.executeAndGet(sqlQuery)
d3.log.info (resultSet.size() + " Dokumente ermittelt.")
if (resultSet.size() > 0)
{
// Ergebnis durchlaufen und Erinnerungen verschicken
resultSet.each
{
lDokId = it.get("doku_id")
lEmpfaenger = it.get("ErinnerungAn")
if (versandModus == "0")
{
d3.log.info ("Nur Test: Erinnerung zu " + it.get("doku_id") + " wuerde an " + it.get("ErinnerungAn") + " verschickt werden.")
}
else if (versandModus == "1")
{
d3.log.info ("Erinnerung zu " + lDokId + " wird an " + lEmpfaenger + " verschickt.")
//Auslesen der IDP Gruppen IDs
HttpsURLConnection taskAppRequest = new URL(baseURi + "/task/tasks").openConnection();
taskAppRequest.setRequestMethod("POST");
taskAppRequest.setRequestProperty("Origin", baseURi);
taskAppRequest.setRequestProperty("content-type", "application/json");
taskAppRequest.setRequestProperty("Authorization", "Bearer " + ServiceAPIKey);
taskAppRequest.setDoOutput(true);
//correlationKey zusammensetzen
UUID uuid = UUID.randomUUID();
String randomUUIDString = uuid.toString();
String jsonInputString = """{
"subject" : "Erinnerung zum Dokument",
"description" : "Das Erinnerungsdatum für das anliegende Dokument wurde erreicht.",
"assignees" : [${lEmpfaenger}],
"correlationKey" : ${randomUUIDString},
"context" : {
"key" : "COMMON",
"type" : "task",
"name" : "Allgemeine Erinnerung"
},
"dmsReferences" : [
{
"repoId" : ${repoId},
"objectId" : ${lDokId}
}
],
"_links" : {
"attachment" : { "href": "/dms/r/${repoId}/o2/${lDokId}"}
}
}""";
def response = taskAppRequest.getOutputStream().write(jsonInputString.getBytes("UTF-8"));
response = taskAppRequest.getResponseCode()
if (response == 200 || response == 201)
{
// Wenn erfolgreich, Feld "Erinnerung verschickt" aktualisieren
d3.log.info("Aufgabe erfolgreich angelegt")
Document currentDoc = d3.archive.getDocument(lDokId, apiServiceUser)
def date = new Date()
def dateTime = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
currentDoc.field[dbPosErinnerungVerschickt] = "Verschickt am " + dateTime.format(date)
currentDoc.updateAttributes(apiServiceUser, true)
}
else
{
d3.log.error("Fehlercode " + response + " bei Anlage der Aufgabe")
}
}
}
}
d3.log.info("Skript TH_sendReminder erfolgreich beendet.");
}
catch (SQLException e)
{
d3.log.error ("Dokumente loeschen: Fehler in Script aufgetreten!");
}