Bir veri akışı bileşeni doğrulanıyor
The Validate method of the PipelineComponent base class is provided to prevent execution of a component that is not configured correctly.Bir bileşenin beklenen bileşen özel özelliklerini kabul edilebilir değerler varsa, giriş ve çıkış nesne sayısını olduğunu ve herhangi bir bağlantısı gerekli, belirtilen doğrulamak için bu yöntem kullanın.Bu yöntem doğrulamak için de sütuns giriş ve çıkış Koleksiyonlar olması doğru veri türleri ve, DTSUsageType her sütun bileşen. için uygun şekilde kümeGiriş sütun denetleyerek temel sınıf uygulaması doğrulama işleminde yardımcı olur koleksiyon bileşeni ve her bir sütunda sağlayarak, koleksiyon bir sütunda gösterir IDTSOutputCollection100 , ters yönde bir bileşen.
Validate yöntemi
The Validate method is called repeatedly when a component is edited in SSIS Designer.Tasarımcı ve bileşen aracılığıyla kullanıcıları için görüş bildirin DTSValidationStatus numaralandırma değeri, geri dönmek ve 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 execute.
The VS_NEEDSNEWMETADATA value indicates that an error exists in the ComponentMetaData, and that the component can repair the errors.Bir bileşen onarmak bir meta veriler hatasıyla karşılaşırsa, hatayı düzeltmek değil Validate yöntem, ve ComponentMetaData değişiklik sırasında doğrulama.Bunun yerine, Validate yöntem sadece dönmek VS_NEEDSNEWMETADATA, bileşen hata çağrıda onarmanız gerekir ve ReinitializeMetaData yöntem, açıklandığı gibi daha sonra bu bölüm.
The VS_ISBROKEN value indicates that the component has an error that can be rectified by editing the component in the designer.Hata genellikle özel bir özellik veya belirtilmemiş ya da gerekli bir bağlantı neden küme yanlış.
Son hata değeri VS_ISCORRUPT, bileşen yalnızca, hatalar bulduğu gösterir ComponentMetaData özellik değiştirildi, doğrudan düzenleme paket xml veya kullanarak nesne modeli.Örneğin, bu tür bir hata bir bileşeni tek bir giriş ekledi, ancak doğrulama birden fazla giriş bulunmaktadır olduğunu saptadığı oluşur ComponentMetaData.Üreten bu hataları dönüş değeri sadece onarıldı kullanarak bileşen sıfırlayarak Reset içinde düğmesini Gelişmiş Düzenleyici iletişim kutusu.
Hata değerleri döndüren yanı sıra bileşenlerini doğrulama sırasında uyarılar veya hatalar göndererek görüş.The FireWarning and FireError methods provide this mechanism.Bu yöntem çağrıldığında, bu olaylar nakledilir Hata listesi pencerenin Business Intelligence Development Studio.Bileşen geliştiricileri sonra sağlayabilir doğrudan görüş ortaya çıkan hataları bulunan kullanıcılara uygun ve bunların nasıl düzeltileceği.
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öntemi
The ReinitializeMetaData method is called by SSIS Designer whenever a component returns VS_NEEDSNEWMETADATA from the Validate method.Bileşenleri algılar ve düzeltir sırasında doğrulama bileşeni tarafından tanımlanan hata kodu içermelidir.
Aşağıdaki örnek doğrulama sırasında hataları algılar ve bu hataları düzeltir bir bileşeni 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
|