Refactor metadata column mappings in README and PowerShell script

- Updated README to reflect changes in metadata column mappings structure, separating system and custom columns.
- Modified PowerShell script to support new metadata column mapping structure.
- Introduced functions to handle taxonomy fields and improved error handling during item saving.
- Enhanced import functionality to manage existing files and handle required fields more effectively.
This commit is contained in:
Torsten Brendgen
2026-04-16 13:11:23 +02:00
parent 4d7f4b0a76
commit 68d7ca6755
2 changed files with 1023 additions and 55 deletions

View File

@@ -79,7 +79,8 @@ Beim Export wird automatisch eine `MappingTable.json` erzeugt. Diese Datei entha
- `LibraryMappings`: Mapping von Quellbibliothek auf Zielbibliothek - `LibraryMappings`: Mapping von Quellbibliothek auf Zielbibliothek
- `ListMappings`: Mapping von Quellliste auf Zielliste - `ListMappings`: Mapping von Quellliste auf Zielliste
- `MetadataColumnMappings`: Mapping der Metadaten-Spalten je Liste/Bibliothek - `MetadataColumnMappings.SystemColumns`: erkannte Systemspalten
- `MetadataColumnMappings.CustomColumns`: erkannte eigene Fachspalten
Beispiel: Beispiel:
@@ -110,26 +111,56 @@ Beispiel:
"Hidden": false "Hidden": false
} }
], ],
"MetadataColumnMappings": [ "MetadataColumnMappings": {
"SystemColumns": [
{
"ObjectType": "List",
"ContainerSourceTitle": "Kalender",
"SourceInternalName": "EventDate",
"SourceCanonicalInternalName": "EventDate",
"SourceSupportingInternalNames": [],
"TargetInternalName": "EventDate",
"DisplayName": "Beginnt",
"TypeAsString": "DateTime",
"Hidden": false,
"ReadOnly": false,
"Sealed": true,
"IsSystemColumn": true,
"ImportSupported": true
}
],
"CustomColumns": [
{ {
"ObjectType": "DocumentLibrary", "ObjectType": "DocumentLibrary",
"ContainerSourceTitle": "Documents", "ContainerSourceTitle": "Documents",
"SourceInternalName": "DHS2016Persdat", "SourceInternalName": "SecurityClearance",
"TargetInternalName": "Persdat", "SourceCanonicalInternalName": "SecurityClearance",
"DisplayName": "Personaldaten", "SourceSupportingInternalNames": [
"TypeAsString": "Text", "SecurityClearance_0"
],
"TargetInternalName": "GMNSecurityClearance",
"DisplayName": "Security Clearance",
"TypeAsString": "TaxonomyFieldType",
"Hidden": false, "Hidden": false,
"ReadOnly": false, "ReadOnly": false,
"Sealed": false "Sealed": false,
"IsSystemColumn": false,
"ImportSupported": true
} }
] ]
} }
}
``` ```
Fuer das Mapping ist vor allem relevant: Fuer das Mapping ist vor allem relevant:
- `TargetTitle`: Zielname von Liste oder Bibliothek - `TargetTitle`: Zielname von Liste oder Bibliothek
- `TargetInternalName`: Zielfeld fuer die exportierte Metadatenspalte - `TargetInternalName`: Zielfeld fuer die exportierte Metadatenspalte
- `SystemColumns`: SharePoint-Standardfelder wie `EventDate`, `EndDate`, `Title` oder `Created`
- `CustomColumns`: eigene Fachspalten, die im Ziel oft umbenannt oder anders aufgebaut sind
- `SourceSupportingInternalNames`: technische Begleitspalten wie `_0` werden nur noch informativ aufgefuehrt und nicht separat gemappt
- `ImportSupported`: steuert, ob eine Spalte beim Import ueberhaupt beruecksichtigt wird
- Taxonomy-Felder werden beim Import ueber den exportierten `TermGuid` gesetzt; dabei wird angenommen, dass derselbe Term im Ziel bereits mit identischer GUID existiert
Wenn eine Ziel-Liste oder Ziel-Bibliothek nicht existiert, gibt das Skript eine Warnung aus, dass dieser Container manuell angelegt werden soll. Wenn eine Ziel-Liste oder Ziel-Bibliothek nicht existiert, gibt das Skript eine Warnung aus, dass dieser Container manuell angelegt werden soll.
@@ -154,13 +185,17 @@ Wenn eine Ziel-Liste oder Ziel-Bibliothek nicht existiert, gibt das Skript eine
- `MappingTable`: JSON-Datei mit Listen-, Bibliotheks- und Spalten-Mappings - `MappingTable`: JSON-Datei mit Listen-, Bibliotheks- und Spalten-Mappings
- `ImportFiles`: importiert nur Dateien/Bibliotheken - `ImportFiles`: importiert nur Dateien/Bibliotheken
- `ImportLists`: importiert nur Listen - `ImportLists`: importiert nur Listen
- `OverwriteFiles`: ueberschreibt vorhandene Dateien beim Import - `Overwrite`: ueberschreibt vorhandene Dateien beim Import
Hinweis: Hinweis:
- Wenn weder `ImportFiles` noch `ImportLists` gesetzt sind, werden beim Import beide Bereiche verarbeitet. - Wenn weder `ImportFiles` noch `ImportLists` gesetzt sind, werden beim Import beide Bereiche verarbeitet.
- Wird `MappingTable` nicht angegeben, verwendet das Skript standardmaessig `OutputPath\MappingTable.json`. - Wird `MappingTable` nicht angegeben, verwendet das Skript standardmaessig `OutputPath\MappingTable.json`.
- Die alte CSV-Variante wird fuer reines Feldmapping weiterhin als Fallback gelesen. - Die alte CSV-Variante wird fuer reines Feldmapping weiterhin als Fallback gelesen.
- Werden keine Schalter gesetzt, leitet das Skript den Modus weiterhin aus `SourceUrl` und `TargetUrl` ab.
- 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.
## Beispiele ## Beispiele
@@ -212,7 +247,7 @@ Anschliessend:
-Import ` -Import `
-MappingTable "C:\Temp\SP-Export\MappingTable.json" ` -MappingTable "C:\Temp\SP-Export\MappingTable.json" `
-ImportFiles ` -ImportFiles `
-OverwriteFiles -Overwrite
``` ```
### Nur Listen importrelevant ausfuehren ### Nur Listen importrelevant ausfuehren

File diff suppressed because it is too large Load Diff