2017-06-28 5 views
2

私はすべての行をバッファリングした後、何らかの処理を行い、出力行を作成したい場所にスクリプトコンポーネントを持っています。私はPostExecuteでOutput Bufferオブジェクトにアクセスしようとしましたが、明らかにそれは不可能ですか? AddRow()にヒットすると、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"というエラーが返されます。これを行う方法はありますか?PostExecuteのSSISスクリプトコンポーネントの出力バッファにローを追加できますか?

public override void PostExecute() 
{ 
    base.PostExecute(); 

    //processing 

    foreach(ChartValue cv in chartValues) 
    { 
     Output0Buffer.AddRow(); 
     Output0Buffer.usedcl = cv.Centerline; 
     //etc 
    }   
} 
+1

はい、 'Input0_ProcessInputRow(Input0Buffer Row)'の出力行にしかアクセスできません。これは問題のように思えるかもしれませんが、常にその周りには方法があります。あなたのコードで何をするつもりか分かりませんでした。 – TheEsnSiavashi

+0

同期モード(デフォルト)ですか、それとも非同期モードにしましたか?スクリプトが変換または作成されましたか? – billinkc

+0

これは変換であり、非同期モードです。 PostExecuteの出力に追加することができれば、それほど簡単になるでしょう。たぶん私は行の数を事前に取得する場合、私は最後の行にして、最終的な処理を行うProcessInputRowで知っていると思います。 – Kelly

答えて

1

答えはノーである、あなたはそれを行うことはできませんが、簡単な解決策:ProcessInputRow機能(すでに含まれている機能)を使用して、各行をループしProcessInputの機能を追加したときに知ってEndOfRowsetを使用します終了したら、最終処理コードを実行することができます。

public override void Input0_ProcessInput(Input0Buffer Buffer) 
{ 
    base.Input0_ProcessInput(Buffer); 

    try 
    { 
     //loop through each row 
     while (Buffer.NextRow()) 
     { 
      Input0_ProcessInputRow(Buffer); 
     } 

     //when done collecting all rows, do calculations 
     if (Buffer.EndOfRowset()) 
     { 
      CalculateResults(); 
     } 
    } 
    catch (Exception e) 
    { 
     //code here 
    } 
} 

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    //gather each row's values and put into List for processing at the end 
関連する問題