65.9K
CodeProject 正在变化。 阅读更多。
Home

MOSS 开发人员 - 第 2 部分:开发人员的数据列表

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009 年 7 月 9 日

Ms-PL

11分钟阅读

viewsIcon

20144

从开发者的角度提供数据列表的概述。本文是 www.myrampup.com MOSS 内容的第二部分。

本文及其在 MSDN 上的原始文章均为 Microsoft 服务器/工具部门的财产,并经其许可发布。

引言

SharePoint 数据列表在某种程度上类似于数据库表,从列表的角度来看,它有一组列,就像数据库表有一组列一样;它有一组行,即列表中的项,就像数据库表有一组项一样。然而,与数据库表不同的是,数据列表开始区分并提供比单纯的行和列更多的功能。

例如,列表本身就有一组与之关联的表单,用于输入新数据、显示数据和更改数据。这些是 SharePoint 列表中固有的功能。用户界面已经内置。

它还有一个查看列表数据的视图。在传统的数据库表中,如果您考虑一下,您不会获得任何用户界面体验。SharePoint 的一个优点是,使用列表作为数据源,您需要自行构建的许多用户界面已经内置好了。

此外,模式(schema)可由用户更改。例如,如果您需要给予用户足够的权限来更改列表模式,他们可以自行完成。

SharePoint 管理列表数据的另一个非常有价值的功能是 Web 部件,即列表视图 Web 部件和数据视图 Web 部件。列表视图是您在添加 Web 部件时看到的那个,它位于顶部,与您的所有列表匹配。

另一个重要功能是列表类型。列表类型可以看作是预构建的模式,并提供预构建的功能。当您查看列表实例时,该实例是基于 SharePoint 中该类型的“模板”创建的。我喜欢的一种思考方式是,它是一个橡皮图章。列表类型是一个橡皮图章,上面可能有一个审批块,您将其盖在表单上,它就会留下印记。如果您向模板添加新字段;从该模板创建的列表将继承新字段。

我们可以在从模板创建列表实例后对其进行管理。我们创建一个模板,得到一组字段,一组默认行为,然后我们可以对其进行更改:删除字段,添加字段,如果安装了 SharePoint 客户端,还可以更改表单。

列表还支持附件,这一点很重要。因此,它不仅仅是一行数据,而是一行可以支持多个附件的数据。所以,如果我想向这个休假申请内容类型或此列表项添加内容,如果我添加一个文档,比如某人的签名,表示我确实可以休假,他们还会支付我去迪士尼乐园的费用,或者任何其他内容,我都可以做到,因为我可以向列表添加附件。因此,尽管您可以将列表视为数据库表,但在实际功能方面,它与数据库表有所不同,SharePoint 列表提供了许多数据库表不具备的高级功能。

另一种类型的列表称为文档库。从代码角度来看,文档库只是一个特殊的列表,它至少始终包含一个文档内容类型。

文档库提供的一个优势是与 Office 客户端集成,您所有的 Office 工具,如 Word、Excel、PowerPoint 等,都知道如何直接与这些文档库进行通信。您可以执行“文件”->“另存为”,然后直接进入 SharePoint 文档库。这种集成对于构建您的应用程序非常有益。您无需构建用户将文档上传到系统的方法;所有这些基础设施都已内置。

文档库也支持版本,就像其他任何列表一样。文档库默认情况下会将数据放入 SharePoint 内容数据库,该内容数据库是一个站点集(site collection)包含所有文档。如果您上传 Word 文档,它将成为数据库中的一个记录,并附带一个二进制大对象(BLOB),即您的文件。

列表中的文件夹

文件夹——Windows SharePoint Services 2.0 中文档库的一个流行功能——现在也已在列表中可用。文件夹允许在单个列表中更精细地划分内容,增加了另一层灵活性。

文件夹的一个新功能是能够为特定文件夹分配元数据。这创建了一个丰富的内容持有者,其中包含子内容,同时又不仅仅是一个容器。本质上,这允许文件夹作为独立但功能齐全的项类型运行。Windows SharePoint Services 讨论区中的一个例子展示了这一点。每个顶级讨论都是一个带有元数据的文件夹,其中包含一个或多个子对象。通过修改文件夹的外观,用户可以将文件夹视为另一个列表项,而不是容器。您可以在自定义列表中使用此模型来创建动态的父/子列表。

许多业务应用程序需要丰富的容器对象,其中父对象包含有关其自身的重要数据,以及一个或多个包含相似数据的子对象。通常,您会通过使用列表来处理此挑战,其中父(或主)列表的选择会驱动子(或详细)列表的显示。因为您现在可以将元数据分配给 SharePoint 列表中的文件夹,所以您可以使用单个列表来实现类似的功能。

例如,考虑一个“订单”列表。您可以将一个文件夹配置为一个订单,然后为其分配元数据,例如订单号客户配送方式。通过这样做,您可以使文件夹模拟主列表的功能。然后,您可以将订单列表项填充到文件夹中,每个订单项都有自己的元数据,例如描述价格,从而在单个列表中提供主/详细列表的丰富功能。

列表索引

作为平台,Windows SharePoint Services 的一个重要组成部分是能够使用其存储容器,特别是列表和文档库,进行应用程序存储。Windows SharePoint Services 3.0 通过提供一个丰富的存储模型,其性能足以支持外部应用程序和基于该平台构建的应用程序,从而扩展了将列表和库用于此目的的能力。Windows SharePoint Services 3.0 增强其存储容器的一个关键方法是包含列的索引。通过允许对列进行索引并将其数据存储在单独的数据库中作为简单的名称-值对,可以显著提高访问大型列表中特定项的速度。

列表索引使 SharePoint 列表成为真正的数​​据存储,能够支持外部应用程序以及简单的团队网站。例如,在前面描述的“订单”列表中,对订单号列进行索引可以显著提高外部请求中访问特定列表项的速度。对于拥有数十万条记录的外部应用程序,在列上进行索引可以大大提高性能,并使其更容易将 SharePoint 列表用作存储设备。平台的标准功能,如视图、警报和 RSS 源,可以用作简单团队网站中用于内部使用的数据存储浏览器。

跨列表查询

为了更有效地利用 Windows SharePoint Services 存储而进行的另一项改进是跨列表查询。跨列表查询允许您使用 SPQuery 对象来查询网站或站点集内的所有列表。在 Windows SharePoint Services 2.0 中,您必须遍历父对象以获取列表对象的集合,查询列表以返回项,然后从多个列表中构建自己的列表项集合。 SPSiteDataQuery 类允许您快速高效地执行跨列表查询,在 Windows SharePoint Services 中提供类似于 SQL 查询的丰富查询功能。

列表项版本

Windows SharePoint Services 3.0 中的几项改进是在项级别而不是在整个列表级别实现的。以下是几项重要的新功能列表。

  • 每个项的安全设置    列表和文档库提供每个项的安全设置,并允许在每个项上设置角色,而不是仅仅在列表级别设置。如果您将每个项的安全设置与其他功能(如列表事件或可扩展字段类型)结合使用,您可以根据另一字段中的条目来更改谁有权访问某个项。例如,更改项的状态可能会触发对谁有权编辑该项的更改。
  • 版本控制    在 Windows SharePoint Services 2.0 中,只有文档库允许版本控制,而且当时只创建主要版本。这种基本功能不符合通常与文档相关的流程,即在文档处于草稿版本时的创建和编辑过程,然后将文档发布为公开状态。

Windows SharePoint Services 3.0 提供了一个新的、更丰富版本模型。该模型包括主要版本和次要版本,以及列表和文档库中的版本控制。此外,主要版本和次要版本可以具有不同的安全性,从而允许独立的草稿和公开版本流程。版本与丰富的事件模型相关联,该模型支持多种场景,包括自定义工作流、项验证和信息传播。

  • 必需检出    在 Windows SharePoint Services 2.0 中,用户可以在不从文档库检出文档的情况下修改文档,这允许多个用户编辑同一文档,并留下复杂的合并/覆盖场景。在 Windows SharePoint Services 3.0 中,只有在文档已检出时才允许编辑文档。这种强制检出定义了清晰的所有者模型并简化了

使用列表对象和集合

要在 SharePoint 网站中对列表数据执行操作,您必须首先获取一个 SPWeb 对象,作为对象模型的入口点,允许您访问列表、项、文档、用户、警报等。有关如何返回 SharePoint 网站的信息,请参阅获取网站、Web 应用程序和其他关键对象的引用

对象

Microsoft.SharePoint 和 Microsoft.SharePoint.Administration 命名空间中的大多数类都以 **SP** 开头。通常,Microsoft.SharePoint 程序集中的不以该前缀开头的类代表 Web 窗体控件。

Windows SharePoint Services 通常不会将对象属性的修改保存到数据库,直到您调用给定对象的 **Update** 方法。以下示例显示了如何更改“任务”列表的标题和描述。

集合

正如列表位于 SharePoint 网站的中心一样,集合也位于其对象模型的中心。您可以使用每个集合来添加、删除、枚举和更新一种类型的对象。集合类通常具有以下特征:

  • 名称以“Collection”结尾。
  • 实现 **System.Collections.ICollection** 接口。
  • 具有 Int32 类型的 **Count** 属性。
  • 具有一个 Int32 索引器,可用于获取集合中的第 n 个项。
  • 具有一个接受项标识符的索引器。
  • 具有 **Add** 和 **Delete** 方法。

调用集合的 **Add** 方法通常会将数据更新到后端服务器的数据库,除非需要额外的信息才能更新数据。在这种情况下,使用 **Add** 方法会返回一个可用于收集信息的对象。例如,要向列表添加项,首先使用 Microsoft.SharePoint.SPListItemCollection 类的 **Add** 方法来返回一个 SPListItem 对象,为该对象的相应属性赋值,然后调用 **Update** 方法来生效内容数据库中的更改。

索引器 (Indexers)

索引器提供了一种方便的方式来访问集合中的单个项。要返回一个项,在 C# 中使用方括号 ( **[]** ),在 Visual Basic 中使用圆括号 ( **()** ) 来包含一个索引或一个标识集合中该项的字符串。

例如,如果 mySite 代表 SPWeb 类的实例,则在 C# 中 SPList myList = mySite.Lists["Announcements"] 返回“Announcements”列表,而在 Visual Basic 中 Dim myList As SPList = mySite.Lists("Announcements") 返回相同的列表。然后,您可以使用列表对象的 **Items** 属性来返回列表中的所有列表项(在 C# 中为 SPListItemCollection myItems = myList.Items,在 Visual Basic 中为 Dim myItems As SPListItemCollection = myList.Items)。要仅返回列表的子集项,您可以调用列表对象的 GetItems 方法并传递一个 SPQuery 对象来指定子集:SPListItemCollection myItems = myList.GetItems(myQuery)(在 Visual Basic 中为 Dim myItems As SPListItemCollection = myList.GetItems(myQuery))。

您可以使用索引器返回列表中的特定字段(例如,在 C# 中为 myList.Items["Field_Name"],在 Visual Basic 中为 myList.Items("Field_Name"))。您还可以在索引器中指定字段名,并遍历列表中的项集合以返回字段中的值。

© . All rights reserved.