다음을 통해 공유


방법: 오류 처리

개발자는 사용자 지정 응용 프로그램을 만들 때 응용 프로그램에서 발생한 오류를 확인하거나 사용자 지정 오류를 만들고 발생시키는 프로그래밍 코드를 작성하여 오류 처리를 수행해야 합니다. Microsoft.Office.InfoPath 네임스페이스에서 제공하는 InfoPath 개체 모델은 FormError 클래스를 FormErrorCollection 클래스와 함께 사용하여 오류 처리를 지원합니다.

InfoPath에서는 다음과 같은 경우 오류가 발생할 수 있습니다.

  • 양식에 입력한 데이터가 XML 스키마 유효성 검사에 실패할 때

  • 사용자 지정 유효성 검사 제약 조건이 실패할 때

  • XmlValidatingEventArgs 이벤트 개체의 ReportError 메서드에서 오류가 발생할 때

  • FormErrorCollection 클래스의 Add 메서드를 사용하여 오류를 만들 때

FormErrorCollection 클래스 개요

FormErrorCollection 클래스는 양식 개발자가 컬렉션에 포함된 FormError 개체를 관리하는 데 사용할 수 있는 다음 메서드와 속성을 제공합니다.

이름 설명

Add 메서드(+3 오버로드)

FormError 개체를 만들어 컬렉션에 추가합니다.

Delete 메서드(+1 오버로드)

지정한 사용자 정의 오류를 컬렉션에서 삭제합니다.

DeleteAll 메서드

컬렉션에 포함된 모든 FormError 개체를 삭제합니다.

GetErrors(+1 오버로드)

컬렉션에서 지정한 이름이나 형식의 FormError 개체를 모두 반환합니다.

Count 속성

컬렉션에 포함된 ErrorObject 개체의 수를 가져옵니다.

Item 속성

지정한 인덱스 번호를 기반으로 ErrorObject 개체에 대한 참조를 가져옵니다.

FormError 클래스 개요

FormError 클래스는 양식 개발자가 발생한 오류 정보에 액세스하는 데 사용할 수 있는 다음 속성을 제공합니다.

이름 설명

DetailedMessage 속성

FormError 개체의 자세한 오류 메시지를 가져오거나 설정합니다.

ErrorCode 속성

FormError 개체의 오류 코드를 가져오거나 설정합니다.

Site 속성

FormError 개체에 연결된 노드에 있는 XPathNavigator 개체를 가져옵니다.

Message 속성

FormError 개체의 간단한 오류 메시지를 가져오거나 설정합니다.

FormErrorType 속성

FormError 개체의 형식을 가져옵니다.

FormErrorCollection 및 FormError 클래스 사용

양식에 연결된 FormErrorCollection 개체는 XmlForm 개체의 Errors 속성을 통해 액세스합니다. FormErrorCollection 개체는 양식의 원본으로 사용하는 XML 문서에 연결되므로 오류가 발생할 때 현재 XML 문서 내에서 이 오류와 추가 오류에 액세스하고 관리할 수 있습니다. 다음 예제에서는 루프를 통해 양식의 기반으로 사용하는 XML 문서의 오류를 확인하는 방법을 보여 줍니다. 이때 오류가 있으면 각 오류에 대해 함수가 반복되고 FormError 개체의 Message 속성을 사용하여 메시지 상자가 표시됩니다.

public void CheckErrors(XPathNavigator xmlNode)
{
   foreach(FormError err in this.Errors)
   {
      if(xmlNode.InnerXml == err.Site.InnerXml)
         MessageBox.Show("The following error has occured: "
             + err.Message);
   }
}
Public Sub CheckErrors(ByVal xmlNode As XPathNavigator)
   Dim err As FormError
   For Each err In Me.Errors
      If xmlNode.InnerXml = err.Site.InnerXml Then
         MessageBox.Show("The following error has occured: " _
             & err.Message)
   End If
End Sub

앞에 나온 함수는 양식의 데이터 유효성 검사 이벤트 처리기 중 하나에서 호출될 수 있습니다. 예를 들어 양식 필드의 Changed 이벤트에 대한 이벤트 처리기에서 이 함수 호출을 사용하면 다음과 같이 XmlEventArgs 이벤트 개체의 Site 속성을 사용하여 XML 노드 인수가 전달됩니다.

CheckErrors(e.Site);
CheckErrors(e.Site)

양식 개발자는 InfoPath에서 생성된 오류를 처리하는 것 외에 XmlValidatingEventArgs 이벤트 개체의 ReportError 메서드나 FormErrorCollection 클래스의 Add 메서드를 사용하여 사용자 지정 오류를 생성할 수도 있습니다. ReportError 또는 Add 메서드 사용에 대한 자세한 내용을 보려면 이 항목 맨 앞에 표시된 메서드 링크를 클릭하십시오.

관리 코드 예외 처리

다음 코드 예제와 같이 try-catch 예외 처리를 사용하여 관리 코드 양식 서식 파일에서 발생한 예외를 처리할 수 있습니다.

FileQueryConnection queryXMLFile = 
   (FileQueryConnection)this.DataConnections["form1"];
// Perform the query.
try
{
   queryXMLFile.Execute();
}

catch (Exception ex)
{
   MessageBox.Show("Failed to query." + System.Environment.NewLine 
      + ex.Message);
}
Dim queryXMLFile As FileQueryConnection = _
   DirectCast(Me.DataConnections("form1"), FileQueryConnection)
' Perform the query.
Try
   queryXMLFile.Execute();
Catch ex As Exception
   MessageBox.Show("Failed to query." & System.Environment.NewLine 
      & ex.Message)
End Try

양식 코드에서 try-catch 예외 처리를 사용하지 않으면 디버깅하고 미리 보는 동안 InfoPath 오류 대화 상자에 처리되지 않은 예외에 대한 정보가 표시됩니다. 또한 기본적으로 관리 코드 양식 서식 파일을 배포할 때 처리되지 않은 예외는 InfoPath 오류 대화 상자에 런타임으로 표시되지 않습니다. 처리되지 않은 예외에 대한 정보를 런타임으로 표시하려면 다음 절차를 사용합니다.

처리되지 않은 관리 코드 예외에 대한 런타임 알림 사용

  1. InfoPath를 엽니다.

  2. 도구 메뉴에서 옵션을 클릭합니다.

  3. 고급 탭에서 Visual Basic 또는 C# 코드 오류에 대한 알림 표시 확인란을 선택합니다.