LinkedIn

Thursday, October 20, 2016

How to get all the fields in a list in Sharepoint client object model

// 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 { "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 // 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; }

You Can also try:

// 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.
}

No comments:

Post a Comment