2011-11-08 11 views
0

カスタムデータフローコンポーネントを開発中です。私が定義するカスタムプロパティの1つには、正確には、出力列の数に関する情報を持つ文字列が含まれています。列の名前が含まれています(4でも5でも構いませんが50でも可能です)。入力パラメータに応じた出力列数を持つデータフローコンポーネント。 SSISカスタムデータフローコンポーネント

したがって、出力列の数は可変です。私は、入力に応じて変化するいくつかの出力列を持つコンポーネントを持つ方法(または可能であっても)を理解することはできません。

どのように手順を立てるか考えている人はいますか? おかげ

UPDATE

[OK]をクリックします。だから設計時に私は自分のカスタムプロパティを調べ、必要な列を作成します。どの方法でこれを行う必要がありますか?

私はProvideComponentPropertiesでこれを試してみました:

PRVT_PLACE,OPT_IMPLIED_VOLATILITY_MID,OPT_IMPLIED_VOLATILITY_YEST

そして、私は出力列を作成する各フィールドについて:

this.fields_ = this.ComponentMetaData.CustomPropertyCollection["Fields"].Value.ToString().Split(new Char[] { ',' }); 

    foreach (string _field in fields_) 
    { 
     IDTSOutputColumn100 _outputCol = ComponentMetaData.OutputCollection[0].OutputColumnCollection.New(); 
     _outputCol.Name = _field; 
     _outputCol.SetDataTypeProperties(DataType.DT_STR, 20, 0, 0, 1252); 
    } 

は基本的にfields_このようなものだ文字列を分割します。

私はその後、私のコンポーネントをドロップし、fields_プロパティを設定しますが、私は次のメッセージが出ます:

The name for "output column" "(93)" is blank and names cannot contain blanks. 

つだけの列が空白の名前の代わりに、上記の例4で作成された...

私は何が間違っていますか?

答えて

0

私は最終的に解決策を見つけました。それは正確なことではないかもしれませんが、私の必要性に合っています。

OnOutputPathAttachedメソッドをオーバーライドしました。このメソッドでは、fields_プロパティを調べ、その数値に基づいて列を追加します。

ComponentMetaData.OutputCollection[0].OutputColumnCollection.RemoveAll(); 
string[] fields = this.ComponentMetaData.CustomPropertyCollection["Fields"].Value.ToString().Split(new Char[] { ',' }); 
foreach (string _field in fields) 
{ 
    IDTSOutputColumn100 _outputCol = ComponentMetaData.OutputCollection[0].OutputColumnCollection.New(); 
    _outputCol.Name = _field; 
    _outputCol.SetDataTypeProperties(DataType.DT_STR, 20, 0, 0, 1252); 
} 

base.OnOutputPathAttached(outputID); 
2

SSISでは、実行時にメタデータを変更しないようにする必要があります。つまり、設計時には、ソース、デスティネーション(外部​​メタデータ:db、ファイル、...)およびパイプラインメタデータを変更することはできません。パッケージが期待通りに作業を行うことができるかどうかを確認するのは安全機構です。

もちろん、警告のみが表示されるメタデータに変更があります。たとえば、oledbの宛先では、列データ型がDT_I2からDT_I4(SQL Serverのsmallint - > int)に変更されていますが、これは機能します。 SQL Serverの宛先のような他のコンポーネントは、メタデータの変更を許可しません。

要約:設計時に出力列の数を変更するカスタムコンポーネントを作成することは可能ですが、実行時または変更列の列数を変更することはできません。

+0

[OK]を参照してください、私は私が設計時の気圧でunsucessfullyしようとしていますかを示すために私の質問を編集しました。ご協力いただきありがとうございます – nche

0

確かにReinitializeMetaData()をオーバーライドしてください。さまざまな数の出力列をサポートしている場合は、OnOutputPathAttachedのみを実行します(各出力列が異なる可能性があります)。

だと思います。

http://technet.microsoft.com/en-us/library/ms135954.aspx

関連する問題