Share via


撰寫自訂 Foreach 列舉值的程式碼

適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime

建立繼承自 ForEachEnumerator 基底類別的類別,並將 DtsForEachEnumeratorAttribute 屬性 (attribute) 套用到類別之後,必須覆寫基底類別的屬性 (properties) 與方法的實作,才可提供自訂功能。

如需自訂列舉值的工作範例,請參閱開發自訂 ForEach 列舉值的使用者介面

初始化列舉值

您可以覆寫 InitializeForEachEnumerator 方法,以快取定義在封裝中的連接管理員參考,並快取可用以引發錯誤、警告和參考用訊息的事件介面參考。

驗證列舉值

您覆寫 Validate 方法,以驗證已正確設定的列舉值。 如果該方法傳回 Failure,就不會執行列舉值和含有列舉值的套件。 這個方法的實作會隨每個列舉值而有所不同,但是如果列舉值依賴 VariableConnectionManager 物件,就應該加入程式碼以確認提供給該方法之集合中有這些物件。

下列程式碼範例將示範 Validate 的實作,以檢查列舉值屬性中所指定的變數。

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  

傳回集合

在執行期間,ForEachLoop 容器會呼叫自訂列舉值的 GetEnumerator 方法。 在此方法中,列舉值會建立和擴展其項目集合,然後傳回該集合。 ForEachLoop 接著會反覆運算集合中的項目,並為集合中的每個項目執行其控制流程。

下列程式碼範例顯示會傳回隨機整數陣列的 GetEnumerator 實作。

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  

另請參閱

建立自訂的 Foreach 列舉值
開發自訂 ForEach 列舉值的使用者介面