次の方法で共有


InfoPath 開発入門

Microsoft Office InfoPath 2003 SDK

InfoPath 開発入門

概要 :   Microsoft Office System に新たに追加された Microsoft Office InfoPath は、堅牢なプログラミング モデルと開発環境をサポートしています。ここでは、InfoPath 開発の基本を手ほどきし、主な開発コンポーネントの概要、開発環境に関する情報、オブジェクト モデルとフォーム定義ファイルの概要、および開発における重要な要素について説明します。

はじめに
InfoPath 開発コンポーネントの概要
プログラミング環境の概要
InfoPath オブジェクト モデルの概要
InfoPath フォーム定義ファイルの概要
InfoPath 開発の鍵となる要素
簡単なフォームの開発
まとめ

はじめに

Microsoft Office System に Microsoft Office InfoPath が新たに加わったことは既にご存知かもしれません。InfoPath は、XML (Extensible Markup Language) に基づく機能的で動的なフォームをデザインできるデスクトップ アプリケーションです。まだご存知ではないかもしれませんが、他の多くの Office アプリケーションと同じように、InfoPath でも堅牢なプログラミング モデルと開発環境をサポートしています。ここでは、InfoPath 開発の基本を手ほどきし、主な開発コンポーネントの概要、開発環境に関する情報、オブジェクト モデルとフォーム定義ファイルの概要、および開発における重要な要素について説明します。

InfoPath 開発コンポーネントの概要

Office アプリケーションを使用してカスタムのソリューションを開発する際、プログラミング環境、オブジェクト モデル、アプリケーション使用時に発生するさまざまなイベントなどの開発コンポーネントを使って作業することがほとんどです。InfoPath における開発もこれと同じですが、他の Office アプリケーションにはない固有の開発コンポーネントも使用します。

プログラミング環境

ほとんどの Office アプリケーションでは、Microsoft Visual Basic for Applications (VBA) を主な統合開発環境として使用しますが、InfoPath は違います。InfoPath で主にプログラミング環境として使用されるのは、Microsoft Script Editor (MSE) です。したがって、InfoPath フォームを開発する際には、プログラミング言語として Visual Basic の代わりにスクリプト言語を使用します。InfoPath でサポートされているスクリプト言語は、Microsoft JScript と Microsoft VBScript です。これらのスクリプト言語を使用して、InfoPath フォームの機能の拡張とカスタマイズを実行できます。

メモ  Microsoft Script Editor の詳細については、後で説明します。

オブジェクト モデル

他の Office アプリケーションと同じように、InfoPath にもアプリケーション、フォーム、およびフォーム内データとやりとりするための堅牢なオブジェクト モデルが存在します。InfoPath オブジェクト モデルには、XML DOM (Document Object Model) への参照を返すために使用されるプロパティも含まれます。DOM は、InfoPath フォームで使用される XML ドキュメント (またはファイル) および InfoPath フォームで作成される XML データとの情報のやりとりに使用されます。

InfoPath オブジェクト モデルの最上位に位置するオブジェクトは、Application オブジェクトです。このオブジェクトを介して、オブジェクト モデルに含まれる他のオブジェクトにアクセスできます。InfoPath オブジェクト モデルの他の主なオブジェクトとして、InfoPath ユーザー インターフェイスの各種コンポーネントにアクセスする場合に使用する Window オブジェクトや、フォームの各種コンポーネントとその基盤となる XML ドキュメントにアクセスする場合に使用する XDocument オブジェクトなどがあります。

InfoPath オブジェクト モデルと他の Office オブジェクト モデルで大きく異なる点は、InfoPath オブジェクト モデルでは完全な自動化がサポートされないことです。InfoPath オブジェクト モデルを使用してプログラムから InfoPath フォームを作成することはできません。ただし、InfoPath オブジェクト モデルが提供する ExternalApplication オブジェクトを使用すれば、フォームを開く、登録する、閉じるなど、InfoPath の限られた操作を実行することは可能です。

メモ  InfoPath オブジェクト モデルの詳細については、後で説明します。

フォーム定義ファイル

他にはない InfoPath の特徴は、フォーム定義 (.xsf) ファイルが存在することです。.xsf ファイルは拡張子が .xsf の XML ファイルであり、InfoPath フォームのマニフェストの役割を果たします。manifest.xsf ファイルは、フォームの構造、使用方法、および展開方法に関する情報を 1 つにまとめる接着剤のようなものです。この .xsf ファイルは、フォームをデザインすると InfoPath によって自動的に作成され、他のフォーム ファイルと共に .xsn ファイルにパッケージ化されます。

一般に、.xsf ファイル内の情報は InfoPath のみで作成される必要がありますが、フォームの機能を拡張するために .xsf ファイルを直接変更することもできます。.xsf ファイルは標準 XML 形式なので、メモ帳などの標準的なテキスト エディタならどれを使っても直接変更できます。

メモ  InfoPath フォーム定義ファイルの詳細については、後で説明します。

フォーム構成ファイル

InfoPath フォームは、フォーム構成ファイルと総称される複数の種類のファイルを使用して実装されます。拡張子が .xsn の InfoPath ファイルである InfoPath フォーム テンプレートを作成するために使用されるファイルは、どれもフォーム構成ファイルに含まれます。フォーム構成ファイルに含まれるのは、.xsf ファイル、XML スキーマ、XML テンプレート、ビュー ファイル、プレゼンテーション ファイル、スクリプト ファイル、およびカスタム ビジネス ロジック ファイルです。

次の表は、フォーム構成ファイルの概要と拡張子の一覧を示しています。

名前 拡張子 説明
フォーム定義 .xsf フォームで使用される他のすべてのファイルとコンポーネントに関する情報を含む InfoPath 生成ファイル。フォームのマニフェストとしての役割を果たします。
XML スキーマ .xsd フォームの基盤となる XML ドキュメント ファイルの制約および検証に使用される XML スキーマ ファイル。
ビュー .xsl フォームの基盤となる XML ドキュメント ファイルに含まれるデータの提供、表示、および変換に使用されるプレゼンテーション スタイル シート ファイル。
XML テンプレート .xml 新しいフォームを作成したときにビューに表示される既定のデータを含む .xml ファイル。
プレゼンテーション .htm、.gif、.bmp、その他 カスタム ユーザー インターフェイス要素の作成に使用されるファイル。
ビジネス ロジック .js、.vbs 特定の編集動作、データの入力規則、イベント ハンドラ、データ フロー制御、その他のカスタム ビジネス ロジックの実装に使用されるプログラミング コードを含むスクリプト ファイル (JScript および VBScript)。
バイナリ .dll、.exe ビジネス ロジックを追加するためのカスタム COM (コンポーネント オブジェクト モデル) コンポーネント。こうしたファイルはフォーム テンプレートに含まれないため、個別に登録する必要があります。
フォーム テンプレート .xsn すべてのフォーム構成ファイルを 1 つのファイルにパッケージ化する圧縮ファイル形式 (.cab)。

メモ  InfoPath では InfoPath フォーム構成ファイルが .xsn ファイルとして自動的にパッケージ化されますが、拡張子が .xsn になるだけでファイルの内容は CAB ファイルと同じです。フォームのデザイン時に [ファイル] メニューの [フォーム構成ファイルの取り出し] をクリックすれば、これらのファイルをハード ディスク上のフォルダに取り出せます。

イベント

他の Office アプリケーションと同じように、InfoPath にもアプリケーションの状態やユーザーからのアクションに応答するのに使用できる数多くのイベントが実装されています。また、フォームの基盤となる XML ドキュメントに対して行われた変更に応答する数多くのイベントも実装されています。

InfoPath イベントは、フォーム イベントとデータの入力規則イベントの 2 種類に大きく分けられます。フォーム イベントはアプリケーションの状態またはユーザーからのアクションに応答し、データの入力規則イベントはフォームの基盤となる XML ドキュメントに対して行われた変更に応答します。

次の表は、InfoPath のイベントの一覧と、それぞれのイベントを使用して何に応答できるかを示します。

イベント 種類 説明
OnLoad フォーム フォームを開いたときに、フォームを初期化するのに使用されます。最初のビューが表示される前にこのイベントが発生します。
OnSwitchView フォーム 別のビューに切り替えたときに使用されます。ユーザーが別のビューに切り替えるか、ビューを初めて読み込んだときに、このイベントが発生します。
OnBeforeChange データの入力規則 フォームの基盤となる XML ドキュメントに対して変更が行われたが、まだ変更が受け付けられていないときに使用されます。
OnValidate データの入力規則 フォームの基盤となる XML ドキュメントに対する変更が受け付けられたが、まだ OnAfterChange イベントが発生していないときに使用されます。
OnAfterChange データの入力規則 フォームの基盤となる XML ドキュメントに対する変更が受け付けられ、OnValidate イベントも発生した後で使用されます。
OnSubmitRequest フォーム InfoPath ユーザー インターフェイス、または InfoPath オブジェクト モデルの XDocument オブジェクトの Submit メソッドから送信操作が呼び出されたときに使用されます。
OnVersionUpgrade フォーム フォームが開かれたときに、そのバージョン番号が、フォームを開くときに使用されたフォーム テンプレートのバージョン番号と一致しているかどうかを検証するために使用されます。バージョン番号が一致しない場合は、このイベントが発生します。スクリプト コードを使用して、このイベントが発生したときにフォームが更新されるようにしたり、エラー メッセージが表示されるようにすることができます。
OnAfterImport フォーム フォームが別のフォームと結合された後で、追加の処理を実行する場合に使用されます。このイベントは他のフォームからデータがインポートされた後で発生します。スクリプト コードを使用して、フォームに含まれている結合データに基づいて適切なビューが設定されるようにすることができます。
OnClick フォーム フォームのボタンがクリックされたときに、それに応答するために使用されます。

メモ  データの入力規則イベントが複数回発生することもあります。たとえば、新しいデータを挿入すると、そのたびに OnBeforeChange イベントと OnAfterChange イベントが一度ずつ発生します。ただし、既存のデータを更新した場合は、これらのイベントが削除操作で二度発生し、その後で挿入操作が発生します。

また InfoPath では、各イベントに対しパラメータとして渡されるイベント オブジェクトも実装されています。イベント オブジェクトは、フォームの基盤となる XML ドキュメントへの参照を取得したり、イベントの状態を返したり、XML DOM (Document Object Model) 変更時の XML ノードに関する情報を返したり、エラーを返したりする場合に使用されます。イベント オブジェクトで使用できるプロパティとメソッドは、使用するイベントの種類によって異なります。

次の表は、イベント オブジェクト、イベント オブジェクトに関連付けられたイベント、およびイベント オブジェクトが提供する機能の概要を示します。

イベント オブジェクト イベント 説明
DocEvent OnSwitchView、OnAfterImport ビューの切り替えかフォームの結合が行われたときに、フォームの基盤となる XML ドキュメントへの参照を返します。
DocReturnEvent OnLoad、OnSubmitRequest フォームの読み込みまたは送信が行われたときに、フォームの基盤となる XML ドキュメントへの参照とリターン ステータスを返します。
VersionUpgradeEvent OnVersionUpgrade バージョンのアップグレードが行われたときに、フォームの基盤となる XML ドキュメントへの参照、リターン ステータス、およびドキュメントとソリューションのバージョン番号を返します。
DataDOMEvent OnBeforeChange、OnValidate、OnAfterChange XML DOM が変更されたときに、フォームの基盤となる XML ドキュメントへの参照、リターン ステータス、および XML ノードに関する情報を含む他のプロパティを返します。エラーを発生させるためのメソッドも含まれます。
DocActionEvent OnClick フォーム内でボタンをクリックしたときに、フォームの基盤となる XML ドキュメントへの参照、リターン ステータス、およびソース XML ノードを返します。

プログラミング環境の概要

前述のように、InfoPath で使用するプログラミング環境は Microsoft Script Editor (MSE) です。MSE でフォームのカスタム ビジネス ロジックのデザインに使用するプログラミング言語は、Microsoft JScript と Microsoft VBScript です。InfoPath で MSE を操作する際は、既定のプログラミング言語の設定、MSE の起動、イベント ハンドラの作成、スクリプト コードのデバッグ、オブジェクト ブラウザの使用、および必要に応じたプログラミング ヘルプの参照など数多くの作業を行います。

既定のプログラミング言語の設定

フォームで使用する既定のスクリプト言語を設定するには、InfoPath デザインモードで、[ツール] メニューの [フォームのオプション] をクリックし、[フォームのオプション] ダイアログ ボックスの [詳細設定] タブで [フォームのスクリプト言語] ボックスの一覧からスクリプト言語を選択します (図 1 を参照)。既定のスクリプト言語を選択し、最初のプログラミング コードを書いた時点で [フォームのスクリプト言語] ボックスは使用不可となるため、これ以降、フォームで使用するスクリプト言語を変更できなくなります。

フォームの詳細設定

図 1. フォームの詳細設定オプション

メモ  InfoPath のフォームでは JScript と VBScript の使用がサポートされていますが、この 2 つのスクリプト言語を同じフォームの中で使用することはできません。

MSE の起動

スクリプト コードを使用してフォームの機能を拡張するには、MSE を起動できるようにフォームを InfoPath デザイン モードで開く必要があります。フォームをデザイン モードで開いた後、MSE を起動するには、次のいずれかの操作を行います。

  • [ツール] メニューの [スクリプト] をポイントし、[Microsoft Script Editor] をクリックします。
  • Alt キーと Shift キーを押しながら F11 キーを押します。
  • [ツール] メニューの [スクリプト] サブメニューでイベント ハンドラの作成または編集を選択します。
  • InfoPath のダイアログ ボックスでイベント ハンドラの作成または編集を選択します。

メモ  一部の InfoPath イベント ハンドラには、[ツール] メニューから開くダイアログ ボックス、またはフォームをデザインするときに使用する InfoPath コントロールの一部に関連付けられた [プロパティ] ダイアログ ボックスからアクセスします。詳細については後で説明します。

InfoPath デザイン モードで MSE を開くと、MSE のコード エディタが表示され、フォームの既定のスクリプト ファイルがコード編集ウィンドウに表示されます (スクリプト ファイルの拡張子は .js または .vbs で、どちらになるかはフォームに設定された既定のスクリプト言語によって決まります)。

イベント ハンドラの作成

特定の InfoPath イベントに応答するためにスクリプト コードを記述する場合、最初にイベント ハンドラを作成する必要があります。イベント ハンドラは、フォームのプライマリ スクリプト ファイルに作成される関数宣言です。イベントハンドラの作成には、デザイン モードのユーザー インターフェイスを使用します。イベント ハンドラは、この方法で作成する必要があります。これは、この方法を実行することで、InfoPath はイベント ハンドラの関数宣言を作成できるほか、イベント ハンドラをフォームで使用できるようにするために必要なエントリを .xsf ファイル内に作成できるようになるためです。

メモ  スクリプト ファイルを開いてイベント ハンドラを手作業で作成し、.xsf ファイルの中にエントリを直接作成することも可能ですが、この方法は推奨されません。手作業で作成したイベント ハンドラは正確に記述されているとは限らないので、フォームが正常に機能しない原因となる可能性があります。

イベント ハンドラを作成する手順は、使用するイベントの種類によって異なります。[ツール] メニューの [スクリプト] サブメニューを使用して作成するイベント ハンドラもあれば、InfoPath のさまざまなダイアログ ボックスの 1 つを使用して作成するイベント ハンドラもあります。

次の表は、InfoPath のイベント ハンドラの一覧と各イベント ハンドラの作成手順を示しています。

イベント ハンドラ 手順
OnLoad [ツール] メニューの [スクリプト] をポイントし、[読み込み時のイベント] をクリックします。
OnSwitchView [ツール] メニューの [スクリプト] をポイントし、[ビュー切り替え時のイベント] をクリックします。
OnBeforeChange [データの入力規則] ダイアログ ボックス (コントロールの [プロパティ] ダイアログ ボックスの [データ] タブまたは [書式] メニューから表示できる) の [イベント] ボックスの一覧の [OnBeforeChange] をクリックします。

コントロールの [フィールドまたはグループのプロパティ] ダイアログ ボックスの [入力規則とスクリプト] タブをクリックし、[イベント] ボックスの一覧の [OnBeforeChange] をクリックする方法でも、このイベント ハンドラを作成できます。

OnValidate [データの入力規則] ダイアログ ボックス (コントロールの [プロパティ] ダイアログ ボックスの [データ] タブまたは [書式] メニューから表示できる) の [イベント] ボックスの一覧の [OnValidate] をクリックします。

コントロールの [フィールドまたはグループのプロパティ] ダイアログ ボックスの [入力規則とスクリプト] タブをクリックし、[イベント] ボックスの一覧の [OnValidate] をクリックする方法でも、このイベント ハンドラを作成できます。

OnAfterChange [データの入力規則] ダイアログ ボックス (コントロールの [プロパティ] ダイアログ ボックスの [データ] タブまたは [書式] メニューから表示できる) の [イベント] ボックスの一覧の [OnAfterChange] をクリックします。

コントロールの [フィールドまたはグループのプロパティ] ダイアログ ボックスの [入力規則とスクリプト] タブをクリックし、[イベント] ボックスの一覧の [OnAfterChange] をクリックする方法でも、このイベント ハンドラを作成できます。

OnSubmitRequest [ツール] メニューの [フォームの送信] をクリックします。[フォームの送信] ダイアログ ボックスの [送信] ボックスの一覧の [カスタム スクリプトを使って送信] をクリックします。
OnVersionUpgrade [ツール] メニューの [フォームのオプション] をクリックします。[フォームのオプション] ダイアログ ボックスの [詳細設定] タブをクリックし、[バージョンのアップグレード] ボックスの一覧の [スクリプト イベントを使用する] をクリックします。
OnAfterImport イベント ハンドラの作成にはデザイン モードのユーザー インターフェイスを使用するという規則の例外が、このイベント ハンドラです。このイベント ハンドラは、デザイン モードで作成できません。手作業で作成する必要があります。
OnClick ボタン コントロールの [ボタンのプロパティ] ダイアログ ボックスの [Microsoft Script Editor] をクリックします。

イベント ハンドラをデザイン モードで作成すると、InfoPath によってイベント ハンドラの宣言がフォームのプライマリ スクリプト ファイルに作成され、MSE が自動的に開きます。MSE のコード編集ウィンドウに、作成したばかりのイベント ハンドラが表示されます。イベント ハンドラの宣言では、イベント ハンドラに引き渡されるパラメータの名前として eventObj が使用されます。このパラメータには、このイベント ハンドラに関連付けられたイベント オブジェクトへの参照が含まれます。

たとえば、OnLoad イベントをデザイン モードで作成すると、OnLoad イベント ハンドラがスクリプト ファイルに作成されます。そして、イベント ハンドラ宣言の中にスクリプト コードを書き込むことができるよう MSE が開きます。

JScript を既定のスクリプト言語として使っている場合、OnLoad イベント ハンドラは以下のように宣言されます。

  //=======
// The following function handler is created by Microsoft Office
// InfoPath. Do not modify the name of the function, or the name
// and number of arguments.
//=======
function XDocument::OnLoad(eventObj)
{
   // Write your code here
}

VBScript を既定のスクリプト言語として使っている場合、OnLoad イベント ハンドラは以下のように宣言されます。

  //=======
// The following function handler is created by Microsoft Office
// InfoPath. Do not modify the name of the function, or the name
// and number of arguments.
//=======
Sub XDocument_OnLoad(eventObj)
   ' Write your code here
End Sub

メモ  InfoPath イベント ハンドラを作成した後で、宣言を変更しないでください。変更すると、フォームが正常に動作しなくなる可能性があります。

スクリプト コードのデバッグ

通常、統合開発環境には記述したコードをデバッグする機能があります。プログラミング コードのデバッグには、エラーが起きた時点でコードをデバッグする方法と、プログラムの実行がデバッガによって一時的に停止されるようにコードの中にブレークポイントを設定し、コードをステップ実行してプログラムの動作を確認する方法があります。

InfoPath フォームのカスタマイズに使用するコードをデバッグするために、コード内にプログラミング デバッグ ステートメントを使用できます。JScript では debugger; ステートメントを使用し、VBScript では Stop ステートメントを使用します。デバッグ ステートメントをコードに入力した後で、コードを保存し、フォームをプレビューします。

次の例は、JScript 構文を使用して OnLoad イベント ハンドラでデバッグ ステートメントを使用する方法を示します。

  function XDocument::OnLoad(eventObj)
{
   debugger;
}

VBScript を既定のスクリプト言語として使っている場合、次に示すデバッグ ステートメントを使用できます。

  Sub XDocument_OnLoad(eventObj)
   Stop
End Sub

メモ  スクリプト デバッグを使用するには、Microsoft Internet Explorer の [インターネット オプション] ダイアログ ボックスの [詳細設定] タブで [スクリプトのデバッグを使用しない] チェック ボックスがオフになっていることを確認してください。このダイアログ ボックスを開くには、Internet Explorer の [ツール] メニューの [インターネット オプション] をクリックします。

デバッグ ステートメントが含まれているフォームをプレビューするか開くと、[Just-In-Time デバッグ] ダイアログ ボックスが表示され、使用するデバッガを選択するように求められます (図 2 を参照)。[新しいインスタンス Micropsoft Script Editor] をクリックし、[はい] をクリックします。[リモート プロシージャ コールにステップ イン] ダイアログ ボックスが表示され、デバッグするプログラムの種類を選択するように求められます。[スクリプト] をクリックし、[OK] をクリックします。MSE がデバッグ モードで開き、プログラムの実行が一時的に停止されている場所が黄色い矢印で示されます。

[Just-In-Time デバッグ] ダイアログ ボックス

図 2. [Just-In-Time デバッグ] ダイアログ ボックス

デバッグ モードの MSE では、ブレークポイントの設定、プログラム ステートメントのステップ実行、および [ウォッチ] ウィンドウ、[イミディエイト] ウィンドウ、[呼び出し履歴] ウィンドウなどのデバッグ ウィンドウの表示など、すべてのデバッグ機能を使用できます。

スクリプト コードのデバックを停止するには、[デバッグ] メニューの [デバッグの停止] をクリックするか、Shift キーを押しながら F5 キーを押します。

メモ  フォームのプレビュー時または使用時にコードでエラーが起きた時点でデバッグする方法もあります。

オブジェクト ブラウザの使用

VBA (Visual Basic for Applications) プログラミング環境と同じように、MSE でもオブジェクト ブラウザを使用して InfoPath オブジェクト モデルの内容を確認することができます。オブジェクト ブラウザでは、InfoPath オブジェクト モデルのすべてのオブジェクトと、それらに関連付けられたすべてのプロパティ、メソッド、およびイベントを表示できます。

MSE オブジェクト ブラウザ (図 3 を参照) を開くには、次のいずれかの操作を行います。

  • [表示] メニューの [その他のウィンドウ] をポイントし、[オブジェクト ブラウザ] をクリックします。
  • Ctrl キーと Alt キーを押しながら J キーを押します。
  • [標準] ツールバーの [オブジェクト ブラウザ] をクリックします。

MSE オブジェクト ブラウザ

図 3. MSE オブジェクト ブラウザ

InfoPath オブジェクト モデルが MSE オブジェクト ブラウザに表示されない場合は、次の操作を行います。

  1. MSE オブジェクト ブラウザを開きます。
  2. オブジェクト ブラウザ ウィンドウの [カスタマイズ] をクリックします。
  3. [選択したコンポーネント] ダイアログ ボックスのコンポーネントの一覧で、[他のパッケージ/ライブラリ] ノードをクリックして展開します。
  4. 一覧に [InfoPath - Microsoft Office InfoPath 1.0 Type Library] が表示されている場合は、そのチェック ボックスをオンにし、[OK] をクリックします。この項目が表示されていない場合は、次の手順に進んでください。
  5. [追加] をクリックします。
  6. [コンポーネントの選択] ダイアログ ボックスの [Microsoft InfoPath 1.0 Type Library] をクリックし、[選択] をクリックします。次に、[OK] をクリックしてダイアログ ボックスを閉じます。
  7. [選択したコンポーネント] ダイアログ ボックスに [InfoPath - Microsoft Office InfoPath 1.0 Type Library] が表示され、そのチェック ボックスがオンになっていることを確認し、[OK] をクリックします。

プログラミング ヘルプの参照

InfoPath やその他の Office アプリケーションを使用してカスタムのソリューションを開発する場合、アプリケーションを理解することやなんらかの開発上の問題を解決することに役立つ開発者向けのヘルプを参照すると便利です。InfoPath では、フォームの開発者が、デザイン中のフォームをカスタマイズしたり拡張する場合に役立つさまざまなヘルプ コンテンツを用意しています。InfoPath フォームの開発に最も役立つヘルプ リソースは、『InfoPath Developer's Reference』、MSE ヘルプ システム、および各種のオンライン リソースです。

InfoPath Developer's Reference

『InfoPath Developer's Reference』では、以下のリソースを使用できます。『InfoPath Developer's Reference』は、InfoPath ヘルプ システムと MSE ヘルプ システムから参照できます。

  • プログラミングの概念 InfoPath オブジェクト モデルや .xsf ファイルなど、InfoPath のプログラミングに関する概念について説明します。

  • 開発者向けサンプル フォーム   InfoPath と共にインストールされる 5 つの開発者向けサンプル フォームのドキュメント。このサンプル フォームでは、InfoPath フォーム開発の主な機能が使用されています。

  • InfoPath オブジェクトモデル リファレンス   InfoPath オブジェクトモデルに関する完全なドキュメント セット。InfoPath のコレクション、オブジェクト、プロパティ、メソッド、イベント、および列挙について説明しています。

    メモ  InfoPath オブジェクト モデルは F1 キーに対応しています。MSE コード編集ウィンドウで特定のオブジェクト モデル メンバの上にカーソルを置いて F1 キーを押すと、そのメンバの参照トピックが表示されます。

  • InfoPath XSF リファレンス   InfoPath .xsf ファイルの完全なドキュメント セット。名前空間、グループ、型、要素、および属性について説明しています。

MSE ヘルプ システム

MSE ヘルプ システムでは以下のリソースを使用できます。MSE ヘルプ システムは、MSE を使っている場合にのみ利用できます。

  • Microsoft Script Editor ヘルプ   MSE の使い方について、スクリプト エディタのカスタマイズ方法からデバッグのテクニックに至るまで説明します。
  • Microsoft XML コア サービス (MSXML) 5.0 SDK   XML、DOM (XML Document Object Model)、XML スキーマ、XSLT (XSL Transformation)、および XPath に関する情報を提供します。これらの XML ベースの技術を解説する、さまざまな開発者向けガイドと言語リファレンスが含まれています。
  • JScript リファレンス   Microsoft JScript スクリプト言語の使用方法について説明します。このリソースには、言語リファレンスとチュートリアルが含まれています。
  • VBScript リファレンス   Microsoft VBScript スクリプト言語の使用方法について説明します。このリソースには、言語リファレンスとチュートリアルが含まれています。

オンライン リソース

InfoPath に含まれるヘルプ リソースのほか、次に示す数多くのオンライン リソースを利用できます。

  • Microsoft Office Developer Centerすべての Microsoft Office アプリケーションを開発プラットフォームとして使用する方法に関する情報を提供する Web サイト。
  • MSDN (Microsoft Developer Network)さまざまな Microsoft の開発プラットフォームと開発ツールに関する情報を提供する Web サイト。
  • Microsoft XML Developer CenterXML によるアプリケーションの使用と開発に関する情報を提供する Web サイト。
  • Microsoft Scripting Developer CenterJScript や VBScript などのさまざまな Microsoft スクリプト言語の使用に関する情報を提供する Web サイト。

InfoPath オブジェクト モデルの概要

InfoPath オブジェクトモデルは COM (コンポーネント オブジェクト モデル) ベースのオブジェクト モデルであり、InfoPath フォームとその基盤となる XML ドキュメントとの間で情報を交換するのに使用できます。コレクション、オブジェクト、プロパティ、メソッド、およびイベントのためのインターフェイスが実装される点では、他の Office アプリケーションのオブジェクト モデルと似ています。ただし、InfoPath のオブジェクト モデルは、InfoPath アプリケーションの自動化に必要となる、限られたメソッドのみをサポートします。

オブジェクト モデルで提供される機能

InfoPath オブジェクト モデルには、InfoPath フォームの主要な機能を表すオブジェクトが含まれます。プログラムにより特定のフォーム機能と情報を交換できます。次の表は、主なオブジェクトの詳細について説明しています。

オブジェクト 説明
Application InfoPath オブジェクト モデルの最上位に位置するオブジェクト。このオブジェクトには、InfoPath オブジェクト モデルの低いレベルに位置するコレクションとオブジェクトにアクセスしたり、さまざまな汎用関数を実行したりするために使用できるプロパティとメソッドが数多く用意されています。
Window Window オブジェクトには、プログラムにより InfoPath のウィンドウと情報を交換するためのプロパティとメソッドが数多く用意されています。ウィンドウをアクティブにしたり閉じたりすることや、そこに含まれる作業ウィンドウやコマンド バーと情報を交換することができます。また Windows オブジェクトでは、フォームの基盤となる、ウィンドウに関連付けられた XML ドキュメントへのアクセスに使用できるプロパティも用意しています。
XDocument XDocument オブジェクトには、プログラムを使って、フォームの基盤となる XML データと情報を交換し操作するためのプロパティ、メソッド、およびイベントが数多く用意されています。
MailEnvelope MailEnvelope オブジェクトには、Microsoft Office Outlook 2003 電子メール エディタで独自の電子メール メッセージをプログラムから作成するのに使用できる多数のプロパティが用意されています。このオブジェクトは、現在 InfoPath で開いているフォームをメッセージに添付します。
TaskPane TaskPane オブジェクトには、InfoPath に組み込まれた作業ウィンドウとカスタム作業ウィンドウを操作するための多数のプロパティが用意されています。
DataObject DataObject オブジェクトには、プログラムによりデータ アダプタ オブジェクトと情報を交換するためのプロパティとメソッドが数多く用意されています。データ アダプタ オブジェクトに関する情報を取得したり、接続先のデータにアクセスすることができます。
Error Error オブジェクトには、InfoPath で生成されたエラーとプログラムにより情報を交換するための多数のプロパティが用意されています。
Solution Solution オブジェクトには、フォーム テンプレートに関する情報を取得するための多数のプロパティが用意されています。取得できる情報は、フォーム テンプレートのバージョン番号、取り出されたフォーム構成ファイルの URL、読み込み元の URL、.xsf ファイルを含む XML DOM (Document Object Model) などです。
UI UI (ユーザー インターフェイス) オブジェクトには、カスタムのダイアログ ボックスと組み込みダイアログ ボックスを表示するための多数のメソッドが用意されています。
View View オブジェクトには、プログラムから InfoPath のビューと情報を交換するためのプロパティとメソッドが数多く用意されています。ビューに含まれているデータを選択するメソッド、別のビューに切り替えるメソッド、フォームの基盤となる XML ドキュメントとビューを同期させるメソッド、InfoPath 編集アクションを実行するメソッドなどがあります。
ViewInfo ViewInfo オブジェクトには、ビューの名前を取得したり、ビューがフォームの既定のビューかどうかを確認したりするために使用できるプロパティが用意されています。
ExternalApplication ExternalApplication オブジェクトには、外部の COM ベースのプログラミング言語が InfoPath を自動化する場合に使用できる、限られた数のメソッドが用意されています。

オブジェクト モデルへのアクセス

InfoPath オブジェクト モデルには、スクリプト コードを通じてアクセスします。ただし、ExternalApplication オブジェクトは例外で、COM 互換プログラミング言語からアクセスできます。スクリプト コードは、以下のように InfoPath フォームのさまざまな場所で使用できます。

  • フォーム ロジック   フォームに関連付けられたスクリプト ファイルに含まれるスクリプト。多くの場合、このスクリプト コードは InfoPath フォームまたはデータの入力規則イベント ハンドラで使用されます。
  • 作業ウィンドウ   カスタム作業ウィンドウのプログラミング コードに含まれるスクリプト。
  • ダイアログ ボックス   カスタム ダイアログ ボックスのプログラミング コードに含まれるスクリプト。
  • ビュー   ビューの XSLT (XSL 変換) コードに含まれるスクリプト。

オブジェクト モデルのセキュリティ

InfoPath オブジェクト モデルには、3 段階のセキュリティが実装されています。セキュリティ レベルによって、特定のオブジェクト モデル メンバを使用できる場所とその方法およびメンバにアクセスできるフォームの種類が決定されます。

InfoPath オブジェクト モデルのセキュリティ レベルは次のとおりです。

  • 0: アクセスに制限はありません。
  • 1: 将来の使用のために予約されています。
  • 2: 現在開かれているフォームと同じドメインで実行されているフォーム、またはドメイン間アクセス許可が認められているフォームだけがアクセスできます。
  • 3: 完全信頼済みフォームだけがアクセスできます。

InfoPath で開発できるフォームには、"標準フォーム" と "完全信頼済みフォーム" の 2 種類があります。標準フォームは、URL を使用して識別され、ユーザーのコンピュータ上にキャッシュされた状態で実行されます。このフォームは、システムのリソースにアクセスすることは許可されていないため、システムのセキュリティを脅かす可能性はありません。また、標準フォームはカスタムの COM コンポーネントを使用できません。セキュリティ レベル 3 のオブジェクト モデル メンバにもアクセスできません。アクセスが認められていないセキュリティ レベルの InfoPath オブジェクト モデル メンバを呼び出すと、"アクセスが拒否されました。" または "書き込みできません。" というエラーが返されます。

完全信頼済みフォームは、URN (Uniform Resource Name) を使用して識別され、システムのリソースに無制限にアクセスできます。カスタムの COM コンポーネントを使用したり、セキュリティ レベル 3 の InfoPath オブジェクト モデル メンバを呼び出したりすることができます。

InfoPath フォーム定義ファイルの概要

InfoPath フォーム定義 (.xsf) ファイルは、フォームで中心的な役割を果たすファイルです。このファイルには、フォームで使用する XML スキーマ、フォームに含まれるリソース ファイル、フォームに実装されるイベント ハンドラ、および一般的な操作と外観に関連する他のさまざまな領域情報など、フォームがどのように形成されるかに関する情報が含まれます。

フォーム定義ファイルのカスタマイズ

.xsf ファイルは、フォームをデザインする際に InfoPath で作成され、フォームの変更を行うたびに更新される XML ファイルです。フォームのデザインや開発にかかわるほとんどの作業では、.xsf ファイルの作成と管理を InfoPath に任せるのが最適です。ただし、フォームの機能を拡張するために、InfoPath のデザイン モードでは実行できない変更を .xsf ファイルに直接行うことができます。

一般に、.xsf ファイルには以下の変更を実行できます。

  • サブメニューをメニューやツールバーに追加し、ユーザー インターフェイスを拡張する
  • 複数のスクリプト ファイルを追加する
  • 完全信頼済みフォームを作成する
  • 既定のエラー メッセージを上書きする
  • 印刷設定を追加する
  • ツールバーを追加する
  • 最上位のメニューを追加する
  • スクリプトの機能を呼び出すボタンをメニューやツールバーに作成する

フォーム定義ファイルの基本要素

.xsf ファイルには、フォームに関する情報を保存するために InfoPath で使用される基本要素が数多く用意されています。多くの基本要素には、他の要素が入れ子として含まれます。次の表は、こうした基本要素に関する詳細な説明です。

要素 説明
applicationParameters InfoPath デザイン モードでフォームをどのように使用する必要があるかを示すフォーム固有プロパティを含みます
customValidation XML スキーマにより強制実行されるすべての入力規則の検証のほかに実行される、規則に基づいたカスタム検証を定義します
dataObjects フォームで使用されるすべてのセカンダリ データ オブジェクトを定義します
documentSchemas フォームで使用される XML スキーマを定義します
documentSignatures フォームの基盤となる XML ドキュメントに含まれるデジタル署名付き XML DOM ノードの場所を定義します
documentVersionUpgrade 古いバージョンのフォーム テンプレートを使用して作成したフォームを最新バージョンのフォーム テンプレートにアップグレードする方法を定義します
domEventHandlers フォームの基盤となる XML ドキュメントの XML DOM ノードが変更された場合に処理を実行する各種スクリプト ベースのイベント ハンドラへのポインタを含みます
fileNew 新しいフォームをフォーム テンプレートを基にしてデザインすることにした場合に読み込まれるサンプル データが含まれている .xml ファイルへの参照を提供します
importParameters フォームの結合 (インポート) 機能がフォームにどのように作用するかを定義するすべてのパラメータを含みます
listProperties フォーム テンプレートに属するすべてのフォームの一覧に表示する必要があるプロパティを指定します
package フォームで使用するすべてのファイルに関する情報を含みます
query データ アダプタをデータ オブジェクトまたはフォームの基盤となる XML ドキュメントに関連付けます。
schemaErrorMessages XML スキーマのデータ型エラーの代わりに使用するカスタムのエラー メッセージを含みます
scripts フォームにおいてドキュメント レベルで使用されるすべてのビジネス ロジック スクリプトのソースを定義します
submit フォームの送信機能に関する情報を含みます
taskpane フォームで使用するカスタム作業ウィンドウを定義します
views フォームに実装されたすべてのビューを定義します

InfoPath 開発の鍵となる要素

InfoPath の開発には、InfoPath フォームのカスタマイズに使用する開発コンポーネントのほか、鍵となる 2 つの重要な要素があります。その要素とは、フォームのカスタマイズに使用できるプログラミング コンポーネントと、スクリプトによる開発および宣言による開発という概念です。

プログラミング コンポーネント

InfoPath のプログラミングでは、InfoPath フォーム構成ファイルを変更するか、InfoPath オブジェクト モデルを使用してカスタム関数を作成するスクリプト コードを記述することにより、フォームをカスタマイズすることができます。次の表は、プログラムによる情報のやりとりが可能な InfoPath フォームの主要コンポーネントを一覧表示したものです。

コンポーネント 説明
オブジェクト モデル コレクション、オブジェクト、プロパティ、メソッド、およびイベントで構成される堅牢な階層型タイプ ライブラリ。フォーム開発者は、オブジェクト モデルを使用して、プログラミング コードから InfoPath 編集環境を多面的に制御し、フォームの基盤となる XML ドキュメントにアクセスできます。
データの入力規則 フォームへの入力が許可されたデータの入力規則の検証と制約を行うために組み合わせて使用される XML スキーマ、式、およびスクリプト コード。
イベント処理 フォームの基盤となる XML ドキュメントが変更されたり、ビューが切り替えられたり、またはフォームの基盤となる XML ドキュメントが読み込まれたときに呼び出されるイベント ハンドラやカスタムのフォーム送信を実装するイベント ハンドラ。
ユーザー インターフェイス メニュー、ツールバー、ボタン、コマンド バー、作業ウィンドウなどのカスタマイズ可能なユーザー インターフェイス コンポーネント。
編集コントロール フォームの基盤となる XML ドキュメントを管理し、それと情報を交換するために使用する、コレクション、省略可能な項目、テキスト リスト、フィールドなどの InfoPath 固有のコントロール。
エラー処理 InfoPath フォームにおけるエラーを処理するために組み合わせて使用するイベント ハンドラ、オブジェクト モデル呼び出し、および .xsf ファイルです。
セキュリティ InfoPath オブジェクト モデルとシステム リソースに対するアクセスを制限するセキュリティ レベルのセット。
データの送信 InfoPath フォームにカスタムの投稿および送信機能を実装するために使用できる定義済みの関数。
ビジネス ロジック 特定の編集動作、データの入力規則、イベント ハンドラ、およびデータ フローのコントロールを実装するためのプログラミング コードを含むカスタムのスクリプト ファイルのセット。外部 COM コントロールのアクセスもビジネス ロジックに含めることができます。
フォームの統合 Microsoft Excel、Microsoft Outlook などの他の Office アプリケーションとの統合。また、Microsoft SQL Server、Microsoft Windows SharePoint Services、XML Web サービスなどのバックエンド サーバーもフォームに統合できます。

スクリプトによるプログラミングと宣言によるプログラミング

InfoPath フォーム構成ファイルを変更するときは、宣言によってフォームをカスタマイズします。つまり、フォーム ファイルを標準のテキスト エディタで開き、ファイルの要素、属性、および値を手作業で変更します。スクリプトによってフォームを変更するときは、スクリプト言語を InfoPath オブジェクト モデルと組み合わせて使用してプログラミング コードを記述します。場合によっては、外部 COM コンポーネントを使用してフォームの機能の拡張と向上を実現します。

フォームを宣言によってカスタマイズする方法は、次のとおりです。

  • XML スキーマ (.xsd) ファイルを変更する
  • デザイン モードで作成したビュー (.xsl) ファイルを変更する
  • .xsf ファイルを変更する
  • XML テンプレート (.xml) ファイルを変更する

フォームをスクリプトによりカスタマイズする方法は、次のとおりです。

  • フォーム ライフサイクル処理ロジックを追加する
  • カスタムのデータ入力規則の検証を追加する
  • カスタムのエラー処理を追加する
  • データの送信を実装する
  • フォームの結合 (またはインポート) に応答する
  • カスタム作業ウィンドウを使用する
  • カスタム ダイアログ ボックスを使用する
  • フォームの基盤となる XML ドキュメントにアクセスして変更する
  • XSF ファイルにアクセスして変更する
  • 外部 COM コンポーネントを使用する

簡単なフォームの開発

次の例では、データ入力用のテキスト ボックスと、入力されたデータを使用するスクリプト コードを実行するボタンが設定された簡単な InfoPath フォームをデザインします。

  1. まだ InfoPath を起動していない場合は、起動してください。

  2. [フォームの入力] 作業ウィンドウの [フォームのデザイン] をクリックします。[フォームの入力] 作業ウィンドウが表示されていない場合は、[ファイル] メニューの [フォームの入力] をクリックします。

  3. [フォームのデザイン] 作業ウィンドウの [新しい空白のフォーム] をクリックし、空のフォームを InfoPath デザイン モードで開きます。

  4. [ツール] メニューの [フォームのオプション] をクリックします。

  5. [フォームのオプション] ダイアログ ボックスの [詳細設定] タブにある [フォームのスクリプト言語] ボックスの一覧から既定のスクリプト言語を選択し、[OK] をクリックします。

    メモ  この例では、JScript を使用します。

  6. [デザイン タスク] 作業ウィンドウで、[データ ソース] をクリックします。

  7. [データ ソース] 作業ウィンドウの [使用するデータ ソース] で [マイフィールド] をクリックします。この操作により、作業ウィンドウの下部にある [追加] ボタンが使用可能になります。

  8. [追加] をクリックすると、[フィールドまたはグループの追加] ダイアログ ボックスが開きます。

  9. [名前] ボックスに「SimpleMessage」と入力し、[OK] をクリックします。データ ソースの一覧に [SimpleMessage] が表示されます。

  10. [SimpleMessage] をクリックしてフォームにドラッグし、"Simple Message:" というラベルが付いたテキスト ボックスを作成します。

  11. [データ ソース] 作業ウィンドウの [コントロール] をクリックします。

  12. [コントロール] 作業ウィンドウの [ボタン] コントロールをクリックしてフォーム上にドラッグします。

  13. フォーム上のボタン コントロールを右クリックし、[ボタンのプロパティ] をクリックして [ボタンのプロパティ] ダイアログ ボックスを開きます。

  14. [全般] タブの [Microsoft Script Editor] をクリックして MSE を開き、このボタンに対して OnClick イベント ハンドラを作成します。

  15. OnClick イベント ハンドラで、次のコードを入力します。

    var strMessage;
    strMessage = eventObj.Source.selectSingleNode("//my:SimpleMessage").text
    XDocument.UI.Alert(strMessage);
    
    

    メモ  このコード サンプルでは、イベント オブジェクトの Source プロパティを使用します。このプロパティは、パラメータとして OnClick イベント ハンドラに渡されます。Source プロパティは、フォームで現在使用されている XML DOM ノードへの参照を返します。このサンプル コードの場合、Simple Message フィールドに入力されたデータが含まれるのは XML DOM ノードです。XML DOM ノードに含まれているデータにアクセスする場合、XML DOM の selectSingleNode メソッドを使用することに注意してください。また、テキスト メッセージを含む簡単なダイアログ ボックスを表示するために、UI オブジェクトの Alert メソッドも使用します。

  16. MSE の [ファイル] メニューの [保存] をクリックしてから、MSE を終了します。

  17. InfoPath の [標準] ツールバーの [フォームのプレビュー] をクリックします。

  18. 適当なテキストを Simple Message フィールドに入力し、ボタンをクリックします。入力したばかりのテキストを含む簡単なダイアログ ボックスが表示されます。

  19. [標準] ツールバーの [プレビューを閉じる] をクリックし、InfoPath のデザイン モードに戻ります。

このフォームでは、InfoPath で行うことのできる一般的な開発作業を実行しました。これらの作業を次の表にまとめました。

作業 説明
フォームのデザイン [フォームの入力] 作業ウィンドウと [フォームのデザイン] 作業ウィンドウを使用して空白のフォームをデザインし、InfoPath デザイン モードで開きました。
既定のスクリプト言語の設定 [フォームのオプション] ダイアログ ボックスを使用して、フォームの既定のスクリプト言語を設定しました。
データ ソースの作成 [データ ソース] 作業ウィンドウで、フォームの簡単なデータ ソースを作成しました。画面に表示されない部分で、InfoPath によって XML スキーマ (.xsd) ファイルが作成されました。
バインドされたコントロールのフォームへの追加 [データ ソース] 作業ウィンドウを使用して、コントロールをフォームにドラッグし、バインドされたフィールドを作成しました。
バインドされないコントロールのフォームへの追加 [コントロール] 作業ウィンドウを使用して、ボタン コントロールをフォームにドラッグし、バインドされないコントロールを作成しました。
フォームのビューの作成 既定では、すべてのフォームに既定のビューが 1 つ実装されます。コントロールをフォームに追加したときに、InfoPath によってビューの XSL 変換 (.xsl) が作成されました。
イベント ハンドラの作成 [ボタンのプロパティ] ダイアログ ボックスを使用して、ボタン コントロールのイベント ハンドラを作成し、MSE を開きました。
スクリプト コードの記述 ボタン コントロールの OnClick イベント ハンドラに、InfoPath オブジェクト モデルと情報を交換するためのスクリプト コードを記述しました。
フォームのプレビューとテスト ツールバーの [フォームのプレビュー] をクリックし、フォームのプレビューとテストを行いました。

まとめ

InfoPath でも、他の多くの Microsoft Office アプリケーションと同じように、作成したフォームをカスタマイズできる機能的な開発環境が用意されています。Microsoft Script Editor、InfoPath オブジェクト モデル、InfoPath .xsf ファイル、スクリプト言語などの開発コンポーネントを使用することで、特定のビジネス要件を満たすようにフォームをカスタマイズし基本機能を拡張することが可能になります。