使用控制台应用程序从共享点列表中提取数据
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;
}
我花了好几个小时寻找最好的方法,但我发现的是大量相互矛盾的信息,我快要崩溃了。
我有一个 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;
}