Im 4. Teil meiner Serie über Biml, möchte ich kurz die Ein- und Ausgängen von Komponenten und Tasks erklären. Die bisherigen Teile der Biml Serie sind hier zu finden:
Tasks und ConstraintMode
Werden mehrere Ablaufsteuerungselemente in einem SSIS Paket platziert, so kann man über das Attribut ConstraintMode definieren, das alle Tasks linear, also nacheinander, ausgeführt werden. Wird das Attribut ConstraintMode mit dem Wert Parallel versehen, so müssen/können die Beziehungen der einzelnen Tasks manuell zueinander definiert werden.
Um eine eigene Reihenfolge zwischen den Tasks zu definieren existiert das Element PrecedenceConstraints mit der dazugehörigen Collection Inputs. Innerhalb der Collection Inputs können die einzelnen Output-Pfade eines vorhergehenden Elements zugeordnet werden. Der Name eines Output-Pfades setzt sich immer aus dem Namen des Tasks mit “.Output” zusammen. Als Standard wird für die Pfade der Wert “Erfolg” verwendet. Möchte man die Pfade bei “Fehler” oder “Beendigung” setzen, so kann dies über das Attribut EvaluationValue gesetzt werden.
1: <Dataflow Name="Test3">
2: <PrecedenceConstraints>
3: <Inputs>
4: <Input OutputPathName="Test1.Output" />
5: <Input OutputPathName="Test2.Output" EvaluationValue="Failure" />
6: </Inputs>
7: </PrecedenceConstraints>
8: </Dataflow>
Components
Die Definition der Ein- und Ausgabepfade bei den Komponenten funktioniert genauso wie bei den Tasks, ein Unterschied an dieser Stelle ist, dass die jeweiligen Collections InputPaths und OutputPaths heißen und direkt dem Task untergeordnet sind.
Auch hier wird für den Namen eines Pfades immer der Name des Tasks gefolgt von “.Output” verwendet. Eine Ausnahme ergibt sich bei der Verwendung des Tasks Multicast. Über die Collection OutPutPaths können mehrere Ausgabepfade definiert werden, die einzeln benannt werden müssen. Die Namen der entsprechenden Ausgaben müssen bei der Zuordnung in nachgeordneten Task verwendet werden.
1: <Transformations>
2: <OleDbSource Name="Person" ConnectionName="AdventureWorks">
3: <DirectInput>SELECT * FROM Person.Address</DirectInput>
4: </OleDbSource>
5: <Multicast Name="Person Multicast">
6: <InputPath OutputPathName="Person.Output" />
7: <OutputPaths>
8: <OutputPath Name="Path1" />
9: <OutputPath Name="Path2" />
10: <OutputPath Name="Path3" />
11: </OutputPaths>
12: </Multicast>
13: <UnionAll Name="Path1_2">
14: <InputPaths>
15: <InputPath OutputPathName="Person Multicast.Path1" />
16: <InputPath OutputPathName="Person Multicast.Path2" />
17: </InputPaths>
18: </UnionAll>
19: <UnionAll Name="Path3">
20: <InputPaths>
21: <InputPath OutputPathName="Person Multicast.Path3" />
22: <InputPath OutputPathName="Path1_2.Output" />
23: </InputPaths>
24: </UnionAll>
25: </Transformations>