Moduł wyliczający Foreach niestandardowego kodowania
Po utworzeniu klasy, która dziedziczy z ForEachEnumerator Klasa podstawowa i stosowane DtsForEachEnumeratorAttribute atrybut do klasy, należy zastąpić wykonania właściwości i metod klasy podstawowej, aby zapewnić funkcje niestandardowe.
Przykładowe pracy niestandardowego modułu wyliczającego, zobacz Integration Services próbki na witrynie Codeplex.
Inicjowanie modułu wyliczającego
Można zastąpić InitializeForEachEnumerator metoda pamięci podręcznej odwołań do menedżerów połączenia zdefiniowane w pakieti odwołań do pamięci podręcznej do interfejs zdarzenia, można podnieść błędy, ostrzeżenia i komunikaty informacyjne.
Sprawdzanie poprawności modułu wyliczającego
Można zastąpić Validate metoda sprawdzania, czy moduł wyliczający jest skonfigurowany poprawnie.Jeśli metoda zwraca Failure, moduł wyliczający i pakiet, który zawiera moduł wyliczający nie zostanie wykonana.Implementacja tej metoda jest specyficzne dla każdego modułu wyliczającego, ale jeśli moduł wyliczający opiera się na Variable lub ConnectionManager obiektów, należy dodać kod, aby sprawdzić, czy te obiekty istnieje w kolekcji, które są dostarczane do metoda.
Poniższy przykład kodu pokazuje implementację Validate czy sprawdza, czy zmienna określona 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
Zwracanie kolekcji
Podczas wykonywania ForEachLoop kontener wywołania GetEnumerator metoda niestandardowy moduł wyliczający.W tym metoda, moduł wyliczający tworzy i wypełnia swojej kolekcja elementów, a następnie zwraca kolekcja.ForEachLoop Wykonuje iteracje elementów kolekcja i wykonuje przepływ sterowania dla każdego element kolekcja.
Poniższy przykład pokazuje implementację GetEnumerator , zwraca tablicę liczb całkowitych losowe.
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
|