Das Mapping wird als JSON-Datei neben der EXE gespeichert.
Vollständiges Beispiel
{
"mappingName": "OutlookSync",
"outlookAccount": "user@company.com",
"outlookFolderPath": "ExternalContacts",
"serverName": "localhost",
"databaseName": "MyDatabase",
"useSqlAuth": true,
"username": "sa",
"password": "DPAPI:BASE64...",
"rootTable": "STAP",
"primaryKeyColumn": "IDSTAP",
"relations": [
{
"targetTable": "STTK",
"sourceColumn": "IDSTAP",
"targetColumn": "IDSTAP",
"enabled": true,
"singleRow": true,
"primaryKeyColumn": "IDSTTK",
"timestampColumn": "LastModified",
"copyColumns": ["IDST"]
}
],
"fieldMappings": [
{
"outlookField": "FirstName",
"sourceType": 0,
"tableName": "STAP",
"columnName": "VN"
},
{
"outlookField": "Email1Address",
"sourceType": 1,
"tableName": "STTK",
"columnName": "B",
"filterColumn": "TKArt",
"filterValue": "170"
},
{
"outlookField": "Title",
"sourceType": 0,
"tableName": "C2kat",
"columnName": "CtgDesc",
"joinColumn": "Anrede"
}
],
"customOutlookFields": ["Kontakt-ID"],
"primaryMatchKey": {
"outlookFields": ["Email1Address"],
"dbExpressions": ["STTK.B"]
},
"syncDirection": 0,
"conflictPolicy": 0,
"deletePolicy": 0
}
Schlüssel-Referenz
Root-Level
| Schlüssel | Typ | Beschreibung | Pflicht |
mappingName | String | Frei wählbarer Name (wird als Dateiname) | Ja |
outlookAccount | String | E-Mail-Adresse des Outlook-Profils | Ja |
outlookFolderPath | String | Kontakt-Ordner in Outlook | Ja |
serverName | String | SQL Server Hostname/IP | Ja |
databaseName | String | Datenbankname | Ja |
useSqlAuth | Boolean | SQL-Authentifizierung verwenden | Nein (default: false) |
username | String | SQL Server Login | Bedingt |
password | String | DPAPI:BASE64… oder Klartext | Bedingt |
rootTable | String | Wurzeltabelle | Ja |
primaryKeyColumn | String | PK-Spalte der Wurzeltabelle | Ja |
customOutlookFields | String[] | Benutzerdefinierte Outlook-Felder | Nein |
syncDirection | Integer | Sync-Richtung (Enum) | Nein (default: 0) |
conflictPolicy | Integer | Konflikt-Regel (Enum) | Nein (default: 0) |
deletePolicy | Integer | Löschverhalten (Enum) | Nein (default: 0) |
Relation-Objekt
| Schlüssel | Typ | Beschreibung | Default |
targetTable | String | Verknüpfte Tabelle | — |
sourceColumn | String | FK-Spalte in der Wurzeltabelle | — |
targetColumn | String | PK-Spalte in der Zieltabelle | — |
enabled | Boolean | Relation aktiv | true |
singleRow | Boolean | true = OUTER APPLY + TOP 1 statt LEFT JOIN | true |
primaryKeyColumn | String | PK der Zieltabelle (für Write-Back) | „“ |
timestampColumn | String | Timestamp-Spalte für „Neuerer gewinnt“ | „“ |
copyColumns | String[] | Denormalisierte Spalten, die beim INSERT via Subquery aus der Wurzeltabelle kopiert werden (→ SQL-Builder) | [] |
FieldMapping-Objekt
| Schlüssel | Typ | Beschreibung | Default |
outlookField | String | Ziel-Feld im Outlook-Kontakt | — |
sourceType | Integer | Zuordnungstyp (Enum) | 0 |
tableName | String | Quelltabelle | — |
columnName | String | Quellspalte | — |
filterColumn | String | Diskriminator-Spalte (nur fsRelated) | „“ |
filterValue | String | Filter-Wert (nur fsRelated) | „“ |
joinColumn | String | Disambiguation bei Mehrfach-Relationen | „“ |
Enum-Werte
TFieldMappingSource (sourceType)
| Wert | Name | SQL-Muster |
0 | fsDirect | alias.[Col] AS [Field] |
1 | fsRelated | LEFT JOIN + WHERE filterColumn = filterValue |
2 | fsExpression | Freies SQL-Fragment (Blacklist-geprüft) |
TSyncDirection (syncDirection)
| Wert | Name | Beschreibung |
0 | Manuell | Diff anzeigen, Benutzer entscheidet |
1 | DB → Outlook | Automatisch nach Outlook |
2 | Outlook → DB | Automatisch in die DB |
TConflictPolicy (conflictPolicy)
| Wert | Name | Beschreibung |
0 | Benutzer fragen | Orange markieren, Benutzer wählt |
1 | DB gewinnt | DB-Wert übernehmen |
2 | Outlook gewinnt | Outlook-Wert übernehmen |
3 | Neuerer gewinnt | Timestamp-Vergleich |
TDeletePolicy (deletePolicy)
| Wert | Name | Beschreibung |
0 | Ignorieren | Gelöschte überspringen |
1 | Markieren | Als gelöscht markieren |
2 | Löschen | Auf Gegenseite löschen |
Abwärtskompatibilität
Fehlende Schlüssel werden beim Laden mit den Default-Werten ergänzt. Ältere Mapping-Dateien funktionieren ohne Änderung.
Wolfgang van der Stille @ EMSR DATA d.o.o. — Outlook Sync