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


Практическое руководство. Обработка событий форм с помощью объектной модели InfoPath 2003

Можно написать код, реагирующий на различные события, которые могут происходить при заполнении пользователем формы. Для работы с событиями в InfoPath из формы в режиме конструктора создаются обработчики событий.

Обработчики событий InfoPath следует изначально создавать в режиме конструктора, поскольку пи использовании объектной модели, совместимой с InfoPath 2003, приложение InfoPath автоматически добавляет корректное объявление и применяет атрибут (InfoPathEventHandlerAttribute) в файле кода формы (FormCode.cs или FormCode.vb) для идентификации и приема обработчика событий. После создания обработчика событий не следует менять его объявление и атрибут в файле кода формы.

Сведения о создании обработчиков событий InfoPath см. в статье Практическое руководство. Добавление обработчика событий с помощью объектной модели InfoPath 2003.

Обзор объектов событий

Объектная модель, совместимая с InfoPath 2003, внедряет девять объектов событий, представленных в пространстве имен Microsoft.Office.Interop.InfoPath.SemiTrust. В приведенной ниже таблице перечислены все объекты событий InfoPath, связанные с ними обработчики событий, а также приведено описание выполняемых ими функций.

Имя Обработчик событий Описание

DataDOMEvent

OnBeforeChange

OnValidate, OnAfterChange

Возвращает ссылку на базовый XML-документ формы, состояние возврата и другие свойства, содержащие сведения о XML-узле во время изменения объектной модели XML-документа. Также включает метод выявления ошибок.

DocActionEvent

OnClick

Возвращает ссылку на базовый XML-документ формы, статус возврата, а также исходный XML-узел во время нажатия кнопки в области формы.

DocContextChangeEvent

OnContextChange

Возвращает информацию об XML-узле модели Document Object Model (DOM), который является текущим контекстом базового XML-документа формы.

DocEvent

OnSwitchView, OnAfterImport

Возвращает ссылку на базовый XML-документ формы во время переключения режимов или во время операции объединения форм.

DocReturnEvent

OnLoad, OnSubmitRequest

Возвращает ссылку на базовый XML-документ формы, а также статус возврата в течение загрузки или отправки формы.

MergeEvent

OnMergeRequest

Возвращает свойства и методы, которые можно использовать при выполнении события OnMergeRequest для программного взаимодействия с базовым XML-документом формы, а также для определения свойств объединения, таких как число объединяемых файлов.

SaveEvent

OnSaveRequest

Возвращает число свойств и методов, которые можно использовать во время сохранения из обработчика событий OnSaveRequest для программного взаимодействия с базовым XML-документом формы, определения свойств сохранения и выполнения сохранения.

SignEvent

OnSign

Используется для ввода дополнительных данных в цифровую подпись.

VersionUpgradeEvent

OnVersionUpgrade

Возвращает ссылку на базовый XML-документ формы, статус возврата, а также номера версий документа и приложения во время обновления версии.

Использование объектов событий

При создании обработчика событий приложение InfoPath создает объявление обработчика событий в файле кода формы проекта (FormCode.cs или FormCode.vb). В этом описании приложение InfoPath использует e в качестве имени параметра, передаваемого обработчику событий. Этот параметр содержит объект событий, который связан с обработчиком событий.

Например, при создании обработчика событий OnLoad в режиме конструктора (выбрав в меню Сервис пункт Программирование, а затем щелкнув Событие OnLoad) приложение InfoPath добавляет объявление обработчика событий, получающего объект DocReturnEvent, в файл кода формы, а затем открывает редактор кода, чтобы можно было добавить код в следующее объявление обработчика событий.

// The following function handler is created by Microsoft Office 
// InfoPath. Do not modify the type or number of arguments.
[InfoPathEventHandler(EventType=InfoPathEventType.OnLoad)]
public void FormEvents_OnLoad(DocReturnEvent e)
{
   // Write your code here.

}
' The following function handler is created by Microsoft Office 
' InfoPath. Do not modify the type or number of arguments.
<InfoPathEventHandler(EventType:=InfoPathEventType.OnLoad)> _
Public Sub FormEvents_OnLoad(ByVal e As DocReturnEvent)
   ' Write your code here.

End Sub

При написании кода для обработчика событий можно воспользоваться свойствами и методами, внедренными объектом события, переданным через параметр e. Например, в следующем обработчике событий OnBeforeChange свойство NewValue объекта события DataDOMEvent используется для проверки только что измененного поля. Если поле пусто, то свойство ReturnMessage объекта события DataDOMEvent используется для отображения пользователю ошибки в диалоговом окне, а свойство ReturnStatus принимает значение false, указывая, что внесенные пользователем изменения не будут приняты.

[InfoPathEventHandler(MatchPath="/my:myFields/my:field1", 
    EventType=InfoPathEventType.OnBeforeChange)]
public void field1_OnBeforeChange(DataDOMEvent e)
{
   // Determine whether there is a new value.
   if ((string)e.NewValue == "")
   {
      // The value is blank, so display an error message and roll
      // back the changes.
      e.ReturnMessage = "You must supply a value for this field.";
      e.ReturnStatus = false;
      return;
   }
}
<InfoPathEventHandler(MatchPath:="/my:myFields/my:field1", _ EventType:=InfoPathEventType.OnBeforeChange)> _
Public Sub field1_OnBeforeChange(ByVal e As DataDOMEvent)

   ' Determine whether there is a new value.
   If (e.NewValue = "") Then
      ' The value is blank, so display an error message and roll back
      ' the changes.
      e.ReturnMessage = "You must supply a value for this field."
      e.ReturnStatus = False
      Return
   End If
End Sub
ЗаметкаЗаметка

Каждый из объектов событий InfoPath в объектной модели, совместимой с InfoPath 2003, реализует различные свойства и методы. Для получения подробных сведений о конкретных объектах событий щелкните соответствующий объект в в приведенной ранее таблице объектов событий.