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


Практическое руководство. Получение доступа к данным форм

Если требуется расширить возможности формы InfoPath, то зачастую требуется обеспечить программный доступ к сведениям о базовом XML-документе формы или к данным, содержащимся в этом XML-документе, а также выполнить некоторые действия над XML-документом. Объектная модель InfoPath поддерживает доступ и обработку базового XML-документа формы посредством использования класса XmlForm в сочетании с классом XmlFormCollection.

Класс XmlForm является одним из наиболее полезных в объектной модели InfoPath, поскольку предоставляет ряд свойств и методов, которые не только взаимодействуют с базовым XML-документом формы, но и выполняют многие действия, доступные в интерфейсе пользователя InfoPath.

Обзор класса XmlFormCollection

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

Имя Описание

NewM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String)

Создает новую форму на основе указанной формы.

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

Создает новую форму на основе указанной формы с использованием указанного поведения режима открытия.

NewFromFormTemplateM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String)

Создает новую форму на основе указанного шаблона формы.

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

Создает новую форму на основе указанного шаблона формы и XML-данных.

Метод NewFromFormTemplate (перегрузка 2)

Создает новую форму на основе указанного шаблона формы с данными, указанными объектом XPathNavigator.

Метод NewFromFormTemplate (перегрузка 3)

Создает новую форму на основе указанного шаблона формы с данными, указанными объектом XPathNavigator, и с использованием указанного поведения режима открытия.

OpenM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String)

Открывает указанную форму.

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

Открывает указанную форму с использованием указанного поведения режима открытия.

CountP:Microsoft.Office.InfoPath.FormErrorCollection.Count

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

ItemP:Microsoft.Office.InfoPath.WindowCollection.Item(System.Int32)

Возвращает ссылку на указанный объект XmlForm из семейства по значению индекса.

Обзор интерфейса XmlForm

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

Имя Описание

CloseM:Microsoft.Office.InfoPath.Window.Close

Закрывает форму.

GetWorkflowTasksM:Microsoft.Office.InfoPath.FormErrorCollection.DeleteAll

Возвращает ссылку на семейство Microsoft.Office.Core.WorkflowTasks для текущей формы.

GetWorkflowTemplatesM:Microsoft.Office.InfoPath.UserPermissionCollection.RemoveAll

Возвращает ссылку на семейство Microsoft.Office.Core.WorkflowTemplates для текущей формы.

MergeFormM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String)

Объединяет текущую форму с формой, указанной с помощью пути или URL-адреса.

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

Объединяет текущую форму с формой, указанной в узле, возвращаемым переданным в метод объектом XPathNavigator.

NotifyHostM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String)

Предоставляет пользовательское значение для внешнего приложения или ASPX-страницы.

PrintM:Microsoft.Office.InfoPath.Window.Close

Распечатывает содержимое формы в соответствии с активным представлением формы.

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

Распечатывает содержимое формы в соответствии с активным представлением формы путем вывода диалогового окна Печать.

SaveM:Microsoft.Office.InfoPath.Window.Close

Сохраняет форму по URL-адресу, с которым она в данный момент связана.

SaveAsM:Microsoft.Office.InfoPath.Permission.ApplyPolicy(System.String)

Сохраняет форму по указанному URL-адресу.

SetSaveAsDialogFilenameM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String)

Задает имя файла по умолчанию для диалогового окна Сохранить как.

SetSaveAsDialogLocationM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String)

Задает путь по умолчанию для сохранения формы с помощью диалогового окна Сохранить как.

SubmitM:Microsoft.Office.InfoPath.Window.Activate

Отправляет форму с помощью операции отправки, указанной в шаблоне формы.

CurrentViewP:Microsoft.Office.InfoPath.Window.Left

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

DataConnectionsP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает объект DataConnectionCollection, связанный с формой.

DataSourcesP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает объект DataSourceCollection, связанный с формой.

DirtyP:Microsoft.Office.InfoPath.Window.XmlForm

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

ErrorsP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает ссылку на объект FormErrorCollection, связанный с формой.

ExtensionP:Microsoft.Office.InfoPath.FormError.Site

Возвращает объект Object для доступа к функциям и глобальным переменным, содержащимся в основном файле кода формы, используя System.Reflection.

FormStateP:Microsoft.Office.InfoPath.Window.XmlForm

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

HostP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает объект System.Object, который может использоваться кодом, запущенным на внешнем экземпляре InfoPath, для доступа к объектной модели внешнего приложения.

HostedP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает факт размещения InfoPath в качестве элемента управления в другом приложении.

HostNameP:Microsoft.Office.InfoPath.FormError.Site

Возвращает имя приложения, размещающего InfoPath в качестве элемента управления.

MainDataSourceP:Microsoft.Office.InfoPath.Window.Left

Возвращает объект DataSource, представляющий основной источник данных формы.

NamespaceManagerP:Microsoft.Office.InfoPath.Window.XmlForm

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

NewP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает значение, которое указывает, является ли форма новой.

PermissionP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает ссылку на объект Permission, связанный с формой.

QueryDataConnectionP:Microsoft.Office.InfoPath.UserPermission.UserId

Возвращает ссылку на объект DataConnection, представляющий подключение данных, связанное с формой.

ReadOnlyP:Microsoft.Office.InfoPath.Window.XmlForm

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

RecoveredP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает значение, которое указывает, была ли форма сохранена в последний раз с помощью операции сохранения AutoRecover.

SignedP:Microsoft.Office.InfoPath.Window.XmlForm

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

SignedDataBlocksP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает ссылку на семейство SignedDataBlockCollection, связанное с формой.

TaskPanesP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает ссылку на семейство TaskPaneCollection, связанное с шаблоном формы.

TemplateP:Microsoft.Office.InfoPath.FormError.Site

Возвращает ссылку на объект FormTemplate, представляющий манифест (.xsf) для шаблона формы, связанного с формой.

UriP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает URI-идентификатор формы.

UserRoleP:Microsoft.Office.InfoPath.FormError.Site

Возвращает или задает текущего пользователя для имени роли формы.

ViewInfosP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает ссылку на объект ViewInfoCollection, связанный с шаблоном формы.

XmlLangP:Microsoft.Office.InfoPath.Window.XmlForm

Возвращает значение атрибута xml:lang в базовом XML-документе формы.

Использование класса XmlFormCollection

Доступ к классу XmlFormCollection предоставляется через свойство XmlForms класса Application. В шаблоне формы с управляемым кодом, созданном с помощью объектной модели, предоставляемой элементами пространства имен Microsoft.Office.InfoPath, можно использовать ключевое слово this (C#) или Me (Visual Basic) в коде формы для доступа к классу Application и его элементам.

В следующем примере используется свойство XmlForms класса Application для создания объектной переменной myForms, которая указывает объект XDocumentsCollection запущенного в данный момент экземпляра InfoPath. Эта переменная впоследствии используется для отображения количества открытых форм.

// Create variable for accessing the XmlFormCollection.
XmlFormCollection myForms = this.Application.XmlForms;

// Display the number of forms that are currently open.
MessageBox.Show("Forms open: " + myForms.Count);
// Create variable for accessing the XmlFormCollection.
Dim myForms As XmlFormCollection = Me.Application.XmlForms

' Display the number of forms that are currently open.
MessageBox.Show("Forms open: " + myForms.Count)

Переменную myForms также затем можно использовать для создания новых форм (с помощью одного из методов New или NewFromTemplate) или открытия существующих форм (с помощью одного из методов Open).

Использование класса XmlForm

В шаблоне формы с управляемым кодом, созданном с использованием объектной модели, предоставляемой элементами пространства имен Microsoft.Office.InfoPath, можно использовать ключевое слово this (C#) или Me (Visual Basic) в коде формы для непосредственного доступа к элементам класса XmlForm (без обязательной ссылки на ключевое слово XmlForm).

Доступ к значениям свойств формы

В следующем примере используется ключевое слово this или Me для предоставления доступа к свойствам New, ReadOnly, Signed и Uri класса XmlForm и отображения в окне сообщения значений, возвращенных для текущей формы.

MessageBox.Show(
   "Is new: " + this.New + System.Environment.NewLine +
   "Is read-only: " + this.ReadOnly + System.Environment.NewLine +
   "Is signed: " + this.Signed + System.Environment.NewLine +
   "Form URI: " + this.Uri);
MessageBox.Show( _
   "Is new: " & this.New + System.Environment.NewLine & _
   "Is read-only: " & this.ReadOnly & System.Environment.NewLine + _
   "Is signed: " & this.Signed & System.Environment.NewLine & _
   "Form URI: " & this.Uri)

Доступ к источнику данных формы

Ключевым свойством класса XmlForm, связанным с данными форм, является свойство MainDataSource. Это свойство возвращает ссылку на объект DataSource, представляющий базовые XML-данные текущей формы, которые также могут быть указаны в качестве основного или главного источника данных формы. Класс DataSource предоставляет метод CreateNavigator, который создает объект System.Xml.XPath.XPathNavigator, расположенный в корне базового XML-документа формы. Свойства и методы класса XPathNavigator можно впоследствии использовать для обзора и изменения базовых XML-данных формы.

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

// Get outer XML of the underlying XML document.
string myDoc = this.MainDataSource.CreateNavigator.OuterXml.ToString();
// Display XML.
MessageBox.Show(myDoc);
' Get outer XML of the underlying XML document.
Dim myDoc As String myDoc = _
   Me.MainDataSource.CreateNavigator.OuterXml.ToString()
' Display XML.
MessageBox.Show(myDoc)
ЗаметкаЗаметка

Поскольку приложение InfoPath рассматривает свойство MainDataSource как свойство по умолчанию объекта XmlForm, доступ к которому предоставляется при использовании ключевых слов this и Me, то можно опустить его в строке кода, используемой для создания объекта XPathNavigator.

Дополнительные сведения о классе XPathNavigator в бизнес-логике шаблона формы InfoPath см. в статье Практическое руководство. Работа с классами XPathNavigator и XPathNodeIterator.

Доступ к сведениям о файле шаблона формы

Доступ к сведениям о шаблоне формы, связанном с формой, включая файл определения формы (.xsf ) и содержащиеся в нем исходные XML-данные, также может быть предоставлен с помощью класса XmlForm. Доступ к этим сведениям предоставляется через свойство Template, которое возвращает ссылку на объект FormTemplate, представляющий шаблон формы, связанный с текущей формой.

В следующем примере в первом окне сообщения отображаются некоторые данные, которые доступны через класс Template, например расположение URI-идентификатора (с помощью свойства Uri), идентификатор кэша (с помощью свойства CacheId) и номер версии (с помощью свойства Version). В следующем окне сообщения используется свойство Manifest класса Template для создания объекта XPathNavigator, который используется для отображения исходных XML-данных из файла определения формы (.xsf).

// Display form template properties.
MessageBox.Show(
   "Cache ID: " + this.Template.CacheId + System.Environment.NewLine +
   "URI: " + this.ReadOnly + System.Environment.NewLine +
   "Version: " + this.Signed, "Form Template Properties");

// Display form definition file XML.
MessageBox.Show(this.Template.Manifest.OuterXml, 
   "Form Definition File XML");
' Display form template properties.
MessageBox.Show( _
   "Cache ID: " & Me.Template.CacheId & System.Environment.NewLine &
   "URI: " & Me.ReadOnly & System.Environment.NewLine &
   "Version: " & Me.Signed, "Form Template Properties")

' Display form definition file XML.
MessageBox.Show(Me.Template.Manifest.OuterXml, _
   "Form Definition File XML")