다음을 통해 공유


InfoPath 2003 호환 개체 모델

Microsoft InfoPath 2010은 COM(구성 요소 개체 모델) 응용 프로그램으로 작성되며 외부 자동화 및 양식 서식 파일 스크립트 모두에 대한 프로그래밍 인터페이스를 COM 인터페이스로 노출합니다. Visual C# 및 Visual Basic 관리 코드 언어를 사용하는 InfoPath 솔루션 작성을 지원하기 위해 InfoPath 설치 프로그램은 3가지 interop 어셈블리를 설치합니다. Interop 어셈블리는 COM 개체 멤버를 해당 .NET 관리 멤버에 매핑하여 관리 코드와 관리되지 않는 코드 간의 중개 역할을 하는 .NET 어셈블리입니다.

InfoPath에서 설치하는 3가지 Interop 어셈블리 파일 이름은 다음과 같습니다.

  • Microsoft.Office.Interop.InfoPath.dll

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

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

이 항목에서는 InfoPath 양식 서식 파일(.xsn) 내에서 관리 코드 비즈니스 논리를 작성하고 실행하는 용도로만 사용되는 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 어셈블리를 통해 노출되는 개체 모델에 대해 설명합니다.

Microsoft.Office.Interop.InfoPath 및 Microsoft.Office.Interop.InfoPath.Xml 어셈블리에 대한 자세한 내용은 Microsoft.Office.Interop.InfoPathMicrosoft.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 2010이 제대로 설치되었는지 확인해야 합니다. 설치 프로그램을 실행하기 전에 .NET Framework 2.0 이상이 설치되어 있으면 InfoPath의 표준 설치에 대해 InfoPath 설치 프로그램의 .NET 프로그래밍 지원 옵션이 내 컴퓨터에서 실행으로 설정됩니다. 컴퓨터에서 이러한 Interop 어셈블리를 사용할 수 없으면 .NET Framework 2.0 이상이 설치되었는지 확인한 후 제어판에서 프로그램 추가/제거를 실행하고 .NET 프로그래밍 지원 옵션을 내 컴퓨터에서 실행으로 설정합니다.

.NET Framework 2.0 재배포 가능 패키지 다운로드에 대한 자세한 내용은 .NET Framework 2.0 재배포 가능 패키지를 참조하십시오.

Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스

Microsoft Office InfoPath 2003 서비스 팩 1과 Microsoft Office InfoPath 2003 Toolkit for Visual Studio® .NET의 릴리스 이전에 InfoPath 양식 서식 파일의 모든 프로그래밍 논리는 MSE(Microsoft Script Editor) 개발 환경에서 작성된 Microsoft JScript 또는 Microsoft VBScript를 사용하여 만들어졌습니다. MSE에서 작성된 스크립트는 런타임으로 해석되고 IPEDITOR.dll 동적 링크 라이브러리에 의해 노출된 COM 개체 모델에 액세스합니다.

프로그래밍 논리로 Visual C# 및 Visual Basic 같은 관리 코드 언어를 사용하는 양식 서식 파일 작성을 지원하기 위해 CLR(공용 언어 런타임)을 호스팅할 수 있도록 InfoPath에 기능이 추가되었으며 관리 코드가 안전한 방법으로 InfoPath에 의해 노출되는 COM 개체 모델과 상호 운용될 수 있도록 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 어셈블리가 만들어졌습니다. InfoPath 관리 코드 양식 서식 파일에 적용되는 보안 모델에 대한 자세한 내용은 관리 코드 양식 서식 파일의 보안 모델을 참조하십시오.

InfoPath 양식 서식 파일에서 지정된 작업을 위한 관리 코드를 작성하는 과정은 스크립트를 작성하여 동일한 프로그래밍 작업을 수행하는 것과 매우 유사하지만 Microsoft Visual Studio Tools for Applications의 개체 브라우저에서 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스를 볼 때 노출되는 InfoPath 2003 호환 개체 모델이 훨씬 더 복잡해 보입니다. InfoPath 2003 호환 개체 모델을 지원하는 데 사용되는 .NET Framework 상호 운용성 기술을 위해 COM 서버에서 .NET Framework 자체에 필요한 추가 구문뿐 아니라 공용 인터페이스를 모두 노출해야 하기 때문입니다.

InfoPath 2003 호환 개체 모델에 COM 개체가 노출되는 방법

JScript, VBScript 또는 Visual Basic(Visual Basic 및 Visual C#의 .NET 버전 아님) 같은 고급 언어에서 COM 서버를 있는 그대로 사용하는 경우 노출되는 개체 모델은 원본으로 사용하는 COM 클래스와 인터페이스보다 간단합니다. 예를 들어 이러한 언어를 사용할 때 InfoPath UI 개체는 사용자에게 메시지 상자를 표시하는 데 사용되는 Alert 메서드 같은 일곱 개의 메서드 집합을 노출합니다.

그러나 UI 개체를 지원하는 원본 COM 생성자는 실제로 UI와 UI2라는 두 개의 인터페이스와 이 두 인터페이스의 멤버를 구현하는 COM coclass, 세 요소로 구성되어 있습니다. COM framework에서는 해당 인터페이스의 구현을 호출하는 프로그램 및 구성 요소의 이전 버전과의 호환성을 유지하기 위해 인터페이스의 정의를 수정한 상태로 두어야 하므로 UI 인터페이스에는 두 가지 버전이 있습니다.

이 경우 InfoPath의 첫 릴리스를 위해 정의된 UI 인터페이스는 Alert 메서드를 비롯한 4개의 메서드를 제공합니다. UI2 인터페이스는 UI 인터페이스의 두 번째 버전으로 간주할 수 있으며 InfoPath 서비스 팩 1 릴리스용으로 정의되었습니다. UI2 인터페이스는 원래 UI 인터페이스의 메서드 4개를 상속하고 Confirm 메서드와 같은 새로운 메서드 3개를 추가했습니다. XDocument.UI.Confirm을 사용하여 Confirm 메서드를 호출하는 관리 코드나 스크립트에서 코드를 작성할 수 있지만 원본 코드는 실제로 COM coclass의 그러한 메서드 구현에서 UI2 인터페이스의 Confirm 메서드를 호출합니다.

개체 모델이 스크립트에 노출될 때는 이러한 세부 정보가 숨겨지지만 관리 코드에서 COM 서버와 작업하기 위해 필요한 Interop 어셈블리는 coclass 및 두 인터페이스를 공개적으로 노출합니다. MSE 스크립트 환경에서 사용되는 단일 UI 개체의 경우 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스에서 다음 세 항목을 노출합니다.

  • UI 인터페이스

  • UI2 인터페이스

  • UIObject coclass 인터페이스

이러한 3가지 인터페이스는 모두 개체 브라우저에 노출되고 네임스페이스에 대한 클래스 라이브러리 설명서에 포함되지만 UI 개체를 구현하는 UIObject coclass 인터페이스와 UIObject coclass 인터페이스에서 구현되는 인터페이스의 최신 버전인 UI2 인터페이스의 멤버만 사용됩니다. 스크립트처럼 부모 XDocument 개체에서 UIObject coclass 인터페이스에 액세스하려면 UI 접근자 속성을 사용합니다. 몇 가지 예외를 제외하고 이는 InfoPath 서비스 팩 1이 릴리스될 때 업데이트된 InfoPath 원래 릴리스의 모든 개체에 해당되는 패턴입니다.

기본적으로 패턴은 같지만 Certificate 개체처럼 InfoPath 서비스 팩 1에 추가된 완전히 새로운 개체의 경우 상황이 좀 더 간단합니다. 이 경우 CertificateObject coclass 인터페이스에 의해 구현되는 유일한 인터페이스이며 최신 인터페이스인 Certificate 인터페이스의 멤버와 CertificateObject coclass 인터페이스만 고려하면 됩니다. 스크립트에서 InfoPath COM 개체를 사용할 때처럼 Certificate 접근자 속성을 사용하여 부모에서 개체에 액세스합니다.

컬렉션에 대한 coclass 인터페이스의 이름에 "Object" 대신 "Collection"이 붙는다는 점을 제외하면 이와 동일한 패턴이 컬렉션의 인터페이스에도 적용됩니다. 예를 들어 COM DataAdapters 컬렉션에 대한 coclass 인터페이스는 DataAdaptersCollection이라는 이름이 지정되며 거기서 구현되는 인터페이스는 DataAdapters 인터페이스입니다. 비슷하게 XDocument 상위 개체의 DataAdapters 접근자 속성을 사용하여 컬렉션에 액세스합니다.

이 이름 패턴에 3가지 예외가 있습니다. COM Application 및 XDocument 개체의 coclass 인터페이스 이름에는 "Object"가 없습니다. 이러한 이름은 해당 COM 개체인 Application 및 XDocument 이름과 같습니다. 그리고 Application 및 XDocument coclass 인터페이스에서 구현되는 인터페이스 이름은 _Application2_XDocument2 같이 이름 앞에 밑줄 문자(_)가 추가됩니다. 세 번째 예외는 COM DataObject 개체입니다. 이 개체의 coclass 인터페이스 이름은 DataSourceObject이지만 다른 InfoPath COM 개체와 마찬가지로 이들이 구현하는 인터페이스는 DataObject 인터페이스입니다.

Microsoft Office 개체용 Microsoft XML Core Services(MSXML) 5.0이 InfoPath 2003 호환 개체 모델에 노출되는 방법

COM 서버이기도 한 Microsoft XML Core Services(MSXML)에서 제공되는 개체 모델의 개체와 멤버 중 일부는 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 어셈블리에서 노출하는 인터페이스에 의해 래핑됩니다. 이는 InfoPath COM 개체 모델의 멤버 중 일부가 MSXML을 사용하며 이러한 멤버에 안전한 방법으로 액세스할 수 있어야 하기 때문에 필요합니다. MSXML 개체 모델의 개체와 멤버를 래핑하는 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스의 인터페이스 이름은 MSXML COM 서버에서 노출하는 이름과 같습니다. 대부분의 경우 XML DOM(문서 개체 모델) 작업에 사용되기 때문에 이러한 이름 앞에는 "IXMLDOM"이 붙습니다. 예를 들어 양식의 원본으로 사용하는 XML 문서에 대한 참조를 반환하는 데 사용되는 XDocument 인터페이스의 DOM 속성은 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 어셈블리에 의해 래핑되는 IXMLDOMDocument 인터페이스를 반환합니다. 기본적으로 관리 코드를 사용하지 않는 양식 서식 파일에서 스크립트를 사용할 때와 같은 방법으로 IXMLDOMDocument 인터페이스의 멤버를 호출하고 사용합니다.

관리 코드 양식 서식 파일에서 Microsoft Office 개체 모델용 Microsoft XML Core Services(MSXML) 멤버 사용에 대한 자세한 내용은 InfoPath 2003 개체 모델을 사용하여 MSXML 및 System.Xml 작업을 참조하십시오.

IntelliSense 사용

관리 코드 양식 서식 파일에서 InfoPath 2003 호환 개체 모델에 대해 작성한 대부분의 코드에 대해 기본 FormCode.cs 또는 FormCode.vb 클래스 파일의 _Startup 메서드에서 초기화된 thisXDocument 및 thisApplication 변수를 사용합니다. thisXDocument 및 thisApplication 변수를 사용하여 XDocumentApplication coclass 인터페이스의 멤버에 액세스할 수 있습니다. 두 변수 중 하나의 이름을 입력한 후 마침표를 입력하면 IntelliSense 문이 완료될 때 해당 coclass 인터페이스의 목록 멤버가 표시됩니다. 이러한 방법으로 사용할 개체 모델 멤버에 계속 액세스할 수 있습니다.

다음은 thisXDocument 변수를 사용하여 Alert 메서드에 액세스하고 thisApplication 변수에서 액세스한 Version 속성을 사용하여 InfoPath 응용 프로그램의 버전을 표시하는 간단한 예제입니다.

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

클래스 라이브러리 참조 설명서 사용

Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스 클래스 라이브러리 참조 설명서의 구성은 coclass 인터페이스와 이러한 인터페이스가 구현하는 상속된 인터페이스 간의 관계를 반영합니다. 이 내용에 대해서는 이 항목의 앞에 나오는 "관리 코드에 COM 개체가 노출되는 방법"에서 설명합니다.

처음에는 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스 참조 설명서의 구성과 이름이 혼동되게 표시되지만 항목은 기본적으로 InfoPath에 들어 있는 InfoPath 개발자 참조의 일부인 InfoPath 개체 모델 참조와 같은 방식으로 구성되어 있습니다. Application 및 XDocument 인터페이스에 대한 항목만 제외하고 모든 COM coclass 인터페이스 항목은 InfoPath 스크립팅 참조의 해당 "개체" 및 "컬렉션" 항목에 매핑됩니다. 예를 들어 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스 참조 설명서의 "UIObject 인터페이스" 및 "WindowsCollection 인터페이스" 항목은 InfoPath 개체 모델 참조 스크립팅 참조의 "UI 개체" 및 "Windows 컬렉션"의 유사한 내용에 해당됩니다.

그러나 항목의 시작 부분에 있는 인터페이스의 설명 다음에 나오는 coclass 인터페이스 멤버에 대한 링크는 빈 항목을 표시합니다. coclass 인터페이스가 구현하는 멤버 목록을 표시하려면 coclass로부터 상속된 최근 인터페이스에 대한 항목을 열고 해당 멤버의 표를 열어야 합니다. 상속된 인터페이스에 대한 링크는 coclass 인터페이스 도움말 항목의 주의 사항 시작 부분에 제공됩니다.

코드 편집기에서 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가 있습니다. 이러한 선택적 매개 변수에 대해 실제 값을 지정하지 않는 코드 줄은 다음 예제처럼 나타납니다.

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)

CLS(공용 언어 사양) 규격

내부적으로 Microsoft.Office.Interop.InfoPath.SemiTrust 어셈블리의 모든 인터페이스 및 멤버에 대한 CLSCompliant 특성은 false로 설정됩니다. 참조 설명서는 부분적으로 System.Reflection을 사용하여 생성되므로 각 인터페이스 및 멤버 설명에 "이 인터페이스/메서드/속성은 CLS 규격이 아닙니다."라는 구절이 추가되어 있습니다. 그러나 실제로 Microsoft.Office.Interop.InfoPath.SemiTrust 네임스페이스의 인터페이스와 멤버는 대부분 CLS 규격입니다.

참고 항목

개념

InfoPath 2003 개체 모델을 사용한 일반적인 양식 서식 파일 개발 작업

관리 코드 양식 서식 파일의 보안 모델

기타 리소스

InfoPath 2003 개체 모델을 사용하여 관리 코드 양식 서식 파일 만들기

InfoPath 2003 개체 모델 이해