スクリプト コンポーネントのコーディングおよびデバッグ
適用対象: SQL Server Azure Data Factory の SSIS 統合ランタイム
SSIS デザイナーでは、スクリプト コンポーネントにメタデータ デザイン モードとコード デザイン モードの 2 つのモードがあります。 [スクリプト変換エディター] を開くと、スクリプト コンポーネントはメタデータ デザイン モードになります。このモードでは、メタデータを構成し、コンポーネントのプロパティを設定します。 メタデータ デザイン モードで、スクリプト コンポーネントのプロパティを設定して、入力と出力を構成したら、コード デザイン モードに切り替えてカスタム スクリプトを記述できます。 メタデータ デザイン モードとコード デザイン モードについて詳しくは、「スクリプト コンポーネント エディターでのスクリプト コンポーネントの構成」をご覧ください。
コード デザイン モードでのスクリプトの記述
スクリプト コンポーネント開発環境
スクリプトを記述するには、 [スクリプト変換エディター] の [スクリプト] ページで [スクリプトの編集] をクリックし、Microsoft Visual Studio Tools for Applications (VSTA) IDE を開きます。 VSTA IDE には、色分け表示が可能な Visual Studio エディター、IntelliSense、オブジェクト ブラウザーなど、Visual Studio .NET 環境での標準機能がすべて含まれています。
スクリプト コードは、Microsoft Visual Basic または Microsoft Visual C# で記述されます。 スクリプト言語を指定するには、 [スクリプト変換エディター] で [ScriptLanguage] プロパティを設定します。 その他のプログラミング言語を使用する場合は、選択した言語でカスタム アセンブリを作成し、スクリプト コンポーネント内のコードからその機能を呼び出すことができます。
スクリプト コンポーネントで作成したスクリプトは、パッケージ定義に格納されます。 スクリプト ファイルが別途存在するわけではありません。 したがって、スクリプト コンポーネントを使用してもパッケージの配置には影響しません。
Note
パッケージをデザインする際、スクリプト コードは一時的にプロジェクト ファイルに書き込まれます。 機密情報をファイルに保存することはセキュリティ上危険であるため、パスワードなどの重要な情報はスクリプト コードに書き込まないことをお勧めします。
既定では、 [Option Strict] が IDE で無効になっています。
スクリプト コンポーネント プロジェクトの構造
スクリプト コンポーネントの威力は、インフラストラクチャ コードを生成して、記述する必要のあるコード量を減らす機能にあります。 この機能を実現するには、入力と出力、およびその列とプロパティが固定され、既知である必要があります。 したがって、コンポーネントのメタデータに後で変更を加えた場合、記述したコードが無効になり、 パッケージの実行中にコンパイル エラーが発生する可能性があります。
スクリプト コンポーネント プロジェクトのプロジェクト アイテムおよびクラス
コード デザイン モードに切り替えると、VSTA IDE が開き、ScriptMain プロジェクト アイテムが表示されます。 ScriptMain プロジェクト アイテムには、編集可能な ScriptMain クラスが含まれています。このクラスは、スクリプトのエントリ ポイントとしての役割を果たし、ここにコードを記述します。 このクラスのコード要素は、スクリプト タスクに対して選択したプログラミング言語に応じて異なります。
スクリプト プロジェクトには、次の 2 つの読み取り専用のプロジェクト アイテムが自動生成され、追加されます。
次の 3 つのクラスを含む ComponentWrapper プロジェクト アイテム。
UserComponent クラス。ScriptComponent から継承され、データの処理およびパッケージとのやり取りに使うメソッドおよびプロパティが含まれています。 ScriptMain クラスは UserComponent クラスから継承されます。
Connections コレクション クラス。[スクリプト変換エディター] の [接続マネージャー] ページで選択された、接続への参照が含まれています。
Variables コレクション クラス。 [スクリプト変換エディター] の [スクリプト] ページで、ReadOnlyVariable および ReadWriteVariables プロパティに入力された変数への参照が含まれています。
BufferWrapper プロジェクト アイテム。 [スクリプト変換エディター] の [入力および出力] ページで構成された各入力および出力に対して、ScriptBuffer から継承されたクラスが含まれています。 これらの各クラスには、構成された入力列と出力列、およびそれらの列が含まれるデータ フロー バッファーに対応する、型指定されたアクセサー プロパティが含まれています。
これらのオブジェクト、メソッド、およびプロパティの使用方法については、「スクリプト コンポーネントのオブジェクト モデルについて」をご覧ください。 特定の種類のスクリプト コンポーネントで、これらのクラスのメソッドおよびプロパティを使用する方法については、セクション「その他のスクリプト コンポーネントの例」をご覧ください。 サンプルについてのトピックでは、完全なコード例も示します。
スクリプト コンポーネントを変換として構成すると、ScriptMain プロジェクト アイテムに次のコードが自動生成されます。 コード テンプレートでも、スクリプト コンポーネントの概要、および、変数、イベント、接続など、SSIS オブジェクトを取得および操作する方法に関する追加情報を提供します。
' Microsoft SQL Server Integration Services Script Component
' Write scripts using Microsoft Visual Basic 2008.
' ScriptMain is the entry point class of the script.
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub PreExecute()
MyBase.PreExecute()
'
' Add your code here for preprocessing or remove if not needed
'
End Sub
Public Overrides Sub PostExecute()
MyBase.PostExecute()
'
' Add your code here for postprocessing or remove if not needed
' You can set read/write variables here, for example:
' Me.Variables.MyIntVar = 100
'
End Sub
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
'
' Add your code here
'
End Sub
End Class
/* Microsoft SQL Server Integration Services user script component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void PreExecute()
{
base.PreExecute();
/*
Add your code here for preprocessing or remove if not needed
*/
}
public override void PostExecute()
{
base.PostExecute();
/*
Add your code here for postprocessing or remove if not needed
You can set read/write variables here, for example:
Variables.MyIntVar = 100
*/
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
/*
Add your code here
*/
}
}
スクリプト コンポーネント プロジェクトのその他のプロジェクト アイテム
スクリプト コンポーネント プロジェクトには、既定の ScriptMain アイテム以外のアイテムを格納できます。 プロジェクトには、クラス、モジュール、コード ファイル、およびフォルダーを追加できます。また、フォルダーを使用してアイテムのグループを整理できます。
追加したすべてのアイテムは、パッケージ内部に保存されます。
スクリプト コンポーネント プロジェクトの参照
参照をマネージド アセンブリに追加するには、 [プロジェクト エクスプローラー] でスクリプト タスク プロジェクトを右クリックし、 [参照の追加] をクリックします。 詳しくは、「スクリプティング ソリューションでの他のアセンブリの参照」をご覧ください。
Note
プロジェクト参照は、VSTA IDE の [クラス ビュー] またはプロジェクト エクスプローラーで表示できます。 どちらのウィンドウも [表示] メニューから開きます。 新しい参照は、 [プロジェクト] メニュー、プロジェクト エクスプローラー、または [クラス ビュー] から追加できます。
スクリプト コンポーネント内でのパッケージとの対話
スクリプト コンポーネント内で記述するカスタム スクリプトは、自動生成された基本クラス内の、厳密に型指定されたアクセサーを使用して、コンポーネントに含まれているパッケージの変数や接続マネージャーにアクセスし、それらを使用できます。 ただし、変数および接続マネージャーをスクリプトで使用できるようにするには、コード デザイン モードに切り替える前に、その両方を設定する必要があります。 また、スクリプト コンポーネントのコードから、イベントを発生させたり、ログ記録を実行することもできます。
スクリプト コンポーネント プロジェクト内に自動生成されるプロジェクト アイテムには、パッケージと情報をやり取りするために、以下のオブジェクト、メソッド、およびプロパティが用意されています。
パッケージの機能 | アクセス方法 |
---|---|
変数: | ComponentWrapper プロジェクト アイテムの Variables コレクション クラス内の、名前付きで型指定されたアクセサー プロパティを使用します。これは ScriptMain クラスの Variables プロパティを介して公開されています。 PreExecute メソッドでは、読み取り専用変数にのみアクセスできます。 PostExecute メソッドでは、読み取り専用変数および読み取り/書き込み変数の両方にアクセスできます。 |
接続 | ComponentWrapper プロジェクト アイテムの Connections コレクション クラス内の、名前付きで型指定されたアクセサー プロパティを使用します。これは ScriptMain クラスの Connections プロパティを介して公開されています。 |
events | ScriptMain クラスの ComponentMetaData プロパティおよび IDTSComponentMetaData100 インターフェイスの Fire<X> メソッドを使用して、イベントを発生させます。 |
ログ記録 | ScriptMain クラスの Log メソッドを使用して、ログ記録を実行します。 |
スクリプト コンポーネントのデバッグ
スクリプト コンポーネントのコードをデバッグするには、コードに少なくとも 1 つのブレークポイントを設定し、VSTA IDE を閉じて SQL Server Data Tools (SSDT) でパッケージを実行します。 パッケージが実行されてスクリプト コンポーネントが開始されると、VSTA IDE が再度開き、読み取り専用モードでコードが表示されます。 実行によりブレークポイントに到達したら、変数の値の検証や、残りのコードのステップ スルーができます。
Note
パッケージ実行タスクから実行されている子パッケージの一部としてスクリプト コンポーネントを実行する場合は、スクリプト コンポーネントをデバッグできません。 このような場合は、子パッケージのスクリプト コンポーネント内で設定したブレークポイントは無視されます。 子パッケージを単独で実行することにより、通常どおりパッケージをデバッグできます。
Note
複数のスクリプト コンポーネントが含まれるパッケージをデバッグする場合、デバッガーによってデバッグされるスクリプト コンポーネントは 1 つです。 Foreach ループまたは For ループ コンテナーの場合と同様に、デバッガーが完了した場合、システムは別のスクリプト コンポーネントをデバッグできます。
ただし、次の方法を使用することにより、スクリプト コンポーネントの実行を監視することもできます。
実行を中断し、System.Windows.Forms 名前空間の MessageBox.Show メソッドを使って、モーダル メッセージを表示します。 デバッグが完了したら、このコードは削除してください。
情報メッセージ、警告、およびエラーを発生させます。 FireInformation、FireWarning、FireError の各メソッドでは、イベントの説明が Visual Studio の [出力] ウィンドウに表示されます。 ただし、FireProgress メソッド、Console.Write メソッド、および Console.WriteLine メソッドでは、 [出力] ウィンドウに情報は表示されません。 FireProgress イベントからのメッセージが SSIS デザイナーの [進行状況] タブに表示されます。 詳しくは、「スクリプト コンポーネントでのイベントの発生」をご覧ください。
イベントまたはユーザー定義のメッセージを、有効なログ プロバイダーに記録します。 詳しくは、「スクリプト コンポーネントでのログ記録」をご覧ください。
データを変換先に保存せずに、変換元または変換として構成されたスクリプト コンポーネントの出力を調べるだけの場合は、行数変換を使ってデータ フローを終了し、スクリプト コンポーネントの出力にデータ ビューアーをアタッチできます。 データ ビューアーについて詳しくは、「データ フローのデバッグ」をご覧ください。
このセクションの内容
スクリプト コンポーネントのコーディングの詳細については、このセクションの次のトピックを参照してください。
スクリプト コンポーネントのオブジェクト モデルについて
スクリプト コンポーネントで使用できる、オブジェクト、メソッド、およびプロパティの使用方法について説明します。
スクリプティング ソリューションでの他のアセンブリの参照
スクリプト コンポーネントで、.NET Framework クラス ライブラリのオブジェクトを参照する方法について説明します。
スクリプト コンポーネントに対するエラー出力のシミュレート
スクリプト コンポーネントによる処理中にエラーを発生させる行の、エラー出力のシミュレーション方法について説明します。
外部リソース
- blogs.msdn.com のブログ「VSTA setup and configuration troubles for SSIS 2008 and R2 installations」(SSIS 2008 インストールおよび R2 インストールでの VSTA のセットアップと構成に関する問題)。