Listen auslesen mit LINQ to SharePoint

Mit SharePoint 2010 kommt mit LINQ to SharePoint ein neues, hilfreiches Feature hinzu um auf SharePoint Listen zuzugreifen.

Um LINQ to SharePoint benutzen zu können muss man sich als erstes die Entity Classes generieren lassen. Zum Generieren der Klassen wird die SPMetal.exe benutzt, zu finden unter: „C:\Program Files\Common Files\Microsoft Shared\ Web Server Extensions\14\BIN“.

Öffnen Sie die cmd.exe und navigieren Sie zu dem oben angegeben Pfad in dem sich die SPMetal.exe befindet. Anschließend geben Sie den Befehl zum generieren der *.cs Datei ein.

clip_image002[5]

/web:Site
/code:OutputFile
/Language:OutputLanguage

Nach der Eingabe des Befehls wird die Datei “LINQToSharePoint.cs” im „BIN“ Order generiert.
 

Jetzt können wir die Datei zu unserem SharePoint-Projekt hinzufügen und benutzen.

clip_image003[5]

Das Testprojekt besteht aus einem einfachen VisualWebpart, einer DAL Klasse und aus der generierten LINQToSharePoint.cs.

Die DAL Klasse dient zur Kommunikation zwischen SharePoint und dem Webpart.
Wenn wir die LINQToSharePoint.cs öffnen sehen wir ganz oben die generierte DataContext Klasse.

public partial class LINQToSharePointDataContext : Microsoft.SharePoint.Linq.DataContext

{

 

    #region Extensibility Method Definitions

    partial void OnCreated();

    #endregion

 

    public LINQToSharePointDataContext(string requestUrl) :

        base(requestUrl)

    {

        this.OnCreated();

    }

 

    [Microsoft.SharePoint.Linq.ListAttribute(Name = „Fruits“)]

    public Microsoft.SharePoint.Linq.EntityList<FruitsItem> Fruits

    {

        get

        {

            return this.GetList<FruitsItem>(„Fruits“);

        }

    }

}

 

Weiter unten finden wir die Klasse „FruitsItem“ welche eine Zeile in der Fruits Liste darstellt. Diese beinhaltet alle notwendigen Properties um auf die Listeneinträge zuzugreifen.

[Microsoft.SharePoint.Linq.ContentTypeAttribute(Name = „Item“, Id = „0x01“, List = „Fruits“)]

public partial class FruitsItem : Item

{

 

    private System.Nullable<double> _price;

 

    private System.Nullable<Color> _color;

 

    #region Extensibility Method Definitions

    partial void OnLoaded();

    partial void OnValidate();

    partial void OnCreated();

    #endregion

 

    public FruitsItem()

    {

        this.OnCreated();

    }

 

    [Microsoft.SharePoint.Linq.ColumnAttribute(Name = „Price“, Storage = „_price“, FieldType = „Currency“)]

    public System.Nullable<double> Price

    {

        get

        {

            return this._price;

        }

        set

        {

            if ((value != this._price))

            {

                this.OnPropertyChanging(„Price“, this._price);

                this._price = value;

                this.OnPropertyChanged(„Price“);

            }

        }

    }

 

    [Microsoft.SharePoint.Linq.ColumnAttribute(Name = „Color“, Storage = „_color“, FieldType = „Choice“)]

    public System.Nullable<Color> Color

    {

        get

        {

            return this._color;

        }

        set

        {

            if ((value != this._color))

            {

                this.OnPropertyChanging(„Color“, this._color);

                this._color = value;

                this.OnPropertyChanged(„Color“);

            }

        }

    }

}

 

Die LINQToSharePointDataContext Klasse benötigen wir zum Auslesen der Listen. Ich habe zum Auslesen eine Methode in der DAL.cs mit dem Namen „GetFruits“ angelegt, in der die LINQToSharePointDataContext Klasse instanziiert wird.

        public EntityList<FruitsItem> GetFruits(string server)

        {

            LINQToSharePointDataContext data = new LINQToSharePointDataContext(server);

            EntityList<FruitsItem> fruitList = data.GetList<FruitsItem>(„Fruits“);

 

            return fruitList;

        }

 

Der Rückgabetyp der Methode ist teil der Microsoft.SharePoint.Linq Assembly. Als Listen Element geben wir ein FruitsItem an.

Wenn wir die LINQToSharePointDataContext Klasse instanziiert haben können wir diese benutzen und die „GetList“ Methode aufrufen. In den spitzen Klammern geben wir an von welchem Typ die Listenelemente sein sollen. In der runden Klammer geben wir die Liste an die ausgelesen werden soll.

Nach der Ausführung der „data.GetList“ Methode haben wir eine EntityList die mit den Items der Fruits Liste gefüllt ist.

_data ist unsere Instanziierte DAL Klasse. Mit dieser rufen wir die GetFruits Methode auf und bekommen die EntityList mit den Items aus der Fruit Liste zurück.

 

//GetFruits

EntityList<FruitsItem> fruitList = _data.GetFruits(_server);

 

ddlFruits.DataSource = fruitList;

ddlFruits.DataTextField = „Title“;

ddlFruits.DataBind();

 

Die EntityList können wir direkt an die DataSource einer DropDownList binden. Das Ergebnis sieht dann wie folgt aus:

clip_image004[5]

Sie sehen also, dass LINQToSharePoint einem sehr viel Arbeit abnehmen kann und man, nachdem man die DataContext Klasse instanziiert hat, eine Liste in nur einer Zeile auslesen kann.

Schreibe einen Kommentar