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


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

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

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

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

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