SQL Azureデータベーステーブルからのレコードを受け入れるスクリプトコンポーネントがあります。次に、スクリプトはWebサービスを呼び出し、Webサービスは失敗したレコードと成功したレコードの数を返します。
すべてのレコードについて、「成功」または「失敗」のいずれかを含むステータスフィールドを追加します。これにより、スクリプトコンポーネントから出力が取得されます。
次に、それらの出力をテキストファイルに記録します。
問題:Webサービスの呼び出しは実行後のみに発生するため、各入力レコードのステータスを追加できません。
私はこれを試しましたが、それでもうまくいきません:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
listOfData.Add(new ClockData
{
TimeClockID=Row.TimeClockID,
PersonID=Row.EmployeeCode,
LocationCode=Row.ClockInServiceContextID,
ClockInDateTime=Row.ClockInDateTime,
ClockOutDateTime=Row.ClockOutDateTime
});
}
public override void CreateNewOutputRows()
{
MessageBox.Show("Test CreateNewOutputRows");
MessageBox.Show(listOfData.Count.ToString());
foreach (var item in listOfData)
{
Output0Buffer.AddRow();
Output0Buffer.EmployeeCode = item.PersonID;
MessageBox.Show(item.PersonID);
}
}
変換のすべてがInput0_ProcessInputRow内で行われます。ソリューションは基本的に
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
listOfData.Add(new ClockData
{
TimeClockID=Row.TimeClockID,
PersonID=Row.EmployeeCode,
LocationCode=Row.ClockInServiceContextID,
ClockInDateTime=Row.ClockInDateTime,
ClockOutDateTime=Row.ClockOutDateTime
});
Output0Buffer.AddRow();
Output0Buffer.EmployeeCode = item.PersonID;
MessageBox.Show(item.PersonID);
}
PostExecuteで出力ステップを実行できる場合があります。CreateNewOutputRowsは変換では実行されず、宛先スクリプトでのみ実行されます。
私はSSISにあまり熟達していませんが、以下のアイデアを試すことができると思います。
次に、出力に空の列を設定し、各入力行のデータをいくつか入力する必要があります。
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Row.Status = IIf(String.IsNullOrEmpty(rowValues.GetValue(1).ToString()), 0, 1)
これは、出力テーブルにステータス列を追加するのに役立ちます。これがあなたが望んだものであることを願っています。