Реализация внешних метаданных
Если компонент отключен от источника данных, можно выполнить проверку столбцов во входных и выходных коллекциях столбцов относительно внешнего источника данных с помощью интерфейса IDTSExternalMetadataColumnCollection100. Он позволяет сохранять моментальный снимок столбцов внешнего источника данных и сопоставлять эти столбцы со столбцами входных и выходных коллекций столбцов компонента.
Реализация столбцов внешних метаданных добавляет издержки и сложности при разработке компонента, поскольку необходимо хранить дополнительную коллекцию столбцов и выполнять их проверку, но возможность избежать затратных обращений к серверу во время проверки может оправдать такую разработку.
Заполнение столбцов внешних метаданных
Столбцы внешних метаданных обычно добавляются к коллекции, если создан соответствующий входной или выходной столбец. Новые столбцы создаются вызовом метода New. Затем устанавливаются свойства столбца, чтобы соответствовать внешнему источнику данных.
Столбец внешних метаданных сопоставляется с соответствующим входным или выходным столбцом путем присвоения идентификатора столбца внешних метаданных свойству ExternalMetadataColumnID входного или выходного столбца. Это позволяет легко обнаружить столбец внешних метаданных для конкретного входного или выходного столбца с помощью метода GetObjectByID коллекции.
В следующем примере показано создание столбца внешних метаданных и его сопоставление с выходным столбцом с помощью установки свойства ExternalMetadataColumnID.
public void CreateExternalMetaDataColumn(IDTSOutput100 output, int outputColumnID )
{
IDTSOutputColumn100 oColumn = output.OutputColumnCollection.GetObjectByID(outputColumnID);
IDTSExternalMetadataColumn100 eColumn = output.ExternalMetadataColumnCollection.New();
eColumn.DataType = oColumn.DataType;
eColumn.Precision = oColumn.Precision;
eColumn.Scale = oColumn.Scale;
eColumn.Length = oColumn.Length;
eColumn.CodePage = oColumn.CodePage;
oColumn.ExternalMetadataColumnID = eColumn.ID;
}
Public Sub CreateExternalMetaDataColumn(ByVal output As IDTSOutput100, ByVal outputColumnID As Integer)
Dim oColumn As IDTSOutputColumn100 = output.OutputColumnCollection.GetObjectByID(outputColumnID)
Dim eColumn As IDTSExternalMetadataColumn100 = output.ExternalMetadataColumnCollection.New
eColumn.DataType = oColumn.DataType
eColumn.Precision = oColumn.Precision
eColumn.Scale = oColumn.Scale
eColumn.Length = oColumn.Length
eColumn.CodePage = oColumn.CodePage
oColumn.ExternalMetadataColumnID = eColumn.ID
End Sub
Проверка с помощью столбцов внешних метаданных
Проверка требует дополнительных шагов для компонента, хранящего коллекцию столбцов внешних метаданных, поскольку проверку необходимо выполнять относительно дополнительной коллекции столбцов. Проверку можно разделить на проверку с подключением и проверку с отключением.
Проверка с подключением
Если компонент подключен к внешнему источнику данных, столбцы во входной или выходной коллекции проверяются непосредственно по внешнему источнику данных. Кроме того, необходимо выполнить проверку в отношении столбцов в коллекции внешних метаданных. Она необходима, поскольку коллекцию внешних метаданных можно изменить с помощью расширенного редактора в среде SQL Server Data Tools (SSDT), а изменения коллекции не обнаруживаются. Поэтому в подключенном состоянии компоненты должны гарантировать соответствие коллекции столбцов внешних метаданных столбцам во внешнем источнике данных.
В окне Расширенный редактор можно скрыть коллекции столбцов внешних метаданных, присвоив свойству IsUsed коллекции значение false. Однако при этом также скрывается вкладка Сопоставление столбцов редактора, которая позволяет пользователям сопоставлять столбцы из входной или выходной коллекции столбцам коллекции столбцов внешних метаданных. Значение false этого свойства не мешает разработчиками программно изменять коллекцию, но оно обеспечивает уровень защиты коллекции столбцов внешних метаданных для компонента, который используется исключительно в среде SQL Server Data Tools (SSDT).
Проверка с отключением
Если компонент отключен от внешнего источника данных, проверка упрощается, поскольку столбцы во входной или выходной коллекции проверяются по коллекции внешних метаданных, а не по внешнему источнику данных. Компонент должен выполнять проверку с отключением, если не установлено соединение с внешним источником данных или если свойство ValidateExternalMetadata имеет значение false.
В следующем примере кода показана реализация компонента, выполняющего проверку подлинности по коллекции столбцов внешних метаданных.
public override DTSValidationStatus Validate()
{
if( this.isConnected && ComponentMetaData.ValidateExternalMetaData )
{
// TODO: Perform connected validation.
}
else
{
// TODO: Perform disconnected validation.
}
}
Public Overrides Function Validate() As DTSValidationStatus
If Me.isConnected AndAlso ComponentMetaData.ValidateExternalMetaData Then
' TODO: Perform connected validation.
Else
' TODO: Perform disconnected validation.
End If
End Function
|