次の方法で共有


InfoPath 2003 互換オブジェクト モデル

Microsoft Office InfoPath 2007 は Component Object Model (COM) アプリケーションとして作成されており、外部オートメーションとフォーム テンプレート スクリプトの両方のプログラミング インターフェイスを COM インターフェイスとして公開します。マネージ コード言語 (Visual C# および Visual Basic) を使用する InfoPath ソリューションの作成をサポートするために、InfoPath セットアップ プログラムによって 3 つの相互運用アセンブリがインストールされます。相互運用アセンブリとは、マネージ コードとアンマネージ コードの仲介役として機能する .NET アセンブリで、COM オブジェクトのメンバを、対応する .NET マネージ メンバにマップします。

InfoPath によってインストールされる 3 つの相互運用アセンブリのファイルを以下に示します。

  • Microsoft.Office.Interop.InfoPath.dll

  • Microsoft.Office.Interop.InfoPath.SemiTrust.dll

  • Microsoft.Office.Interop.InfoPath.Xml.dll

ここでは、Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用アセンブリによって公開されるオブジェクト モデルについて説明します。このアセンブリは、InfoPath フォーム テンプレート (.xsn) 内からマネージ コード ビジネス ロジックを書いたり実行したりするためだけに使用されます。

外部アプリケーションからマネージ コードを使用して InfoPath アプリケーションを自動化するためだけに使用される Microsoft.Office.Interop.InfoPath アセンブリと Microsoft.Office.Interop.InfoPath.Xml アセンブリの詳細については、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System と一緒にインストールされるドキュメントの「他のアプリケーションから InfoPath を自動化する」を参照してください。

インストールに関する重要な情報

既定では、InfoPath セットアップ プログラムのインストール オプションで [標準] を選択すると、Microsoft.Office.Interop.InfoPath.SemiTrust アセンブリと Microsoft.Office.Interop.InfoPath.Xml アセンブリのコピーが C:\Program Files\Microsoft Office\Office12 フォルダにインストールされます。また、Microsoft.Office.Interop.InfoPath アセンブリと Microsoft.Office.Interop.InfoPath.Xml アセンブリがグローバル アセンブリ キャッシュ (GAC) にインストールされます。グローバル アセンブリ キャッシュ (GAC) の内容は、C:\Windows\Assembly フォルダから見ることができます。

これらのアセンブリがインストールされていない場合は、Microsoft Office InfoPath 2007 が正しくインストールされていることを確認する必要があります。セットアップを実行する前に .NET Framework 1.1 再配布可能ファイルまたは .NET Framework 1.1 Software Development Kit (SDK) がインストールされていれば、[標準] を選択して InfoPath をインストールすると、InfoPath セットアップ プログラムの [.NET プログラミング サポート] オプションが [自分のコンピュータから実行] に設定されます。コンピュータでこれらの相互運用アセンブリを使用できない場合は、.NET Framework 1.1 がインストールされていることを確認する必要があります。その後、[コントロール パネル] の [プログラムの追加と削除] を実行して、[.NET プログラミング サポート] オプションを [自分のコンピュータから実行] に設定します。

.NET Framework 1.1 再配布可能ファイルのダウンロードについては、「.NET Framework 1.1 再配布可能ファイル」を参照してください。

Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間

Microsoft Office InfoPath 2003 Service Pack 1 および Microsoft Office InfoPath 2003 Toolkit for Visual Studio® .NET がリリースされるまでは、InfoPath フォーム テンプレートのすべてのプログラム ロジックは、InfoPath に統合されている Microsoft Script Editor (MSE) の開発環境で書かれた Microsoft JScript または Microsoft VBScript を使用して作成されていました。MSE で書かれたスクリプトは実行時に解釈され、IPEDITOR.dll ダイナミック リンク ライブラリによって公開される COM オブジェクト モデルにアクセスします。

プログラム ロジックに Visual C# や Visual Basic などのマネージ コード言語を使用するフォーム テンプレートの作成をサポートするために、共通言語ランタイム (CLR) をホストできるようにするための機能が InfoPath に追加され、InfoPath によって公開される COM オブジェクト モデルとマネージ コードとの相互運用を安全な形で実現するための Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用アセンブリが作成されました。InfoPath マネージ コード フォーム テンプレートに適用されるセキュリティ モデルについては、「マネージ コード フォーム テンプレートのセキュリティ モデルについて」を参照してください。

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 の [オブジェクト ブラウザ] で Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間を表示したときに公開されるオブジェクト モデルは、スクリプトの場合より複雑に見えます。これは、InfoPath 2003 互換オブジェクト モデルをサポートするために使用される .NET Framework の相互運用機能では、COM サーバーのすべてのパブリック インターフェイスに加えて、.NET Framework 自体が必要とする追加のコンストラクトも COM サーバーで公開される必要があるためです。

COM オブジェクトが InfoPath 2003 互換オブジェクト モデルに公開されるしくみ

JScript、VBScript、Visual Basic などの高水準言語 (.NET バージョンの Visual Basic や Visual C# は含まない) を使用して COM サーバーをネイティブで操作する場合、公開されるオブジェクト モデルは、基になる COM クラスや COM インターフェイスより単純になります。たとえば、これらの言語を使用した場合、InfoPath の UI オブジェクトでは 7 つのメソッドのセット (ユーザーにメッセージ ボックスを表示するための Alert メソッドなど) が公開されます。

ただし、UI オブジェクトをサポートする基になる COM コンストラクトは、実際には 3 つのエンティティで構成されています。UIUI2 という 2 つのインターフェイスと、この 2 つのインターフェイスのメンバを実装する COM コクラスです。UI インターフェイスに 2 つのバージョンがあるのは、COM フレームワークでは、インターフェイスの実装を呼び出すプログラムやコンポーネントの下位互換性を維持するために、インターフェイスの定義を変更せずにおく必要があるためです。

この例では、InfoPath の最初のリリースのために定義された UI インターフェイスによって、Alert メソッドなどの 4 つのメソッドが提供されます。UI2 インターフェイスは、InfoPath Service Pack 1 リリースのために定義されたもので、UI インターフェイスの 2 番目のバージョンと見なすことができます。UI2 インターフェイスでは、元の UI インターフェイスの 4 つのメソッドが継承されているほか、3 つの新しいメソッド (Confirm メソッドなど) が追加されています。スクリプトでもマネージ コードでも、XDocument.UI.Confirm を使用して Confirm メソッドを呼び出すコード行を書くことができますが、基になるコードで実際に呼び出されるのは、COM コクラスに実装されている UI2 インターフェイスの Confirm メソッドです。

スクリプト環境に公開されるオブジェクト モデルではこれらの詳細が隠されていますが、マネージ コードから COM サーバーを操作する必要がある相互運用アセンブリでは、コクラスと両方のインターフェイスが公開されます。MSE スクリプト環境で使用される単一の UI オブジェクトに対して、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間では次の 3 つのアイテムが公開されます。

  • UI インターフェイス

  • UI2 インターフェイス

  • UIObject コクラス インターフェイス

これら 3 つのインターフェイスのすべてが Visual Studio の [オブジェクト ブラウザ] で公開され、この名前空間のクラス ライブラリ ドキュメントにも含まれています。ただし、実際に使用するのは、UI オブジェクトを実装する UIObject コクラス インターフェイスと、UIObject コクラス インターフェイスによって実装されるインターフェイスの最新バージョンである UI2 インターフェイスのメンバだけです。UIObject コクラス インターフェイスにその親の XDocument オブジェクトからアクセスするには、スクリプトの場合と同様に、UI アクセサ プロパティを使用します。いくつかの重要な例外を除いては、InfoPath の最初のリリースから含まれていて InfoPath Service Pack 1 のリリース時に更新されたすべてのオブジェクトに、このパターンが当てはまります。

Certificate オブジェクトなど、InfoPath Service Pack 1 で追加された新しいオブジェクトでは、基本的なパターンは同じですが、状況がいくぶん単純になります。この場合、関係のあるアイテムは 2 つだけです。1 つは、CertificateObject コクラス インターフェイス、もう 1 つは、CertificateObject コクラス インターフェイスによって実装される最新かつ唯一のインターフェイスである Certificate インターフェイスのメンバです。このオブジェクトに親からアクセスするには、スクリプトから InfoPath COM オブジェクトを使用する場合と同様に、Certificate アクセサ プロパティを使用します。

コレクションのインターフェイスにも同じパターンが当てはまります。ただし、コレクションのコクラス インターフェイスの名前には、"Object" ではなく "Collection" が付きます。たとえば、COM DataAdapters コレクションのコクラス インターフェイスの名前は DataAdaptersCollection で、このコクラス インターフェイスが実装するインターフェイスは DataAdapters インターフェイスです。コレクションへのアクセスに XDocument 親オブジェクトの DataAdapters アクセサ プロパティを使用する点も同様です。

この命名パターンには 3 つの例外があります。COM Application オブジェクトと COM XDocument オブジェクトのコクラス インターフェイスの名前には、"Object" が付きません。これらの名前は、対応する COM オブジェクトと同じ Application および XDocument になります。また、Application コクラス インターフェイスと XDocument コクラス インターフェイスによって実装されるインターフェイスの名前は、先頭にアンダースコア文字 (_) が付いて、_Application2 および _XDocument2 になります。3 つ目の例外は、COM DataObject オブジェクトです。このオブジェクトのコクラス インターフェイスの名前は、DataSourceObject です。ただし、このコクラス インターフェイスが実装するインターフェイスは、他の InfoPath COM オブジェクトと同様に、DataObject になります。

Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office オブジェクトが InfoPath 2003 互換オブジェクト モデルに公開されるしくみ

COM サーバーでもある Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office によって提供されるオブジェクト モデルのオブジェクトとメンバのサブセットが、Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用アセンブリによって公開されるインターフェイスでラップされます。これが必要になるのは、InfoPath COM オブジェクト モデルの一部のメンバが MSXML 5.0 に依存しており、それらのメンバに安全な形でアクセスできるようにする必要があるからです。MSXML 5.0 オブジェクト モデルのオブジェクトやメンバをラップする Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のインターフェイスの名前は、MSXML 5.0 COM サーバーによって公開される名前と同じです。ほとんどの場合、これらの名前には、"IXMLDOM" というプレフィックスが付いています。これは、それらが XML Document Object Model (DOM) の操作に使用されるためです。たとえば、フォームの基になる XML ドキュメントへの参照を取得するために使用される XDocument インターフェイスの DOM プロパティは、Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用アセンブリによってラップされた IXMLDOMDocument インターフェイスを返します。IXMLDOMDocument インターフェイスのメンバを呼び出して使用する方法は、マネージ コードを使用しないフォーム テンプレートでスクリプトを使用する場合と基本的に同じです。

マネージ コード フォーム テンプレートで Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office オブジェクト モデルのメンバを使用する方法の詳細については、「InfoPath 2003 オブジェクト モデルを使用して MSXML5 および System.Xml を操作する」を参照してください。

IntelliSense を使用する

thisXDocument 変数と thisApplication 変数は、マネージ コード フォーム テンプレートで書かれるほとんどのコードで使用されます。これらの変数は、既定のクラス ファイル FormCode.cs または FormCode.vb の _Startup メソッドで初期化されます。この thisXDocument 変数と thisApplication 変数を使用して、XDocument コクラス インターフェイスと Application コクラス インターフェイスのメンバにアクセスすることができます。いずれかの変数の名前を入力し、続けてピリオドを入力すると、IntelliSense のステートメント入力候補機能により、対応するコクラス インターフェイスのメンバの一覧が表示されます。引き続きこのようにして、使用するオブジェクト モデル メンバにアクセスできます。

次の単純な例では、thisXDocument 変数を使用して Alert メソッドにアクセスし、thisApplication 変数からアクセスした Version プロパティを使用して InfoPath アプリケーションのバージョンを表示しています。

thisXDocument.UI.Alert(thisApplication.Version);
thisXDocument.UI.Alert(thisApplication.Version)

クラス ライブラリ リファレンス ドキュメントを使用する

Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のクラス ライブラリ リファレンス ドキュメントの構成は、コクラス インターフェイスと、そのコクラス インターフェイスによって実装される継承インターフェイスとの関係を反映しています。詳細については、このトピックの前方にある「COM オブジェクトが InfoPath 2003 互換オブジェクト モデルに公開されるしくみ」を参照してください。

Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のリファレンス ドキュメントの構成と命名体系は、一見わかりにくく見えますが、そのトピックの構成は、InfoPath に付属の『InfoPath 開発者リファレンス』の一部である『InfoPath オブジェクト モデル リファレンス』と基本的に同じです。Application インターフェイスと XDocument インターフェイスのトピックを例外として、その他の COM コクラス インターフェイスのすべてのトピックは、『InfoPath スクリプト リファレンス』の対応する "オブジェクト" および "コレクション" のトピックに対応しています。たとえば、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のリファレンス ドキュメントのトピック「UIObject インターフェイス」および「WindowsCollection インターフェイス」は、InfoPath オブジェクト モデル リファレンスのスクリプト リファレンスの同等の内容を持つトピック「UI オブジェクト」および「Windows コレクション」に対応しています。

ただし、トピックの冒頭のインターフェイスの説明に続くコクラス インターフェイスのメンバへのリンクでは、空のトピックが表示されます。コクラス インターフェイスによって実装されるメンバの一覧を表示するには、そのコクラスによって継承される最も新しいインターフェイスのトピックを開き、そのメンバの表を開く必要があります。継承インターフェイスへのリンクは、コクラス インターフェイスのトピックの「解説」セクションの先頭にあります。

コード エディタで F1 キーを押した場合の動作は、インターフェイスのメンバを操作している場合がほとんどであるために、F1 ヘルプを呼び出したメンバが直接表示される以外は、ほとんど同じです。ただし、メンバがバージョン付きのインターフェイスから実装される場合があるという点で、初めは混乱する可能性があります。たとえば、「thisXDocument.UI.Alert」と入力し、Alert にカーソルを置いて F1 キーを押すと、「UI2.Alert メソッド」というタイトルのトピックが表示されます。これは、Alert メソッドが UI2 インターフェイスのメンバの実装であるからです。

InfoPath オブジェクト モデルのメンバにオプションのパラメータを渡す

InfoPath 2003 互換オブジェクト モデルのメンバにオプションのパラメータが含まれていて、そのパラメータの値を指定しない場合は、代わりに Type.Missing フィールドを渡す必要があります。実際の値を省略する場合に Type.Missing フィールドを渡さないと、ビルド エラーが発生します。これは、Visual C# と Visual Basic のどちらで書かれたコードにも当てはまります。たとえば、ViewObject インターフェイスの SelectNodes メソッドには、varEndNode と varViewContext という 2 つのオプション パラメータが含まれています。これらのオプション パラメータに対して実際の値を指定しないコード行は、次のようになっている必要があります。

IXMLDOMNode group1 = 
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1");
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing);
Dim group1 As IXMLDOMNode = _
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1")
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing)

共通言語仕様の準拠

Microsoft.Office.Interop.InfoPath.SemiTrust アセンブリのすべてのインターフェイスとメンバは、内部で CLSCompliant 属性が false に設定されています。リファレンス ドキュメントは一部 System.Reflection を使用して生成されるため、各インターフェイスおよびメンバの説明に、"このインターフェイス/メソッド/プロパティは CLS に準拠していません" という記述が含まれています。しかし、実際には、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のほとんどのインターフェイスとメンバが CLS に準拠しています。

関連項目

概念

InfoPath 2003 オブジェクト モデルを使用するフォーム テンプレートの開発でよく行う作業
マネージ コード フォーム テンプレートのセキュリティ モデルについて

その他の技術情報

InfoPath 2003 オブジェクト モデルを使用してマネージ コード フォーム テンプレートを作成する
InfoPath 2003 オブジェクト モデルを理解する