此外,Office InfoPath 2007 中集成了一个新的开发环境,用于处理采用托管代码编写的业务逻辑,该开发环境称为 Microsoft Visual Studio Tools for Applications (VSTA)。

利用 Microsoft Office Forms Server 2007,以及 Microsoft Office SharePoint Server 2007 中提供的名为 InfoPath Forms Services 的相同表单功能,可以将 InfoPath 表单模板部署到服务器中,以便没有 Office InfoPath 2007 的用户能够使用 Web 浏览器打开和填写 InfoPath 表单。

使用写入新托管对象模型的业务逻辑,并通过在 InfoPath 设计模式下使用设计检查功能,您可以创建可部署到 Office Forms Server 2007,或部署到 Office SharePoint Server 2007(运行 InfoPath Forms Services)上经过适当配置的文档库的单一表单模板。此表单模板既可在 InfoPath 中运行,也可在 Web 浏览器中运行。

这组支持此设计和部署技巧的 InfoPath 客户端和 InfoPath Forms Services 功能称为一次性设计功能。

新增功能和改进

以下各节简要描述了 InfoPath 开发人员感兴趣的这些 Office InfoPath 2007 新增功能和改进:

  • 新的托管代码对象模型和开发环境
  • COM 加载项支持
  • 表单模板转换器
  • 自定义数据导入程序
  • 在设计模式用户界面中查看控件 ID
  • 数据连接库支持
  • XML 事件
  • 模板部件
  • 以控件形式承载的 InfoPath 编辑器

新的托管代码对象模型和开发环境

Office InfoPath 2007 提供了新的托管代码对象模型,该模型具有用于在表单模板中创建自定义业务逻辑的一组核心功能。当部署到 Office Forms Server 2007,或部署到 Office SharePoint Server 2007 中经过适当配置的文档库时,使用这一新对象模型创建的业务逻辑既可在 Web 浏览器中运行,也可在 Office InfoPath 2007 中运行。

(可选)您可以编写使用此对象模型中提供的另一功能级别的业务逻辑,该业务逻辑将仅在打开以在 Office InfoPath 2007 中编辑的表单模板中运行。Office InfoPath 2007 提供了两个新的选择,用于开发包含以托管代码编写的业务逻辑的表单模板:

  • 开发环境,它采用与其他 Office 应用程序所使用的 Visual Basic 编辑器环境类似的方式与 InfoPath 集成。VSTA 是一种基于 Visual Studio 中的功能的轻型开发环境。
  • Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System 使您能够在不离开 Visual Studio 环境的情况下设计 InfoPath 表单模板并用托管代码编写业务逻辑。
有关新对象模型和开发环境的详细信息,请参阅关于 InfoPath 编程环境

 

COM 加载项支持

Office InfoPath 2007 这使用开发模型创建和注册 COM 加载项提供了支持,这一点非常类似于其他 Office 应用程序(如 Word 和 Excel)。InfoPath COM 加载项支持 IDTExtensibility2 接口,以实现充当对 InfoPath 启动和关闭条件做出响应的事件处理程序的方法。InfoPath COM 对象模型中已增加了 ApplicationEvents 对象,以对诸如 WindowActivateXDocumentOpen 事件之类的应用程序级别事件提供支持,这些事件允许您在 COM 加载项中为 InfoPath 表单窗口和文档事件创建事件处理程序。

要创建 InfoPath Com 加载项,您需要执行 IDTExtensibility2 接口的五个事件。

创建了加载项后,您必须在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\InfoPath\AddIns\ 注册表子键下注册此加载项,并定义 FriendlyNameDescriptionLoadBehavior 值。可以在启动应用程序时按默认情况加载 InfoPath COM 加载项,也可以通过“COM 加载项”对话框调用它们。要显示“COM 加载项”对话框,请在“工具”菜单上单击“COM 加载项”

表单模板转换器

Microsoft Office InfoPath 2003 Service Pack 1 及更高版本提供了一个框架,用于通过导入另一种电子表单的设计来创建新表单模板。Office InfoPath 2007 本身直接提供了一个转换器,用于依据在 Microsoft Office Word 2007 文档或 Microsoft Office Excel 2007 工作簿中创建的表单的设计来创建新的 InfoPath 表单模板。要开始导入在 Word 或 Excel 中创建的表单的设计,请在“文件”菜单上单击“导入表单”以显示“导入向导”。Office InfoPath 2007 扩展了此框架,以便同时对用于将 InfoPath 表单模板设计导出为另一种电子表单的自定义转换器的创建和安装提供支持。安装了自定义导出转换器后,用户能够在设计模式下打开 InfoPath 表单模板,然后在“文件”菜单上单击“导出表单模板”命令,将表单设计导出为另一种类型的电子表单。

转换器接口  表单模板转换器指定了一列它们支持的文件类型,并处理这些文件类型以便用清单 (.xsf)、视图 (.xsl) 及构成 InfoPath 表单模板 (表单模板:InfoPath 中的文件或文件组,用来定义表单的数据结构、外观和行为。)文件 (.xsn) 的其他文件输出 InfoPath 表单模板。InfoPath 表单模板转换器是一个标准的 COM 自动化组件,该组件实现 IFormTemplateConverterIFormTemplateConverter2 接口。通过实现 IFormTemplateConverter 接口,将可与 Microsoft Office InfoPath 2003 兼容。IFormTemplateConverter2 接口为 Office InfoPath 2007 的用户提供了额外的功能。为了在 InfoPath 设计模式下公开,转换器还必须在注册表中提供有关它本身的一些基本信息,其中包括:

  • 显示名称
  • 详细说明
  • 转换器支持的文件扩展名的列表
C:\Program Files\Microsoft Office\Office12 文件夹中的 IPDESIGN.DLL 动态链接库提供了用于创建自定义表单设计转换器的 IFormTemplateConverterIFormTemplateConverter2IConversionManagerIConversionManager2 接口。

 

自动运行转换器  可以自动运行表单模板转换器以便于批量导入或导出多个表单模板。要自动运行转换器,可使用转换器实现的方法。例如,以下 JScript 代码段演示了如何自动运行 Microsoft Office Word 表单导入程序以导入“sample.doc”。

var oConverter = new ActiveXObject("InfoPath.DesignerWordImport.2");
            var strSourcePath = "c:\\temp\\sample.doc";
            var strDestPath = "c:\\temp\\sampleOutput\\"
            oConverter.Initialize();
            try
            {
            oConverter.SetLcid(1033);
            var strMessage = oConverter.Import(strSourcePath, strDestPath, true);
            }
            catch(e)
            {
            WScript.Echo("Error: " + e.message);
            }
            WScript.Echo("Result was: " + strMessage);
            oConverter.UnInitialize();

 

自定义数据导入程序

Office InfoPath 2007 提供了一个用于创建自定义导入程序的框架,自定义导入程序用于从其他各种电子表单和文档以及从使用光学字符识别 (OCR) 软件以电子方式扫描的纸质表单和文档中导入数据。要显示“导入表单数据”对话框,请在“文件”菜单上单击“填写表单”,选择要填写的表单,然后在“文件”菜单上单击“导入表单数据”。C:\Program Files\Microsoft Office\Office12 文件夹中的 IPEDITOR.DLL 动态链接库提供了 IInfoPathDataImporterIInfoPathDataImporterFieldsIInfoPathViewControlIPropertyBag 接口,必须实现这些接口才能创建自定义数据导入程序。

在设计模式用户界面中查看控件 ID

现在,您可以通过显示控件的“属性”对话框,然后单击“高级”选项卡,在设计模式下确定 InfoPath 表单上某个控件的 ViewContext 标识符。当前控件的 ViewContext 值显示在“高级”选项卡的“代码”部分中。

数据连接库支持

数据连接库是存储在 Office SharePoint Server 2007 或 Office Forms Server 2007 服务器上的一个列表,该列表包含数据连接文件。存储在数据连接库中的数据连接文件可以是 Excel 使用的 Office 数据连接文件 (OCD),也可以是 Office InfoPath 2007 使用的通用数据连接 V2 文件 (UDC)

每个 UDC 文件都包含可由 InfoPath 表单模板使用的数据连接设置。可以使用数据连接库中的 UDC 文件为用户表单模板(一种用户部署的表单模板,不包含需要管理员核准的代码和其他功能)定义数据连接。添加到数据连接库中的所有 UDC 文件都需要先由网站集管理员核准,然后才能被使用。还有一个单独的 UDC 文件中央存储,该存储由服务器场管理员控制,并且只能由经过管理员核准的表单模板(一种表单模板,包含一定需要管理员核准的代码和其他功能)使用。用户表单模板需要满足以下两个条件,然后才能建立与数据源的跨域连接:

  1. 服务器场管理员必须首先为整个服务器场中的用户表单模板启用跨域数据连接。
  2. 必须在数据连接库中定义任何跨域数据连接。
默认情况下,数据连接库中的项目需要由网站管理员核准,然后 InfoPath 才能使用它们。

 

在发布到 Office SharePoint Server 2007 或 Office Forms Server 2007 服务器时,表单设计者可以选择一个或多个连接,这些连接是在同一网站集的服务器上某个数据连接库中的 UDC 文件中指定的。对于基于服务器的表单,文件必须位于要将表单发布到其中的服务器上。UDC 文件可以包含特定于服务器的信息,比如替代身份验证信息,或者甚至是指向特定于服务器的连接的链接。

在设计表单模板并创建与数据连接库中某数据连接的数据连接时,InfoPath 会将指向 UDC 文件的链接放在表单模板的清单文件 (.xsf) 中。将在运行时从数据连接库中检索连接设置。这样,服务器管理员能够在部署表单后更改连接设置。

在现有表单模板中依据数据连接库指定连接  

  1. 在设计模式下打开表单模板。
  2. “工具”菜单上,单击“数据连接”
  3. 单击“添加”以启动“数据连接向导”,单击“搜索 Microsoft Office SharePoint Server 上的连接”,然后单击“下一步”

 

在创建新的空白表单时指定数据连接库中的连接  

  1. “文件”菜单上,单击“设计表单”
  2. “设计表单”对话框中,单击“连接库”图标。
从数据连接库中为列表框、下拉列表框或组合框控件指定连接  
  1. 在设计模式下打开表单模板。
  2. 显示控件的“属性”对话框。
  3. “数据”选项卡上,单击“从外部数据源查找值”,然后单击“添加”
  4. 单击“搜索 Microsoft Office SharePoint Server 上的连接”,然后单击“下一步”

 

在配置表单模板提交选项时指定数据连接库中的数据连接  

  1. 在设计模式下打开表单模板。
  2. “工具”菜单上,单击“提交选项”
  3. 单击“允许用户提交此表单”复选框。
  4. 从下拉列表中单击“来自数据连接库的连接”
  5. 单击“添加”以启动“数据连接向导”

 

在配置表单模板以便使用 HTTP Post 提交到 Web 服务器时指定数据连接库中的数据连接  

  1. 在设计模式下打开表单模板。
  2. “工具”菜单上,单击“提交选项”
  3. 单击“允许用户提交此表单”复选框。
  4. 单击“将表单数据发送到单个目标”,然后从下拉列表中选择“Web 服务器(HTTP)”
  5. 单击“修改”
  6. “提交到 Web 服务器”对话框中,单击“Office Server 连接”,然后单击“服务器连接”

 

在 Office SharePoint Server 上配置数据连接库身份验证设置  服务器管理员可以控制如何在 Office SharePoint Server 2007 或 Office Forms Server 2007 上为数据连接库中指定的连接执行某些身份验证功能。下表列出了通过单击“配置表单服务”“应用程序管理”页上的“SharePoint 3.0 管理中心”中所做的数据连接库设置。

设置 说明
要求数据源的 HTTP 身份验证使用 SSL 连接到后端数据源(如 Web 服务)的表单可能需要使用基本或摘要式身份验证进行连接,这种身份验证需要通过网络发送密码。请选中此框以便为这些身份验证类型要求 SSL 加密的连接。默认设置为 True(选定状态)。
允许嵌入式 SQL 身份验证 连接到 Microsoft SQL Server 数据库的表单可能会在连接字符串中嵌入 SQL Server 用户名和密码。可以在与表单模板关联的 UDC 文件或表单模板 manifest.xsf 文件中以明文方式看到连接字符串。请取消选中此框以防止表单使用嵌入的 SQL 凭据。默认设置为 False(未选定)。
允许用户表单模板使用数据连接文件中包含的身份验证信息 通用数据连接 (UDC) 文件可能包含替代身份验证信息,比如显式的用户名和密码,或者单一登录应用程序 ID。选中此框以允许用户表单模板使用 UDC 文件中的此替代身份验证信息。默认设置为 False(未选定)。
允许用户表单模板访问其他域中的数据 用户表单模板可以包含用于访问其他域中的数据的数据连接。选中此框以允许用户表单模板进行跨域数据访问。默认设置为 False(未选定)。

 

XML 事件

当用户使用通过 Office InfoPath 2007 创建的且已部署到 Office SharePoint Server 2007 或 Office Forms Server 2007 的表单模板时,取决于打开表单模板的方式,InfoPath 将采用以下两种方法之一在内存中存储和操作表单数据:

  • 如果在 InfoPath 中打开表单模板,则使用 Microsoft XML Core Services 5.0 (MSXML5) DOMDocument 对象(使用 InfoPath XDocument 对象的 DOM 属性来访问)。
  • 如果在 Web 浏览器中打开表单模板,则使用 Microsoft .NET Framework 2.0 XmlDocument 类。

 

通过将 XPathNavigator 类的方法与新的 Microsoft.Office.InfoPath 对象模型的类和成员结合使用,表单模板开发人员能够编写可对同时位于这些存储中的 XML 数据进行访问和更新的托管代码函数及子例程。XML 事件允许表单开发人员以编程方式取消、添加有效性验证,并为 XML 节点操作(如 Insert、Delete 和 ValueChange)定义连带影响。Office InfoPath 2007 在使用新的托管对象模型时提供了三个核心 XML 事件:ChangingValidatingChanged 事件。

  注释
Changing 事件仅在使用 Office InfoPath 2007 打开的表单模板的业务逻辑中受支持。在 Web 浏览器中打开的启用浏览器功能的表单模板中,不支持 Changing 事件。

 

为控件的 Changing、Validating 或 Changed 事件创建事件处理程序  

  注释
如果表单模板编程语言是 JScriptVBScript,或者基于使用 Microsoft.Office.Interop.InfoPath.Semitrust 命名空间的与 InfoPath 2003 兼容的语言 Visual C#Visual Basic,则无法创建这些事件处理程序。有关使用事件处理程序的详细信息,请参阅 Microsoft Visual Studio Tools for Applications (VSTA) 环境附带的文档,其中包括主题操作方法:添加事件处理程序。有关使用新的托管代码对象模型处理 XML 的详细信息,请参阅在托管代码表单模板中处理 XML

 

模板部件

表单设计者现在可以创建表单部件(称为模板部件)的库,这些部件可以包含控件、版式、架构、规则和计算。您可以将模板部件部署到共享存储库或以本地方式部署到一组计算机,以便单个或一组表单设计者能够使用它们进行新表单模板的模块化设计。例如,如果有一组包含相同页眉节的表单模板,您可以使用模板部件设计一次页眉节,然后再将该页眉节插入到每个表单模板中。

此外,您可以稍后更新模板部件的设计并将其保存回共享存储库。当表单设计者重新打开包含较旧版本模板部件的表单模板时,InfoPath 将通知用户已有更新版本的模板部件可用,并允许用户更新部件。

由于某些 InfoPath 设计功能无法在模板部件中使用,所以模板部件有独特的设计模式。如果您将模板部件保存到共享存储库,那么在表单模板设计模式下可在“控件”任务窗格的“自定义控件”部分中使用该部件。如果创建模板部件并将其以本地方式保存,则必须使用“添加或删除自定义控件”命令将模板部件添加到“控件”任务窗格中。

创建模板部件  

  1. “文件”菜单上,单击“设计表单”
  2. “设计表单”对话框中,单击“模板部件”
  3. “基于”中,单击模板部件所要基于的数据源的图标,然后单击“确定”
  4. 通过插入版式、控件、规则和数据有效性验证,可以像设计任何其他表单模板一样设计模板部件。您也可以添加数据连接以便允许自动填充下拉列表框组合框列表框控件。
  5. 要保存模板部件,请单击“文件”菜单上的“保存”。模板部件的显示名称将与在其中保存模板部件的文件的名称相同。
  6. “控件”任务窗格中,单击“添加或删除自定义控件”,单击“添加”,然后找到保存的 InfoPath 模板部件 (.xtp) 文件。
  7. 如果使用的是 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System,请在“工具箱”中单击鼠标右键,然后单击“选择项”,单击“添加”,然后找到保存的 InfoPath 模板部件 (.xtp) 文件。

 

使用模板部件  

  1. 创建一个新表单模板,并打开“控件”任务窗格。
  2. 向下滚动到“自定义”控件,然后将模板部件拖到表单上。
  注释
如果使用的是 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System,模板部件将列在“工具箱”“InfoPath”部分中的末尾。
现在,您可以使用表单模板以及其中的模板部件,就像在没有模板部件的情况下设计表单时一样。可以编辑所有控件及关联的逻辑。您还可以在模板部件的原始文件中编辑模板部件,并且您将注意到,如果之前在其他表单模板中插入了该模板部件,模板部件将通知您已有新的版本可用。
  注释
如果将更新的模板部件保存到共享存储库,您必须关闭并重新打开已在其中插入模板部件的表单模板,然后才会收到已有新版本可用的通知。如果将更新的模板部件保存到本地文件夹,则必须将模板部件重新安装到共用该模板部件的所有计算机。

 

以控件形式承载的 InfoPath 编辑器

InfoPath 表单编辑功能已分解为一组通过 IPEDITOR.DLL 动态链接库的 InfoPathEditorObject 对象公开的属性和方法。这些属性和方法允许您以 ActiveX 控件或托管 Windows 窗体控件的形式从另一个应用程序中承载 InfoPath 编辑功能的子集。

InfoPath 安装程序还会安装 Microsoft.Office.InfoPath.FormControl.dll 程序集(位于 C:\Program Files\Microsoft Office\Office12 文件夹中),该程序集封装了 InfoPathEditorObject 对象的 COM 对象模型,以在 Windows 窗体和其他 .NET 应用程序中使用控件。

  注释
使用 InfoPathEditorObject 对象获得的对象模型和使用 FormControl 对象获得的对象模型有所不同。

 

下表总结了 InfoPathEditorObject 对象提供的属性和方法:

成员 说明
CloseDocument 方法 关闭打开的 XML 文档。
DataConnectionBaseURL 属性 获取或设置用于数据连接的 URL。
FlushDocument 方法 保存或刷新加载的文档。
Host 属性 获取或设置用于访问宿主应用程序的对象模型的对象。默认情况下设置为 null
HostName 属性 获取或设置宿主应用程序的名称。
Load 方法 基于文件名的 URL 从文件系统中加载指定的 XML 文档。提供的 XML 文件必须包含处理指令(href 和 name 属性),这些指令引用用于加载和编辑 XML 文件的表单模板。
LoadFromStream 方法 从流 (IStream) 中加载指定的 XML 文档。
NewFromSolution 方法 基于指定表单模板的 URL 创建新的 InfoPath 表单文档。
NewFromSolutionWithData 方法 使用 IStream 形式的指定 XML 数据以及表单模板文件的 URL 创建新的 InfoPath 表单文档。使用此方法时,XML 文件不必包含对用于加载和编辑文件的表单模板进行引用的处理指令。
SetInitEventHandler 方法 在宿主应用程序中设置用作 Initialize 事件的回调函数的函数,将在 InfoPath OnLoad 事件之前调用该函数。
SetNotifyHostEventHandler 方法 在宿主应用程序中设置用作回调函数的函数,用于向宿主应用程序通知更改。
SetSubmitToHostEventHandler 方法 在宿主应用程序中设置将数据提交回宿主应用程序时用作回调函数的函数。要配置用于提交到宿主应用程序的数据连接,请在 InfoPath 设计模式下打开表单模板,在“工具”菜单上单击“提交选项”。选中“允许用户提交此表单”复选框,在下拉列表中选择“宿主环境”,然后单击“添加”
XDocument 属性 获取用于处理 InfoPath 对象模型成员的 DOM 文档对象。
  注释
如果正在使用 Microsoft.Office.InfoPath.FormControl 程序集,则此属性名为 XmlForm,并获取用于对 InfoPath 对象模型成员进行处理的 XmlForm 对象。
InfoPathEditorObject 对象默认情况下未提供 InfoPath 工具栏和菜单栏;但是,已通过 IOLECommandTarget 接口公开了 InfoPath 编辑器菜单和任务窗格中的每个命令。宿主应用程序随后可通过该接口执行这些命令,并允许开发人员根据需要完全、部分复制此功能或根本不复制。

 

有关使用 IOLECommandTarget 接口处理 InfoPath 命令的信息,请参阅 MSDN 上的 InfoPath Developer Portal 上标题为“在自定义 Windows 窗体应用程序中承载 Infopath 表单编辑环境”的文章,其中包括指向示例 Visual Studio 项目的链接。

将 InfoPath 编辑器控件添加到 Windows 窗体应用程序  

  1. 创建一个新的 Windows 应用程序项目。
  2. 将 InfoPath FormControl 添加到“工具箱”作为一个 .NET Framework 组件(位于 C:\Program Files\Microsoft Office\Office12 中的 Microsoft.Office.InfoPath.FormControl.dll 程序集)。
  3. FormControl 控件拖到 Windows 窗体上。
  4. Button 控件添加到 Windows 窗体。
  5. 为 Button 控件编写一个 Click 事件处理程序,用于将 InfoPath 表单 XML 文件加载到 FormControl 中(例如,formControl1.New(@"C:\hello.xml");)
  6. 构建并运行应用程序。
本示例假设名为“hello.xml”的 InfoPath XML 文件存在于 C:\hello.xml 处。

 

为了使用本示例中使用的 New 方法,XML 文件必须有使用 hrefname 属性的处理指令引用,这些引用在文件头中指定 InfoPath 表单模板文件 (.xsn)。如果无法实现这一点,则可以使用 NewFromFormTemplate(string, System.IO.Stream,Microsoft.Office.InfoPath.XmlFormOpenMode) 方法从 System.IO.Stream 中加载 XML,或者,如果有 .xsn 文件和结构适当的 XML 文件,但 XML 文件未包含指定 .xsn 文件的处理指令引用,您可以使用 NewFromFormTemplate(string) 方法。FormControl 对象的 NewFromFormTemplate 方法对应于 InfoPathEditor 对象的 NewFromSolutionLoadFromStream 方法。

 

posted on 2007-11-01 10:48  Dragon-China  阅读(1779)  评论(0编辑  收藏  举报