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.