外部メタデータの実装
コンポーネントがそのデータ ソースから切断されると、IDTSExternalMetadataColumnCollection100 インターフェイスを使用することによって、入力および出力列のコレクション内の列を、その外部データ ソースの列に対して検証できます。このインターフェイスを使用すると、外部データ ソースの列のスナップショットを保持し、これらの列をコンポーネントの入力および出力列コレクションの列にマップできます。
外部メタデータ列を実装することで、追加した列のコレクションに対する管理と検証の必要が生じるため、コンポーネントの開発にオーバーヘッドと複雑性が加わりますが、検証のためのサーバーへのラウンド トリップに余計な費用をかけなくても済むので、開発作業は行う価値のあるものになるでしょう。
外部メタデータ列の設定
外部メタデータ列は、通常、対応する入力または出力列を作成するときにコレクションに追加されます。New メソッドを呼び出して、新しい列を作成します。次に、外部データ ソースに一致するように列のプロパティを設定します。
外部メタデータ列を対応する入力または出力列にマップするには、外部メタデータ列の ID を入力または出力列の 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
外部メタデータ列での検証
検証を行うには、外部メタデータ列のコレクションを保持するための手順をコンポーネントに追加する必要があります。追加された列のコレクションに対して検証を行う必要があるためです。検証は、接続された状態での検証と切断された状態での検証に分けられます。
接続された状態での検証
コンポーネントが外部データ ソースに接続されると、入力または出力コレクション内の列は、外部データ ソースに対して直接検証されます。また、外部メタデータのコレクション内の列を検証する必要があります。外部メタデータのコレクションは Business Intelligence Development Studio の [詳細エディター] による変更が可能なうえに、それによってコレクションに行われた変更は検出できないため、この検証が必要となります。したがって、接続された状態のコンポーネントでは、外部メタデータ列のコレクション内の列が外部データ ソースの列を継続して反映していることを確認する必要があります。
コレクションの IsUsed プロパティを false に設定すると、外部メタデータのコレクションを [詳細エディター] で非表示にできます。ただし、この設定を行うと、入力または出力コレクションの列を外部メタデータ列のコレクションの列にマップするために使用する、エディターの [列マッピング] タブも非表示になります。このプロパティを false に設定すると、開発者のプログラムによるコレクションの変更を妨げることなく、Business Intelligence Development Studio でのみ使用されるコンポーネントの、外部メタデータ列のコレクションをある程度保護できます。
切断された状態での検証
コンポーネントが外部データ ソースから切断されている場合、検証は簡略化されます。これは、外部ソースに対してではなく、外部メタデータのコレクション内の列に対して、入力または出力コレクション内の列が直接検証されるためです。コンポーネントの外部データ ソースへの接続が確立されていない場合、または ValidateExternalMetadata プロパティが false の場合は、コンポーネントは切断された状態での検証を行う必要があります。
次のコード例は、コンポーネントの外部メタデータ列のコレクションに対し、検証を実行するコンポーネントの実装です。詳細な例については、Codeplex にある Integration Services のサンプル (ADO Source Component Sample) を参照してください。
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
|