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.

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

TabellePrimärschlüssel
AppointmentID
FolderID
MessageID
ContactID
TaskID

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.

2. 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 FelderAlternative
Bcc
ETag
FKID
FKItemID
FKUserMailboxE-Mail
HasSubfolders
HRef
HtmlDescription
ItemLink
ParentName
PermanentUrl
Read
ReplicationUID
ResourceTag
UnicodeSubjectNormalizedSubject
VisibleCount
UnreadCount
Value

3. 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 FeldMaskierung
to[to]

4. 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 NameDatentyp
IntrexxIDInteger
IntrexxFKIDInteger
IntrexxGUIDString
IntrexxApplicationString
IntrexxLastUpdatedDatetime
IntrexxReserved1String
IntrexxReserved2String
IntrexxReserved3String
IntrexxReserved4Integer

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.

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

7. Intrexx System-Properties

Folgende Intrexx System Properties ermöglichen eine zusätzliche technische Konfiguration des Connectors. Die Properties sind in der Datei portal.cfg im Unterverzeichnis /internal/cfg des jeweiligen Portals einzutragen.

System Property Beschreibung
de.uplanet.lucy.exchange.exchangeConnectionStringLog 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).

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

9. MediaGateway Tabellen-Gruppen


Gruppentyp Tabellen
Array MessageCategories, AppointmentCategories, TaskCompanies, ContactChildrensNames, MessageVotingOption
Shared ExchangeSharedUsers
Exchange Alle anderen

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

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