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

Microsoft InfoPath は 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) 内からマネージ コード ビジネス ロジックを書いたり実行したりするためだけに使用されます。

Microsoft.Office.Interop.InfoPath アセンブリおよび Microsoft.Office.Interop.InfoPath.Xml アセンブリの詳細については、Microsoft.Office.Interop.InfoPath 名前空間および Microsoft.Office.Interop.InfoPath.Xml 名前空間のドキュメントを参照してください。

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

既定では、InfoPath セットアップ プログラムの [一般的な インストール] オプションは、Microsoft.Office.Interop.InfoPath.SemiTrust および Microsoft.Office.Interop.InfoPath.Xml アセンブリのコピーを C:\Program Files\Microsoft Office\Office14 フォルダーにインストールします。 Microsoft.Office.Interop.InfoPath アセンブリと Microsoft.Office.Interop.InfoPath.Xml アセンブリもグローバル アセンブリ キャッシュ (GAC) にインストールされ、その内容は C:\Windows\Assembly フォルダーから表示できます。

これらのアセンブリがインストールされていない場合は、Microsoft InfoPath が正しくインストールされていることを確認する必要があります。 セットアップを実行する前に.NET Framework 2.0 以降がインストールされている限り、InfoPath の一般的なインストールでは、InfoPath セットアップ プログラムの .NET プログラミング サポート オプションが [マイ コンピューターから実行] に設定されます。 これらの相互運用機能アセンブリがコンピューターで使用できない場合は、.NET Framework 2.0 以降がインストールされていることを確認し、コントロール パネルから [プログラムの追加と削除] を実行し、[.NET プログラミング サポート] オプションを [マイ コンピューターから実行] に設定する必要があります。

.NET Framework 2.0 再頒布可能パッケージのダウンロードについては、「.NET Framework 2.0 再頒布可能パッケージ」を参照してください。

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

Microsoft Office InfoPath 2003 Service Pack 1 および Microsoft Office InfoPath 2003 Toolkit for Visual Studio® .NET がリリースされるまでは、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 フォーム テンプレートの特定のタスクのマネージ コードを書くプロセスは、同じプログラミング タスクをスクリプトを書いて実行する場合とよく似ていますが、Visual Studio 2012 の [ オブジェクト ブラウザー] で Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間を表示したときに公開される InfoPath 2003 互換オブジェクト モデルは、スクリプトの場合より、はるかに複雑に見えます。 これは、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 コンストラクトは、実際には 、UI と UI2 という名前の 2 つのインターフェイスと、これら 2 つのインターフェイスのメンバーを実装する COM コクラスの 3 つのエンティティで構成されます。 COM フレームワークでは、そのインターフェイスの実装を呼び出すプログラムとコンポーネントの下位互換性を維持するために、インターフェイスの定義を固定したままにする必要があるため、 UI インターフェイスには 2 つのバージョンがあります。

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

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

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

これらの 3 つのインターフェイスはすべてオブジェクト ブラウザーで公開され、名前空間のクラス ライブラリのドキュメントに含まれていますが、UI オブジェクトを実装する UIObject コクラス インターフェイスと、UIObject コクラス インターフェイスによって実装されるインターフェイスの最新バージョンである UI2 インターフェイスのメンバーでのみ動作します。 スクリプトと同様に、親 XDocument オブジェクトから UIObject コクラス インターフェイスにアクセスするには、UI アクセサー プロパティを使用します。 いくつかの注目すべき例外を除き、これは InfoPath Service Pack 1 のリリース時に更新された InfoPath の元のリリースのすべてのオブジェクトのパターンです。

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

コレクションのコクラス インターフェイスの名前に "Object" ではなく "Collection" が追加されている場合を除き、コレクションのインターフェイスにも同じパターンが適用されます。 たとえば、COM DataAdapters コレクションのコクラス インターフェイスの名前は DataAdaptersCollection で、実装するインターフェイスは DataAdapters インターフェイスです。 同様に、XDocument 親オブジェクトの DataAdapters アクセサー プロパティを使用してコレクションにアクセスします。

この名前付けパターンには 3 つの例外があります。 COM アプリケーション および XDocument オブジェクトのコクラス インターフェイスには、名前に "Object" が追加されていません。 これらの名前は、対応する COM オブジェクト ( ApplicationXDocument) と同じです。 さらに、 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) によって提供されるオブジェクト モデルのオブジェクトとメンバーのサブセットは、Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用機能アセンブリによって公開されるインターフェイスによってラップされます。 これが必要な理由は、InfoPath COM オブジェクト モデルのメンバーの一部が MSXML に依存しており、セキュリティで保護された方法でこれらのメンバーにアクセスできる必要があるからです。 MSXML オブジェクト モデルのオブジェクトとメンバーをラップする Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間のインターフェイスの名前は、MSXML COM サーバーによって公開される名前と同じです。 ほとんどの場合、これらの名前の先頭には "IXMLDOM" が付いています。これは、XML ドキュメント オブジェクト モデル (DOM) の操作に使用されるためです。 たとえば、フォームの基になる XML ドキュメントへの参照を返すために使用される XDocument インターフェイスの DOM プロパティは、Microsoft.Office.Interop.InfoPath.SemiTrust 相互運用機能アセンブリによってラップされる IXMLDOMDocument インターフェイスを返します。 マネージ コードを使用しないフォーム テンプレートでスクリプトを使用する場合と基本的に同じ方法で 、IXMLDOMDocument インターフェイスのメンバーを呼び出して使用します。

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

IntelliSense を使用する

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

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

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 メソッドが UI2 インターフェイスのメンバーの実装であるからです。

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

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

関連項目