Neben den auf codeplex verfügbaren Tasks zum Packen und Entpacken von Dateien gibt es auch andere Varianten um dies durchzuführen. Ich möchte in diesem Blogbeitrag erklären, wie man mit Hilfe von SSIS bestimmte Dateitypen in einem Ordner in einen anderen Ordner verschiebt. Danach sollen diese Dateien mit SSIS gepackt werden. Als Archivierungsprogramm wird 7zip (Open-Source) verwendet.
Vorbereitend müssen folgende Variablen erzeugt werden:
Initial werden die Pfade für den Quellpfad, Zielpfad und den Dateinamengesetzt. Ich hab mich der Einfachheit halber für D:\Quelle\ und D:\Ziel\ entschieden.
Um die Werte für die anderen Variablen zu erzeugen, gehen wir über das Eigenschaftsfenster der jeweiligen Variable und setzen den Eintrag für EvaluateAsExpression auf „True“.
Danach muss man auf Expression klicken, um das folgende Fenster für die Variable sErzeugeZielOrdnerangezeigt zu bekommen.
Der oben angegebene Ausdruck soll zu einem späteren Zeitpunkt dafür sorgen, dass in dem festgelegten Zielpfad ein Ordner mit dem Schlüssel YYYYMMDD (20120224 steht für den 24.02.2012) angelegt wird. Hier noch der Ausdruck damit Ihr diesen nicht abtippen müsst:
(DT_STR, 4, 1252)DATEPART(„yyyy“, GETDATE()) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„mm“, GETDATE()), 2) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„dd“, GETDATE()), 2)
Zu beachten ist die Escape sequence für den Backslash am Ende. Dieser wird durch \\ gesetzt.
Die beiden Expressions für sQuellpfadUndDateiname und sZielpfadUndDateiname werden auch über das Eigenschaftsfenster angelegt. Folgende Ausdrücke habe ich dafür verwendet:
sQuellpfadUndDateiname: @[User::sQuellpfad] + @[User::sDateiname]
sZielpfadUndDateiname: @[User::sErzeugeZielOrdner] + @[User::sDateiname]
Nachdem die Variablen angelegt sind, geht es mit der Ablaufsteuerung weiter. Folgendes Bild zeigt vorab den Endzustand.
In einen Sequenzcontainer legen wir einen Task ’Dateisystem‘ (in der Abb. FSYS erstelle Zielordner) der mit einem Sequenzcontainer verbunden wird.
Den Task habe ich folgendermaßen konfiguriert:
Die Konfiguration für den Foreach-Schleifencontainer (in der Abb. FELC durchsuche Quellordner):
Da ich aus dem Quellordner nur die txt-Dateien kopieren möchte, gebe ich unter Dateien den Ausdruck *.txt an. Abschließend erfolgt die Variablenzuordnung.
In den Foreach-Schleifencontainer wird ein weiterer Task ‚Dateisystem‘ (in Abb. FSYS verschiebe Dateien) angelegt. Dessen Konfiguration sieht wie folgt aus:
Da ich meine Dateien zunächst kopieren möchte, wähle ich unter Operation: Datei kopieren.
Danach wird der Sequenzcontainer mit einem Task `Prozess ausführen`(in Abb. ERP packe XML in zip-Archiv) verbunden. Dieser wird wie folgt konfiguriert:
Unter Executable wird der Pfad zur 7z.exe angegeben. Der Ausdruck für Arguments zeigt folgendes Bild:
Die Kommandozeilenparameter für 7zip lassen sich recht schnell im Internet finden. Mit dem angegebenen Ausdruck erzeuge ich im Zielordner eine zip-Datei mit dem Namen des aktuellen Tages.
Ausdruck:
„a“ + “ “ + @[User::sErzeugeZielOrdner] + (DT_STR, 4, 1252)DATEPART(„yyyy“, GETDATE()) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„mm“, GETDATE()), 2) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„dd“, GETDATE()), 2) + „.zip “ +@[User::sErzeugeZielOrdner]
Ein abschließender Durchlauf beweist, dass das Paket funktioniert. Alle Dateien die den Dateityp .txt haben, werden von D:\Quelle\ nach D:\Ziel\20120224\20120224.zip archiviert. Wie üblich könnte Ihr jegliche Kritik oder auch Anregungen gern in den Kommentaren hinterlassen.