// 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!"); }