Практическое руководство. Обработка ошибок
При создании пользовательских приложений разработчики часто выполняют обработку ошибок, которая включает написание программы для проверки на наличие ошибок, созданных приложением, или для создания и инициирования пользовательских ошибок. Объектная модель 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 во время выполнения при развертывании шаблона формы с управляемым кодом. Чтобы отображать сведения о необработанных исключениях во время выполнения, воспользуйтесь приведенной ниже процедурой.
Включение уведомлений для необработанных исключений управляемого кода во время выполнения
Откройте приложение InfoPath.
В меню Сервис выберите пункт Параметры.
На вкладке Дополнительно установите флажок Уведомлять об ошибках кода Visual Basic и C#.