연습: 기본 관리 코드 양식 서식 파일 만들기

Office 2010

Microsoft InfoPath 2010에서는 InfoPath 디자이너에서 양식 서식 파일을 연 후 사용자 인터페이스 명령 중 하나를 사용하여 코드 작성을 위한 Microsoft Visual Studio Tools for Applications 개발 환경을 여는 이벤트 처리기를 추가하면 Visual Basic 또는 C#으로 비즈니스 논리를 작성할 수 있습니다. 기본적으로 Microsoft Visual Studio Tools for Applications를 사용하여 만든 양식 서식 파일 프로젝트는 Microsoft.Office.InfoPath 네임스페이스에서 제공하는 관리 코드 개체 모델에 대해 실행됩니다.

이 연습에서는 우선 Microsoft Visual Studio Tools for Applications 개발 환경에서 C# 또는 Visual Basic을 사용하여 간단한 Hello World 응용 프로그램을 만드는 방법을 보여 줍니다. 이 연습의 끝부분에는 User 클래스의 UserName 속성을 사용하여 현재 사용자의 이름을 검색한 후 이 값을 텍스트 상자 컨트롤에 채우는 방법을 보여 주는 코드 예제가 제공됩니다.

Microsoft Visual Studio Tools for Applications 개발 환경을 사용하여 이 연습을 완료하려면 다음 조건이 충족되어야 합니다.

  • Microsoft InfoPath 2010에 Microsoft Visual Studio Tools for Applications가 설치되어 있어야 합니다.

다음 연습에서는 단추 컨트롤과 연결된 ButtonEvent 클래스의 Clicked 이벤트에 대한 이벤트 처리기를 작성하여 간단한 경고 대화 상자를 표시하도록 Microsoft Visual Studio Tools for Applications 개발 환경에서 코드를 작성하는 방법을 살펴봅니다.

새 프로젝트 만들기 및 프로그래밍 언어 지정

  1. InfoPath 디자이너를 시작한 후 공백(InfoPath 편집기) 양식 서식 파일을 두 번 클릭합니다.

  2. 사용할 프로그래밍 언어를 지정하려면 Office 단추양식 옵션을 차례로 클릭한 후 범주 목록에서 프로그래밍을 클릭하고 양식 서식 파일 코드 언어 드롭다운 목록에서 Visual Basic 또는 C#을 선택합니다.

    참고 사항참고 사항

    양식 서식 파일 코드 언어 드롭다운 목록의 다른 프로그래밍 언어 옵션은 이전 버전 InfoPath와의 호환성을 제공합니다. C#(InfoPath 2007 호환)Visual Basic(InfoPath 2007 호환) 옵션은 이 항목에 설명된 절차에 사용할 수 있습니다. 그러나 C#(InfoPath 2003 호환)Visual Basic(InfoPath 2003 호환) 옵션을 사용하려면 연습: InfoPath 2003 개체 모델을 사용하여 기본 양식 서식 파일 만들기 및 디버깅을 참조하십시오.

    이제 단추 컨트롤을 추가하고 이벤트 처리기를 만들 수 있습니다.

단추 컨트롤 및 이벤트 처리기 추가

  1. 컨트롤 그룹에서 단추 컨트롤을 클릭하여 양식에 추가합니다.

  2. 단추 컨트롤을 두 번 클릭하고 리본 메뉴의 속성 탭에서 레이블 속성에 Hello를 입력한 후 사용자 지정 코드를 클릭합니다. 메시지가 나타나면 양식의 이름을 HelloWorld로 지정한 후 저장합니다.

    이렇게 하면 단추 컨트롤의 Clicked 이벤트에 대한 이벤트 처리기에 커서가 있는 상태로 Visual Studio Tools for Applications 환경이 열립니다.

    이제 양식 코드를 단추의 이벤트 처리기에 추가할 수 있습니다.

이벤트 처리기에 "Hello World" 코드 추가 및 양식 미리 보기

  1. 기본 이벤트 처리기에서 다음을 입력합니다.

    MessageBox.Show("Hello World!");
    

    MessageBox.Show("Hello World!")
    

    양식 서식 파일의 코드는 다음과 같습니다.

    using Microsoft.Office.InfoPath;
    using System;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.XPath;
    
    namespace HelloWorld
    {
       public partial class FormCode
       {
          public void InternalStartup()
          {
             ((ButtonEvent)EventManager.ControlEvents["CTRL1_5"]).Clicked += new ClickedEventHandler(CTRL1_5_Clicked);
          }
    
          public void CTRL1_5_Clicked(object sender, ClickedEventArgs e)
          {
             MessageBox.Show("Hello World!");
          }
       }
    }
    

    Imports Microsoft.Office.InfoPath
    Imports System
    Imports System.Windows.Forms
    Imports System.Xml
    Imports System.Xml.XPath
    
    Namespace HelloWorld
       Public Class FormCode
          Private Sub InternalStartup(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Startup
             AddHandler DirectCast(EventManager.ControlEvents("CTRL1_5"), ButtonEvent).Clicked, AddressOf CTRL1_5_Clicked
          End Sub
    
          Public Sub CTRL1_5_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs)
             MessageBox.Show("Hello World!")
          End Sub
       End Class
    End Namespace
    

  2. InfoPath 디자이너 창으로 전환합니다.

  3. 탭의 미리 보기 단추를 클릭합니다.

  4. 양식의 Hello 단추를 클릭합니다.

    "Hello World!"라는 텍스트가 있는 메시지 상자가 표시됩니다.

    다음은 양식 코드에 디버깅 중단점을 추가하는 방법을 보여 주는 절차입니다.

양식 코드 디버깅

  1. Microsoft Visual Studio Tools for Applications 창으로 다시 전환합니다.

  2. 다음 코드 줄의 왼쪽에 있는 회색 막대를 클릭합니다.

    MessageBox.Show("Hello World!");
    

    MessageBox.Show("Hello World!")
    

    빨간 원이 표시되고 코드 줄이 강조 표시되어 양식 코드의 중단점에서 런타임이 일시 중지될 것임을 나타냅니다.

  3. 디버그 메뉴에서 디버깅 시작을 클릭하거나 F5 키를 누릅니다.

  4. InfoPath 미리 보기 창에서 양식의 Hello 단추를 클릭합니다.

  5. 포커스가 Microsoft Visual Studio Tools for Applications 코드 편집기로 이동하고 중단점 줄이 강조 표시됩니다.

  6. 디버그 메뉴에서 프로시저 단위 실행을 클릭하거나 Shift+F8을 눌러 코드를 단계별로 계속 실행합니다.

  7. 이벤트 처리기 코드가 실행되고 "Hello World!" 메시지가 표시됩니다.

  8. 확인을 클릭하여 Microsoft Visual Studio Tools for Applications 코드 편집기로 돌아온 후 디버그 메뉴에서 디버깅 중지를 클릭하거나 Ctrl+Alt+Break를 누릅니다.

다음 예제에서는 User 클래스의 UserName 속성을 사용하여 현재 사용자 이름을 가져온 다음 Loading 이벤트의 이벤트 처리기를 사용하여 이 값을 텍스트 상자 컨트롤에 채우는 방법을 보여 줍니다.

XPathNavigator 클래스의 인스턴스를 사용하여 컨트롤이 바인딩된 XML 노드에 현재 사용자의 이름을 쓰면 텍스트 상자 컨트롤이 채워집니다.

먼저 XmlForm 클래스의 MainDataSource 속성이 호출되어 양식의 원본으로 사용하는 XML 문서를 나타내는 DataSource 클래스의 인스턴스를 가져옵니다. 그러면 DataSource 개체가 CreateNavigator 메서드를 호출하여 XPathNavigator 개체를 만든 후 양식의 기본 데이터 원본 루트 노드에 배치합니다.

XPathNavigator 클래스의 SelectSingleNode 메서드가 호출되어 양식의 데이터 원본에서 employee 필드를 선택합니다. 마지막으로 SetValue 메서드가 호출되어 UserName 속성으로 필드의 값을 설정합니다.

관리 코드 양식 서식 파일에서 System.Xml을 사용하는 방법에 대한 자세한 내용은 방법: XPathNavigator 및 XPathNodeIterator 클래스 사용을 참조하십시오.

Loading 이벤트 처리기 추가

  1. InfoPath 디자이너에서 이전 연습을 통해 만든 HelloWorld 프로젝트를 엽니다.

  2. 보기 탭에서 필드 표시를 선택합니다.

  3. myFields 폴더를 마우스 오른쪽 단추로 클릭하고 추가를 클릭합니다.

  4. 이름employee를 입력한 후 확인을 클릭합니다.

  5. employee 필드를 보기로 끌어 옵니다.

  6. 개발자 탭에서 Loading 이벤트를 클릭합니다.

    이렇게 하면 Loading 이벤트에 대한 이벤트 처리기가 만들어지고 코드 편집기에서 포커스가 해당 이벤트 처리기로 이동합니다.

  7. 코드 편집기에서 다음을 입력합니다.

    public void FormEvents_Loading(object sender, LoadingEventArgs e)
    {
       XPathNavigator dataSource;
       dataSource = this.MainDataSource.CreateNavigator();
       dataSource.SelectSingleNode(
          "/my:myFields/my:employee", NamespaceManager).SetValue(this.User.UserName);
    }
    

    Public Sub FormEvents_Loading(ByVal sender As Object, ByVal e As LoadingEventArgs)
       Dim dataSource As XPathNavigator
       dataSource = Me.MainDataSource.CreateNavigator
       dataSource.SelectSingleNode( _
          "/my:myFields/my:employee", NamespaceManager).SetValue(Me.User.UserName)
    End Sub
    

  8. InfoPath 양식 디자인 창으로 전환한 후 탭에서 미리 보기 단추를 클릭하여 양식을 미리 봅니다.

    employee 필드에 사용자 이름이 자동으로 입력되어야 합니다.

표시: