외부 자동화 시나리오 및 예제
Microsoft Office InfoPath 주 Interop 어셈블리(Microsoft.Office.Interop.InfoPath.dll) 및 InfoPath XML Interop 어셈블리(Microsoft.Office.Interop.InfoPath.Xml.dll)에서 노출되는 멤버는 Microsoft Office InfoPath 2007 자동화를 위한 관리되는 코드의 작성을 지원합니다.
Microsoft Office InfoPath 주 Interop 및 InfoPath XML Interop 어셈블리에 대한 참조 작성
InfoPath 자동화를 위해 관리되는 코드를 작성하려면 Microsoft Office InfoPath 주 Interop 및 InfoPath XML Interop 어셈블리에 대한 참조를 만들어야 합니다. Microsoft Office InfoPath 주 Interop 어셈블리에서는 Microsoft.Office.Interop.InfoPath 네임스페이스의 멤버를 사용하여 IPEDITOR.DLL에서 노출하는 COM 개체 모델과의 상호 운용성을 지원합니다. InfoPath XML Interop 어셈블리는 Microsoft.Office.Interop.InfoPath.Xml 네임스페이스의 멤버를 사용하여 Microsoft Office용 Microsoft XML Core Services(MSXML) 5.0에서 노출하는 COM 개체 모델과의 상호 운용성을 지원합니다.
중요: |
---|
InfoPath를 자동화하는 관리되는 코드 응용 프로그램의 사용자는 Office InfoPath 2007, Microsoft Office InfoPath 주 Interop 어셈블리 및 InfoPath XML Interop 어셈블리를 컴퓨터에 설치해야 합니다. InfoPath를 표준 설치할 경우 Office InfoPath 2007 설치 프로그램의 .NET 프로그래밍 지원 옵션이 내 컴퓨터에서 실행으로 설정됩니다. 그러므로 .NET Framework 1.1 재배포 가능 패키지 또는 .NET Framework 1.1 SDK(소프트웨어 개발 키트)가 설치되어 있으면 이러한 Interop 어셈블리도 기본으로 설치됩니다. 사용자의 컴퓨터에서 이러한 Interop 어셈블리를 사용할 수 없으면 .NET Framework 1.1이 설치되었는지 확인한 다음 제어판에서 프로그램 추가/제거를 실행하고 Office InfoPath 2007 의 .NET 프로그래밍 지원 옵션을 내 컴퓨터에서 실행으로 설정합니다. |
다음 절차에서는 Visual Studio 프로젝트에서 Microsoft Office InfoPath 주 Interop 및 InfoPath XML Interop 어셈블리에 대한 참조를 설정하는 방법에 대해 설명합니다.
Microsoft.Office.Interop.InfoPath 주 Interop 어셈블리에 대한 참조를 설정하려면 참조 추가 대화 상자의 COM 탭에서 Microsoft InfoPath 2.0 형식 라이브러리에 대한 참조를 설정합니다. COM 탭에서 참조를 설정해도 InfoPath 설치 프로그램이 GAC(전역 어셈블리 캐시)에 설치한 Microsoft.Office.Interop.InfoPath.dll 주 Interop 어셈블리에 대한 참조가 만들어집니다.
Microsoft.Office.Interop.InfoPath 주 Interop 어셈블리에 대한 참조 설정
Visual Studio 관리되는 코드 프로젝트를 엽니다.
솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.
COM 탭에서 Microsoft InfoPath 2.0 형식 라이브러리를 두 번 클릭한 다음 확인을 클릭합니다.
Microsoft.Office.Interop.InfoPath.Xml Interop 어셈블리에 대한 참조를 설정하려면 <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 Interop 어셈블리에 대한 참조 설정
콘솔 응용 프로그램 또는 Windows 응용 프로그램과 같은 Visual Studio 관리되는 코드 프로젝트를 열거나 만듭니다.
솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.
.NET 탭에서 찾아보기를 클릭하고 <drive>:\Program Files\Microsoft Office\OFFICE12 폴더로 이동한 다음 Microsoft.Office.Interop.InfoPath.Xml.dll을 클릭합니다.
확인을 클릭합니다.
필드 값 변경 자동화
InfoPath 판매 보고서 양식 서식 파일 사용자의 고객 중 하나가 최근에 "Company A"에서 "Company B"로 이름을 바꾸었다고 가정합니다. 개발자는 이 양식에서 저장한 판매 보고서 양식에 변경된 이름이 반영되도록 자동으로 업데이트하는 코드를 작성해 달라고 요청받습니다. 다음 시나리오에서는 customerName이라는 필드에 바인딩된 텍스트 상자가 양식에 있다고 가정합니다.
예제 양식 서식 파일 및 양식 만들기
InfoPath를 열고 새 양식 서식 파일을 만듭니다.
양식에 텍스트 상자 컨트롤을 추가하고 customerName 컨트롤에 바인딩된 필드 이름을 지정합니다.
양식 서식 파일을 C:\Test라는 폴더에 게시하고 Template1이라는 기본 이름을 사용합니다.
양식 서식 파일을 열고 "Company A"라는 이름을 customerName 필드에 바인딩된 텍스트 상자에 추가한 다음 양식을 "Form1"로 저장합니다.
관리되는 코드 콘솔 응용 프로그램을 만들어 이름을 'Company A'에서 'Company B'로 변경합니다.
Visual Studio를 열고 UpdateCustomer라는 새 Visual C# 또는 Visual Basic 콘솔 응용 프로그램을 만듭니다.
위에서 설명한 대로 Microsoft Office InfoPath 주 Interop 및 InfoPath XML Interop 어셈블리에 대한 참조를 만듭니다.
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로 변경하는 작업이 반복 실행됩니다. 작업이 완료되면 양식의 새 복사본이 C:\Test 폴더에 Form2.xml로 저장됩니다.
참고: SelectionNamespaces 속성을 설정하기 위해 양식 서식 파일의 xmlns:my 네임스페이스 특성 값을 확인하려면 InfoPath에서 양식 서식 파일을 열고 데이터 원본 작업창을 연 다음 customerName 필드를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다. 자세히 탭에 네임스페이스의 값이 표시됩니다. 텍스트 편집기에서 Form1.xml 파일을 열어 이 값을 확인할 수도 있습니다.
양식 열기 및 필드 값 채우기 자동화
다음 예제에서는 새 양식을 열고 양식에 이름, 성, 주소 필드를 채우는 작업을 자동화합니다. 이 시나리오에서는 FirstName, LastName 및 Address 필드에 바인딩된 3개의 텍스트 상자가 양식에 있다고 가정합니다.
예제 양식 서식 파일 및 양식 만들기
InfoPath를 열고 새 양식을 만듭니다.
양식에 텍스트 상자 컨트롤을 세 개 추가하고 컨트롤에 바인딩된 필드의 이름을 각각 FirstName, LastName, Address로 지정합니다. 그 밖에 원하는 필드를 추가합니다.
양식 서식 파일을 C:\Temp라는 폴더에 게시하고 Template1이라는 기본 이름을 사용합니다.
양식 서식 파일을 열고 새 양식을 C:\Temp에 "Form1"로 저장합니다.
관리되는 코드 콘솔 응용 프로그램을 만들어 양식 열기 및 필드 채우기
Visual Studio를 열고 OpenForm이라는 새 Visual C# 또는 Visual Basic 콘솔 응용 프로그램을 만듭니다.
위에서 설명한 대로 Microsoft Office InfoPath 주 Interop 및 InfoPath XML Interop 어셈블리에 대한 참조를 만듭니다.
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 주 Interop 어셈블리
InfoPath XML Interop 어셈블리