上次修改时间: 2015年3月9日
适用范围: SharePoint Foundation 2010
使第三方客户端与 Microsoft SharePoint Foundation 2010 同步的最有效的方法是只下载上次同步后更改的那些项目。可以在 SharePoint Foundation 2010 中通过调用 GetListItemChangesSinceToken Web 方法做到这一点。
GetListItem 从列表返回所有项。GetListItem 不包含任何用于仅获取已更改项目的方法。有关从列表中返回项的示例,请参阅如何:返回列表项。
GetListItemChangesSinceToken 方法允许客户端跟踪列表的更改。更改(包括已删除项目)与表示请求这些更改的时间的令牌一起返回。通过在调用 GetListItemChangesSinceToken 时包括此令牌,服务器会仅查找生成该令牌后发生的那些更改。发送不包含令牌的 GetListItemChangesSinceToken 请求会返回列表架构、完整的列表内容和一个令牌。
备注
如果列表架构本身已更改,则 GetListItemChangesSinceToken 会返回整个列表架构、完整的列表内容和一个令牌。
请求和响应对象
请求和响应对象表示从浏览器进入 Web 服务器的信息和从服务器发出、到达浏览器的信息。请求对象称为输入对象,响应对象称为输出对象。
请求对象
GetListItemChangesSinceToken 使用下列参数:
表 1:请求参数
元素 |
说明 |
|---|---|
用于发现上次调用后已更改的令牌。由于此令牌的格式将来可能会更改,因此不应分析或构造此令牌。 |
|
应用于查询结果的 CAML 筛选器。它是 T:Microsoft.SharePoint.SPQuery 中的"Where"子句。 备注 不要与 query 元素一起使用。 |
|
包含列表的显示名称或列表标识符 (ID) 的字符串,它表示为 GUID。为获得更好的性能,建议使用 GUID,且必须由大括号 ({}) 括起来。 |
|
包含确定返回哪些记录以及这些记录的顺序的查询元素。与 GetListItems 和 SPQuery 中使用的 CAML 查询类似的协作应用程序标记语言 (CAML) 查询。有关详细信息,请参阅 SharePoint Foundation SDK 中的 GetListItems 和 SPQuery。 备注 不适合与 contains 参数一起使用。 |
|
包含 T:Microsoft.SharePoint.SPQuery 对象的各个属性的单独节点的 XML 片段。 |
|
指定在一页上显示的项数或行数的字符串。此参数的值将替代由 viewName 参数指定的视图中设置的行限制或列表的默认视图中设置的行限制。rowLimit 是将返回的值的最大数目。此标记用于分页。 |
|
指定查询中返回哪些字段,以及这些字段的顺序。<ViewFields /> 返回列表中的所有字段。Properties=TRUE 属性 (Attribute) 可将 MetaInfo 字段分割为单独的、解码的属性 (Property)。 |
|
包含视图的 GUID 的字符串,确定由 query、viewFields 和 rowLimit 形参表示的属性的默认视图。如果未提供此实参,则会假定默认视图。如果提供此实参,则 query、viewFields 或 rowLimit 形参的值会替代视图中的等效设置。例如,如果 viewFields 形参指定的视图包含的行限制为 100 行,而 rowLimit 形参包含 1,000,则会在响应时返回 1,000 行。 |
查询选项参数
queryOptions 元素可能包含大量修改查询的标记。对于 Boolean 选项,默认值为 FALSE。必须输入 TRUE(全部字母大写)值才能启用 Boolean 选项。
下表显示可在通过 queryOptions 参数传递的协作应用程序标记语言 (CAML) 片段中使用的元素。
表 2:可用查询选项标记
元素 |
说明 |
|---|---|
< DateInUtc> |
以协调世界时 (UTC) 格式和区域返回的数据字段。 UTC 是格林威治时间 (GMT) 的公认名称,以国际标准化组织 (ISO)(通常为 ISO6801)指定的格式表示,如下所示: 2006-10-04T10:00:00Z 标准格式以本地(服务器)时间区域表示(如上所示),但 T 和 Z 由空格替换。 |
<ExpandUserField> |
用户字段值的特殊呈现,可使这些字段值在显示时包括登录名、电子邮件、SipAddress 和标题。这会使用户字段的行为与 multilookup 字段相同。 扩展中使用的查阅字段为"Name"、"EMail"、"SipAddress"和"Title"。这些值由 ,# 隔开。查阅字段名称中的所有逗号编码为 ,,。 下列值出现在每个项目的常见字段数据中。 <ExpandUserField>FALSE</ExpandUserField> 类似于:ows_Author="1;#Admin AdminName" 和 <ExpandUserField>TRUE</ExpandUserField> 类似于:ows_Author="1;#Admin AdminName,#login\name,#email@address,#sip@address,#Admin AdminName " |
<ExtraIds>1,4,23</ExtraIds> |
用于包含返回的集中的额外项,无论这些项目是否已发生更改。ExtraId 通常用于指定文件夹的 ID,当您在文档库中并选择"连接到…",然后选择特定文件夹时,会同步到该文件夹。您通常会获得特定文件夹名称,而不是返回整个文档库。客户端可以检测层次结构中的所有文件夹的删除或重命名时间。 备注 此标记只应与更改令牌一起使用。 除非已对列表完成某些更改,并且获取已更改项目的查询也使用 ID,否则不返回文件夹名称。 |
<Folder> |
设置视图的根文件夹作用域。它是相对于服务器的 URL。 <文件夹>Shared Documents/foldername</文件夹> |
<IncludeAttachmentUrls> |
将对 Attachments 字段返回的值从 Boolean 值更改为完整的 URL 列表(由 ;# 隔开) |
<IncludeAttachmentVersion> |
与 IncludeAttachmentUrls 结合使用,此标记返回在验证更新时用于冲突检测的 GUID 和版本号。 |
<IncludeMandatoryColumns> |
确保包括根据需要定义的字段,即使 viewFields 中未指定。此选项可能会令人误解,因为 SharePoint Foundation 确实有一组单独的必填字段,这些必填字段通常以独立于此选项的方式返回。 |
<IncludePermissions> |
客户端可用于请求单个项目权限的一种方法。如果为 TRUE,则请求单个项目权限。 |
<MeetingInstanceId> |
一个整数值,其中的正数表示特定会议实例。负数具有以下含义:-3 = UnSpecified、-2 = AllWithSeries、-1 = AllButSeries、0 = Series。此元素是可选的,其默认值为 -1。负值与 Microsoft.SharePoint.Meetings.SPMeeting.SpecialInstance 枚举的值相对应。 |
<OptimizeFor> |
支持的值包括:
只要未请求查询或周期顺序,ItemIds 就为默认值。此标记可使用 ID 顺序优化 SQL Server 查询。 FolderUrls 可优化筛选为一个或多个文件夹的普通内容的同步,方法是使用 DirName、LeafName 顺序优化 SQL Server 查询。 <OptimizeFor>ItemIds</OptimizeFor> |
<Paging ListItemCollectionPositionNext="X" /> |
X 是用于确定要返回的项目的页码的令牌。与 changeToken 值一样,不应分析或构造此令牌。 |
<RecurrenceOrderBy> |
它是一些日历程序的要求。对于每个定期系列,都会先返回主项,然后才返回所有异常。这是在任何其他顺序前应用的特殊内部顺序。 备注 除非您的程序明确要求此选项,否则不应使用此选项。 如果视图包含类型为 Recurrence 的字段,则列表以引用类型唯一标识符 (UID) 的字段为序,并且在周期字段的定义中包括 EventType 和 StartDate。 |
<RecurrencePatternXMLVersion> |
用于维护向后兼容性。RecurrencePatternXMLVersion 可更改 RecurrenceData 字段的值,以便不返回 <V3RecurrencePattern />。包括此标记意味着正确发送了 SharePoint Foundation 新增的定期模式。 |
<ViewAttributes > |
一个字符串,表示在通过 GetView 方法检索视图时,作为 View 元素的一部分返回的所有属性。此元素是可选的,其默认值为空。若要返回库中的所有文档,应按如下方式使用 ViewAttributes 元素:<ViewAttributes Scope="Recursive" />。 |
默认查询选项
如果未指定 queryOptions 元素,则使用下面的默认选项。
DateInUtc = TRUE
ExpandUserField = TRUE
IncludePermissions = TRUE
IncludeAttachmentUrls = TRUE
IncludeAttachmentVersion = TRUE
MeetingInstanceID = -1
RecurrenceOrderBy = TRUE
RecurrencePatternXMLVersion = v3
ViewAttributes Scope = 'Recursive'
备注
客户端应始终指定一个查询选项;如果未能指定查询选项,则会对性能造成负面影响。
响应对象
在下面的表单中,传递了 XML 格式的 GetListItemChangesSinceToken 响应。此代码段包含所有更改,可分配给 System.Xml.Node 对象。
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns="https://schemas.microsoft.com/sharepoint/soap/">
<rs:data ItemCount="4">
<z:row ows_Number_Field="6555.00000000000"
ows_Created="2003-06-18T03:41:09Z"
ows_ID="3" ows_owshiddenversion="3" />
<z:row ows_Number_Field="78905456.0000000"
ows_Created="2003-06-18T17:15:58Z"
ows_ID="4" ows_owshiddenversion="2" />
...
</rs:data>
</listitems>
列表和全局属性
下表介绍返回参数。
表 3:返回参数
参数 |
定义 |
|---|---|
备用 URL 按以下区域顺序列出,用逗号分隔:Intranet,Default,Extranet,Internet,Custom |
|
SPList.EffectiveBasePermissions.ToString() 属性返回的列表权限。 |
|
必须与客户端同步的内容的总大小(以兆字节 (MB) 计)。默认为 500 MB。调用 GetListItemChangesSinceToken 时会获得每个文档的 URL 和元数据,但这样一来,您必须执行 HTTP GET 才能检索实际文档内容。 |
|
一个服务器参数,表示用户启动的同步或自动同步之间的最短时长。该值表示以分钟为单位的时间。 备注 即使用户启动手动同步,客户端也使用此值。即,如果将此值设置为 5 分钟,即使用户重复单击"发送/接收",客户端也会每 5 分钟仅发送一次请求。 |
|
建议的最小同步时间间隔。不要替代自动同步。客户端的自动同步频率不应超过建议的频率。 |
更改事件
更改由必须由客户端专门处理的更改事件的列表组成。
提供更改令牌时,会从内部更改日志中获取这些更改事件。对于完全同步(无更改令牌),仍将与当前更改令牌一起返回更改标记。
从更改令牌返回的更新数限制为 100。MoreChanges 属性指示上一个更改令牌并不是最新的。已对列表进行其他更改,并且客户端现在必须使用新的更改令牌再次调用此方法。
表 4:更改事件
更改事件 |
说明 |
|---|---|
<Id ChangeType="InvalidToken" /> |
令牌是旧的或无效。必须执行完全同步。 |
<Id ChangeType="Restore" /> |
已从回收站或备份还原列表。您应执行完全同步。 |
<List></List> |
如果列表架构已更改,或未提供更改令牌,则会返回完整列表。格式与 GetList 返回的格式相同。 |
在上述两种情况下,客户端应忽略其他更改,并对列表执行完全调整。
表 5:更改类型
更改类型 |
说明 |
|---|---|
<Id ChangeType="Delete">ID</Id> |
此项目不再存在。请注意,即使项目是由查询筛选出来的,也会发送 delete 更改。 |
<Id ChangeType="MoveAway" AfterListId="ID" AfterItemId="ID">ID</Id> |
这些项目的处理方式与删除更改项目相同,这意味着即使项目是由查询筛选出来的,也会返回这些项目。 |
<Id ChangeType="Restore">ID</Id> |
已还原此项目和此项目下的所有项目。 |
<Id ChangeType="SystemUpdate">ID</Id> |
一些客户端可能使用隐藏版本、版本历史记录或修改时间来确定是否更新某项。SystemUpdate 意味着 Windows SharePoint Services 3.0 已进行更改,并且您需要更新该特定项上的所有属性。 |
<Id ChangeType="Rename">ID</Id> |
重命名的项目(如 SystemUpdate)可能保留隐藏版本信息。 |
数据
ItemCount 属性包含返回的项数。每个项目返回为一个 <z:row> 标记。
仅当 rowLimit 参数已用于限制在一个调用中返回的项数时,才会对完全同步(无更改令牌)返回 ListItemCollectionPositionNext 属性。对于增量同步,会通过将从更改日志处理的更新数限制为行限制(如果该数目小于内部最大限制)阻止此类型的分页。
这些项目的内容返回为带"ows_"前缀和字段的内部名称的属性。这些值会编码为有效的 XML 属性值。始终返回一组字段。
如果设置 IncludeMandatoryColumns 选项,则一些字段会标记为必填并返回这些字段。如果发送 <ViewFields />,则会返回所有字段。
当在 ViewFields 标记中设置了 Properties="TRUE" 时,会将属性 (Property) 包(MetaInfo 字段)分割为每个属性 (Property) 一个属性 (Attribute)。这些属性 (Attribute) 的前缀为"ows_MetaInfo_"。
多数栏值是从其内部表示形式转换而来,但其他栏值是专门为客户端构造的。列表架构中的若干属性未由字段表示。
表 6:列表架构中未由字段表示的属性
属性 |
说明 |
|---|---|
MetaInfo |
属性包容器 SPListItem.Properties。有关详细信息,请参阅 SPListItem 对象模型中的属性包。 |
类型为"Attachments"的字段 |
数据库中可由查询选项修改以返回附件数据的位栏。 |
RecurrenceData |
周期的 XML 定义。 有关此 XML 架构的详细信息,请参阅 https://blogs.msdn.com/b/sharepoint/archive/2007/05/14/understanding-the-sharepoint-calendar-and-how-to-export-it-to-ical-format.aspx(该链接可能指向英文页面)。 |