首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SharePoint GetListItemChangesSinceToken不以递归方式返回项

SharePoint的GetListItemChangesSinceToken方法用于获取自指定令牌以来对列表项所做的更改。这个方法并不默认以递归方式返回子项的更改,这意味着如果你有一个包含层次结构数据的列表(如具有父-子关系的列表),并且你想要获取某个父项及其所有子项自某个时间点以来的更改,你需要采取一些额外的步骤来实现这一点。

基础概念

  • 令牌(Token):在SharePoint中,令牌是一个标识符,用于标记特定时间点或特定更改集的状态。
  • 递归(Recursion):递归是一种算法,它在解决问题时调用自身来处理更小的问题实例。

相关优势

  • 精确控制:通过指定令牌,可以精确地获取自该时间点以来的更改,而不是获取整个列表的所有更改。
  • 性能优化:只检索必要的更改可以减少网络流量和处理时间。

类型与应用场景

  • 类型:此方法通常用于增量同步或实时更新的场景。
  • 应用场景:适用于需要监控列表变化的应用程序,如工作流系统、通知服务或数据同步工具。

遇到的问题及原因

如果你发现GetListItemChangesSinceToken没有以递归方式返回子项的更改,可能是因为:

  • 设计限制:SharePoint的设计可能没有将递归作为此方法的默认行为。
  • 配置问题:可能存在配置上的限制,导致方法不能按预期工作。

解决方案

要实现递归获取子项更改的功能,你可以采取以下步骤:

  1. 获取父项更改:首先使用GetListItemChangesSinceToken获取父项的更改。
  2. 遍历子项:对于每个更改的父项,递归地调用GetListItemChangesSinceToken来获取其子项的更改。

以下是一个伪代码示例,展示了如何实现这一过程:

代码语言:txt
复制
void GetRecursiveChanges(SPList list, ChangeToken token) {
    // 获取自指定令牌以来的更改
    SPChangeCollection changes = list.GetListItemChangesSinceToken(token);

    foreach (SPChange change in changes) {
        // 处理父项更改
        ProcessChange(change);

        // 如果是父项且有子项,递归获取子项更改
        if (change is SPChangeItem && ((SPChangeItem)change).HasChildren) {
            SPListItem parentItem = list.GetItemById(change.ItemId);
            GetRecursiveChanges(parentItem.SubList, token); // 假设SubList是获取子列表的方法
        }
    }
}

void ProcessChange(SPChange change) {
    // 处理单个更改的逻辑
}

请注意,上述代码是一个简化的示例,实际实现可能需要根据你的具体需求进行调整。

注意事项

  • 性能考虑:递归调用可能会增加处理时间和资源消耗,特别是在处理大型层次结构时。
  • 错误处理:确保在递归过程中添加适当的错误处理逻辑,以避免无限循环或其他潜在问题。

通过上述方法,你可以实现类似递归的行为,从而获取父项及其所有子项自指定令牌以来的更改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows 商店应用中使用 SharePoint REST API

开发人员可以使用任何支持 REST Web 请求的技术(C#,javascript,java,oc 等等)以远程方式与 SharePoint 数据进行交互。...该值的获取方式是:向 http://网站URL/_api/contextinfo 发送具有空正文的 POST 请求,并在 contextinfo 终结点返回的 XML 中提取 d:FormDigestValue...(4)$top 参数        这个参数用户指定返回结果集中的前N项,使用方法是:_api/web/lists/getByTitle('Books')/items?...$top=2,这样我们就会返回这个结果集中的前两项(如不足两项则返回全部数据)。        (5)$skip 参数        这个参数用于在结果集中跳过指定数量的项,而返回剩余的项。...$skip=2,这样我们就会在返回结果中跳过前两项而返回其余的项,如结果不足两项,则返回空结果集。

4.8K150
  • Windows 商店应用中使用 Office 365 API Tools

    首先来说一下本文的背景: 使用 SharePoint 做过开发的同学们应该都知道,SharePoint 有一套客户端对象模型(Client Object Model)用于读取和操作列表和文档库的数据。...SharePoint为我们提供了一套标准的 REST API,利用它我们可以通过网络请求的方式来读取和更新数据。读取数据还算简单,只需要拼接 API 地址和解析 json / XML 数据就可以了。...而且更让人头疼的是 SharePoint Online 的认证方式。(关于 REST API 的使用,我会在随后的文章中介绍,这里只是让大家感受一下使用的感受。)...选择一项服务,点击右侧的“权限...”对该服务的权限进行配置,配置后点击“确定”,就可以完成对这一项服务的引用了。...Getting an access token for Office 365 在授权使用 Discovery Service 时,我们的代码可以使用从Azure AD 中返回的 token,这个 token

    3.5K100

    SharePoint—用REST方式访问列表

    REST的定义与作用                                                                       在SharePoint 2010中,基本上有如下几种数据访问方式...(强类型) REST是SharePoint中一种数据访问方式,这种方式只支持列表数据访问接口,位于_vti_bin目录下的的listdata.svc。...图 01 通过这种方式访问的时候,客户端使用JSON的格式把需要的数据通过某种HTTP方法发送至包含listdata.svc的Url地址上(如果是Get方法的话,就没有发送的数据),然后返回数据的时候...,可以返回Xml格式(Atom协议),当然也可以返回JSON格式(如果不特别声明的话,默认使用Atom协议,也就是Xml格式)。...例如: 获取Test表所有数据 http://localhost/_vti_bin/ListData.svc/Test() 根据Id获取数据项 http://localhost/_vti_bin/

    2K50

    SharePoint 2013 实现多级审批工作流

    上一篇介绍了安装和配置SharePoint 2013 Workflow,这一篇将用SharePoint 2013 Designer Workflow来实现一个多级审批工作流。...然后,点击新建的变量(Approver)的Value链接,选择Define workflow lookup(定义工作流查阅项)Function,为了得到当前用户的上级领导,故在弹出的窗体中设置以下值:...当审批拒绝时,工作流结束,所示稍稍完善下上面的实现方式,具体流程如下实现: ? 为了让分配的任务更加细化,让每人只能看到自己的任务,需要在Task中设置Filter,如下所示: ?...查找工作流异常 工作流发生异常很难找到, SharePoint 2013 Designer Workflow当发生异常时会抛出异常,比如500错误。排查这个异常非常麻烦,需要你的经验法则。...所以怎样用SharePoint Designer 2013去打断权限继承,只给Assign To的用户分配编辑权限,这实在让我很纠结。

    2.1K90

    函数表达式 与 函数声明 别搞混了

    但是,使用关键字定义函数的方式可以创建具有不同属性的函数。 在这篇文章中,你将了解如何使用function关键字来编写函数声明和函数表达式,以及这两种类型的函数之间有什么区别。 ---- 1....正如预期的那样,sumA(1, 2)只是返回1和2个数字的和3。然而,调用sumB(1, 2)抛出一个未捕获的ReferenceError: sumB未定义。...例如,我们写一个函数sumArray(array),它对数组(数组可以包含数字或其他数组)中的项进行递归求和: sumArray([10, [1, [5]]]); // => 16 function...sumArray在当前范围内可用:在 sumArray([10,[1,[5]]])之前和在sumArray([1,[4, 6]])之后的函数声明,以及在函数本身的范围内sumArray(item)(允许递归调用...总结 根据如何使用function关键字创建函数,可以以两种方式来创建函数:函数声明和函数表达式。

    33930

    探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现

    对于SharePoint Developers来说,往往会过多的去关注SharePoint平台和工具,而把设计模式和代码的可测试性放在了一个较低的优先级。...这并不是说SharePoint Developers对设计模式不感兴趣,而是缺乏在SharePoint平台下使用设计模式的经验。...那么有没有一种方式能彻底将Presenter和Repository解耦呢?...容器 传统的控制流,从客户端创建服务时,必须指定一个特定服务实现(并且对服务的程序集添加引用),IoC容器所做的就是完全将这种关系倒置过来(倒置给IoC容器),将服务注入到客户端代码中,这是一种推得方式...使用IoC容器如SharePoint Service Locator,首先配置依赖关系(即当向Ioc容器询问特定的类型时将返回一个具体的实现),所以这又叫依赖注入。

    1.1K70

    Power Query 真经 - 第 9 章 - 批量合并文件

    图9-2 在“2019 Q1\East.xlsx”工作簿的“Forecast”工作表数据 目标是创建一个可刷新的自动化解决方案,以如图9-3所示的格式返回数据。...主查询:这个查询的目的是将“FilesList”(步骤或查询)中包含的每个文件,传递给转换函数(基于【转换示例文件】中的步骤),并返回每个文件的重塑结果。...包含 内容 对实际文件内容的引用 文件名称 给定文件的名称 扩展名 文件类型 访问日期 文件最后一次被访问的日期 修改日期 文件最后修改的日期 创建日期 文件创建的日期 属性 包含文件大小、可见性状态等项的记录...由于 SharePoint 的配置方式不同,无法完全预测用户需要使用哪种认证方式,但以下内容应有助于提高首次选择正确登录方法的几率。...当然,每个数据集需要处理的方式都不同,但最终的结果是相同的:将其重塑为一个具有描述性标题的数据表,并且每行和每列的交叉点有一个数据点。

    5K40

    SharePoint CAML In Action——Part I

    在SharePoint中,我们经常要对List进行操作,比如要从List中取出相应的ListItem,利用CAML是个好办法。...所以可以把CAML比作型号各式的子弹的话,那SharePoint SPQuery对象就是蝙蝠侠中的小丑,在抢银行之前必须把子弹上膛,对,SPQuery对象的Query属性就是一把可以匹配任何子弹万能武器...,ViewFields就是你要抢的财富类型(黄金、钻石、美元),RowLimit就是抢得一定数量的财富就跑路了,而返回的SPListItemCollection集合就是抢到的财富。...CAML In Action 首先我准备两个List,一个Employee,一个Specialization,为我们提供测试数据,其中Employee中的Specialization列是查阅项类型,引用了...Fields,SPQuery对象的ViewFields属性就是代表从查询中返回的Fields: query.ViewFields = "<FieldRef

    84550

    针对“PowerBI从Onedrive获取文件”两篇文章做个补充

    这个问题出现在从onedrive世纪互联版(sharepoint.cn)获取数据时,极大的概率会出现“此表为空”的问题(注意并不是错误,只是获取的数据为空),而国际版(sharepoint.com)则不会出现这个问题...原因就在SharePoint.Contents的说明中: ? APIversion作为SharePoint.Contents函数的可选参数,有三个值:14,15,“auto”。...以下就是多了子目录而返回错误: ? 第三个:本地配置问题 ?...发布到云端,身份验证的方法选择需要留言,选择OAuth2的认证方式,隐私级别设为组织: ? 然后就可以无需网关进行刷新了。以下是刚刚进行的刷新: ? 第五个:云端配置问题2 ?...当你的报告需要多人协作维护数据源,又不想占用一台共享电脑来刷新时,你可以采用多人登录Onedrive for business进行协作,用Power BI直接获取Onedrive云端文件并随时刷新的方式

    2.9K20

    项目管理之摸着石头过河的那些日子

    这种方式是存在不少问题的,但是这个项目是相对比较完美的完成了——虽然中间被另一个部门的项目经理投诉了一把,但是客户一直对我念念不忘,“关怀备至”。...每次领导到现场都是——我与你们同在,我请大家吃饭,然后你们继续加班…… 因为事多又杂,我想过很多方式——起初是靠脑子管理,然后模仿上面XX银行的周报制——没坚持下来;也曾靠过本本,纸撕得一张一张的,而且有时忘桌子上了...相对开发人员而言,首先是源代码管理工具需要用TFS,工作项等更改或者查看在开发工具中就能够查看与修改。...比如检查项的: ? 类似于Wiki页的: ? 当然还有很多,这里就不一一列举了。 从这段时间用下来的感受来看,我觉得迁移到Worktile的这个决定毋庸置疑是非常正确的: 1....你可以讨论,可以发布Wiki,也可以使用检查项陈列,你还能用列表做个小流程,总之,你可以用很多方式来呈现和表达。 9. 一直在不断的迭代进步,而且在使用过程中我提了很多建议与意见。

    81640
    领券