Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have a list named "Discussions List". I want to bring all columns from the list.

I want to know how to do it SharePoint Client Object Model.

like image 495
Roy Justin Avatar asked Oct 15 '12 09:10

Roy Justin


People also ask

How do I get client context in SharePoint?

// Starting with ClientContext, the constructor requires a URL to the // server running SharePoint. ClientContext context = new ClientContext("https://{site_url}"); Web web = context. Web; context. Load(web); context.

What is the use of ClientContext in SharePoint?

Use the ClientContext class to return context information about such objects as the current web application, site, site collection, or server version. The Document library templates sample app for SharePoint includes an example of how to use this object.

What is the purpose of calling ClientContext Executequery ()?

Executes the current set of data retrieval queries and method invocations.


2 Answers

OK. Found the solution. Answer Here using a list I'm getting by title, but will work with any method:

// 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.
}
like image 101
Paul B Avatar answered Oct 04 '22 22:10

Paul B


Bingo. You're going to love this. Thank goodness for generics and 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;
}
like image 27
Brady Avatar answered Oct 04 '22 23:10

Brady