Tipps & Tricks - E-Mail aus Microsoft Exchange in Datengruppe speichern

Dieser Beitrag zeigt Ihnen Schritt für Schritt, wie eine E-Mail aus Microsoft Exchange einem Datensatz in einer Portal-Applikation zugeordnet und gespeichert werden kann.

Verbindung anlegen

Falls noch keine Verbindung zu Microsoft Exchange besteht, stellen Sie diese zunächst Mit dem Connector für Microsoft Exchange her. Eine Anleitung dazu finden Sie hier.

Microsoft Exchange Applikationen importieren

Falls noch nicht geschehen, importieren Sie die Exchange - E-Mail-Applikation. Wo Sie das Importpaket und weitere Informationen finden, sehen Sie hier.

Exchange-Applikation anpassen

Öffnen Sie die Exchange-E-Mail-Applikation im Modul Applikationen. Wechseln Sie auf die Seite "_tblPreview" in der Datengruppe "Nachrichten". Legen Sie auf dieser Seite eine Schaltfläche an und geben Sie ihr den Titel "E-Mail speichern". Wechseln Sie im Eigenschaftendialog der Schaltfläche auf den Reiter "Skript".

Klicken Sie dort auf "JavaScript für Desktop bearbeiten".

Fügen Sie das folgende Skript im JavaScript-Editor ein:

function triggerWorkflow(p_strRecId)
{
    triggerUserWorkflowEvent('911F44EE227AE9D9D441C3CE57E10728A457F6E9', {qs_id: p_strRecId});
    return true;
}

Mit diesem Skript wird ein Prozess, den wir später noch erstellen, gestartet. Mit "p_strRecId" übergeben Sie die ID der E-Mail als Requestparameter an den Prozess. Schließen Sie den Skript-Editor mit Klick auf "OK". Klicken Sie auf dem Reiter "Skript" auf "Skriptaufruf hinzufügen" und wählen Sie das Event "onclick" aus. Fügen Sie im Feld "Funktion" den Funktionsaufruf

triggerWorkflow('$drRecord.getRecId()')

ein. Bestätigen Sie alle Dialog mit Klick auf "OK" und speichern Sie die Applikation.

Ziel-Applikation

Die E-Mail kann vom Prozess, den wir im nächsten Kapitel erstellen, in eine Datengruppe einer beliebigen vorhandenen oder neu erstellten Applikation gespeichert. Dazu wird in dieser Datengruppe ein Datenfeld mit dem Datentyp "File" benötigt. Erstellen Sie ein solches Datenfeld in Ihrer Zielapplikation. Das Feld kann dann z.B. in eine Tabelle eingebunden werden, die die Datensätze der Datengruppe anzeigt.

Prozess erstellen

Wechseln Sie in das Modul Prozesse und erstellen Sie einen neuen Prozess.

Entfernen Sie alle eventuell vorhandenen Prozesselemente und legen Sie einen einen neuen Generischen Ereignisbehandler an. Wählen Sie im Eigenschaftendialog die Klasse "UserWorkflowEventHandler" und verwenden Sie als eventGuid die GUID, die Sie in der JavaScript-Funktion "triggerWorkflow()" verwendet haben (in diesem Beispiel "911F44EE227AE9D9D441C3CE57E10728A457F6E9"). Bestätigen Sie Ihre Eingaben mit OK.

Erstellen Sie eine Groovy-Aktion und verbinden Sie sie mit dem Generischen Ereignisbehandler. Tragen Sie hier folgendes Skript ein:

import de.uplanet.lucy.server.businesslogic.exchange.util.ExchangeUtils
import de.uplanet.lucy.server.businesslogic.exchange.util.ExchangeConnectionUtil
import java.text.SimpleDateFormat

def sysConn = g_dbConnections.systemConnection
def connEx = ExchangeConnectionUtil.getConnectionForWorkflowAction(g_context)
def messageUtil = ExchangeUtils.getMessageUtil(connEx)

def dtNow = now()
def sdf = new SimpleDateFormat("yyyy-MM-dd H-mm")
def dtNowForm = sdf.format(dtNow)

def strMessageId = g_request.get('qs_id')
def fileMail = new File(g_dirWorkflowTmp, "${dtNowForm}.eml")


ExchangeUtils.getMessageUtil().saveMessageAsEML(strMessageId, fileMail)
//messageUtil.saveMessageAsEML(strMessageId, fileMail)

def iMaxLid = g_dbQuery.executeAndGetScalarValue(sysConn, "SELECT MAX(LID) FROM DATAGROUP('C0BA72E42EE775117DDECF63ABEA67377A521B89')", 0)
def iNewLid = iMaxLid + 1

def strSubject = g_dbQuery.executeAndGetScalarValue(connEx, "SELECT Subject FROM Message WHERE ID = ?"){
							setString(1, strMessageId)
						 }

g_dbQuery.executeUpdate(sysConn, """INSERT INTO DATAGROUP('C0BA72E42EE775117DDECF63ABEA67377A521B89')
									(LID, DTINSERT, DTEDIT, LUSERID, LUSERIDINSERT, STR_TITEL_6A585D30)
									VALUES (?, ?, ?, ?, ?, ?)""")
{
	setInt(1, iNewLid)
	setTimestamp(2, dtNow)
	setTimestamp(3, dtNow)
	setInt(4, g_session?.user?.id)
	setInt(5, g_session?.user?.id)
	setString(6, strSubject)
}

g_dgFile.move(guid: "F86BD249C2E9D9090109F3BA3B568DA683C86D05", id: iNewLid, file: fileMail, name: "${dtNowForm}.eml", 
    deleteAlways: true, triggerWorkflow: false)

Ersetzen Sie in den SQL-Anweisungen SELECT und INSERT die GUID der Datengruppe bitte mit der GUID der Datengruppe aus der Ziel-Applikation. Den Namen können Sie im Editor ganz einfach über den Reiter Applikationsstruktur ermitteln, wenn Sie dort Ihre Applikation auswählen. Ersetzen Sie außerdem in der letzten Skriptzeile die GUID "F86BD249C2E9D9090109F3BA3B568DA683C86D05" mit der GUID Ihres Datei-Datenfeldes aus der Ziel-Applikation.

Im Skript wird die gewünschte E-Mail im ersten Schritt zwischengespeichert, um anschließend in die Datengruppe eingefügt zu werden. Anschließend wird mit dem SQL-Statement "INSERT" ein neuer Datensatz in der Datengruppe erzeugt. Dabei wird auch der Betreff der E-Mail als Titel des neuen Eintrags in die Ziel-Applikation übernommen.

Bitte beachten Sie, dass Sonderzeichen im Betreff einer E-Mail Probleme beim Speichern verursachen können.

Mit "g_dgFile" wird im letzten Schritt das zwischengespeicherte E-Mailobjekt zu dem soeben erzeugten Datensatz hinzugefügt. Anzugeben sind hierbei folgende Parameter:

  • g_context: Der aktuelle Verarbeitungskontext. g_context kann konstant eingesetzt werden.

  • fileMail: Das Dateiobjekt der zwischengespeicherten E-Mail.

  • GUID: Die GUID des Datei-Datenfeldes, in das die E-Mail gespeichert werden soll.

  • Dateiname: Der neue Dateiname des abgespeicherten Dateiobjekts.

  • true/false: Soll ein auf der Zieldatengruppe definierter Datengruppen-Ereignisbehandler auf das Einfügen der Datei reagieren?

Als Name der abgespeicherten E-Mail wird hier im Beispiel die aktuelle Zeit verwendet. Andere Dateinamen wie Betreff (ohne Sonderzeichen), Kundennummer oder ID sind ebenfalls denkbar und können individuell gewählt werden. Speichern und veröffentlichen Sie den Prozess und rufen Sie die E-Mail-Applikation im Browser auf. Wählen Sie eine Nachricht aus, die archiviert werden soll und klicken Sie auf die Schaltfläche "E-Mail abspeichern". Nach dem erfolgreichen Speichern finden Sie die E-Mail in Ihrer Ziel-Applikation.