Tipps & Tricks - ICS-Kalenderdatei erzeugen
Dieser Beitrag zeigt Ihnen, wie man Terminwerte (von, bis, Ort, Titel, Beschreibung) mit Groovy-Skript in eine iCalendar-Datei schreibt und diese in ein Dateifeld desselben Datensatzes ablegt. Die iCalendar-Datei kann dann z.B. per E-Mail verschickt oder in der Portal-Applikation heruntergeladen werden.
Applikation
Unsere Beispielapplikation (ab Intrexx Version 12.0.0) mit Prozess können Sie hier herunterladen und anschließend wie gewohnt importieren. Der enthaltene Prozess ist beim Import deaktiviert - dieser muss entweder direkt beim Import oder später im Modul "Prozesse" über das Hauptmenü "Prozess" aktiviert werden, damit die Applikation wie gewünscht funktioniert.
Wenn Sie die Applikation "Tipps & Tricks - ICS-Kalenderdatei erzeugen" im Modul "Applikationen" öffnen, finden Sie auf der Eingabeseite die folgenden Eingabefelder, die mit den entsprechenden Datenfeldern verbunden sind:
-
Titel
-
Ort
-
Beginn (Typ Datum & Uhrzeit)
-
Ende (Typ Datum & Uhrzeit)
-
Beschreibung
Der Einfachheit halber sind alle diese Eingabefelder Pflichtfelder. Auf diese Weise müssen NULL-Werte im Prozess nicht behandelt werden. Zusätzlich gibt es in der Datengruppe das Dateifeld "File", in dem für jeden erzeugten Datensatz eine .ics-Datei abgelegt wird.
Außerdem gibt es in der Applikation die Ansichtsseite "Termindetails", die im Browser mit Klick auf den Titel eines Datensatzes in der Tabelle auf der Startseite "Übersicht" geöffnet werden kann. Auf dieser Ansichtsseite kann dann auch die .ics-Datei heruntergeladen werden.
Prozess
Öffnen Sie den Prozess "Tipps & Tricks - ICS-Kalenderdatei erzeugen" im Modul "Prozesse". Das erste Element der Prozesskette ist ein Datengruppen-Ereignisbehandler, der auf das Einfügen und Ändern von Datensätzen in der Applikation reagiert.
Das zweite Prozesselement ist eine Groovy-Aktion. Hier wird das folgende Skript ausgeführt:
import de.uplanet.util.ISODateTimeUtil
def strFileName = "Appointment"
def guidTermin = g_record["725D4B79458105CD706F078AE07468D6475F9E24"].value /* datafield (PK) (S) ID <string> */
def strSummary = g_record["C7366F979C6884FA97FAB3DA5EE60B9C0E98DC3A"].value /* datafield Title <string> */
def strLocation = g_record["2616A42ADF3D2A3CB68E44864CD72C76852746A1"].value /* datafield City<string> */
def strDescription = g_record["594374366FD2600AE013B5357320CC0214BB197E"].value /* datafield Description<text> */
def tsStart = g_record["0582AD37E755C68CCC0986E63BD26BA2BAE4447C"].value /* datafield Begin <datetime> */
def tsEnd = g_record["7C8CEAA2652F028E4A95F726627466037CDADD35"].value /* datafield End <datetime> */
def tsStamp = now().withoutFractionalSeconds
def isoUtil = ISODateTimeUtil.newInstance()
def strStart = isoUtil.formatISODateTime(tsStart)
def strEnd = isoUtil.formatISODateTime(tsEnd)
def strStamp = isoUtil.formatISODateTime(tsStamp)
def tempFile = File.createTempFile(strFileName, ".ics")
def strOutput = """BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myInstitution//myTopic
METHOD:PUBLISH
BEGIN:VEVENT
SEQUENCE:0
UID:${guidTermin}
SUMMARY:${strSummary}
DESCRIPTION:${strDescription}
DTSTAMP:${strStamp}
LAST-MODIFIED:${strStamp}
DTSTART:${strStart}
DTEND:${strEnd}
LOCATION:${strLocation}
END:VEVENT
END:VCALENDAR
"""
tempFile.withWriter("Cp1252") {out -> out.append(strOutput)
}
def strExportfileFieldGuid = "1983BBED4A02FFBF2EBB6C265741BDA76C1AC94A" /* datafield File <file> - GUID of the datafield*/
g_dgFile.copy(guid: strExportfileFieldGuid, id: guidTermin, file: tempFile.getAbsolutePath(), name: strFileName + ".ics", mode: "replace",
triggerWorkflow: false)
tempFile.delete()
Ersetzen Sie die hier angegebenen GUIDs ggfs. mit den entsprechenden GUIDs aus Ihrer Applikation. Diese GUIDs können Sie direkt im Editor im Bereich Applikationsstruktur ermitteln und einfügen. Speichern Sie dann den Prozess.
Die Applikation im Browser
Hier sehen Sie die Liste aller angelegten Datensätze. Ein Klick auf den Titel eines Datensatzes öffnet die Ansichtsseite, von der aus die ICS-Datei heruntergeladen oder geöffnet werden kann.
iCalendar
Selbstverständlich können Sie Ihr Ausgabeobjekt um weitere iCalendar-Propertys erweitern und Ihren Termin z.B. mit einer Erinnerungsfunktion versehen. Zahlreiche iCalendar-Tutorials halten Beispiele bereit.