作業 3: エラー フロー リダイレクトの追加
前の実習で学んだように、Lookup Currency Key 変換で壊れているサンプル フラット ファイルを処理しようとするとエラーが発生し、変換を行うことができません。この変換ではエラー出力に既定の設定を使用するため、エラーが発生すると変換は失敗します。変換が失敗すると、それ以降のパッケージも失敗します。
エラー出力を使用し、失敗した行を別の処理パスにリダイレクトするようにコンポーネントを構成することで、変換の失敗を回避できます。別のエラー処理パスを使用すると、さまざまな処理が可能になります。たとえば、データを消去した後に失敗した行を再処理できます。失敗した行を詳細なエラー情報と共に保存し、後の検証や再処理に役立てることも可能です。
ここでは、失敗した行をエラー出力にリダイレクトするよう Lookup Currency Key 変換を構成します。データ フローのエラー分岐では、失敗した行はファイルに書き込まれます。
既定では、Integration Services エラー出力の 2 つの追加列である ErrorCode および ErrorColumn には、エラー番号を示す数値コードとエラーが発生した列の ID のみが含まれます。これらの数値には対応するエラーの説明がないため、利用は限定されます。
エラー出力の有用性を高めるには、パッケージによって失敗行がファイルに書き込まれる前に、スクリプト コンポーネントを使用して Integration Services API にアクセスし、エラーの説明を取得します。
エラー出力を構成するには
[ツールボックス] で [データ フロー変換] を展開し、[スクリプト コンポーネント] を、[データ フロー] タブのデザイン画面にドラッグします。[スクリプト] を [Lookup Currency Key] 変換の右に配置します。
[スクリプト コンポーネントの種類を選択] ダイアログ ボックスで、[変換] をクリックし、[OK] をクリックします。
[Lookup Currency Key] 変換をクリックします。赤色の矢印を、新しく追加した [スクリプト] 変換までドラッグして、これら 2 つのコンポーネントを接続します。
赤い矢印は、[Lookup Currency Key] 変換のエラー出力を表します。赤い矢印を使用して変換をスクリプト コンポーネントに接続すると、エラー処理をスクリプト コンポーネントにリダイレクトできます。スクリプト コンポーネントではエラーが処理され、変換先に送信されます。
[エラー出力の構成] ダイアログ ボックスの [エラー] 列で、[行のリダイレクト] を選択し、[OK] をクリックします。
[データ フロー] デザイン画面で、新しく追加した [スクリプト コンポーネント] で [スクリプト コンポーネント] をクリックし、名前を「Get Error Description」に変更します。
[Get Error Description] 変換をダブルクリックします。
[スクリプト変換エディタ] ダイアログ ボックスの [入力列] ページで、[ErrorCode] 列を選択します。
[入力および出力] ページで [出力 0] を展開し、[出力列] をクリックして、[列の追加] をクリックします。
[Name] プロパティに「ErrorDescription」と入力し、[DataType] プロパティを [文字列 [DT_WSTR]] に設定します。
[スクリプト] ページで、[LocaleID] プロパティが [英語 (米国)] に設定されていることを確認します。
[スクリプトの編集] をクリックして、MicrosoftVisual Studio Tools for Applications (VSTA) を開きます。Input0_ProcessInputRow メソッドに、次のコードを入力するか貼り付けます。
[Visual Basic]
Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)
[Visual C#]
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
完成したサブルーチンのコードは次のようになります。
[Visual Basic]
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode) End Sub
[Visual C#]
public override void Input0_ProcessInputRow(Input0Buffer Row) { Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode); }
スクリプトをビルドして変更を保存し、VSTA を閉じます。
[OK] をクリックして、[スクリプト変換エディタ] ダイアログ ボックスを閉じます。