我一直在寻找最好的方法来做这件事,而我所发现的只是大量相互冲突的信息,而且我在崩溃的时候。
我有一个sharepoint 2013网站,自然有一个列表。
我希望连接到此列表并将信息提取到数据表中。不应该那么难......
我试过的选项, 我最初计划在ssis上提取信息并在最终目的地之前对其进行转换。 有一个伟大的小适配器显然为此sharepoint列表适配器...不适用于SSIS 13!当然,这不是我唯一可以使用的版本。
然后我读了一个名为lists.asmx的web服务,当调用和查询时,应该返回表的xml版本...太棒了!
我连接到webservice,我需要使用的一个方法(GETLISTITEMS)在SP2013中不存在于所有教程中!!!
有人可以给我一个例子或链接到一个显示
的连接和查询示例的网站通过SSIS 13提取数据 B如何连接到SP站点并提取表信息。
请回答我的理智,谢谢
答案 0 :(得分:2)
感谢Verthosa指出我正确的方向,即使经过一些阅读和实验,CSOM肯定是要走的路。
对于那些正在寻找一个好的简单类来拉取列表的人下面是我的类,它将列表数据转换为数据表以便于调用。
您必须添加使用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");
获取并转换类方法
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;
}
答案 1 :(得分:0)
作为控制台应用程序我假设你的意思是在visual studio中使用c#console应用程序?只需google for SharePoint 2013 CSOM - ClientSide对象模型。你可以找到大量的信息。 它允许您从“远程”/客户端管理您的SP环境(以及读取列表)。您需要托管API dll
https://msdn.microsoft.com/en-us/library/office/fp179912.aspx