Kodowanie wyliczania Foreach do niestandardowego
Po utworzeniu klasy, która dziedziczy ForEachEnumerator utworzyć klasę i stosowane DtsForEachEnumeratorAttribute atrybut do klasy, należy zastąpić stosowania właściwości i metod klasy podstawowej umożliwiają korzystanie z funkcji niestandardowej.
Przykładowe niestandardowe moduł wyliczający pracy zobacz Developing a User Interface for a Custom ForEach Enumerator.
Inicjowanie modułu wyliczającego
Można zastąpić InitializeForEachEnumerator(Connections, IDTSInfoEvents, ObjectReferenceTracker) Metoda odwołań do pamięci podręcznej menedżerów połączenia określonych w pakiecie i odwołań do pamięci podręcznej do interfejs zdarzenia, które pomagają podnieść błędy, ostrzeżenia i komunikaty informacyjne.
Sprawdzanie poprawności moduł wyliczający
Można zastąpić Validate(Connections, VariableDispenser, IDTSInfoEvents, IDTSLogging) Metoda, aby sprawdzić, czy moduł wyliczający jest skonfigurowany poprawnie. Jeśli metoda zwraca Failure, moduł wyliczający i pakiet, który zawiera moduł wyliczający nie zostaną wykonane. Implementacja tej metoda jest specyficzne dla każdego modułu wyliczającego, ale jeśli moduł wyliczający opiera się na Variable lub ConnectionManager obiekty, należy dodać kod, aby sprawdzić, czy te obiekty znajdują się w kolekcje, które są dostarczane do metoda.
Poniższy przykład kodu demonstruje implementacja Validate(Connections, VariableDispenser, IDTSInfoEvents, IDTSLogging) sprawdza, zmienna określonego we właściwość modułu wyliczającego.
private string variableNameValue;
public string VariableName
{
get{ return this.variableNameValue; }
set{ this.variableNameValue = value; }
}
public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSInfoEvents infoEvents, IDTSLogging log)
{
if (!variableDispenser.Contains(this.variableNameValue))
{
infoEvents.FireError(0, "MyEnumerator", "The Variable " + this.variableNameValue + " does not exist in the collection.", "", 0);
return DTSExecResult.Failure;
}
return DTSExecResult.Success;
}
Private variableNameValue As String
Public Property VariableName() As String
Get
Return Me.variableNameValue
End Get
Set (ByVal Value As String)
Me.variableNameValue = value
End Set
End Property
Public Overrides Function Validate(ByVal connections As Connections, ByVal variableDispenser As VariableDispenser, ByVal infoEvents As IDTSInfoEvents, ByVal log As IDTSLogging) As DTSExecResult
If Not variableDispenser.Contains(Me.variableNameValue) Then
infoEvents.FireError(0, "MyEnumerator", "The Variable " + Me.variableNameValue + " does not exist in the collection.", "", 0)
Return DTSExecResult.Failure
End If
Return DTSExecResult.Success
End Function
Zwraca kolekcja
Podczas wykonywania ForEachLoop kontener wywołania GetEnumerator(Connections, VariableDispenser, IDTSInfoEvents, IDTSLogging) Metoda niestandardowy moduł wyliczający. W tej metodzie moduł wyliczający tworzy i wypełnia swojej kolekcja elementów i zwraca kolekcja.The ForEachLoop then iterates the items in the kolekcja, and executes its przepływ sterowania for each element in the kolekcja.
W poniższym przykładzie pokazano implementacja GetEnumerator(Connections, VariableDispenser, IDTSInfoEvents, IDTSLogging) które zwraca tablicę liczb losowych.
public override object GetEnumerator()
{
ArrayList numbers = new ArrayList();
Random randomNumber = new Random(DateTime.Now);
for( int x=0; x < 100; x++ )
numbers.Add( randomNumber.Next());
return numbers;
}
Public Overrides Function GetEnumerator() As Object
Dim numbers As ArrayList = New ArrayList()
Dim randomNumber As Random = New Random(DateTime.Now)
Dim x As Integer
For x = 0 To 100- 1 Step x + 1
numbers.Add(randomNumber.Next())
Next
Return numbers
End Function
|