访问表单数据

如果要扩展 InfoPath 表单的功能,通常必须以编程方式访问有关表单的基础 XML 文档的信息,访问 XML 文档所包含的数据或对 XML 文档执行某操作。 InfoPath 对象模型通过结合使用 XmlForm 类和 XmlFormCollection 类来支持对表单的基础 XML 文档的访问和操作。

XmlForm 类是 InfoPath 对象模型中最有用的类型之一,因为它提供各种属性和方法,不仅能与表单的基础 XML 文档进行交互,而且能够执行可从 InfoPath 用户界面中执行的许多操作。

XmlFormCollection 类概述

XmlFormCollection 类提供下列方法和属性,表单开发人员可以使用它们管理集合所包含的 XmlForm 对象。

名称 说明
New(String) 方法
基于指定的表单创建新表单。
New(String, XmlFormOpenMode) 方法(重载 1)
使用指定的打开模式行为,基于指定的表单创建新表单。
NewFromFormTemplate(String) 方法
基于指定的表单模板创建新表单。
NewFromFormTemplate(String, String) 方法(重载 1)
基于指定的表单模板和 XML 数据创建新表单。
NewFromFormTemplate(String, String, XmlFormOpenMode) 方法(重载 2)
基于指定的表单模板以及由 XPathNavigator 对象指定的数据创建新表单。
NewFromFormTemplate(String, XPathNavigator) 方法(重载 3)
使用指定的打开模式行为,基于指定的表单模板以及由 XPathNavigator 对象指定的数据创建新表单。
Open(String) 方法
打开指定的表单。
Open(String, XmlFormOpenMode) 方法(重载 1)
使用指定的打开模式行为打开指定表单。
Count 属性
获取集合中包含的 XmlForm 对象的数目。
Item 属性
按照索引值获取一个对集合中指定 XmlForm 对象的引用。

XmlForm 类概述

XmlForm 类提供下列方法和属性,表单开发人员可以使用它们与表单的基础 XML 文档进行交互,并对该文档执行操作。

名称 说明
Close 方法
关闭表单。
GetWorkflowTasks 方法
获取一个对当前表单的 Microsoft.Office.Core.WorkflowTasks 集合的引用。
GetWorkflowTemplates 方法
获取一个对当前表单的 Microsoft.Office.Core.WorkflowTemplates 集合的引用。
MergeForm(String) 方法
将当前表单与通过路径或 URL 指定的表单合并。
MergeForm(XPathNavigator) 方法(重载 1)
将当前表单与传递到该方法的 XPathNavigator 所返回的节点中指定的目标表单进行合并。
NotifyHost 方法
为宿主应用程序或 ASPX 页提供自定义值。
Print() 方法
按照表单内容在表单的活动视图中的显示效果打印表单内容。
Print(Boolean) 方法(重载 1)
通过显示“打印”对话框打印在表单的活动视图中呈现的表单内容。
Save 方法
将表单保存到当前关联的统一资源定位器 (URL)。
SaveAs 方法
将表单保存到指定的统一资源定位器 (URL)。
SetSaveAsDialogFilename 方法
设置“另存为”对话框的默认文件名。
SetSaveAsDialogLocation 方法
设置使用“另存为”对话框保存表单的默认路径。
Submit 方法
使用表单模板中定义的提交操作来提交表单。
CurrentView 属性
获取一个代表表单的当前视图的 View 对象。
DataConnections 属性
获取一个与表单关联的 DataConnectionCollection 对象。
DataSources 属性
获取与表单关联的 DataSourceCollection 对象。
Dirty 属性
获取一个值,该值指示表单中的数据自上次保存之后是否被修改过。
Errors 属性
获取一个对与表单关联的 FormErrorCollection 的引用。
Extension 属性
获取一个 System.Object,用于使用 System.Reflection 访问表单的主要表单代码文件中包含的函数和全局变量。
FormState 属性
获取一个对 System.Collections.IDictionary 类型的属性包的引用,启用浏览器功能的表单可以使用该属性包来维护服务器上各个会话的状态信息。
Host 属性
获取一个 System.Object,在 InfoPath 的宿主实例中运行的代码可以使用它访问宿主应用程序的对象模型。
Hosted 属性
获取一个值,指示 InfoPath 是否作为控件承载在另一个应用程序中。
HostName 属性
获取将 InfoPath 作为控件承载的应用程序的名称。
MainDataSource 属性
获取一个代表表单主数据源的 DataSource 对象。
NamespaceManager 属性
获取一个对 XmlNamespaceManager 对象的引用,该对象可用于解析、添加或删除表单中使用的命名空间。
New 属性
获取一个指定表单是否为新表单的值。
Permission 属性
获取一个对与表单关联的 Permission 对象的引用。
QueryDataConnection 属性
获取一个对 DataConnection 对象的引用,该对象代表与表单关联的数据连接。
ReadOnly 属性
获取一个值,该值指示表单模板是否处于只读或锁定状态。
Recovered 属性
获取一个值,该值指示表单上次是否是由自动恢复保存操作保存的。
Signed 属性
获取一个值,该值指示是否已经对表单进行过数字签名。
SignedDataBlocks 属性
获取一个对与表单关联的 SignedDataBlockCollection 集合的引用。
TaskPanes 属性
获取一个对与表单模板关联的 TaskPaneCollection 的引用。
Template 属性
获取一个对 FormTemplate 对象的引用,该对象代表与表单关联的表单模板的清单 (.xsf)。
Uri 属性
获取表单的统一资源标识符 (URI)。
UserRole 属性
获取或设置表单角色名称的当前用户。
ViewInfos 属性
获取一个对与表单模板关联的 ViewInfoCollection 对象的引用
XmlLang 属性
获取表单的基础 XML 文档中 xml:lang 属性的值。

使用 XmlFormCollection 类

可以通过 Application 类的 XmlForms 属性访问 XmlFormCollection 类。 在使用 Microsoft.Office.InfoPath 命名空间的成员提供的对象模型创建的托管代码表单模板中,可以在表单代码中使用 this (C#) 或 Me (Visual Basic) 关键字访问 Application 类及其成员。

下面的示例使用 Application 类的 XmlForms 属性创建一个名为 myForms 的对象变量,该对象变量引用当前运行的 InfoPath 实例的 XDocumentsCollection 对象。 然后,此变量可用来显示已打开表单的数量。

// 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 变量创建新表单(使用 NewNewFromTemplate 方法之一),或者打开现有表单(使用 Open 方法之一)。

使用 XmlForm 类

在使用 Microsoft.Office.InfoPath 命名空间的成员提供的对象模型创建的托管代码表单模板中,可以在表单代码中使用 this (C#) 或 Me (Visual Basic) 关键字直接访问 XmlForm 类的成员(而无需对象变量建立对 XmlForm 类的引用)。

访问表单的属性值

下面的示例使用 thisMe 关键字访问 XmlForm 类的 NewReadOnlySignedUri 属性,并在一个消息框中显示为当前表单返回的值。

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: " & Me.New & System.Environment.NewLine & _
   "Is read-only: " & Me.ReadOnly & System.Environment.NewLine + _
   "Is signed: " & Me.Signed & System.Environment.NewLine & _
   "Form URI: " & this.Uri)

访问表单的数据源

XmlForm 类与表单数据有关的一个关键属性是 MainDataSource 属性。 此属性返回对 DataSource 对象的引用,该对象代表当前表单的基础 XML 数据,也称为表单的 主 数据源或 主要 数据源。 DataSource 类提供了 CreateNavigator 方法,该方法可创建一个位于表单基础 XML 文档根节点处的 XPathNavigator 对象。 随后,可以使用 XPathNavigator 类的属性和方法来浏览和编辑表单的基础 XML 数据。

下面的示例使用 XmlForm 类的 MainDataSource 属性创建一个位于表单主数据源根节点处的 XPathNavigator 对象。 然后,可以使用 XPathNavigator 类的 OuterXml 属性返回和显示表单的基础 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)

注意

由于在使用 thisMe 关键字访问时,InfoPath 将 MainDataSource 属性视为 XmlForm 对象的默认属性,因此可以在用于创建 XPathNavigator 对象的代码行中省略该属性。

若要了解有关 InfoPath 表单模板业务逻辑中的 XPathNavigator 类的详细信息,请参阅使用 XPathNavigator 和 XPathNodeIterator 类

访问有关表单的表单模板文件的数据

还可以使用 XmlForm 类访问有关与某个表单关联的表单模板的信息,包括表单定义文件 (.xsf ) 和表单所包含的源 XML 数据。 使用 Template 属性可以访问这些信息,该属性返回对 FormTemplate 对象的引用,而该对象代表与当前表单关联的表单模板。

在下面的示例中,第一个消息框显示通过 Template 类提供的一些数据,例如,统一资源标识符 (URI) 位置(使用 Uri 属性)、缓存标识符(使用 CacheId 属性)及其版本号(使用 Version 属性)。 下一个消息框使用 Template 类的 Manifest 属性创建一个 XPathNavigator 对象,该对象用来显示表单定义文件 (.xsf) 的源 XML。

// 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")