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 mit Prozess können Sie hier herunterladen und anschließend wie gewohnt importieren. Der enthaltene Prozess ist beim Import deaktiviert - dieser muß 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.