Практическое руководство. Получение доступа к данным форм
Если требуется расширить возможности формы 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")