Connessione di attività a livello di programmazione
Un vincolo di precedenza, rappresentato nel modello a oggetti dalla classe PrecedenceConstraint, stabilisce l'ordine di esecuzione degli oggetti Executable in un pacchetto. Con il vincolo di precedenza, l'esecuzione dei contenitori e delle attività di un pacchetto diventa dipendente dal risultato dell'esecuzione di un'attività o di un contenitore precedente. I vincoli di precedenza vengono stabiliti tra coppie di oggetti Executable chiamando il metodo Add della raccolta PrecedenceConstraints sull'oggetto contenitore. Dopo aver creato un vincolo tra due oggetti eseguibili, impostare la proprietà Value per stabilire i criteri per l'esecuzione del secondo eseguibile definito nel vincolo.
È possibile utilizzare sia un vincolo che un'espressione in un singolo vincolo di precedenza, a seconda del valore specificato per la proprietà EvalOp, come descritto nella tabella seguente:
Valore della proprietà EvalOp |
Descrizione |
---|---|
Specifica che il risultato dell'esecuzione determina se l'attività o il contenitore vincolato viene eseguito. Impostare la proprietà Value di PrecedenceConstraint sul valore desiderato dell'enumerazione DTSExecResult. |
|
Specifica che il valore di un'espressione determina se l'attività o il contenitore vincolato viene eseguito. Impostare la proprietà Expression di PrecedenceConstraint. |
|
Specifica che, affinché l'attività o il contenitore vincolato venga eseguito, è necessario che il risultato del vincolo si verifichi e che l'espressione restituisca un valore. Impostare le proprietà Value e Expression di PrecedenceConstraint e impostare la relativa proprietà LogicalAnd su true. |
|
Specifica che, affinché l'attività o il contenitore vincolato venga eseguito, è necessario che il risultato del vincolo si verifichi oppure che l'espressione restituisca un valore. Impostare le proprietà Value e Expression di PrecedenceConstraint e impostare la relativa proprietà LogicalAnd su false. |
Nell'esempio di codice seguente è illustrata l'aggiunta di due attività a un pacchetto. Tra le attività viene creato PrecedenceConstraint che impedisce l'esecuzione della seconda attività finché non viene completata la prima.
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
|