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.

1. 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.

2. 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.

3. 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.

4. 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.

5. 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 de.uplanet.lucy.server.businesslogic.util.FileUCHelper
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)
}

FileUCHelper.moveFileToIntrexx(g_context, fileMail,"F86BD249C2E9D9090109F3BA3B568DA683C86D05", iNewLid, "${dtNowForm}.eml", 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 Hilfe der Klasse "FileUCHelper" wird im letzten Schritt das zwischengespeicherte E-Mailobjekt zu dem soeben erzeugten Datensatz hinzugefügt. Anzugeben sind hierbei folgende Parameter: 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.