Udostępnij za pośrednictwem


Sprawdzanie poprawności składnika przepływu danych

Validate metoda PipelineComponent pod warunkiem, że klasa podstawowa jest zapobiec wykonywaniu składnik, który nie jest poprawnie skonfigurowany.Ta metoda umożliwia sprawdzenie, że składnik jest oczekiwana liczba obiekty wejściowe i wyjściowe, że dopuszczalne wartości właściwości niestandardowe składnika i że wszystkie połączenia, jeśli to konieczne, są określone.Ta metoda umożliwia także sprawdź, czy w kolumnach kolekcje wejściowe i wyjściowe typów poprawne dane i że DTSUsageType każdej kolumna jest zestaw odpowiednio dla składnika.Implementacja klasy podstawowej pomaga w procesie sprawdzania poprawności przez kontrolę kolekcja kolumn wejściowe składnika i zapewnienie, że każda kolumna kolekcja odnosi się do kolumny w IDTSOutputCollection100 składnika nadrzędnego.

Metodę sprawdzania poprawności

Validate Wielokrotnie, gdy składnik jest edytowany w wywoływana jest metoda SSIS projektanta.Można przekazywać opinie, projektant i użytkownicy składnika poprzez DTSValidationStatus Wyliczenie zwracają wartość lub ogłaszając ostrzeżeń i błędówDTSValidationStatus Wyliczenie zawiera trzy wartości, które wskazują różnych etapach awarii, a czwarty, VS_ISVALID, która wskazuje, czy składnik jest prawidłowo skonfigurowana i gotowa do wykonać.

VS_NEEDSNEWMETADATA Wartość wskazuje, że istnieje błąd w ComponentMetaData, i że składnika można naprawić błędy.Jeśli składnik napotka błąd metadane, które można naprawić, nie należy naprawić błąd w Validate metoda i ComponentMetaData nie powinny być modyfikowane podczas sprawdzania poprawności.Zamiast tego Validate Metoda powinna zwracać tylko VS_NEEDSNEWMETADATA, i składnik należy naprawić błąd w wywołaniu ReinitializeMetaData metody, jak opisano w dalszej części tej sekcji.

VS_ISBROKEN Wartość wskazuje, że składnik ma błąd, który można skorygować edytując składnik projektanta.Przyczyną błędu jest zazwyczaj właściwość niestandardowej lub wymagane połączenie nie została określona lub jest zestaw niepoprawnie.

Wartość błędu końcowe VS_ISCORRUPT, wskazuje, wykrytych błędów, które powinno nastąpić jedynie, jeśli składnik ComponentMetaData została zmodyfikowana właściwość bezpośrednio, edytując pakiet XML lub za pomocą modelu obiektów.Na przykład tego rodzaju błąd występuje, gdy składnik został dodany tylko pojedynczy wprowadzania, ale sprawdzania poprawności odkryje, że istnieje więcej niż jedno wejście, w ComponentMetaData.Błędy, które generują to zwracają wartość tylko mogą zostać naprawione resetując składnika za pomocą zresetować przycisk Zaawansowanego edytora okno dialogowe.

Oprócz zwracania wartości błędów, składniki udostępniają opinii przez księgowanie ostrzeżenia lub błędy podczas sprawdzania poprawności.FireWarning i FireError metody zapewniają mechanizm.Po wywołaniu metody te są te zdarzenia są księgowane w Lista błędów okna Business Intelligence Development Studio.Deweloperzy składników także podać bezpośrednich opinii użytkowników na błędy, które wystąpiły, i jeśli stosowne, jak je skorygować.

Poniższy przykład kodu pokazuje przesłonięte wykonania Validate.

public override DTSValidationStatus Validate()
{
    bool pbCancel = false;

    // Validate that there is one input.
    if (ComponentMetaData.InputCollection.Count != 1)
    {
    ComponentMetaData.FireError(0, ComponentMetaData.Name, "Incorrect number of inputs.", "", 0, out pbCancel);
    return DTSValidationStatus.VS_ISCORRUPT;
    }

    // Validate that the UserName custom property is set.
    if (ComponentMetaData.CustomPropertyCollection["UserName"].Value == null || ((string)ComponentMetaData.CustomPropertyCollection["UserName"].Value).Length == 0)
    {
        ComponentMetaData.FireError(0, ComponentMetaData.Name, "The UserName property must be set.", "", 0, out pbCancel);
        return DTSValidationStatus.VS_ISBROKEN;
    }

    // Validate that there is one output.
    if (ComponentMetaData.OutputCollection.Count != 1)
    {
        ComponentMetaData.FireError(0, ComponentMetaData.Name, "Incorrect number of outputs.", "", 0, out pbCancel);
        return DTSValidationStatus.VS_ISCORRUPT;
    }

    // Let the base class verify that the input column reflects the output 
    // of the upstream component.
    return base.Validate();
}
Public  Overrides Function Validate() As DTSValidationStatus 

 Dim pbCancel As Boolean = False 


 ' Validate that there is one input.
 If Not (ComponentMetaData.InputCollection.Count = 1) Then 
   ComponentMetaData.FireError(0, ComponentMetaData.Name, "Incorrect number of inputs.", "", 0, pbCancel) 
   Return DTSValidationStatus.VS_ISCORRUPT 
 End If 

 ' Validate that the UserName custom property is set.
 If ComponentMetaData.CustomPropertyCollection("UserName").Value Is Nothing OrElse CType(ComponentMetaData.CustomPropertyCollection("UserName").Value, String).Length = 0 Then 
   ComponentMetaData.FireError(0, ComponentMetaData.Name, "The UserName property must be set.", "", 0, pbCancel) 
   Return DTSValidationStatus.VS_ISBROKEN 
 End If 

 ' Validate that there is one output.
 If Not (ComponentMetaData.OutputCollection.Count = 1) Then 
   ComponentMetaData.FireError(0, ComponentMetaData.Name, "Incorrect number of outputs.", "", 0, pbCancel) 
   Return DTSValidationStatus.VS_ISCORRUPT 
 End If 

 ' Let the base class verify that the input column reflects the output 
 ' of the upstream component.

 Return MyBase.Validate 

End Function

Metoda ReinitializeMetaData

ReinitializeMetaData Wywoływana jest metoda SSIS Projektant zawsze zwraca składnik VS_NEEDSNEWMETADATA z Validate metody.Składniki powinny zawierać kod, który wykrywa i naprawia błędy zidentyfikowane przez składnik podczas sprawdzania poprawności.

W poniższym przykładzie przedstawiono składnik, który wykrywa błędy podczas sprawdzania poprawności i naprawia błędy te w ReinitializeMetaData metoda.

private bool areInputColumnsValid = true;
public override DTSValidationStatus Validate()
{
    IDTSInput100 input = ComponentMetaData.InputCollection[0];
    IDTSVirtualInput100 vInput = input.GetVirtualInput();

    bool Cancel = false;
    foreach (IDTSInputColumn100 column in input.InputColumnCollection)
    {
        try
        {
            IDTSVirtualInputColumn100 vColumn = vInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(column.LineageID);
        }
        catch
        {
            ComponentMetaData.FireError(0, ComponentMetaData.Name, "The input column " + column.IdentificationString + " does not match a column in the upstream component.", "", 0, out Cancel);
            areInputColumnsValid = false;
            return DTSValidationStatus.VS_NEEDSNEWMETADATA;
        }
    }

    return DTSValidationStatus.VS_ISVALID;
}
public override void ReinitializeMetaData()
{
    if (!areInputColumnsValid)
    {
        IDTSInput100 input = ComponentMetaData.InputCollection[0];
        IDTSVirtualInput100 vInput = input.GetVirtualInput();

        foreach (IDTSInputColumn100 column in input.InputColumnCollection)
        {
            IDTSVirtualInputColumn100 vColumn = vInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(column.LineageID);

            if (vColumn == null)
                input.InputColumnCollection.RemoveObjectByID(column.ID);
        }
        areInputColumnsValid = true;
    }
}
Private areInputColumnsValid As Boolean = True 

Public  Overrides Function Validate() As DTSValidationStatus 
 Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0) 
 Dim vInput As IDTSVirtualInput100 = input.GetVirtualInput 
 Dim Cancel As Boolean = False 
 For Each column As IDTSInputColumn100 In input.InputColumnCollection 
   Try 
     Dim vColumn As IDTSVirtualInputColumn100 = vInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(column.LineageID) 
   Catch 
     ComponentMetaData.FireError(0, ComponentMetaData.Name, "The input column " + column.IdentificationString + " does not match a column in the upstream component.", "", 0, Cancel) 
     areInputColumnsValid = False 
     Return DTSValidationStatus.VS_NEEDSNEWMETADATA 
   End Try 
 Next 
 Return DTSValidationStatus.VS_ISVALID 
End Function 

Public  Overrides Sub ReinitializeMetaData() 
 If Not areInputColumnsValid Then 
   Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0) 
   Dim vInput As IDTSVirtualInput100 = input.GetVirtualInput 
   For Each column As IDTSInputColumn100 In input.InputColumnCollection 
     Dim vColumn As IDTSVirtualInputColumn100 = vInput.VirtualInputColumnCollection.GetVirtualInputColumnByLineageID(column.LineageID) 
     If vColumn Is Nothing Then 
       input.InputColumnCollection.RemoveObjectByID(column.ID) 
     End If 
   Next 
   areInputColumnsValid = True 
 End If 
End Sub
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.