Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint客户端对象模型:如何获取列表中的所有字段_Sharepoint_Sharepoint Clientobject - Fatal编程技术网

Sharepoint客户端对象模型:如何获取列表中的所有字段

Sharepoint客户端对象模型:如何获取列表中的所有字段,sharepoint,sharepoint-clientobject,Sharepoint,Sharepoint Clientobject,我有一个名为“讨论列表”的列表。我想从列表中取出所有列 我想知道如何使用SharePoint客户端对象模型进行此操作。好的。找到了解决办法。在这里使用我按标题获得的列表进行回答,但可以使用任何方法: // Get your ClientContext for your site in 'clientContext' SP.List oList = clientContext.Web.Lists.GetByTitle("List Title Here"); SP.FieldCollectio

我有一个名为“讨论列表”的列表。我想从列表中取出所有列


我想知道如何使用SharePoint客户端对象模型进行此操作。

好的。找到了解决办法。在这里使用我按标题获得的列表进行回答,但可以使用任何方法:

// Get your ClientContext for your site  in 'clientContext'

SP.List oList = clientContext.Web.Lists.GetByTitle("List Title Here"); 
SP.FieldCollection fieldColl = oList.Fields;
clientContext.Load(fieldColl);
clientContext.ExecuteQuery();

foreach (SP.Field fieldTemp in fieldColl)
{
    MessageBox.Show(fieldTemp.InternalName.ToString()); //I used MessageBox to show, but you can do whatever you like with it here.
}

宾果。你会喜欢的。感谢上帝为泛型和Linq

// return all rows and (selected) fields of a list--fields are included dynamically
private Dictionary<string,Dictionary<string,object>> getListData( ClientContext ctx )
{
    Log.LogMessage( "Fetching {0}{1}", ctx.Url, ListName );
    var list = ctx.Web.Lists.GetByTitle( ListName );

    // fetch the fields from this list
    FieldCollection fields = list.Fields;
    ctx.Load( fields );
    ctx.ExecuteQuery();

    // dynamically build a list of fields to get from this list
    var columns = new List<string> { "ID" }; // always include the ID field
    foreach( var f in fields )
    {
        // Log.LogMessage( "\t\t{0}: {1} of type {2}", f.Title, f.InternalName, f.FieldTypeKind );
        if( f.InternalName.StartsWith( "_" ) || f.InternalName.StartsWith( "ows" ) ) continue;  // skip these
        if( f.FieldTypeKind == FieldType.Text ) // get Text fields only... but you can get other types too by uncommenting below
                // || f.FieldTypeKind == FieldType.Counter
                // || f.FieldTypeKind == FieldType.User
                // || f.FieldTypeKind == FieldType.Integer
                // || f.FieldTypeKind == FieldType.Number
                // || f.FieldTypeKind == FieldType.DateTime
                // || f.FieldTypeKind == FieldType.Lookup
                // || f.FieldTypeKind == FieldType.Computed
                // || f.FieldTypeKind == FieldType.Boolean )
        {
            columns.Add( f.InternalName );
        }
    }

    // build the include expression of which fields to fetch
    List<Expression<Func<ListItemCollection, object>>> allIncludes = new List<Expression<Func<ListItemCollection, object>>>();
    foreach( var c in columns )
    {
        // Log.LogMessage( "Fetching column {0}", c );
        allIncludes.Add( items => items.Include( item => item[ c ] ) );
    }

    // get all the items in the list with the fields
    ListItemCollection listItems = list.GetItems( CamlQuery.CreateAllItemsQuery() );
    ctx.Load( listItems, allIncludes.ToArray() );

    ctx.ExecuteQuery();

    var sd = listItems.ToDictionary( k => k["Title"] as string, v => v.FieldValues );   // FieldValues is a Dictionary<string,object>

    // show the fields
    foreach( var i in sd.Keys )
    {
        Log.LogMessage( "\tItem: {0}", i );
        foreach( var c in columns )
        {
            Log.LogMessage( "\t\t{0}: {1}", c, sd[ i ][ c ] );
        }
    }

    return sd;
}
//返回列表中的所有行和(选定)字段——字段是动态包含的
专用字典getListData(ClientContext ctx)
{
LogMessage(“获取{0}{1}”,ctx.Url,ListName);
var list=ctx.Web.Lists.GetByTitle(ListName);
//从该列表中获取字段
FieldCollection字段=list.fields;
ctx.Load(字段);
ctx.ExecuteQuery();
//动态构建要从此列表中获取的字段列表
var columns=new List{“ID”};//始终包含ID字段
foreach(字段中的变量f)
{
//LogMessage(“\t\t{0}:{1},类型为{2}”,f.Title,f.InternalName,f.FieldTypeKind);
如果(f.InternalName.StartsWith(“”)| | f.InternalName.StartsWith(“ows”))继续;//跳过这些
if(f.FieldTypeKind==FieldType.Text)//仅获取文本字段……但您也可以通过取消下面的注释来获取其他类型
//| | f.FieldTypeKind==FieldType.Counter
//| | f.FieldTypeKind==FieldType.User
//| | f.FieldTypeKind==FieldType.Integer
//| | f.FieldTypeKind==FieldType.Number
//| | f.FieldTypeKind==FieldType.DateTime
//| | f.FieldTypeKind==FieldType.Lookup
//| | f.FieldTypeKind==FieldType.Computed
//| | f.FieldTypeKind==FieldType.Boolean)
{
列。添加(f.InternalName);
}
}
//构建要获取哪些字段的include表达式
List allIncludes=新列表();
foreach(列中的var c)
{
//LogMessage(“获取列{0}”,c);
allIncludes.Add(items=>items.Include(item=>item[c]);
}
//使用字段获取列表中的所有项目
ListItemCollection listItems=list.GetItems(CamlQuery.CreateAllItemsQuery());
加载(listItems,allIncludes.ToArray());
ctx.ExecuteQuery();
var sd=listItems.ToDictionary(k=>k[“Title”]作为字符串,v=>v.FieldValues);//FieldValues是一个字典
//显示字段
foreach(sd.key中的变量i)
{
LogMessage(“\tItem:{0}”,i);
foreach(列中的var c)
{
LogMessage(“\t\t{0}:{1}”,c,sd[i][c]);
}
}
返回sd;
}

当我想对字段集合执行标准Linq操作(而不是Linq到SharePoint)时,出现了“查询执行的用法无效”错误。所以我只使用了
var fields=fieldColl.ToList()
将其与服务器分离(如果愿意)。我在ExecuteQuery()中收到无效请求。但如果我去掉所有的杂音,效果会很好。知道吗?如何在SPListItem列中获取重复值。在我的spo站点中,我的splist中有大约5300个项目。我想检查标题字段的重复值。如何使用CSOM实现这一点