上次修改时间: 2010年4月16日
适用范围: SharePoint Server 2010
本文内容
BCS 中的复杂类型概述
通过字符串格式在 BCS 外部内容类型中进行复杂格式设置
与 SharePoint 兼容的服务层
.NET 连接程序集
通过自定义字段类型扩展外部列表类型系统
自定义 SharePoint 列表表单
自定义 InfoPath 表单
通过使用 Microsoft Business Connectivity Services (BCS),可以按多种方式在外部列表中显示复杂的数据类型。复杂类型是包含其他子类型的数据类型,如由街道、城市、国家/地区和邮政编码字段构成的地址。默认情况下,虽然外部内容类型的架构支持复杂类型,但无法在 Microsoft SharePoint 2010 和 Microsoft Office 2010 中的表示层中显示复杂类型。为此,您必须执行其他步骤以显示这些复杂类型。本主题概述了 Business Connectivity Services 中的复杂类型,并提供用于在用户界面中显示这些复杂类型的各种解决方案。
BCS 中的复杂类型概述
外部系统中的数据经常是通过具有复杂的消息结构的细分 Web 服务来公开的。虽然外部内容类型的架构几乎支持具有任何复杂度的参数数据结构,但复杂类型还是会与 SharePoint 和 Microsoft Office 中的演示技术不兼容。
外部内容类型定义了构造型操作,其中的多个操作需要技术上复杂的参数结构。特定的查找工具(在 SharePoint Designer 中也称作 Read Item)必须返回一个包含外部内容类型的字段集的复杂类型,例如,具有字段"CustomerID"、"Name"和"PhoneNumber"的类型"Customer"。此结构的子元素将映射到外部列表的列。大多数外部内容类型都包含一个查找工具方法,该方法返回与特定查找工具相同的类型集。当任意字段具有子元素时或如果某个字段属于演示技术不支持的类型,则将出现问题;例如,如果向客户结构添加一个"CustomerAddress"字段,该字段反过来会具有定义"街道"、"城市"、"国家/地区"和"邮政编码"的子元素。
外部列表是用于显示 SharePoint 中的外部数据的主用户界面组件之一。根据设计,外部列表是数据的基于行的平面表示形式。无需开发人员执行额外的工作,即可从列表视图中略去 SharePoint 列表类型系统中不支持的复杂类型和简单类型。
如果可使用 Microsoft .NET Framework 格式字符串将复杂类型转换为简单字符串(请参阅本主题后面的通过字符串格式在 BCS 外部内容类型中进行复杂格式设置),则 Business Connectivity Services 外部内容类型架构支持针对只读方案的复杂格式的概念。如果只读支持不够用或如果无法使用此方法转换复杂类型,则 SharePoint 2010 提供创建自定义字段类型的功能,这些字段类型可提供对外部列表和列表项表单中的呈现和编辑行为的控制。
表单是外部列表项的主用户界面。复杂类型为表单的生成带来了挑战,因为很难在自动设计表单的同时维持最基本的视觉效果。外部列表可与 SharePoint 列表表单(基于 ASP.NET)或 Microsoft InfoPath 2010 表单关联。本主题中的自定义 SharePoint 列表表单一节和自定义 InfoPath 表单一节介绍如何在这些表单中显示复杂类型。
通过字符串格式在 BCS 外部内容类型中进行复杂格式设置
在复杂类型在外部列表中为只读且可转换为字符串的方案中,Business Connectivity Services 支持类型说明符上的格式字符串的概念,以在外部列表或项目表单中将复杂类型作为字符串呈现。以下示例使用字符串格式转换前面提到的 Customer 复杂类型。
<TypeDescriptor TypeName="CustomerAddress" IsCollection="false" Name="CustomerAddresses" >
<TypeDescriptors>
<TypeDescriptor TypeName=" CustomerAddress " Name="CustomerAddress" >
<Properties>
<Property Name="ComplexFormatting" Type="System.String" />
<Property Name="FormatString" Type="System.String">{0}, {1}, {2} {3}</Property>
</Properties>
<TypeDescriptors>
<TypeDescriptor TypeName="System.String" Name="Street"/>
<TypeDescriptor TypeName="System.String" Name="City" />
<TypeDescriptor TypeName="System.String" Name="StateProvince" />
<TypeDescriptor TypeName="System.String" Name="PostalCode" />
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
与 SharePoint 兼容的服务层
从结构上说,使用复杂数据类型的最佳方法是创建一个具有平面参数结构的服务层,并且此参数结构存在于演示层的限制之内。为了继续上一节中的示例,如果 Web 服务返回表示同一级别的客户的所有字段,则 SharePoint 可以呈现和编辑客户项而不进行任何修改。
但是,您必须权衡使用此方法编写、承载和维护自定义代码所产生的开销与使用复杂服务处理每个应用程序的表示层中的复杂类型所产生的开销。在许多企业部署中,已存在一个服务层,特别是对在多个应用程序中广泛使用的业务实体(如 Customer 或 Product)。添加用于 SharePoint 2010 的方法所产生的费用可能低于在每个应用程序中处理类型复杂性所产生的费用。
.NET 连接程序集
如果无法选择添加或扩展服务层,则 SharePoint 2010 会让您使用封装外部内容类型操作所隐藏的业务逻辑的类来包装外部内容类型定义。可通过使用 Visual Studio 2010 中的业务数据连接设计器来定义外部内容类型的平展界面,并实现该工具生成的代码存根中所需的任何聚合和类型转换逻辑。在完成该实现后,可使用 Visual Studio 生成一个解决方案包(.wsp 文件),其中包含外部内容类型定义和可导入 SharePoint 2010 中的程序集。
备注
若要导入此类包,则必须具有场管理员权限,这是因为外部内容类型所隐藏的代码是在完全信任模式下运行的。有关创建 .NET 连接器程序集的信息,请参阅由 Boris Scholl 编写的在 Visual Studio 2010 中使用 SharePoint 业务数据连接设计器(该链接可能指向英文页面)。
由于并不总是能选择修改后端服务的行为,因此 SharePoint 2010 另外提供了多种方法来扩展表示层以处理复杂类型。
通过自定义字段类型扩展外部列表类型系统
SharePoint 2010 列表体系结构支持一组通用数据类型,这些类型足以满足最常见的数据输入方案的需求。为了表示复杂的业务数据项(如地址),SharePoint 2010 提供了一种定义自定义字段类型的方式,使您可跨 SharePoint 场上的所有网站使用这些类型。自定义字段类型定义文件是自定义字段类型的核心。该文件不仅定义了字段在列表和项视图上的呈现方式,还定义了任何变量属性以及对实现该字段类型的程序集的引用。字段类继承自 SPField,并表示基于自定义字段类型的特定字段。字段类定义了功能(例如,基于自定义字段的列排序);定义了列表和内容数据库中的单元格的行为,并可实现自定义验证逻辑。
大多数复杂的自定义字段类型还需要一个呈现控件类、一个呈现模板或一个自定义值类。有关自定义字段类型的详细信息,请参阅自定义字段类型和演练:创建自定义字段类型。
在定义完自定义类型后,可通过使用外部内容类型定义中的类型描述符来引用该类型,如以下示例所示。
<TypeDescriptor TypeName="Customer.Address" Name="CustomerAddress" DefaultDisplayName="Customer Address">
<Properties>
<Property Name="SPCustomFieldType" Type="Customer.Address">Customer Address</Property>
</Properties>
</TypeDescriptor>
利用该类型描述符定义,基于外部内容类型的外部列表可确定该类型描述符"CustomerAddress"引用了自定义字段类型并适当呈现该类型。
自定义 SharePoint 列表表单
在创建新的外部列表时,SharePoint 2010 会自动生成表单以便能创建、编辑和查看列表项。SharePoint 表单基于 .NET Framework 控件并共享其扩展性功能,可使用这些功能来适当呈现复杂类型。本主题中所述的自定义字段类型是最常用于复杂类型的扩展性机制。在更简单的情形中,您可能能够扩展本机 SharePoint Foundation 字段。有关列表表单自定义的详细信息,请参阅列表表单。
自定义 InfoPath 表单
SharePoint 2010 还支持使用 InfoPath 表单来查看和编辑列表项。InfoPath 提供了一些功能,非开发人员可利用这些功能轻松创建具有功能强大的验证和条件格式的精美表单。相对于标准列表表单,InfoPath 表单具备的另一大优势是,它能够在浏览器内部使用或用作独立表单,或在富客户端中使用。InfoPath 表单是在 Microsoft SharePoint Workspace 2010 中脱机使用外部列表数据所采用的表单技术。在 SharePoint 2010 中,您无法在 InfoPath Designer 中开始创建外部列表的 InfoPath 表单。相反,您可在 SharePoint Designer 中从外部列表或外部内容类型设计器生成 InfoPath 表单。在生成这些表单后,可在 InfoPath Designer 中对其进行自定义。
对于包含复杂类型的外部内容类型,默认情况下难以生成外观精美的布局。因此,表单生成器会生成一个空白表单。但由于 InfoPath 不支持设计器中的复杂类型,因此在生成表单后,可在 InfoPath Designer 中从 SharePoint Designer 中的外部列表设计器打开该表单。字段列表中提供了这些自定义类型(请参阅图 1),并可手动排列它们。
图 1. InfoPath Designer 中的字段列表
.gif)
在完成自定义设置后,您必须使用"文件"菜单上的"快速发布"按钮将更新后的表单发布回外部列表。
图 2. in InfoPath Designer 中的"快速发布"按钮
.gif)