Conectar tareas mediante programación
Una restricción de precedencia, representada en el modelo de objetos por la clase PrecedenceConstraint, establece el orden en que se ejecutan los objetos Executable en un paquete. La restricción de precedencia permite que la ejecución de los contenedores y las tareas de un paquete dependa del resultado de la ejecución de una tarea o un contenedor anterior. Las restricciones de precedencia se establecen entre pares de objetos Executable con una llamada al método Add de la colección PrecedenceConstraints en el objeto contenedor. Después de crear una restricción entre dos objetos ejecutables, establece la propiedad Value para establecer los criterios de ejecución del segundo ejecutable definido en la restricción.
Puede utilizar una restricción y una expresión en una restricción de precedencia única, según el valor que especifique para la propiedad EvalOp, tal como se describe en la tabla siguiente:
Valor de la propiedad EvalOp |
Descripción |
---|---|
Especifica que el resultado de ejecución determina si se ejecutan el contenedor o la tarea restringidos. Establezca la propiedad Value de PrecedenceConstraint en el valor deseado de la enumeración DTSExecResult. |
|
Especifica que el valor de una expresión determina si se ejecutan el contenedor o la tarea restringidos. Establezca la propiedad Expression de PrecedenceConstraint. |
|
Especifica que se debe producir el resultado de la restricción y que se debe evaluar la expresión para que se ejecuten el contenedor o la tarea restringidos. Establezca las propiedades Value y Expression de PrecedenceConstraint, y establezca su propiedad LogicalAnd en true. |
|
Especifica que se debe producir el resultado de la restricción o que se debe evaluar la expresión para que se ejecuten el contenedor o la tarea restringidos. Establezca las propiedades Value y Expression de PrecedenceConstraint, y establezca su propiedad LogicalAnd en false. |
En el ejemplo de código siguiente se muestra cómo agregar dos tareas a un paquete. Se crea un objeto PrecedenceConstraint entre ellas que evita que se ejecute la segunda tarea hasta que finalice la primera.
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace Microsoft.SqlServer.Dts.Samples
{
class Program
{
static void Main(string[] args)
{
Package p = new Package();
// Add a File System task.
Executable eFileTask1 = p.Executables.Add("STOCK:FileSystemTask");
TaskHost thFileHost1 = eFileTask1 as TaskHost;
// Add a second File System task.
Executable eFileTask2 = p.Executables.Add("STOCK:FileSystemTask");
TaskHost thFileHost2 = eFileTask2 as TaskHost;
// Put a precedence constraint between the tasks.
// Set the constraint to specify that the second File System task cannot run
// until the first File System task finishes.
PrecedenceConstraint pcFileTasks =
p.PrecedenceConstraints.Add((Executable)thFileHost1, (Executable)thFileHost2);
pcFileTasks.Value = DTSExecResult.Completion;
}
}
}
Imports Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim p As Package = New Package()
' Add a File System task.
Dim eFileTask1 As Executable = p.Executables.Add("STOCK:FileSystemTask")
Dim thFileHost1 As TaskHost = CType(eFileTask1, TaskHost)
' Add a second File System task.
Dim eFileTask2 As Executable = p.Executables.Add("STOCK:FileSystemTask")
Dim thFileHost2 As TaskHost = CType(eFileTask2, TaskHost)
' Put a precedence constraint between the tasks.
' Set the constraint to specify that the second File System task cannot run
' until the first File System task finishes.
Dim pcFileTasks As PrecedenceConstraint = _
p.PrecedenceConstraints.Add(CType(thFileHost1, Executable), CType(thFileHost2, Executable))
pcFileTasks.Value = DTSExecResult.Completion
End Sub
End Module
|