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:
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.
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 Felder
Alternative
Bcc
ETag
FKID
FKItemID
FKUserMailboxE-Mail
HasSubfolders
HRef
HtmlDescription
ItemLink
ParentName
PermanentUrl
Read
ReplicationUID
ResourceTag
UnicodeSubject
NormalizedSubject
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 Feld
Maskierung
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 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.
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.
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.
…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.