Der Importer bietet die Möglichkeit, alle möglichen Tasks in Jobs zu bündeln, die dann manuell oder auch automatisch über einen Dienst ausgeführt werden können.
Leider hat dieses Feature so seine Schwachstellen: Parallelverarbeitung funktioniert nur wirklich bei automatischer Ausführung und ein vernünftiges Error-Handling ist nur über aufwendige Scripts zu bewerkstelligen, da sonst der jeweilige Job einfach abbricht und damit die gesamte Kette – von einer Oberfläche mit Workflows etc. gar nicht zu reden.

Warum also nicht das Job Handling mal in SSIS versuchen? Es ist einfacher als man denken mag.
Ich habe zunächst für den Test fünf Jobs im Importer angelegt, die jeweils ein Script aufrufen.
Script 3 hat eine Zufallsfunktion eingebaut, die nach einer Laufzeit von 1000ms entweder den Job abbrechen lässt (mit der error-Funktion) oder erfolgreich beendet.

Cubeware_Importer_Jobs_im_SSIS_1

In SSIS habe ich dann ein paar Parameter angelegt – es geht natürlich auch hard-coded, aber im Sinne der Wiederverwendbarkeit und des Komforts – und auch um die Möglichkeiten der Parametrisierung aufzuzeigen – habe ich diesen Weg gewählt.

Cubeware_Importer_Jobs_im_SSIS_3

Angelegt wurde jeweils der Pfad für die betroffene IMD-Datei und die IMRUN.exe. Letzteres ermöglicht den Start eines Importer-Jobs ohne die GUI.
IMRUN ist ein portables Programm, das nicht installiert werden – jedoch auf dem Server laufen muss, auf dem der Importer Service Manager (=Lizenz) installiert ist!
Weiterhin habe ich für jeden Job einen Parameter erstellt, der jeweils den Namen des Jobs enthält.
Um die IMRUN aufzurufen, benötigen wir in SSIS den Task „Prozess ausführen“.
In den Eigenschaften des Objekts müssen wir festlegen, dass der Wert 1 eine erfolgreiche Beendigung des Jobs signalisiert.

Cubeware_Importer_Jobs_im_SSIS_4

Weiterhin muss natürlich eingetragen werden, welche Datei denn eigentlich ausgeführt werden soll und welche Argumente übergeben werden sollen.
Die Syntax von IMRUN sieht folgendermaßen aus:

IMRUN start „Jobname“ „IMD-Pfad“, wobei man zur Sicherheit den vollen Pfad sowohl zur IMRUN als auch zum IMD-File angeben sollte. In unserem Falle lautet der String zum Aufruf: C:\...\C8 Importer\imrun.exe start Job1 C:\...\jobs.imd

Da wir das wie oben beschrieben parametrisieren wollen, tragen wir diese Informationen nicht hart in die Felder ein, sondern benutzen im Dialog die Möglichkeiten zum Verwenden von Ausdrücken:

Cubeware_Importer_Jobs_im_SSIS_5

Executable bezeichnet die ausführbare Datei, die im Parameter IMRUN gespeichert ist. Arguments sind die übergebenen Argumente, also hier das Kommando „start“ sowie konkateniert der Jobname sowie der Name der IMD-Datei, die im Parameter IMD zu finden ist. Der Name des Objektes wird ebenfalls dynamisch gestaltet. Damit reicht es, sich nur ein Objekt anzulegen, das man jeweils nur duplizieren und leicht anpassen kann.

Die Jobs sind beispielsweise so angeordnet im Workflow:

Cubeware_Importer_Jobs_im_SSIS_6

Job1 und Job2 starten demnach parallel. Wenn Job2 erfolgreich ist, wird Job3 ausgeführt und dann – ebenfalls bei Erfolg – Job 5.
Da wir bereits wissen, dass in dem Beispiel einzig Job3 durch die Zufallsfunktion ab und zu abbricht, habe ich dafür einen Ereignishandler gesetzt:

Cubeware_Importer_Jobs_im_SSIS_7

Dieser führt im Falle eines Fehlers dann alternativ Job4 aus.
Der Aufwand lohnt sich auf jeden Fall, wenn man eine komplexere Jobstruktur hat, die man natürlich durch die Workflow-Ansicht wesentlich besser organisieren und überwachen – sowie durch das Error-Handling steuern kann.
Außerdem kann so eine echte Parallelverarbeitung auch ohne Scheduler per Knopfdruck durchgeführt werden.