Поделиться через


Практическое руководство. Обработка ошибок

При создании пользовательских приложений разработчики часто выполняют обработку ошибок, которая включает написание программы для проверки на наличие ошибок, созданных приложением, или для создания и инициирования пользовательских ошибок. Объектная модель InfoPath, предоставляемая пространством имен Microsoft.Office.InfoPath, поддерживает обработку ошибок путем применения класса FormError в сочетании с классом FormErrorCollection.

Ниже перечислены причины, по которым в приложении InfoPath могут возникать ошибки.

  • Введенным данным не удается пройти проверку на соответствие схеме XML.

  • Неудачный результат проверки на соответствие пользовательским ограничениям.

  • Ошибка создается методом ReportError для объекта события XmlValidatingEventArgs.

  • Ошибка создается в результате использования метода Add класса FormErrorCollection.

Обзор класса "FormErrorCollection"

Класс FormErrorCollection предоставляет указанные ниже методы и свойства, которые могут использоваться разработчиками форм для управления объектами FormError, содержащимися в коллекции.

Имя Описание

Метод Add (+3 перегрузки)

Создает объект FormError и добавляет его в коллекцию.

Метод Delete (+1 перегрузка)

Удаляет указанную пользовательскую ошибку из коллекции.

Метод DeleteAll

Удаляет все объекты FormError из коллекции.

Метод GetErrors (+1 перегрузка)

Возвращает все объекты FormError с указанным именем или типом, находящиеся в коллекции.

Свойство Count

Возвращает количество объектов ErrorObject, содержащихся в коллекции.

Свойство Item

Возвращает ссылку на объект ErrorObject, основываясь на указанном номере индекса.

Обзор класса "FormError"

Класс FormError предоставляет указанные ниже свойства, которые могут использоваться разработчиками для доступа к сведениям о возникшей ошибке.

Имя Описание

Свойство DetailedMessage

Возвращает или задает подробное сообщение об ошибке для объекта FormError.

Свойство ErrorCode

Возвращает или задает код ошибки для объекта FormError.

Свойство Site

Возвращает объект XPathNavigator, расположенном в узле, связанном с объектом FormError.

Свойство Message

Возвращает или задает краткое сообщение об ошибке для объекта FormError.

Свойство FormErrorType

Возвращает тип объекта FormError.

Использование классов "FormErrorCollection" и "FormError"

Объект FormErrorCollection связан с формой, доступной через свойство Errors объекта XmlForm. Объект FormErrorCollection связан с базовым XML-документом формы, поэтому при возникновении ошибки можно получить доступ к этой и любым дополнительным ошибкам XML и управлять ими в текущем документе. В следующем примере демонстрируется использование цикла для поиска возможных ошибок в базовом XML-документе формы. Если ошибки присутствуют, то эта функция обрабатывает в цикле каждую из них и отображает пользователю окна сообщения с помощью свойства Message объекта FormError.

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 для поля формы, ее вызов приведет к передаче аргумента узла XML с помощью свойства Site объекта событий XmlEventArgs, как показано ниже.

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

Помимо обработки ошибок, создаваемых приложением InfoPath, разработчики форм также могут создавать пользовательские ошибки с помощью метода ReportError для объекта событий XmlValidatingEventArgs или метода Add класса FormErrorCollection. Для получения сведений об использовании методов 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. Кроме того, по умолчанию необработанные исключения не отображаются в диалоговом окне InfoPath во время выполнения при развертывании шаблона формы с управляемым кодом. Чтобы отображать сведения о необработанных исключениях во время выполнения, воспользуйтесь приведенной ниже процедурой.

Включение уведомлений для необработанных исключений управляемого кода во время выполнения

  1. Откройте приложение InfoPath.

  2. В меню Сервис выберите пункт Параметры.

  3. На вкладке Дополнительно установите флажок Уведомлять об ошибках кода Visual Basic и C#.