Get-EulandaDmsMigrationPlan #
ÜBERSICHT #
Ermittelt, welche DMS-Ordner bei einer Umstellung der Ablagestruktur wohin wandern, ohne etwas zu verändern.
SYNTAX #
Get-EulandaDmsMigrationPlan [[-BaseFolder] <string>] [[-SourceConfig] <hashtable>] [[-TargetConfig]
<hashtable>] [[-FolderNameMode] <string>] [[-IdDataObject] <string[]>] [[-OrphanFolder]
<string>] [[-Conn] <__ComObject>] [[-Udl] <string>] [[-ConnStr] <string>] [<CommonParameters>]
BESCHREIBUNG #
Das DMS berechnet den Ordner eines Datensatzes bei jedem Aufruf aus der Konfiguration unter \VENDOR\esol\MODULES\DMS\DATAOBJECTS. In der Datenbank steht kein Dateipfad. Wer die Konfiguration ändert, muss deshalb die vorhandenen Ordner mitnehmen, sonst findet das DMS sie nicht mehr. Diese Funktion plant genau das.
Für jeden Datensatz rechnet sie zwei Pfade aus: den alten aus der aktuellen Konfiguration (-SourceConfig) und den neuen aus der Zielkonfiguration. Liegt am alten Pfad tatsächlich ein Ordner und unterscheiden sich beide Pfade, kommt er in den Plan.
Typische Fälle:
- DMS 2.0 auf die 3.x-Struktur: 2.0 legt flach ab (
Rechnung\<Nr>), 3.x hängt Belege unter die Adresse (Adressen\<Match>\Rechnungen\<Nr>). Ein Update übernimmt die alte Konfiguration unverändert, die Umstellung ist ein eigener Schritt. - Mit
-FolderNameMode Id: Adressen, Artikel, Lieferanten und Serviceartikel werden nach der Id benannt statt nach Matchcode oder Nummer. Dann dürfen sich Matchcode und Artikelnummer später ändern, und Sonderzeichen spielen keine Rolle. Der Preis: Im Explorer sieht man nur Nummern, man öffnet die Ablage über EULANDA. - 3.x mit sprechenden Ordnern auf die Id: dieselbe Funktion, die aktuelle Konfiguration ist dann schon die 3.x-Struktur.
Die Zielkonfiguration sind die Vorgaben des installierten DMS 3.x (\SYSTEM\LIBS\esol.userlib.DMS\DATAOBJECTS). Fehlen sie, gilt eine eingebaute Tabelle mit denselben Werten.
Jede Zeile des Plans hat einen Status:
Move: Ordner wird verschoben.Merge: Am Ziel liegt schon ein Ordner, der Inhalt wird zusammengeführt. Vorhandene Dateien werden nicht überschrieben.Ambiguous: Mehrere Datensätze führen zum selben alten Ordner, aber zu verschiedenen Zielen (z. B. zwei Adressen mit gleichem Matchcode). Bleibt liegen.InvalidTarget: Für das Ziel fehlt ein brauchbarer Wert (leer, mit Zeichen, die Windows in Ordnernamen nicht erlaubt, oder ohne Elterndatensatz). Bleibt liegen.Orphan: Ordner an einer Stelle, an der das DMS Datensätze ablegt, aber ohne passenden Datensatz (z. B. gelöschter Beleg, geänderter Matchcode). Ohne-OrphanFolderbleibt er liegen, mit-OrphanFolderwird er aufgehoben (siehe dort).Unknown: Ordner im Basisordner, den keine Konfiguration kennt. Bleibt liegen.
Invoke-EulandaDmsMigration verarbeitet Move, Merge und Orphan mit Zielpfad. Ordner, die schon am richtigen Platz liegen, erscheinen nicht. Ordner, deren Name mit einem Punkt beginnt, übergeht der Plan samt Inhalt; dazu gehört der Ordner für verwaiste Daten, ein zweiter Lauf fasst ihn also nicht an.
Die Funktion liest nur. Je DataObject läuft eine Abfrage, die vorhandenen Ordner werden einmal bis zur nötigen Tiefe eingelesen. Das geht auch bei einigen tausend Ordnern auf einer Netzwerkfreigabe in kurzer Zeit.
PARAMETER #
-BaseFolder #
Type: string
Basisordner des DMS. Vorgabe ist der Wert aus der Registry, mit aufgelösten %env.…%-Platzhaltern. Angeben, wenn die Registry noch auf ein Laufwerk zeigt, das auf dem ausführenden Rechner fehlt, z. B. den UNC-Pfad hinter P:.
-SourceConfig #
Type: hashtable
Aktuelle Konfiguration als Hashtable je DataObject (Schlüssel FolderPath, FolderName, optional ParentObject, ParentObjectId). Vorgabe ist der Stand in der Registry.
-TargetConfig #
Type: hashtable
Eigene Zielkonfiguration im selben Format. Ohne Angabe gelten die Vorgaben von DMS 3.x.
-FolderNameMode #
Type: string
Default: 'Default'
Default übernimmt die Ordnernamen der Zielkonfiguration (Matchcode, Artikelnummer …). Id benennt die DataObjects aus -IdDataObject nach ihrer Id.
-IdDataObject #
Type: string[]
Default: @('Eulanda.Adresse'
DataObjects, die bei -FolderNameMode Id nach der Id benannt werden. Vorgabe: Eulanda.Adresse, Eulanda.Artikel, Eulanda.Kreditor, Eulanda.ServiceArtikel, also alle Stammdaten, deren Ordnername sich sonst mit einer Nummer oder einem Matchcode ändern kann.
-OrphanFolder #
Type: string
Default: ''
Name eines Unterordners, in dem verwaiste Ordner aufgehoben werden, z. B. .verwaist. Mit dem Punkt am Anfang steht er im Explorer oben und der Plan übergeht ihn bei späteren Läufen.
Er liegt im neuen Ordner der Stammdaten: Adressen\.verwaist\<alter Name>, Artikel\.verwaist\<alte Nummer>. Verwaiste Belege aus einer flachen Ablage kommen unter die Stammdaten, zu denen sie künftig gehören: Adressen\.verwaist\Aufträge\<Nr>. Verwaiste Ordner, die schon in einem Elternordner liegen (3.x), wandern mit diesem und bekommen keinen eigenen Zielpfad.
So bleiben die Daten erhalten und lassen sich später von Hand oder per Skript zuordnen, ohne die neue Struktur zu stören. Vorsicht beim Zurücklegen: Inzwischen kann am neuen Ort schon ein neueres Dokument gleichen Namens liegen.
Ohne Angabe bleiben verwaiste Ordner, wo sie sind.
-Conn #
Type: __ComObject
Bereits geöffnete ADODB-Verbindung. Sie bleibt offen.
-Udl #
Type: string
Pfad zu einer UDL-Datei.
-ConnStr #
Type: string
ADODB-Verbindungszeichenfolge.
AUSGABEN #
PSCustomObject
Je Ordner eine Zeile mit DataObject, Id, Depth, Status, OldPath, NewPath und BaseFolder. Depth ist die Ebene in der Elternkette (1 = Stammdaten, 2 = Beleg unter der Adresse); danach ordnet Invoke-EulandaDmsMigration die Schritte.
BEISPIELE #
# DMS 2.0 auf die 3.x-Struktur mit Ids, Liste zum Prüfen als CSV
$plan = Get-EulandaDmsMigrationPlan -Udl 'C:\EULANDA\Eulanda.udl' `
-BaseFolder '\\NAS\Oeffentlich\EULANDA_DMS' -FolderNameMode Id
$plan | Group-Object DataObject, Status | Format-Table Count, Name
$plan | Export-Csv C:\Temp\dms-plan.csv -Delimiter ';' -NoTypeInformation -Encoding UTF8
# Verwaiste Ordner in .verwaist aufheben statt liegen lassen
$plan = Get-EulandaDmsMigrationPlan -Udl 'C:\EULANDA\Eulanda.udl' `
-BaseFolder '\\NAS\Oeffentlich\EULANDA_DMS' -FolderNameMode Id -OrphanFolder '.verwaist'
# Nur nachsehen, welche Ordner keinen Datensatz mehr haben
Get-EulandaDmsMigrationPlan -Conn $conn | Where-Object Status -eq 'Orphan'
VERWANDTE LINKS #
HINWEISE #
Läuft wie alle Datenbankfunktionen in der 32-Bit-PowerShell, wenn auf dem Rechner nur der 32-Bit-Treiber von EULANDA installiert ist.