Практическое руководство. Обработка ошибок с помощью объектной модели InfoPath 2003
При создании пользовательских приложений разработчики часто выполняют обработку ошибок, которая включает написание программы для проверки на наличие ошибок, созданных приложением, или для создания и инициирования пользовательских ошибок. Объектная модель, совместимая с InfoPath 2003, поддерживает обработку ошибок посредством использования объекта ErrorObject в сочетании с семейством ErrorsCollection.
В приложении InfoPath ошибки могут происходить, когда введенные в форму данные не проходят проверку XML-схемы, в случае неудачного результата проверки на соответствие пользовательским отграничениям, при ошибке метода ReportError объекта DataDOMEventObject, а также при ошибке использования метода Add семейства ErrorsCollection.
Обзор семейства ErrorsCollection
Семейство ErrorsCollection предоставляет следующие методы и свойства, которые могут использоваться разработчиками форм для управления объектами ErrorObject, содержащимися в семействе.
Имя | Описание |
---|---|
AddM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String) |
Создает объект ErrorObject и добавляет его в семейство. |
DeleteM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String) |
Удаляет все объекты ErrorObject, связанные с указанным XML-узлом и именем условия, за исключением пользовательских ошибок, добавленных с помощью метода ReportError. |
DeleteAllM:Microsoft.Office.InfoPath.FormErrorCollection.DeleteAll |
Удаляет все объекты ErrorObject из семейства. |
CountP:Microsoft.Office.InfoPath.FormError.ErrorCode |
Возвращает количество объектов ErrorObject, содержащихся в семействе. |
ItemP:Microsoft.Office.InfoPath.WindowCollection.Item(System.Int32) |
Возвращает ссылку на объект ErrorObject, основываясь на указанном номере индекса. |
Обзор объекта ErrorObject
Объект ErrorObject предоставляет следующие свойства, которые могут использоваться разработчиками форм для доступа к сведениям о возникшей ошибке.
Имя | Описание |
---|---|
ConditionNameP:Microsoft.Office.InfoPath.FormError.FormErrorType |
Возвращает имя условия ошибки или null, в зависимости от типа объекта ErrorObject. |
DetailedErrorMessageP:Microsoft.Office.InfoPath.FormError.ErrorCode |
Возвращает или задает подробное сообщение об ошибке для объекта ErrorObject. |
ErrorCodeP:Microsoft.Office.InfoPath.FormError.FormErrorType |
Возвращает или задает код ошибки для объекта ErrorObject. |
NodeP:Microsoft.Office.InfoPath.FormError.ErrorCode |
Возвращает ссылку на XML-узел, связанный с объектом ErrorObject. |
ShortErrorMessageP:Microsoft.Office.InfoPath.FormError.Site |
Возвращает или задает краткое сообщение об ошибке для объекта ErrorObject. |
Свойство ErrorType |
Возвращает тип объекта ErrorObject. |
Использование ErrorsCollection и ErrorObject
Доступ к семейству ErrorsCollection предоставляется через свойство Errors объекта XDocument. Семейство ErrorsCollection связано с базовым XML-документом формы, поэтому когда возникает ошибка, она возникает в XML-документе. В следующем примере демонстрируется использование цикла Visual C# foreach для проверки ошибок, которые могут присутствовать в базовом XML-документе формы. При наличии ошибок функция обрабатывает в цикле каждую из них и с помощью свойства ShortErrorMessage объекта ErrorObject отображает пользователю окно сообщения.
public void CheckErrors(IXMLDOMNode xmlNode)
{
foreach(ErrorObject err in thisXDocument.Errors)
{
if(xmlNode==err.Node)
thisXDocument.UI.Alert("The following error has occured: "
+ err.ShortErrorMessage + ".");
}
}
Предыдущую функцию можно вызвать из одного из обработчиков событий проверки данных в форме. Например, если функция используется в обработчике событий OnAfterChange для поля формы, ее вызов приведет к передаче аргумента узла XML с помощью свойства Site объекта DataDOMEventObject, как показано ниже.
CheckErrors(e.Site);
Помимо обработки ошибок, создаваемых приложением InfoPath, разработчики форм также могут создавать пользовательские ошибки с помощью метода ReportError для объекта событий DataDOMEventObject или метода Add семейства ErrorsCollection. Для получения сведений об использовании методов ReportError и Add щелкните методы в начале данного раздела.
Обработка исключений управляемого кода
Для обработки исключений, возникающих в шаблоне формы с управляемым кодом, можно воспользоваться методом "try-catch", как показано в следующем примере кода.
DataAdapters dataAdapters;
dataAdapters = thisXDocument.DataAdapters;
XMLFileAdapterObject queryXMLFile =
(XMLFileAdapterObject)dataAdapters["form1"];
// Perform the query.
try
{
queryXMLFile.Query();
}
catch (Exception ex)
{
thisXDocument.UI.Alert("Failed to query.\n\n" + ex.Message);
}
// Perform the submit.
try
{
queryXMLFile.Submit();
}
catch (Exception ex)
{
thisXDocument.UI.Alert("Failed to submit.\n\n" + ex.Message);
}
Если в коде формы не используется обработка исключений "try-catch", то при отладке и просмотре в Visual Studio .NET приложение InfoPath будет отображать сведения о необработанных исключениях в диалоговом окне ошибок InfoPath. Кроме того, по умолчанию необработанные исключения не отображаются в диалоговом окне InfoPath во время выполнения при развертывании шаблона формы с управляемым кодом. Чтобы отображать сведения о необработанных исключениях во время выполнения, воспользуйтесь приведенной ниже процедурой.
Включение уведомлений для необработанных исключений управляемого кода во время выполнения
Откройте приложение InfoPath.
В меню Сервис выберите пункт Параметры.
На вкладке Дополнительно установите флажок Уведомлять об ошибках управляемого кода.