Add column mapping defaults functionality and example JSON file

This commit is contained in:
Torsten Brendgen
2026-06-29 13:37:18 +02:00
parent 396caa2ca4
commit 0702baf7f1
4 changed files with 762 additions and 29 deletions

View File

@@ -28,6 +28,7 @@ Import-Module SharePointServer
- `Start-SPMigration.ps1`: Hauptskript fuer Export und optionalen Import
- `FieldMapping.sample.csv`: altes CSV-Beispiel fuer Feldmapping, weiterhin als Fallback lesbar
- `column-mapping-defaults.sample.json`: Beispiel fuer wiederverwendbare Column-Mapping-Defaults
## Exportierte Struktur
@@ -164,6 +165,42 @@ Fuer das Mapping ist vor allem relevant:
Wenn eine Ziel-Liste oder Ziel-Bibliothek nicht existiert, gibt das Skript eine Warnung aus, dass dieser Container manuell angelegt werden soll.
## Column Mapping Defaults
Wenn Bibliotheks- und Listen-Mappings je Migration unterschiedlich sind, die Spalten-Mappings aber gleich bleiben, kann die GUI eine separate Column-Defaults-Datei verwenden.
- Die `MappingTable.json` bleibt migrationsspezifisch und enthaelt weiterhin `LibraryMappings`, `ListMappings` und die konkret angewendeten `MetadataColumnMappings`.
- Die Defaults-Datei enthaelt nur wiederverwendbare Spaltenregeln unter `Rules`.
- In der GUI kann ein Defaults-Pfad im Feld `ColumnDefaults` gepflegt werden. Nach einem Export werden vorhandene Defaults automatisch auf die frisch geladene `MappingTable.json` angewendet und gespeichert.
- Mit `Anwenden` koennen Defaults erneut auf die aktuelle MappingTable gelegt werden. Danach bleiben manuelle Anpassungen pro Migration weiterhin moeglich.
- Mit `Speichern` erzeugt die GUI aus den aktuellen Column-Mappings ein Defaults-Template. Gleichartige Spalten werden dabei auf `ContainerSourceTitle = "*"` generalisiert; widerspruechliche Regeln bleiben container-spezifisch.
Regeln werden von spezifisch nach allgemein angewendet:
- `ObjectType + ContainerSourceTitle + SourceInternalName`
- `ObjectType + * + SourceInternalName`
- `* + ContainerSourceTitle + SourceInternalName`
- `* + * + SourceInternalName`
Beispiel:
```json
{
"SchemaVersion": 1,
"TemplateType": "ColumnMappings",
"Rules": [
{
"ObjectType": "*",
"ContainerSourceTitle": "*",
"SourceInternalName": "SecurityClearance",
"TargetInternalName": "GMNSecurityClearance",
"ImportSupported": true
}
]
}
```
## Parameter
### Pflichtparameter
@@ -196,6 +233,7 @@ Hinweis:
- Wenn `Overwrite` nicht gesetzt ist und eine Datei bereits existiert, wird bei aktiver Versionierung eine neue Version geschrieben; ohne Versionierung wird die Datei uebersprungen.
- Nicht importierbare Systemfelder wie `Attachments`, `Created`, `Modified`, `Author` oder `Editor` werden automatisch aus der MappingTable herausgehalten bzw. beim Import uebersprungen.
- Vor dem Speichern prueft das Skript fehlende Pflichtfelder. Wenn ein einzelnes Listen- oder Datei-Metadatenobjekt trotzdem nicht gespeichert werden kann, wird es mit Kontext-Warnung uebersprungen und der Import laeuft weiter.
- Beim Listenimport legt das Skript bei Bedarf ein verstecktes Textfeld `StartSPMigrationSourceUniqueId` in der Zielliste an. Wiederholte Imports aktualisieren damit vorhandene Elemente anhand der exportierten Source-`UniqueId` statt sie erneut anzulegen.
## Beispiele
@@ -270,7 +308,7 @@ Anschliessend:
### Listen
- Listeneintraege werden neu angelegt.
- Listeneintraege werden neu angelegt oder bei erneutem Import ueber `StartSPMigrationSourceUniqueId` wiedergefunden und aktualisiert.
- Feldwerte werden ueber `FieldValues`, `FieldTextValues` und `MetadataColumnMappings` gemappt.
## Bekannte Einschraenkungen