Connector für Microsoft Exchange - Technische Besonderheiten

Der Connector für Microsoft Exchange Server wurde entwickelt, um Ihnen die Integration von Postfächern so einfach wie möglich zu machen. Trotzdem erfordert der Umgang mit Daten des Exchange Servers die Beachtung einer Reihe von technischen Besonderheiten, die im Folgenden einzeln angesprochen werden. In der Regel wird der Umgang mit diesen Besonderheiten von Intrexx übernommen. Sollten Sie jedoch bei der Erstellung von Anwendungen individuelle Wege beschreiten oder tiefer in die Entwicklung mit Groovy oder Velocity auf die Daten zugreifen, ist es wichtig, die Besonderheiten zu kennen.

Primärschlüssel der Connector-Tabellen

Primärschlüssel dienen dazu, einen Datensatz genau zu identifizieren. Wenn Sie aus einer Liste von Datensätzen genau einen Datensatz selektieren möchten, benötigen Sie dazu den Primärschlüssel. Die folgende Liste gibt Ihnen die notwendige Übersicht:

Tabelle

Primärschlüssel

Appointment

ID

Folder

ID

Message

ID

Contact

ID

Task

ID

Eine Besonderheit des Exchange Stores im Vergleich zu relationalen Datenbanken ist, dass sich durch Ändern eines Datensatzes unter Umständen der ID-Wert ändern kann. Daher eignet sich ID nicht dazu, Daten in Exchange mit Daten aus anderen Applikationen zu verknüpfen. Für diesen Fall gibt es in allen Exchange Tabellen das PermanentURL-Feld. Dieses gewährleistet einen beständig eindeutigen Wert zur Identifizierung eines Datensatzes.

Nicht sortierbare Felder

Die Daten der Postfächer werden für Intrexx wie Daten aus Datenbanken aufbereitet, um eine möglichst einfache Form der Integration zu bieten. Allerdings handelt es sich beim Exchange Server nicht um eine Datenbank und es dürfen nicht alle verfügbaren Felder als Sortierfeld eingesetzt werden. Im Folgenden finden Sie die Liste mit der Aufstellung der entsprechenden Felder:

Nicht sortierbare Felder

Alternative

Bcc

ETag

FKID

FKItemID

FKUserMailboxE-Mail

HasSubfolders

HRef

HtmlDescription

ItemLink

ParentName

PermanentUrl

Read

ReplicationUID

ResourceTag

UnicodeSubject

NormalizedSubject

VisibleCount

UnreadCount

Value

Maskierung von Feldern

Einige Feldnamen der Objekte des Exchange Servers (E-Mails, Termine, Notizen, Aufgaben) haben den Namen von geschützten Begriffen der Datenbankabfragesprache SQL. Diese Namen müssen entsprechend maskiert werden.

Zu maskierendes Feld

Maskierung

to

[to]

Benutzerdefinierte Felder

Neben den Standardfeldern des Exchange Stores, bietet der Connector die Möglichkeit, benutzerdefinierte Felder zu erstellen. Folgende Zusatzfelder werden bei der Installation des Connectors automatisch angelegt:

Feld Name

Datentyp

IntrexxID

Integer

IntrexxFKID

Integer

IntrexxGUID

String

IntrexxApplication

String

IntrexxLastUpdated

Datetime

IntrexxReserved1

String

IntrexxReserved2

String

IntrexxReserved3

String

IntrexxReserved4

Integer

Objekte im Groovy-Kontext

Einige gewünschte Funktionalitäten können vielleicht nicht über die Oberfläche von Intrexx abgebildet werden, wie z.B. die Zuordnung einer E-Mail aus einem Postfach als Dateianhang in einem Kunden-Datensatz in Ihrem CRM. Der Exchange Server selbst bietet dafür keine Funktionalität. Um solche Anforderungen abbilden zu können, gibt es eine Reihe von Methoden, die Sie hierbei unterstützen:

Objekt

Beschreibung

ExchangeConnectionUtil

Ermöglicht Zugriff auf Exchange JDBC Connections in Groovy/Velocity Skripts.

ExchangeMessageUtil

Bietet Methoden für den Zugriff und die Verwaltung von Exchange Nachrichten, wie z.B. lokales Speichern einer Nachricht im MSG- oder EML-Format, das Kopieren/Verschieben von Nachrichten in Ordnern, Senden/Weiterleiten von Nachrichten oder Verwalten von Attachments.

ExchangE-MailboxUtil

Bietet Informationen über das Exchange Postfach eines Benutzers, wie z.B. Namen der Standardordner, Liste aller Order, Liste der freigegeben Benutzer, Verwalten der Abwesenheitsnotiz.

ExchangeAppointmentUtil

Erlaubt das Versenden von Meeting-Einladungen und die Stornierung von Meetings.

ExchangeItemUtil

Hinzufügen von Dateianhängen zu Exchange Objekten, lokales Speichern von Dateianhängen, Kopieren/Verschieben von Objekten in andere Ordner

ExchangeUserMailboxInfo

Bietet Informationen über das Exchange Postfach des aktuell angemeldeten Intrexx Benutzers. Das Objekt wird für den performanten Zugriff in der Intrexx Session vorgehalten.

Spezielle Filter

Bei manchen Anpassungen machen die Besonderheiten des Exchange-Servers und die Möglichkeiten des Connectors in Tabellen den Einsatz besonderer Filter erforderlich, z. B. bei der sprachabhängigen Anzeige von Ordnernamen (Posteingang, gesendete Objekte, etc.) oder dem Filtern der E-Mail Adresse des aktuellen Benutzers. Auch wenn Sie z.B. nur Elemente aus dem Posteingang anzeigen möchten, müssen Sie die E-Mail-Elemente entsprechend filtern.

Intrexx System-Properties

Folgende Intrexx System-Propertys ermöglichen eine zusätzliche technische Konfiguration des Connectors. Die Propertys sind in der Datei portal.cfg im Portalverzeichnis internal/cfg einzutragen.

System Property

Beschreibung

de.uplanet.lucy.exchange.exchangeConnectionStringLog

Der Wert true aktiviert ausführliche Log-Meldungen des JDBC Treibers (default false).

de.uplanet.lucy.exchange.useJdbcOdbcDriver

Wert true benutzt den MediaGateway-ODBC-Treiber über die Sun JDBC-ODBC-Bridge anstatt des nativen JDBC-Treibers (default false).

de.uplanet.lucy.exchange.useOWAVirtualDirectory

Diese Property kann auf true gesetzt werden, wenn mit Exchange Server 2007 Verbindungsprobleme auftreten (default false).

Nicht unterstützte Where-Statements

Die MediaGateway-Tabellen werden virtuell in drei Gruppen unterteilt. Diese Gruppen sind für den Where-Abschnitt in SQL-Statements relevant. Es ist möglich, jede Art von Where-Statement zu schreiben, solange es ein gültiges SQL-Statement ist und alle Spalten innerhalb des Where-Statements entweder direkt von einer einzelnen Gruppe kommen oder die Gruppen über den Operator AND mit anderen Gruppen verbunden sind. Jede Gruppe muss in Klammern eingeschlossen werden, wenn die jeweilige Gruppe mehr als ein untergeordnetes Statement hat.

MediaGateway Tabellen-Gruppen

Gruppentyp

Tabellen

Array

MessageCategories, AppointmentCategories, TaskCompanies, ContactChildrensNames, MessageVotingOption

Shared

ExchangeSharedUsers

Exchange

Alle anderen

Das Where-Statement-Schema

…where (Exchange) and (Shared) and (ArrayTable) and (eine der Tabellen) and …(eine der drei Tabellen-Gruppen)

Beispiele:

select * from Message inner join MessageCategories on where subject = 'my subject' and value='item of category'

Es gibt zwei Tabellen-Gruppen in dieser Abfrage. Der Teil subject='mysubject' kommt von der Exchange-Gruppe. Der Teil item='item of category' kommt von der Array-Gruppe. Es ist möglich, Klammern in der Abfrage einzusetzen, solange die Gruppen logisch über einen AND-Operator getrennt bleiben.

select * from Message inner join MessageCategories on where (subject = 'my subject' or  body='my body') and value='item of category' , 

Hier ein komplizierteres Statement:

(subject='my subject' or ( body='my body' or (subject= 'my second option' or subject like 'my third option'))) and value='item of category'.

Alle Abfragen sollten gemäß dieser einfachen Regel aufgebaut werden.

Was in Where-Statements nicht unterstützt wird

…where (Exchange or Shared or ArrayTable) – oder jede Kombination von OR and AND Operatoren.

So kann z.B. weder die Abfrage

where (subject='my subject') and value='item of category' or body='my body'

noch die Abfrage

where (subject='my subject') and (value='item of category' or body='my body')

ausgeführt werden, weil eine Spalte von einer Gruppe eine andere überschneidet. Wenn diese Regel gebrochen und die Inkonsistenz aufgedeckt wird, wird von der Software die Exception "Inconsistent branch has been found" ausgelöst. In diesem Fall wird eine alternative Lösung benötigt, die derselben Logik folgt, deren Syntax aber die Regel trifft.

Beispiel:

Where subject IS NULL AND value ='my first value' OR subject IS NULL AND value ='my second value' 

kann umgewandelt werden in

Where subject is null and (value ='my first value' or value ='my second value')

Nach dieser einfachen Transformation werden zwei logisch getrennte, klar unterscheidbare Gruppen erzeugt, die über den Operator AND miteinander verbunden sind.