SharePoint开发——利用CSOM逐级获取O365中SharePoint网站的List内容

简介: 博客地址:http://blog.csdn.net/FoxDave本文介绍如何利用SharePoint客户端对象模型(.NET)逐级获取Office 365网站中List的内容,仅仅是示例,没有讲究太多东西。
 博客地址: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集合进行遍历,如果存在文件夹,则进一步遍历,通过这个递归方法进行了实现。
相关文章
|
3月前
|
BI
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
|
4月前
|
文字识别 Java
文本,文字识别07,SpringBoot服务开发-入参和返回值,编写接口的时候,要注意识别的文字返回的是多行,因此必须是List集合,Bean层,及实体类的搭建
文本,文字识别07,SpringBoot服务开发-入参和返回值,编写接口的时候,要注意识别的文字返回的是多行,因此必须是List集合,Bean层,及实体类的搭建
|
5月前
|
数据采集 存储 数据可视化
SharePoint List
【6月更文挑战第10天】
27 1
|
5月前
|
BI
Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
在Power BI中,从SharePoint List获取数据时遇到Table和List混合的数据源,直接展开会导致“笛卡尔积”效应,生成过多行。目标是保持行数不变,将Table中的字段与List值用逗号分隔显示在同一行。解决方法包括:1) 添加新列,从Table中提取List的Column2值;2) 使用Text.Combine函数合并List中的值。具体操作步骤包括选择列并自定义新列,然后展开List并以逗号分隔。通过这些步骤,可以将Table转换为所需的字符串格式。完整的Power BI Query代码展示了这一过程。参考链接提供了更多详情。
|
编解码 Android开发
|
安全 小程序 Java
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。(2)
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。(2)
|
安全 小程序 Java
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。(1)
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。(1)
|
存储 算法 安全
|
Android开发
【安卓开发】‘boolean java.util.List.add(java.lang.Object)‘ on a null object
【安卓开发】‘boolean java.util.List.add(java.lang.Object)‘ on a null object
100 0
【安卓开发】‘boolean java.util.List.add(java.lang.Object)‘ on a null object
|
编解码 安全 Linux
Linux内核开发基础-低精度timer_list和高精度hrtimer定时器
上篇文章讲解了如何正确的使用内核延时函数,在进行驱动开发时,可能会经常用到精确地延时操作。除此之外,如果要实现一个定时任务,那就需要用到定时器。作为一项基础功能需求,Linux内核提供了定时器相关的实现。下面就具体看一下,Linux内核所提供的定时器实现。
1185 0