Bir veri akışı bileşeni doğrulanıyor

The Validate() yöntem of the PipelineComponent base class is provided to prevent execution of a component that is not configured correctly. Bir bileşenin beklenen bileşen'ün özel özellikleri, kabul edilebilir değerler, sahip, giriş ve çıkış nesne sayısını olduğunu ve herhangi bir bağlantı gerekiyorsa, belirtilen doğrulamak için bu yöntem kullanın.Bu yöntem giriş ve çıkış derlemeleri sütunları doğru veri türlerini ve, yüklü olduğunu doğrulamak için de DTSUsageType Her sütun olan küme bileşeninin düzgün biçimde işlenmesini sağlar. Bileşenin giriş sütun koleksiyon denetleniyor ve derlemedeki her sütun bir sütuna başvuruyor sağlayarak temel sınıf uygulama doğrulama işleminde yardımcı olur IDTSOutputCollection100 Geliş yönündeki bileşenidir.

Yöntem doğrula

The Validate() yöntem is called repeatedly when a component is edited in SSIS Designer. Tasarımcı ve kullanıcıları ile bileşeninin görüşünüzü bildirebilirsiniz DTSValidationStatus numaralandırma değeri, iade ve deftere nakil uyarılar ve hatalar. The DTSValidationStatus enumeration contains three values that indicate various stages of failure, and a fourth, VS_ISVALID(), that indicates whether the component is correctly configured and ready to yürütmek.

The VS_NEEDSNEWMETADATA() value indicates that an error exists in the ComponentMetaData(), and that the component can repair the errors.Bir bileşenin onu onarabilir bir meta veriler hatası karşılaşırsa, hatayı düzeltin değil Validate() yöntem, ve ComponentMetaData() doğrulama sırasında değiştirilmemelidir. Bunun yerine, Validate() yöntem yalnızca döndürmelidir VS_NEEDSNEWMETADATA(), ve bu bileşen, bir SQLConfigDataSource çağrısında hata onarmanız gerekir ReinitializeMetaData() daha sonra bu bölümde açıklanan yöntemi.

The VS_ISBROKEN() value indicates that the component has an error that can be rectified by editing the component in the designer.Hata, uyarlanmış bir özellik veya belirtilmedi veya gereken bir bağlantı genellikle kaynaklanır küme yanlış.

Son hata değeridir VS_ISCORRUPT(), bileşen yalnızca ortaya hataları bulunmuş gösterir ComponentMetaData() Özellik paket XML düzenleme veya nesne modelini kullanarak, doğrudan değiştirildi. Örneğin, bir bileşeni, yalnızca tek bir giriş ekledi, ancak içinde birden fazla giriş varolduğunu doğrulama saptadığı bu tür bir hata oluşur ComponentMetaData(). Bu üreten bir hata değeri yalnızca bileşen kullanarak sıfırlayarak onarılabilir dönmek Sıfırlama düğmesiniGelişmiş Düzenleyici iletişim kutusu.

Hata değerleri döndüren yanı sıra bileşenlerinin doğrulama işlemi sırasında uyarılar veya hatalar deftere naklederek görüş.The FireWarning(Int32, String, String, String, Int32) and FireError(Int32, String, String, String, Int32) methods provide this mechanism.Bu yöntem çağrıldığında, bu olaylar, deftere nakledilen Hata listesi penceresiBusiness Intelligence Development Studio. Bileşen geliştiricileri sonra doğrudan ortaya çıkan hatalar hakkında kullanıcılara görüşünüzü bildirebilirsiniz ve uygunsa, bunları nasıl.

Aşağıdaki kod örneği geçersiz kılınmış uygulaması gösterir. 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

ReinitializeMetaData yöntem

The ReinitializeMetaData() yöntem is called by SSIS Designer whenever a component returns VS_NEEDSNEWMETADATA() from the Validate() yöntem. Bileşenleri algılar ve doğrulama sırasında bileşen tarafından tanımlanan hataları düzeltir kodu içermelidir.

Aşağıdaki örnek, bir bileşen hataları, doğrulama işlemi sırasında algılar ve bu hataları giderir gösterir ReinitializeMetaData() yöntem.

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
Integration Services icon (small) Tümleştirme Hizmetleri ile güncel kalın

Karşıdan yüklemeler, makaleleri, örnekler ve en son Microsoft video yanı sıra, seçili topluluğun çözümleri için ziyaret Integration Services sayfa MSDN veya TechNet:

Bu güncelleştirmelerin otomatik bildirim için kullanılabilir RSS akışlarına abone olmak sayfa.