ここでは、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間から提供される InfoPath 2003 互換オブジェクト モデルを使用する基本的な InfoPath マネージ コード フォーム テンプレートを作成する手順を順をおって説明します。
Hello World
次の例では、InfoPath 2003 互換オブジェクト モデルの Alert メソッドを使用して簡単な警告ダイアログ ボックスを表示する方法を説明します。
InfoPath 2003 互換オブジェクト モデルを使用する新しい InfoPath フォーム テンプレートを作成する
「[方法] InfoPath 2003 オブジェクト モデルを使用してマネージ コード フォーム テンプレートを作成する方法」の説明に従って、InfoPath 2003 互換オブジェクト モデルを使用する新しいフォーム テンプレートを作成します。
フォーム テンプレート プロジェクトを HelloWorld という名前で保存します。
プロジェクト システムがコード ファイルとプロジェクト ファイルを作成し、InfoPath のデザイン モードで空白のフォーム テンプレートを開きます。これでイベント ハンドラを追加する準備ができました。
OnClick イベント ハンドラを追加する
[デザイン タスク] 作業ウィンドウの [コントロール] をクリックします。
InfoPath (Microsoft Visual Studio Tools for Applications (VSTA) インストール済み) で作業している場合は、[基本コントロール] の [ボタン] コントロールをクリックして、ビューに挿入します。
Visual Studio 2005 と Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System または Visual Studio 2008 と Visual Studio Tools for Office で作業している場合は、[ツールボックス] から [manifest.xsf [デザイン]] フォーム デザイナに [ボタン] コントロールをドラッグします。
ボタンをダブルクリックして、[ボタンのプロパティ] ダイアログ ボックスを開きます。
[ラベル] を Alert に変更します。
[ID] を AlertID に変更します。
[フォームのコードを編集] をクリックします。
OnClick イベントのイベント ハンドラ スケルトンが作成され、VSTA または Visual Studio のコード エディタにフォーカスが移動します。イベント ハンドラの使用の詳細については、「[方法] 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 アセンブリへの参照を追加し、コード ファイル先頭のディレクティブに
using System.Windows.Forms;
またはImports System.Windows.Forms
を追加し、MessageBox.Show("Hello World!); or MessageBox.Show("Hello World!)
のようなコード行を入力する必要があります。InfoPath (VSTA) を使用している場合は、InfoPath のデザイン モード ウィンドウに切り替え、[標準] ツール バーの [プレビュー] をクリックします。
Visual Studio で作業している場合は、[デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。
[プレビュー] ウィンドウで [Alert] をクリックします。
"Hello World!" という内容のメッセージ ボックスが表示されます。
次の手順は、フォーム コードにデバッグ用のブレークポイントを追加する方法を示しています。
フォーム コードをデバッグする
コード エディタで次の行の左にあるグレーのバーをクリックします。
thisXDocument.UI.Alert("Hello World!");
thisXDocument.UI.Alert("Hello World!")
赤い円が表示され、コード行が強調表示されます。これは、ランタイムがフォーム コードのこのブレークポイントで一時停止することを表しています。
[デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。
InfoPath の [プレビュー] ウィンドウで [Alert] をクリックします。
コード エディタにフォーカスが移動し、ブレークポイント行が強調表示されます。
[デバッグ] メニューの [ステップ オーバー] をクリック (または F10 キーを押下) して、コードのステップ スルーを続行します。
Alert メソッドのコードが実行され、InfoPath の [プレビュー] ウィンドウに "Hello World!" という通知が表示されます。
現在のユーザーの名前を取得する
.NET Framework のクラスを使用すると、スクリプトでは簡単に利用できなかった機能を利用できます。この例では、.NET Framework のクラスを使用して現在のユーザーの名前を取得する方法を説明します。
OnLoad イベント ハンドラを追加する
前の例で作成した InfoPath HelloWorld プロジェクトを開きます。
[表示] メニューの [データ ソース] をクリックします。
[マイフィールド] ノードを右クリックし、[追加] をクリックします。
[名前] ボックスに「employee」と入力し、[OK] をクリックします。
[employee] ノードをビューにドラッグします。
InfoPath (VSTA) で作業している場合は、[ツール] メニューの [プログラミング] をクリックし、[Loading イベント] をクリックします。
Visual Studio で作業している場合は、[挿入] メニューの [イベント] をクリックし、[Loading イベント] をクリックします。
これによって 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 オブジェクト モデルと、InfoPath 2003 互換オブジェクト モデルを使用するマネージ コード フォーム テンプレートでよく行うプログラミング作業については、「InfoPath 2003 オブジェクト モデルを理解する」を参照してください。
関連項目
タスク
[方法] InfoPath 2003 オブジェクト モデルを使用してイベント ハンドラを追加する方法
概念
InfoPath 2003 オブジェクト モデルを使用する初期化コードと後処理コード
InfoPath 2003 互換オブジェクト モデル