使用控制台应用程序从共享点列表中提取数据

Using a Console App to Extract a data from sharepoint list

我花了好几个小时寻找最好的方法,但我发现的是大量相互矛盾的信息,我快要崩溃了。

我有一个 Sharepoint 2013 网站,上面自然有一个列表。

我希望连接到此列表并将信息提取到数据中 table。应该不会那么难...

所以我尝试过的选项, 我最初计划在 ssis 上提取信息并在其最终目的地之前对其进行转换。 显然有一个很棒的小适配器用于此共享点列表适配器......不适用于 SSIS 13!当然不是,那是我唯一能用的版本。

然后我阅读了一个名为 lists.asmx 的网络服务,在调用和查询时应该 return 一个 table 的 xml 版本...太棒了!

我连接到网络服务,我需要使用的一种方法 (GETLISTITEMS) 在所有教程中都没有,但在 SP2013 中不存在!!!

谁能给我一个例子,或者 link 我到一个显示连接和查询例子的网站

A 通过 SSIS 13 拉取数据 B 如何连接到 SP 站点并提取 tables 信息。

请return理智,谢谢

作为控制台应用程序,我假设您指的是 visual studio 中的 C# 控制台应用程序?对于 SharePoint 2013 CSOM - 客户端对象模型,只需 google。您可以找到大量相关信息。 它允许您从 'a distance' / 客户端管理您的 SP 环境(以及阅读列表)。您需要托管 API dll

https://msdn.microsoft.com/en-us/library/office/fp179912.aspx

感谢 Verthosa 为我指明了正确的方向,CSOM 绝对是正确的选择,尽管它需要一些阅读和实验。

对于任何正在寻找一个很好的简单 class 来提取列表的人下面是我的 class 它将列表数据转换为数据表以便于调用。

您必须添加使用 Microsoft.SharePoint.Client - 下载 SP2010/2013 客户端 SDK(如果不存在)并在您的参考中包含程序集扩展 Microsoft.SharePoint.Client + Microsoft.SharePoint.Runtime。

调用方式

DataTable dt = new DataTable();
dt = ClassName.GetList("http://SharepointSite", "Name of List Table");

获取并转换Class方法

 public static DataTable GetList(string site, string listname)
    {
        ClientContext ctx = new ClientContext(site);

        List lst = ctx.Web.Lists.GetByTitle(listname);

        CamlQuery cq = CamlQuery.CreateAllItemsQuery();

        ListItemCollection lic = lst.GetItems(cq);

        ctx.Load(lic);

        ctx.ExecuteQuery();
        DataTable dt = new DataTable();

        foreach (var field in lic[0].FieldValues.Keys)
        {
            dt.Columns.Add(field);
        }

        foreach (var item in lic)
        {
            DataRow dr = dt.NewRow();

            foreach (var obj in item.FieldValues)
            {
                if (obj.Value != null)
                {
                    string type = obj.Value.GetType().FullName;

                    if (type == "Microsoft.SharePoint.Client.FieldLookupValue")
                    {
                        dr[obj.Key] = ((FieldLookupValue)obj.Value).LookupValue;
                    }
                    else if (type == "Microsoft.SharePoint.Client.FieldUserValue")
                    {
                        dr[obj.Key] = ((FieldUserValue)obj.Value).LookupValue;
                    }
                    else
                    {
                        dr[obj.Key] = obj.Value;
                    }
                }
                else
                {
                    dr[obj.Key] = null;
                }
            }

            dt.Rows.Add(dr);
        }

        return dt;
    }