Microsoft Office InfoPath プライマリ相互運用機能アセンブリ (Microsoft.Office.Interop.InfoPath.dll) および InfoPath XML 相互運用機能アセンブリ (Microsoft.Office.Interop.InfoPath.Xml.dll) によって公開されるメンバは、Microsoft Office InfoPath 2007 を自動化するためのマネージ コードの作成をサポートします。
Microsoft Office InfoPath プライマリ相互運用機能アセンブリと InfoPath XML 相互運用機能アセンブリへの参照を確立する
InfoPath を自動化するためのマネージ コードを作成するには、Microsoft Office InfoPath プライマリ相互運用機能アセンブリと InfoPath XML 相互運用機能アセンブリへの参照を確立する必要があります。Microsoft Office InfoPath プライマリ相互運用機能アセンブリは、Microsoft.Office.Interop.InfoPath 名前空間のメンバを使用して IPEDITOR.DLL が公開する COM オブジェクト モデルとの相互運用機能をサポートします。InfoPath XML 相互運用機能アセンブリは、Microsoft.Office.Interop.InfoPath.Xml 名前空間のメンバを使用して Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office が公開する COM オブジェクト モデルとの相互運用機能をサポートします。
![]() |
---|
InfoPath を自動化するマネージ コード アプリケーションのユーザーのコンピュータには、Office InfoPath 2007、Microsoft Office InfoPath プライマリ相互運用機能アセンブリ、および InfoPath XML 相互運用機能アセンブリがインストールされている必要があります。Office InfoPath 2007 セットアップ プログラムの [.NET プログラミング サポート] オプションは、InfoPath の標準インストールでは [自分のコンピュータから実行] に設定されます。このため、.NET Framework 1.1 再配布可能ファイルまたは .NET Framework 1.1 Software Development Kit (SDK) がインストールされていれば、これらの相互運用機能アセンブリは既定でインストールされます。ユーザーのコンピュータでこれらの相互運用機能アセンブリを使用できない場合は、.NET Framework 1.1 がインストールされていることを確認する必要があります。その後、[コントロール パネル] の [プログラムの追加と削除] を実行して、Office InfoPath 2007 の [.NET プログラミング サポート] オプションを [自分のコンピュータから実行] に設定します。 |
次の手順では、Visual Studio のプロジェクトで Microsoft Office InfoPath プライマリ相互運用機能アセンブリと InfoPath XML 相互運用機能アセンブリへの参照を設定する方法を説明します。
Microsoft.Office.Interop.InfoPath プライマリ相互運用機能アセンブリへの参照を設定するには、[参照の追加] ダイアログ ボックスの [COM] タブで、[Microsoft InfoPath 2.0 タイプ ライブラリ] への参照を設定します。[COM] タブで参照を設定しますが、InfoPath セットアップ プログラムによってグローバル アセンブリ キャッシュ (GAC) にインストールされた Microsoft.Office.Interop.InfoPath.dll プライマリ相互運用機能アセンブリへの参照が確立されます。
Microsoft.Office.Interop.InfoPath プライマリ相互運用機能アセンブリへの参照を設定する
Visual Studio マネージ コード プロジェクトを開きます。
ソリューション エクスプローラで [参照設定] を右クリックし、[参照の追加] をクリックします。
[COM] タブで [Microsoft InfoPath 2.0 タイプ ライブラリ] をダブルクリックし、[OK] をクリックします。
Microsoft.Office.Interop.InfoPath.Xml 相互運用機能アセンブリへの参照を設定するには、<drive>:\Program Files\Microsoft Office\OFFICE12 フォルダに既定でインストールされる Microsoft.Office.Interop.InfoPath.Xml.dll ファイルを参照します。この手順ではローカル ファイル システム内のアセンブリのコピーを指定しますが、InfoPath セットアップ プログラムによってグローバル アセンブリ キャッシュ (GAC) にインストールされる Microsoft.Office.Interop.InfoPath.Xml.dll アセンブリへの参照が確立されます。
Microsoft.Office.Interop.InfoPath.Xml 相互運用機能アセンブリへの参照を設定する
コンソール アプリケーションまたは Windows アプリケーションなどの Visual Studio マネージ コード プロジェクトを開くか作成します。
ソリューション エクスプローラで [参照設定] を右クリックし、[参照の追加] をクリックします。
[.NET] タブで [参照] をクリックし、<drive>:\Program Files\Microsoft Office\OFFICE12 フォルダに移動して、Microsoft.Office.Interop.InfoPath.Xml.dll をクリックします。
[OK] をクリックします。
フィールドの値の変更を自動化する
InfoPath 販売報告書フォーム テンプレートを使用しているユーザーの顧客の 1 社が最近、会社名を "Company A" から "Company B" に変更したとします。開発者は、この販売報告書フォーム テンプレートから作成して保存された販売報告書フォームを自動的に更新して社名の変更を反映するコードの作成を依頼されました。次のシナリオでは、customerName という名前のフィールドにバインドされたテキスト ボックスがフォームに含まれていることを前提としています。
サンプルのフォーム テンプレートとフォームを作成する
InfoPath を開き、空白のフォーム テンプレートを作成します。
[テキスト ボックス] コントロールをフォーム テンプレートに追加し、このコントロールにバインドされるフィールドに customerName という名前を付けます。
フォーム テンプレートを C:\Test という名前のフォルダに発行し、既定の名前 Template1 を受け入れます。
フォーム テンプレートを開き、customerName フィールドにバインドされたテキスト ボックスに Company A という名前を追加して、Form1 という名前でフォームを保存します。
社名を Company A から Company B に変更するマネージ コード コンソール アプリケーションを作成します。
Visual Studio を開き、UpdateCustomer という名前の Visual C# または Visual Basic の新しいコンソール アプリケーションを作成します。
前述の手順に従って、Microsoft Office InfoPath プライマリ相互運用機能アセンブリと InfoPath XML 相互運用機能アセンブリへの参照を確立します。
次のコードを Program.cs ファイルまたは Module1.vb ファイルに追加します。
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.InfoPath; using Microsoft.Office.Interop.InfoPath.Xml; namespace UpdateCustomer { class Program { static void Main(string[] args) { // Create an InfoPath Application object. Application myApp = new Microsoft.Office.Interop.InfoPath.Application(); // Get a reference the XDocuments collection // and open the sample form. XDocumentsCollection myXDocs = myApp.XDocuments; XDocument myXDoc = myXDocs.Open("C:\\Test\\Form1.xml", (int) XdDocumentVersionMode.xdFailOnVersionOlder); // Access the XML DOM for the underlying XML document using // the DOM property. Note that you must cast to the // IXMLDOMDocument2 type from the // Microsoft.Office.Interop.InfoPath.Xml namespace // to access the XML DOM. IXMLDOMDocument2 myXMLDoc = myXDoc.DOM as IXMLDOMDocument2; // Set the MSXML SelectionNamespaces property to the my // namespace of the form. IMPORTANT:Replace the namespace // alias with that of your sample form. myXMLDoc.setProperty("SelectionNamespaces", "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'"); // Select all instances of customerName that contain //'Company A'. IXMLDOMNodeList myNames = myXMLDoc.selectNodes( "//my:customerName[. = 'Company A']"); // Check to determine if any nodes were returned. if (myNames.length < 1) Console.WriteLine( "No elements containing 'Company A' were found."); // Loop through the list updating to 'Company B'. IXMLDOMNode myName = myNames.nextNode(); while (myName != null) { myName.text = "Company B"; myName = myNames.nextNode(); } // Save the updated form as Form2.xml and close out. myXDoc.SaveAs("C:\\Test\\Form2.xml"); myXDocs.Close(0); myApp.Quit(false); Console.WriteLine("Finished!"); } } }
Imports Microsoft.Office.Interop.InfoPath Imports Microsoft.Office.Interop.InfoPath.Xml Module Module1 Sub Main() ' Create an InfoPath Application object. Dim myApp As Application = _ New Microsoft.Office.Interop.InfoPath.Application() ' Get a reference the XDocuments collection ' and open the sample form. Dim myXDocs As XDocumentsCollection = myApp.XDocuments Dim myXDoc As XDocument = myXDocs.Open( _ "C:\\Test\\Form1.xml", _ XdDocumentVersionMode.xdFailOnVersionOlder) ' Access the XML DOM for the underlying XML document using ' the DOM property. Note that you must cast to the ' IXMLDOMDocument2 type from the ' Microsoft.Office.Interop.InfoPath.Xml namespace ' to access the XML DOM. Dim myXMLDoc As IXMLDOMDocument2 = _ DirectCast(myXDoc.DOM, IXMLDOMDocument2) ' Set the MSXML SelectionNamespaces property to the my ' namespace of the form. IMPORTANT:Replace the namespace ' alias with that of your sample form. myXMLDoc.setProperty("SelectionNamespaces", _ "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'") ' Select all instances of customerName that contain ''Company A'. Dim myNames As IXMLDOMNodeList = _ myXMLDoc.selectNodes("//my:customerName[. = 'Company A']") ' Check to determine if any nodes were returned. If (myNames.length < 1) Then Console.WriteLine( _ "No elements containing 'Company A' were found.") Else ' Loop through the list updating to 'Company B'. Dim myName As IXMLDOMNode = myNames.nextNode() While (myName IsNot Nothing) myName.text = "Company B" myName = myNames.nextNode() End While End If ' Save the updated form as Form2.xml and close out. myXDoc.SaveAs("C:\\Test\\Form2.xml") myXDocs.Close(0) myApp.Quit(False) Console.WriteLine("Finished!") End Sub End Module
[デバッグ] メニューの [デバッグ開始] をクリックしてコンソール アプリケーションをコンパイルおよび実行します。
このアプリケーションは、Form1.xml という名前で保存されたフォームを開き、値 Company A を含むすべての customerName 要素をループして、値を Company B に変更します。この操作が完了すると、フォームの新しいコピーは Form2.xml という名前で C:\Test フォルダに保存されます。
メモ :
SelectionNamespaces プロパティを設定するために、フォーム テンプレートの xmlns:my 名前空間属性の値を確認するには、InfoPath でフォーム テンプレートを開き、[データ ソース] 作業ウィンドウを開きます。次に、customerName フィールドを右クリックして、[プロパティ] をクリックします。名前空間の値が [詳細] タブに表示されます。テキスト エディタで Form1.xml ファイルを開いて、この値を確認することもできます。
フォームを開いたりフィールド値を入力する操作を自動化する
次の例では、空白のフォームを開いてフォームの名フィールド、姓フィールド、および住所フィールドに値を入力する操作を自動化します。このシナリオでは、FirstName、LastName、および Address という名前のフィールドにバインドされた 3 つのテキスト ボックスがフォームに含まれていることを前提としています。
サンプルのフォーム テンプレートとフォームを作成する
InfoPath を開き、空白のフォームを作成します。
3 つのテキスト ボックス コントロールをフォームに追加し、各コントロールにバインドされるフィールドに FirstName、LastName、および Address という名前を付けます。必要に応じてその他のフィールドを追加します。
フォーム テンプレートを C:\Temp という名前のフォルダに発行し、既定の名前 Template1 を受け入れます。
フォーム テンプレートを開き、空白のフォームを Form1 という名前で C:\Temp に保存します。
フォームを開いてフィールドに値を入力するマネージ コード コンソール アプリケーションを作成します。
Visual Studio を開き、OpenForm という名前の Visual C# または Visual Basic の新しいコンソール アプリケーションを作成します。
前述の手順に従って、Microsoft Office InfoPath プライマリ相互運用機能アセンブリと InfoPath XML 相互運用機能アセンブリへの参照を確立します。
次のコードを Program.cs ファイルまたは Module1.vb ファイルに追加します。
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.InfoPath; using Microsoft.Office.Interop.InfoPath.Xml; namespace OpenForm { class Program { static void Main(string[] args) { // Create an InfoPath Application object. Application myApp= new Microsoft.Office.Interop.InfoPath.Application(); // Create an InfoPath XDocument variable and open // the blank form. XDocument myXDoc = myApp.XDocuments.Open( "c:\\temp\\Form1.xml", (int) XdDocumentVersionMode.xdFailOnVersionOlder); // Create an IXMLDOMDocument2 variable and access // the XML DOM from the underlying XML document // using the DOM property of the XDocument object. // Note that you must cast to IXMLDOMDocument2 to do so. IXMLDOMDocument2 doc= myXDoc.DOM as IXMLDOMDocument2; // Set the MSXML SelectionNamespaces property to the my // namespace of the form. IMPORTANT:Replace the namespace // with that of your sample form. doc.setProperty("SelectionNamespaces","xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'"); // Pre-populate the fields with specified values. doc.selectSingleNode("//my:FirstName").text="My Name"; doc.selectSingleNode("//my:LastName").text="My LastName"; doc.selectSingleNode("//my:Address").text="My Address"; // Save the form, leaving InfoPath open. myXDoc.Save(); } } }
Imports Microsoft.Office.Interop.InfoPath Imports Microsoft.Office.Interop.InfoPath.Xml Module Module1 Sub Main() ' Create an InfoPath Application object. Dim myApp As Application = _ New Microsoft.Office.Interop.InfoPath.Application ' Create an InfoPath XDocument variable and open ' the blank form. Dim myXDoc As XDocument = myApp.XDocuments.Open( _ "c:\\temp\\Form1.xml", _ XdDocumentVersionMode.xdFailOnVersionOlder) ' Create an IXMLDOMDocument2 variable and access ' the XML DOM from the underlying XML document ' using the DOM property of the XDocument object. Dim doc As IXMLDOMDocument2 = myXDoc.DOM ' Set the MSXML SelectionNamespaces property to the my ' namespace of the form. IMPORTANT:Replace the namespace ' with that of your sample form. doc.setProperty("SelectionNamespaces", "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'") ' Pre-populate the fields with specified values. doc.selectSingleNode("//my:FirstName").text = "My Name" doc.selectSingleNode("//my:LastName").text = "My LastName" doc.selectSingleNode("//my:Address").text = "My Address" ' Save the form, leaving InfoPath open. myXDoc.Save() End Sub End Module
[デバッグ] メニューの [デバッグ開始] をクリックしてコンソール アプリケーションをコンパイルおよび実行します。
このアプリケーションは、Form1.xml という名前で保存されたフォームを開き、FirstName フィールド、LastName フィールド、および Address フィールドにコード内で指定された値を入力して、フォームを保存します。InfoPath は開かれたままになります。
メモ :
SelectionNamespaces プロパティを設定するために、フォーム テンプレートの xmlns:my 名前空間属性の値を確認するには、InfoPath でフォーム テンプレートを開き、[データ ソース] 作業ウィンドウを開きます。次に、FirstName フィールドを右クリックして、[プロパティ] をクリックします。名前空間の値が [詳細] タブに表示されます。テキスト エディタで Form1.xml ファイルを開いて、この値を確認することもできます。
関連項目
概念
Microsoft Office InfoPath のプライマリ相互運用機能アセンブリについて
InfoPath XML 相互運用機能アセンブリについて