Conectando tarefas programaticamente

Uma restrição de precedência, representada no modelo de objeto pela classe PrecedenceConstraint, estabelece a ordem na qual objetos Executable são executados em um pacote. A restrição de precedência permite que a execução dos contêineres e tarefas de um pacote dependam do resultado da execução de uma tarefa ou contêiner anterior. Restrições de precedência são estabelecidas entre pares de objetos Executable através da chamada ao método Add da coleção PrecedenceConstraints no objeto contêiner. Depois de criar uma restrição entre dois objetos executáveis, defina a propriedade Value para estabelecer os critérios para executar o segundo executável definido na restrição.

Você pode usar uma restrição e uma expressão em uma única restrição de precedência, dependendo do valor especificado para a propriedade EvalOp, conforme descrito na seguinte tabela:

Valor da propriedade EvalOp

Descrição

Constraint

Especifica que o resultado de execução determina se o contêiner ou tarefa restrita é executada. Defina a propriedade Value do PrecedenceConstraint com o valor desejado da enumeração DTSExecResult.

Expression

Especifica que o valor de uma expressão determina se o contêiner ou tarefa restrita é executada. Defina a propriedade Expression do PrecedenceConstraint.

ExpressionAndConstraint

Especifica que o resultado de restrição deve ocorrer e que a expressão deve ser avaliada para determinar se o contêiner ou tarefa restrita deve ser executada. Defina as propriedades Value e Expression do PrecedenceConstraint, e defina sua propriedade LogicalAnd como true.

ExpressionOrConstraint

Especifica que o resultado de restrição deve ocorrer, ou que a expressão deve ser avaliada, para determinar se o contêiner ou tarefa restrita deve ser executada. Defina as propriedades Value e Expression do PrecedenceConstraint, e defina sua propriedade LogicalAnd como false.

O exemplo de código a seguir demonstra a adição de duas tarefas a um pacote. Um PrecedenceConstraint é criado entre elas, impedindo a execução da segunda tarefa antes do término da primeira.

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
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.