博客地址:http://blog.csdn.net/FoxDave

本文介绍如何利用SharePoint客户端对象模型(.NET)逐级获取Office 365网站中List的内容,仅仅是示例,没有讲究太多东西。

代码如下:

ClientContext ctx = new ClientContext("<your sharepoint site url>");
ctx.Credentials = new SharePointOnlineCredentials("username", GetSecurePassword("password"));
Web web = ctx.Web; List list = web.Lists.GetByTitle("List");
ctx.Load(list, l => l.RootFolder, l => l.RootFolder.ServerRelativeUrl);
ctx.ExecuteQuery();
stringBuilder = RetrieveItems(ctx, list, list.RootFolder, 0); Console.WriteLine(stringBuilder.ToString());

首先第一部分是构建SharePoint Online的Context对象,授权认证那里使用SharePointOnlineCredentials这个对象,这个对象构造函数的参数需要类型为字符串的用户名和类型为SecureString的密码,这里使用GetSecurePassword这个方法来构建密码参数,代码将在下面列出。

第二部分,利用Context对象获取指定的List,进而获取里面的内容。逐级获取需要一个递归去实现,如上的RetrievevItems方法,同样会在下面说明。

最后输出获取的内容,stringBuilder为全局的StringBuilder对象,用来保存读取到的信息。

GetSecurePassword方法的代码如下:

private static SecureString GetSecurePassword(string pwd)
{
//Get the user's password as a SecureString
SecureString securePassword = new SecureString();
char[] pwdArray = pwd.ToCharArray();
for (int i = 0; i < pwdArray.Length; i++)
{
securePassword.AppendChar(pwdArray[i]);
}
return securePassword;
}

方法的返回类型为SecureString。方法体中,首先构建一个SecureString对象,并将密码字符串转成char数组,然后执行AppendChar方法把依次将char数组的字符传入,最后返回这个对象就可以了。

RetrievevItems方法的代码如下:

private static StringBuilder RetrieveItems(ClientContext ctx, List list, Folder folder, int level)
{
level++;
CamlQuery query = new CamlQuery();
query.FolderServerRelativeUrl = folder.ServerRelativeUrl;
ListItemCollection listItems = list.GetItems(query);
ctx.Load(listItems);
ctx.ExecuteQuery();
foreach (ListItem item in listItems)
{
if (item.FileSystemObjectType == FileSystemObjectType.Folder)
{
ctx.Load(item.Folder);
ctx.ExecuteQuery();
stringBuilder.AppendLine(string.Format("Level: {0}, Folder: {1}", level, item["Title"]));
return RetrieveItems(ctx, list, item.Folder, level);
}
else
{
stringBuilder.AppendLine(string.Format("Level: {0}, Item: {1}", level, item["Title"]));
}
}
return stringBuilder;
}

参数level表示当前的深度。在使用客户端对象模型获取列表的Item时,需要传入一个CamlQuery对象,为该对象的FolderServerRelativeUrl属性赋值来控制要获取Item的位置。然后对获取到的当前级别的Item集合进行遍历,如果存在文件夹,则进一步遍历,通过这个递归方法进行了实现。

SharePoint开发——利用CSOM逐级获取O365中SharePoint网站的List内容的更多相关文章

  1. android 利用反射机制获取drawable中所有的图片资源

    public List<Map<String,Object>> getGridData() { list=new ArrayList<Map<String,Obje ...

  2. springboot @Value 获取计算机中绝对路径文件的内容

    默认情况下使用 @Value("aaa.txt") private Resource txtResource; 这样获取到的是项目classpath 下的 aaa.txt 如果想获 ...

  3. 微信公众平台开发—利用OAuth2.0获取微信用户基本信息

    在借鉴前两篇获取微信用户基本信息的基础下,本人也总结整理了一些个人笔记:如何通过OAuth2.0获取微信用户信息 1.首先在某微信平台下配置OAuth2.0授权回调页面: 2.通过appid构造url ...

  4. (一)利用 mdb 调试获取 nvlist_t 中 nvpair_t(name/value) 对

    服务器:192.168.2.122 root@2236:~# mdb -k> ::spaADDR                 STATE NAME                       ...

  5. 利用PPPOE认证获取路由器中宽带账号密码

    前言 回家时买了一台极路由准备换掉家里老掉牙的阿里路由器,想进后台看一下宽带账号密码,咦???后台密码是什么来着??? 我陷入了沉思,家里的路由器一般都是pppoe拨号,而路由器在与pppoe认证服务 ...

  6. 利用函数回调获取setInterval中返回的值

    我们都知道,定时器里面想返回值如果你用return根本没作用,那么怎么拿到定时器所返回的值呢, 现在只需要利用回调函数,给主函数传一个函数类型的参数callback,然后把想要返回的num再传给cal ...

  7. java利用反射机制获取list中的某个字段并以list形式返回

    public static<T> List<Object> listToList(Collection<T> list,String fieldName) thro ...

  8. 如何利用webmin在Linux主机中添加网站

    Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...

  9. Java中如何获取spring中配置的properties文件内容

    有2种方式: 一. 1.通过spring配置properties文件 [java]  <bean id="propertyConfigurer"      class=&qu ...

随机推荐

  1. [attribute] 匹配包含给定属性的元素

    描述: 查找所有含有 id 属性的 div 元素 HTML 代码: <div> <p>Hello!</p> </div> <div id=&quo ...

  2. 161221、bootstrap table 实例

    bootstrap table 封装了一套完善的数据表格组件,把下面的代码复制一下估计你需要的基本功能都有了,没有的再看看手册对比着我给的实例也能很快的熟悉了 客户端 <!DOCTYPE htm ...

  3. PostgreSQL Hot Standby的主备切换

    一. 简介:          PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用.其中备库是只读库:若主库出现故障:备库这个 ...

  4. Python对整形数字进行加密和解密

    # -*- coding:utf-8 -*- __author__ = 'Ray' class Encryption: """整形数字简单的一个加密/解密算法" ...

  5. 【springMVC】简单的前后端数据交流

    最最常见两种,一则返回视图模板(文档),二则为json数据.就使用一个源代码文件来看看springmvc是怎么做到的. 1.UserController.java源代码文件 (这里额外的使用了fast ...

  6. Redis - pipelining(管道)

    客户端向服务器发送一个查询请求,并监听 socket 返回,等待服务器响应.通常是阻塞模式,在收到服务器响应之前是挂起的,不能继续发送请求. 可以使用管道来改善这种情况.在使用管道的情况下,客户端可以 ...

  7. (转)内联(inline)函数与虚函数(virtual)的讨论

    本文转自: http://topic.csdn.net/t/20051220/09/4469273.html 函数的inline属性是在编译时确定的, 然而,virtual的性质是在运行时确定的,这两 ...

  8. 没有技术说明文档的开源都是耍流氓:微软Roslyn编译即服务在CIIP中具体应用(上)

    前段时间我发布了 github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端,很多园友们都表示支持并与我探讨相关技术问题,上篇中我也承诺会写相关的技术文章,本篇就来介绍一下建模模块中使用 ...

  9. C#中的多线程 - 基础知识

    原文:http://www.albahari.com/threading/ 文章来源:http://blog.gkarch.com/threading/part1.html 1简介及概念 C# 支持通 ...

  10. 《BI项目笔记》历年感官评吸质量均值变化分析Cube的建立

    分析主题主要维度:烟叶级别.烟叶级别按等级信息.烟叶级别按分级标准(标准维度)产地(父子维度)检测时间(时间维度,以Tqc_Raw_SmokingTest .CheckTime字段派生CheckDat ...