データ フロー コンポーネントのデザイン時のメソッド
実行前のデータ フロー タスクは、増分的に変更が行われるため、デザイン時の状態にあると言えます。追加される変更には、コンポーネントの追加または削除、コンポーネントを接続するパス オブジェクトの追加または削除、およびコンポーネントのメタデータに対する変更などが含まれます。メタデータの変更が発生すると、コンポーネントはその変更を監視して対処できます。たとえば、コンポーネントは特定の変更を禁止したり、ある変更に応じてさらに変更を加えることができます。デザイン時に、設計者はデザイン時インターフェイス IDTSDesigntimeComponent100 を介して、コンポーネントとやり取りします。
デザイン時の実装
コンポーネントのデザイン時のインターフェイスは、IDTSDesigntimeComponent100 インターフェイスによって表されます。このインターフェイスをユーザーが明示的に実装することはありませんが、このインターフェイスで定義されるメソッドを理解しておくと、コンポーネントのデザイン時のインスタンスに対応した基本クラス PipelineComponent のメソッドがわかります。
コンポーネントを Business Intelligence Development Studio に読み込むと、コンポーネントのデザイン時のインスタンスがインスタンス化され、コンポーネントを編集すると、IDTSDesigntimeComponent100 インターフェイスのメソッドが呼び出されます。基本クラスを実装すると、コンポーネントで必要なこれらのメソッドのみをオーバーライドできます。多くの場合、これらのメソッドをオーバーライドするとコンポーネントへの不適切な編集が回避できます。たとえば、ユーザーがコンポーネントに出力を追加できないようにするには、InsertOutput メソッドをオーバーライドします。この処理を行わない場合、基本クラスによるこのメソッドの実装を呼び出すと、コンポーネントに出力が追加されます。
コンポーネントの目的または機能に関係なく、ProvideComponentProperties、Validate、および ReinitializeMetaData メソッドをオーバーライドする必要があります。Validate および ReinitializeMetaData の詳細については、「データ フロー コンポーネントの検証」を参照してください。
ProvideComponentProperties メソッド
コンポーネントの初期化は、ProvideComponentProperties メソッドで発生します。このメソッドは、クラス コンストラクタと同様、コンポーネントがデータ フロー タスクに追加されたときに SSIS デザイナによって呼び出されます。コンポーネントの開発者は、このメソッドが呼び出されている間に、コンポーネントの入力、出力、およびカスタム プロパティを作成して初期化する必要があります。ProvideComponentProperties メソッドは、コンポーネントのデザイン時のインスタンスまたは実行時のインスタンスがインスタンス化されるたびに呼び出されるわけではない点が、コンストラクタとは異なります。
メソッドの基本クラスの実装により、入力および出力がコンポーネントに追加され、入力の ID が SynchronousInputID プロパティに割り当てられます。ただし、SQL Server では、この基本クラスによって追加された入力オブジェクトおよび出力オブジェクトには、名前が付けられていません。Name プロパティが設定されていない入力または出力オブジェクトを持つコンポーネントが含まれるパッケージは、正しく読み取れません。したがって、基本実装を使用する場合は、既定の入力および出力の Name プロパティに明示的に値を割り当てる必要があります。
public override void ProvideComponentProperties()
{
/// TODO: Reset the component.
/// TODO: Add custom properties.
/// TODO: Add input objects.
/// TODO: Add output objects.
}
Public Overrides Sub ProvideComponentProperties()
' TODO: Reset the component.
' TODO: Add custom properties.
' TODO: Add input objects.
' TODO: Add output objects.
End Sub
カスタム プロパティの作成
コンポーネントの開発者は、ProvideComponentProperties メソッドへの呼び出しで、カスタム プロパティ (IDTSCustomProperty100) をコンポーネントに追加する必要があります。カスタム プロパティにはデータ型プロパティがありません。カスタム プロパティのデータ型は、Value プロパティに割り当てた値のデータ型によって設定されます。ただし、カスタム プロパティに初期値を割り当てた後、別のデータ型の値を割り当てることはできません。
注意 |
---|
IDTSCustomProperty100 インターフェイスは、Object 型のプロパティ値を制限付きでサポートしています。カスタム プロパティの値として格納できるオブジェクトは、文字列や整数などの単純型の配列のみです。 |
次の例に示すように、カスタム プロパティの ExpressionType プロパティの値を、DTSCustomPropertyExpressionType 列挙値の CPET_NOTIFY に設定すると、カスタム プロパティでプロパティ式をサポートすることを指定できます。ユーザーによって入力されたプロパティ式を処理または検証するためのコードを追加する必要はありません。プロパティの既定値を設定し、値を検証し、値を読み取って正常に使用することができます。
IDTSCustomProperty100 myCustomProperty;
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
Dim myCustomProperty As IDTSCustomProperty100
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY
次の例に示すように、TypeConverter プロパティを使用して、カスタム プロパティ値を列挙値から選択すると、ユーザーを制限できます。この例では、あらかじめ MyValidValues という名前のパブリック列挙値が定義されているものとします。
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the type with the custom property.
customProperty.TypeConverter = typeof(MyValidValues).AssemblyQualifiedName;
// Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the type with the custom property.
customProperty.TypeConverter = GetType(MyValidValues).AssemblyQualifiedName
' Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne
詳細については、MSDN ライブラリの「一般的な型変換」および「型コンバータの実装」を参照してください。
次の例に示すように、UITypeEditor プロパティを使用すると、カスタム プロパティの値を設定するカスタム エディタ ダイアログ ボックスを指定できます。ニーズに合った既存の UI 型エディタのクラスが見つからない場合は、最初に System.Drawing.Design.UITypeEditor を継承するカスタム型のエディタを作成する必要があります。
public class MyCustomTypeEditor : UITypeEditor
{
...
}
Public Class MyCustomTypeEditor
Inherits UITypeEditor
...
End Class
次に、カスタム プロパティの UITypeEditor プロパティの値として、このクラスを指定します。
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the editor with the custom property.
customProperty.UITypeEditor = typeof(MyCustomTypeEditor).AssemblyQualifiedName;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the editor with the custom property.
customProperty.UITypeEditor = GetType(MyCustomTypeEditor).AssemblyQualifiedName
詳細については、MSDN ライブラリの「UI 型エディタの実装」を参照してください。
|