このトピックでは、 Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間によって提供される InfoPath 2003 互換オブジェクト モデルで動作する基本的な InfoPath マネージ コード フォーム テンプレートを作成するチュートリアルについて説明します。
Hello World
次の例では、InfoPath 2003 互換オブジェクト モデルの Alert メソッドを使用して、単純なアラート ダイアログ ボックスを表示する方法について説明します。
InfoPath 2003 互換オブジェクト モデルを使用する新しい InfoPath フォーム テンプレートを作成する
InfoPath 2003 オブジェクト モデルを使用したフォーム テンプレートの作成に関するページの説明に従って、 InfoPath 2003 互換オブジェクト モデルで動作する新しいフォーム テンプレートを作成します。
フォーム テンプレート プロジェクトを HelloWorld という名前で保存します。
プロジェクト システムがコード ファイルとプロジェクト ファイルを作成し、InfoPath のデザイン モードで空白のフォーム テンプレートを開きます。 これでイベント ハンドラーを追加する準備ができました。
OnClick イベント ハンドラーを設定したボタンを追加する
[ホーム] タブの [コントロール] セクションで、[ボタン] コントロールをクリックして、ビューに挿入します。
挿入したコントロールを右クリックして、[ボタンのプロパティ] をクリックします。
[ラベル] を [アラート] に変更します。
ID を AlertID に変更します。
[フォームのコードを編集] をクリックします。
OnClick イベントのイベント ハンドラー スケルトンが作成され、フォーカスが Visual Studio 2012 のコード エディターに移動します。 イベント ハンドラーの操作の詳細については、「 InfoPath 2003 オブジェクト モデルを使用してイベント ハンドラーを追加する」を参照してください。
これでボタンのイベント ハンドラーにフォーム コードを追加する準備ができました。
イベント ハンドラーにフォーム コードを追加する
OnClick イベント ハンドラーに次のコードを入力します。
thisXDocument.UI.Alert("Hello World!");thisXDocument.UI.Alert("Hello World!")コード行に含まれるピリオドを入力するたびに Microsoft IntelliSense のボックスが表示されます。 イベント ハンドラー全体は次のようになります。
[InfoPathEventHandler(MatchPath="AlertID", EventType=InfoPathEventType.OnClick)] public void AlertID_OnClick(DocActionEvent e) { thisXDocument.UI.Alert("Hello World!"); }<InfoPathEventHandler(MatchPath:="AlertID", EventType:=InfoPathEventType.OnClick)> Public Sub AlertID_OnClick(ByVal e As DocActionEvent) thisXDocument.UI.Alert("Hello World!") End Sub注:
Alert メソッドを使用する代わりに、System.Windows.Forms 名前空間の MessageBox.Show メソッドを使用してメッセージ ボックスを表示することもできます。 これを行うには、System.Windows.Forms アセンブリへの参照を追加し、コード ファイルの先頭にある ディレクティブに または
Imports System.Windows.Formsを追加using System.Windows.Forms;し、次のようなコード行を入力する必要があります。MessageBox.Show("Hello World!); or MessageBox.Show("Hello World!)InfoPath のデザイン モード ウィンドウに切り替え、[ホーム] タブの [プレビュー] ボタンをクリックします。
[プレビュー] ウィンドウで [Alert] をクリックします。
"Hello World!" という内容のメッセージ ボックスが表示されます。
次の手順は、フォーム コードにデバッグ用のブレークポイントを追加する方法を示しています。
フォーム コードをデバッグする
コード エディターで次の行の左にあるグレーのバーをクリックします。
thisXDocument.UI.Alert("Hello World!");thisXDocument.UI.Alert("Hello World!")赤い円が表示され、コード行が強調表示されます。これは、ランタイムがフォーム コードのこのブレークポイントで一時停止することを表しています。
[デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。
InfoPath の [プレビュー] ウィンドウで [Alert] をクリックします。
コード エディターにフォーカスが移動し、ブレークポイント行が強調表示されます。
[デバッグ] メニューで [ステップ オーバー] をクリックするか、または Shift キーを押しながら F8 キーを押して、コード内を順に移動します。
Alert メソッドのコードが実行され、InfoPath の [プレビュー] ウィンドウに "Hello World!" という通知が表示されます。
現在のユーザーの名前を取得する
.NET Framework のクラスを使用すると、スクリプトでは簡単に利用できなかった機能を利用できます。 この例では、.NET Framework のクラスを使用して現在のユーザーの名前を取得する方法を説明します。
OnLoad イベント ハンドラーを追加する
前の例で作成した InfoPath HelloWorld プロジェクトを開きます。
[表示] タブの [フィールドの表示] をクリックします。
[マイフィールド] ノードを右クリックし、[追加] をクリックします。
[ 名前] に「 employee」と入力し、[OK] をクリック します。
[employee] ノードをビューにドラッグします。
[開発] タブの [OnLoad イベント] をクリックします。
これにより 、OnLoad イベントのイベント ハンドラーが作成され、フォーカスがコード エディターに移動します。 フォームを読み込むたびに、このイベント ハンドラーのコードが呼び出されます。 次の手順は、ユーザーの名前を取得するフォーム コードをイベント ハンドラーに追加する方法を示しています。
フォーム コードを追加する
OnLoad イベント ハンドラーに次のコードを入力します。
// Store an XML DOM node as a local variable. IXMLDOMNode nodeEmployee = thisXDocument.DOM.selectSingleNode("my:myFields/my:employee"); if(nodeEmployee != null) { if(nodeEmployee.text == "") { // If the employee name is blank when the form is loaded, // populate the employee node with the current user name. nodeEmployee.text = System.Environment.UserName; } }// Store an XML DOM node as a local variable. Dim nodeEmployee As IXMLDOMNode nodeEmployee = thisXDocument.DOM.selectSingleNode("my:myFields/my:employee"); If Not(nodeEmployee Is Nothing) Then If(nodeEmployee.text = "") Then // If the employee name is blank when the form is loaded, // populate the employee node with the current user name. nodeEmployee.text = System.Environment.UserName End If End Ifフォームをコンパイルおよびプレビューします。
[employee] ボックスに自分のユーザー名が表示されます。
マネージド コード フォーム テンプレートをデプロイする方法の詳細については、「コードを使用して InfoPath フォーム テンプレートを展開する」を参照してください。 InfoPath 2003 と互換性のあるオブジェクト モデルで動作するマネージ コード フォーム テンプレートの InfoPath オブジェクト モデルと一般的なプログラミング タスクについては、「 InfoPath 2003 オブジェクト モデルについて」を参照してください。