====== Mapping-Designer ======
Der Mapping-Designer ersetzt den früheren 6-Schritte-Assistenten durch ein **integriertes 3-Zonen-Layout** im Stil von IDE-Property-Editoren.
===== Aufbau: 3-Zonen-Layout =====
{{wvds:image>de:int:olsync:MappingPane_FieldMapping.png|width=100%|alt=Mapping-Designer: Feld-Mapping}}
^ Zone ^ Position ^ Inhalt ^
| **Step-Tree** | Links | Baumstruktur mit allen Konfigurations-Schritten |
| **Dependency-Tree** | Mitte | Kontextabhängige Detail-Ansicht (Tabellen, Relationen, Felder) |
| **PropertyGrid** | Rechts | Editierbare Eigenschaften des ausgewählten Knotens |
Die drei Zonen sind durch **Splitter** getrennt — die Breiten können per Drag angepasst werden und werden gespeichert.
==== Step-Tree-Knoten ====
^ Gruppe ^ Knoten ^
| **Quellen** | Server-Verbindung |
| **Datenstruktur** | Wurzeltabelle, Beziehungen |
| **Zuordnung** | Feld-Mapping, Match-Keys |
| **Optionen** | Sync-Richtung, Konflikt-Regel, Löschverhalten |
| **Test** | Vorschau, SQL-Test |
----
===== Schritt: Quellen / Server =====
{{wvds:image>de:int:olsync:MappingPane_Server.png|width=100%|alt=Server-Verbindung}}
Konfiguriert die Datenquellen (Outlook-Konto und SQL Server).
^ Feld ^ Beschreibung ^ Pflicht ^
| **Mapping-Name** | Frei wählbarer Name (wird als Dateiname verwendet) | Ja |
| **Outlook-Konto** | E-Mail-Adresse des Outlook-Profils | Ja |
| **Outlook-Ordner** | Kontakt-Ordner (z.B. "Contacts", "ExternalContacts") | Ja |
| **Server** | SQL Server Hostname/IP (z.B. ''localhost'', ''server\instanz'') | Ja |
| **Datenbank** | Datenbankname (Dropdown nach Verbindungstest) | Ja |
| **SQL-Authentifizierung** | Checkbox — wenn aktiviert, Benutzer/Passwort-Felder | Nein |
| **Benutzername** | SQL Server Login (nur bei SQL-Auth) | Bedingt |
| **Passwort** | Wird DPAPI-verschlüsselt gespeichert | Bedingt |
**Kommandos:**
* **Daten abrufen** — Stellt die Verbindung her, lädt Tabellenliste und Outlook-Ordner. Zeigt WaitForm mit Fortschrittsmeldung.
* **Verbindung testen** — Prüft nur die DB-Verbindung ohne Tabellen zu laden.
**Freigegebene Postfächer:** Stores ohne direkte Outlook-Account-Zuordnung (freigegebene Postfächer, PST-Dateien) erscheinen mit dem Suffix ''(Shared)'' in der Kontenliste.
----
===== Schritt: Wurzeltabelle =====
Wählen Sie die Haupttabelle, die Ihre Kontaktdaten enthält.
**Dependency-Tree:** Zeigt die verfügbaren Tabellen mit Zeilenanzahl.
^ Feld ^ Beschreibung ^
| **Tabelle** | Wurzeltabelle (Combo mit allen verfügbaren Tabellen) |
| **Primärschlüssel** | PK-Spalte (Combo, automatisch aus ''sys.foreign_key_columns'' vorgeschlagen) |
| **Timestamp-Spalte** | Optionale Spalte für "Neuerer gewinnt"-Vergleich |
----
===== Schritt: Beziehungen (Relations) =====
{{wvds:image>de:int:olsync:MappingPane_Relations.png|width=100%|alt=Beziehungen}}
Definiert **Tabellenbeziehungen** (JOINs) zwischen Wurzeltabelle und verwandten Tabellen.
==== Automatische Erkennung (zwei Phasen) ====
- **Echte FK-Constraints** aus ''sys.foreign_key_columns''
- **Namensmuster-Fallback** — z.B. Spalte ''IDSTAP'' in Tabelle ''STTK'' wird als FK auf ''STAP.IDSTAP'' erkannt
**Dependency-Tree:** Zeigt erkannte Relationen mit Quell-/Zieltabelle und JOIN-Bedingung. Checkbox aktiviert/deaktiviert einzelne Relationen.
^ Feld ^ Beschreibung ^
| **Zieltabelle** | Verknüpfte Tabelle |
| **Quellspalte** | FK-Spalte in der Wurzeltabelle |
| **Zielspalte** | PK-Spalte in der Zieltabelle |
| **Primärschlüssel** | PK der Zieltabelle (für Write-Back) |
| **Einzelzeile** | ''true'' = OUTER APPLY + TOP 1 (verhindert Zeilen-Vervielfachung) |
| **Timestamp-Spalte** | Optionale Timestamp-Spalte der Relation |
**Kommandos:**
* **Daten abrufen** — Erkennt Relationen automatisch
* **Join prüfen** — Zeigt Statistik: Matches, Waisen, Match-%
----
===== Schritt: Feld-Mapping =====
{{wvds:image>de:int:olsync:MappingPane_FieldMapping.png|width=100%|alt=Feld-Mapping}}
Ordnet **Outlook-Kontaktfelder** den **Datenbankspalten** zu.
**Dependency-Tree:** Zeigt alle konfigurierten Feld-Zuordnungen mit Quelltyp, Tabelle und Spalte.
^ Feld ^ Beschreibung ^
| **Outlook-Feld** | Ziel-Feld im Outlook-Kontakt (52 Standard + Custom) |
| **Tabelle** | Quelle: Wurzeltabelle oder eine verwandte Tabelle |
| **Spalte** | Spalte in der gewählten Tabelle (Combo) |
| **Filter-Spalte** | Nur bei 1:N-Tabellen: Diskriminator-Spalte |
| **Filter-Wert** | Wert zur Filterung (z.B. ''TKArt = 170'' für E-Mail) |
==== Drei Zuordnungstypen ====
^ Typ ^ SQL-Muster ^ Beispiel ^ Wann verwenden ^
| **Direkt** (''fsDirect'') | ''alias.[Col]'' | ''STAP.VN'' → ''FirstName'' | 1:1-Spaltenzuordnung |
| **Gefiltert** (''fsRelated'') | ''LEFT JOIN + WHERE'' | ''STTK.B [TKArt=170]'' → ''Email1Address'' | 1:N-Tabelle mit Diskriminator |
| **Ausdruck** (''fsExpression'') | SQL-Fragment | ''CONCAT(VN, ' ', NN)'' → ''FullName'' | Berechnete Felder |
**Tabellen-Disambiguation:** Wenn eine Tabelle in mehreren Beziehungen vorkommt (z.B. ''C2kat'' für Anrede UND Titel), wird sie im Tabellen-Dropdown mit dem Quell-Spaltennamen disambiguiert: ''C2kat [via Anrede]'', ''C2kat [via Titel]''.
----
===== Schritt: Match-Keys =====
Definiert, welche Felder einen Kontakt **eindeutig identifizieren** für den Vergleich zwischen DB und Outlook.
==== Primär-Key (Pflicht) ====
Felder, die einen Kontakt zweifelsfrei zuordnen. Typische Konfigurationen:
* E-Mail-Adresse (bester Match bei gepflegten E-Mails)
* Kunden-ID als Custom UserProperty
* Kombination aus Name + Firma
==== Fallback-Key (Optional) ====
Wird verwendet, wenn der Primär-Key keinen Treffer liefert. Typisch: Vorname + Nachname + Firma.
Felder mit "Email" oder "MAIL" im Namen werden automatisch vorgeschlagen.
----
===== Schritt: Vorschau und SQL-Test =====
{{wvds:image>de:int:olsync:MappingPane_SqlTest.png|width=100%|alt=SQL-Test}}
**Vorschau:** Zeigt eine Zusammenfassung des konfigurierten Mappings (Mapping-Name, Wurzeltabelle, Anzahl Beziehungen und Feld-Zuordnungen).
**SQL-Test:**
* **SQL-Memo** (oben): Zeigt das automatisch generierte SELECT-Statement mit allen JOINs, Aliasen und Filter-Bedingungen
* **Test-Abfrage** (Button): Führt das SQL aus und zeigt Ergebnisse im Grid
* **Ergebnis-Grid** (unten): Bis zu 100 Zeilen der Abfrage
**Für Support:** Kopieren Sie das generierte SQL und führen Sie es direkt in SSMS aus, um Probleme mit der Datenbankstruktur zu diagnostizieren.
----
===== Schritt: Sync-Optionen =====
^ Option ^ Werte ^ Standard ^ Beschreibung ^
| **Sync-Richtung** | Manuell, DB→Outlook, Outlook→DB | Manuell | Bestimmt ob Diff angezeigt oder automatisch synchronisiert wird |
| **Konflikt-Regel** | Benutzer fragen, DB gewinnt, Outlook gewinnt, Neuerer gewinnt | Benutzer fragen | Wie Konflikte (beide Seiten geändert) aufgelöst werden |
| **Löschverhalten** | Ignorieren, Als gelöscht markieren, Auf Gegenseite löschen | Ignorieren | Was mit gelöschten Kontakten passiert |
----
===== Kommandoleiste =====
Am unteren Rand des Mapping-Designers befindet sich eine Kommandoleiste:
^ Button ^ Beschreibung ^
| **Daten abrufen** | Lädt DB-Schema, Tabellen, Relationen — kontextabhängig per Step |
| **Alle validieren** | Prüft alle Pflichtfelder und zeigt Ergebnisse in der Statuszeile |
| **Zurücksetzen** | Setzt das Mapping auf ein leeres Template zurück |
| **Speichern** | Speichert die ''.mapping.json''-Datei |
Die **Statuszeile** links in der Kommandoleiste zeigt Validierungsergebnisse und Fehlermeldungen.
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. — Outlook Sync//
{{tag>outlooksync benutzer mapping-designer konfiguration}}