====== Mapping-JSON-Format ====== 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#copycolumns_—_denormalisierte_parent-spalten|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// {{tag>outlooksync entwickler mapping json schema format}}