如何:使用 Microsoft InfoPath 自定义外部列表窗体

上次修改时间: 2010年4月16日

适用范围: SharePoint Server 2010

Microsoft Business Connectivity Services (BCS) 会生成默认 SharePoint 表单以自动从外部列表查看、创建和编辑项。但可限制这些基本 Web 部件表单上的自定义选项。若要执行各种自定义或向表单添加声明性规则或业务逻辑,则可通过使用 Microsoft InfoPath 2010 表单,替换外部列表的默认 SharePoint CreateViewUpdate 表单。

将默认 SharePoint 表单替换为 InfoPath 表单

  1. 在浏览器中,导航到外部列表。

  2. 在服务器功能区上,单击"编辑列表"。这将在 Microsoft SharePoint Designer 2010 中打开外部列表。

  3. 在功能区上,单击"在 InfoPath 中设计表单"按钮,如图 1 所示。

    图 1. 将默认 SharePoint 表单替换为 InfoPath 表单

    在 InfoPath 中设计表单

  4. 使用项(如自定义类型)设计所需的表单。将自动生成用于简单字段的控件;但对于复杂类型,必须从工具箱中拖动自己的控件。

  5. 完成此操作后,在"文件"菜单上,单击"快速发布"以将表单重新发布到服务器。

    此时您可以导航到外部列表,并创建项或查看项。显示的表单是新 InfoPath 表单而非默认 SharePoint 表单。

自定义表单的外观

可使用 InfoPath 自定义外部列表表单的外观和行为。在 InfoPath 2010 - 自定义 SharePoint 列表表单(该链接可能指向英文页面)这一视频中,InfoPath 产品团队的项目经理 Daniel Broekman 将向您演示如何使用 InfoPath 2010 快速自定义 SharePoint 列表表单。您可以按视频中演示的同一过程执行操作,来将默认 SharePoint 外部列表表单替换为 InfoPath 表单,并对其进行自定义以更改其外观和行为。

向表单添加声明性规则或业务逻辑

可以向 InfoPath 中的表单添加声明性规则或业务逻辑,而无需编写代码。例如,可创建一条规则,以将邮政编码项限制为五位数 (12345),或使用户输入特定格式的电话号码。"InfoPath 2010 - 自定义 SharePoint 列表表单"视频还演示如何向表单添加声明性规则和业务逻辑。

呈现复杂类型

当需要呈现和编辑在外部系统中定义的复杂类型时,将 SharePoint 表单替换为 InfoPath 2010 表单最有用。例如,考虑由外部内容类型的 SpecificFinder 返回的 Address 字段。此 Address 字段可以是外部系统中的复杂类型,其中包含多个子类型,如图 2 所示。

图 2. SharePoint Designer 2010 中的复杂类型

SharePoint Designer 中的复杂类型

注意 SharePoint Designer 中显示的警告。如果 Microsoft Business Connectivity Services (BCS) 在 SpecificFinder 的返回参数中发现此类复杂类型,则它将忽略常规 SharePoint 外部列表表单中的此字段。图 3 显示包含此 Address 复杂类型的外部列表的默认查看项页。请注意,将跳过 Address 字段,并且表单中不会显示此字段。另外,如果 Address 字段是外部系统中的 CreateUpdate 操作的必填字段,则无法创建或编辑客户项。

图 3. 包含复杂类型的外部列表的默认查看项页

查看包含复杂类型的项目

在此情况下,可以将表单转换为 InfoPath。由于 SpecificFinder 具有复杂类型(在示例中为 Address),因此 Business Connectivity Services 不创建带所有必填字段和控件的表单。相反,它会创建一个空白 InfoPath 表单,而不向表单添加字段,如图 4 所示。

图 4. 空白 InfoPath 表单

空白 Infopath 表单

若要解决此问题,您可从任务窗格的"字段"部分拖动"dataFields"字段。但此操作仅在可使用 InfoPath 中可用的控件来显示复杂类型的所有子类型时有效。例如,在 Address 示例中,可使用"Text"字段控件来显示其所有子类型。

如果无法使用 InfoPath 中的任何可用控件来显示某个复杂(或自定义)类型或其子类型之一,则必须设计自定义 InfoPath 控件,并使用此控件来显示该字段。如果添加自定义 InfoPath 控件,则无法将表单发布到服务器。

在设计表单后,可保存表单并将其快速发布到当前位置。外部列表表单将开始显示所有字段。图 5 显示的是转换为 InfoPath 之后的外部列表查看项表单。此处只需将"dataFields"控件拖入表单的设计区域。

图 5. 已转换为 InfoPath 的外部列表查看项表单

查看升迁到 InfoPath 的项目表单

请注意,将显示 Address 字段及其所有子类型。如果外部内容类型已定义 Create 和 Update 操作,则可使用外部列表表单创建和编辑客户项。

嵌入外部项选取器控件

对于用户需要选取外部项(如客户列表中的客户 John)的方案,InfoPath 2010 提供一个可用于在表单中嵌入选取器的外部项选取器控件。外部项选取器提供针对服务器上和富客户端 Microsoft Office 应用程序中的外部项的选取和解析功能。

如果为 BDC 元数据存储中的外部内容类型设置关联,并为包含外键的某个外部内容类型设置外部列表表单,则 Business Connectivity Services 会自动向该字段所在的表单添加选取器控件。例如,考虑一个客户/订单方案。假定已设置外部内容类型和关联。如果将 Order 外部列表表单升迁到 InfoPath,则默认情况下,Business Connectivity Services 会在 Order 表单中放入针对 CustomerID 字段的外部项选取器控件。这使用户能在处理订单时轻松找到所需客户。

不过,如果自动生成的 InfoPath 表单因 SpecificFinder 具有一个或多个复杂类型而为空,则必须从功能区拖动外部项选取器控件并设置所需的属性。有关信息,请参阅如何:在 InfoPath 表单中嵌入外部项选择器控件

创建表单的多个视图

外部列表 InfoPath 表单可具有多个视图。这对于一次写入方案(在此方案中,外部系统不允许您在创建一个字段后更新该字段)中特别有用。在此情况下,可以创建两个视图,一个针对 Create 操作的视图和一个针对 Update 操作的只读视图。可以更新 CreateEdit 的 .aspx 页以显示表单的正确视图。

添加代码隐藏或规则

最后,可向 InfoPath 表单添加代码隐藏或规则。(有关如何向 InfoPath 表单添加代码隐藏的信息,请参阅"针对表单模板的 InfoPath 2010 开发人员参考"。有关如何向 InfoPath 表单添加规则的信息,请参阅 InfoPath 2010 帮助。)可添加代码隐藏或规则以对数据输入执行其他业务逻辑。例如,可添加代码隐藏或规则以确保输入的邮政编码是有效的美国邮政编码,或确保国家/地区代码有效。还可在代码中使用 Business Connectivity Services 对象模型以访问外部系统或者在代码中使用 BDC 元数据存储。具有代码隐藏的表单需要客户端上的完全信任,并需要管理员权限。

重要注释重要说明
  • 必须从 Business Connectivity Services 提供的自动生成的 InfoPath 表单开始创建外部列表 InfoPath 表单。

  • 外部列表表单无法连接到任何其他数据源,也就是说,表单中不能包含任何辅助数据连接。

  • 在将外部列表表单转换为 InfoPath 时,如果 SpecificFinder 具有复杂类型,则会生成一个空白视图。必须从任务窗格拖动"dataFields"控件。

  • 如果无法使用 Microsoft InfoPath 中的任何可用控件来显示某个复杂(或自定义)类型或其子类型之一,则必须设计自定义 InfoPath 控件,并使用此控件来显示该字段。

  • 可以向 InfoPath 中的表单添加声明性规则或业务逻辑,而无需编写代码。

  • 可向 InfoPath 表单添加代码隐藏,以包含针对数据输入的其他业务逻辑。还可在代码中使用 Business Connectivity Services 对象模型来访问外部系统或在代码中使用 BDC 元数据存储。

  • 服务器端外部列表 .aspx 页可指向自定义 InfoPath 表单。但当外部列表处于脱机状态时,此类表单不会呈现在客户端上。

  • 如果外部内容类型和外部列表表单的版本不匹配,则在脱机状态下,表单可能无法在服务器和客户端上工作。在此情况下,可能需要将表单重新发布到服务器。