SharePoint päringute jõudlus 2: Küsi ainult need väljad, mida reaalselt vajad

23.03.2010  |  Gunnar

Keeruline juttSharePoint SharePoint kasutab päringute tegemiseks SPQuery tüübist objekti. Selle abil saab ära kirjeldada nii päringu enda kui ka piiratud koguse päringu sooritamist juhtivaid omadusi. Käesolevas postituses vähendame päringutele kuluvat mälumahtu sel teel, et küsime ainult need väljad, mida me päringu tegemise kohas reaalselt vajame.

Vaatame korra järgmist CAML-päringut, mis tagastab projektide loendist kõik projektid, mille tellijaks on firma ID-ga 12.

private void Bind()
{
    var list = SPContext.Current.CurrentWeb.Lists["Projects"];
    var query = new SPQuery();

    query.Query = "<Where><Eq>";
    query.Query +="<FieldRef Name='Company' LookupId='True' />";
    query.Query += "<Value Type='Lookup'>12</Value></Eq></Where>";

    var items = list.GetItems(query);

    // tee tulemustega midagi sisukat
}

Meil on vaja projektidest koostada lihtne loend ja selleks piisab meile ideaalselt sellest, kui päring tagastab üksuste pealkirja, ID ja projekti alustamise kuupäeva. Me ei soovi loendi koostamiseks laadida mällu näiteks projektide kirjeldusi, mis on piiramata pikkusega ja muid välju, mis võivad samuti mahukateks osutuda.

SPQuery klassil on sellise soovi täitmiseks olemas omadus nimega ViewFields. ViewFields omadusele saab omistada CAML-i, mis määrab väljad, mille päring meile kindlasti tagastama peab. Järgnev kood ütleb SharePointile, et me soovime saada tagasi ainult ID, Title ja ProjectStart väljad.

private void Bind()
{
    var list = SPContext.Current.CurrentWeb.Lists["Projects"];
    var query = new SPQuery();

    query.Query = "<Where><Eq>";
    query.Query +="<FieldRef Name='Company' LookupId='True' />";
    query.Query += "<Value Type='Lookup'>12</Value></Eq></Where>";

    query.ViewFields = "<FieldRef Name='ID' />";
    query.ViewFields += "<FieldRef Name='Title' Nullable='True' />";
    query.ViewFields += "<FieldRef Name='ProjectStart' Nullable='True' />";

    var items = list.GetItems(query);

    // tee tulemustega midagi sisukat
}

Sellega on tulemus saavutatud. Loenditest, kus on palju välju on päringuid kõige mõttekam teha ainult nende väljadega, mida me reaalselt vajame.

FieldRef elementides tuleb välja nimeks anda välja sisemine nimi (InternalName).

Väike mind shift on siinkohal oluline: SPQuery loomisel on meil lisaks päringule alati vaja üle vaadata ka väljad, mida see tagastab.

2 kommentaari sissekandele “SharePoint päringute jõudlus 2: Küsi ainult need väljad, mida reaalselt vajad”

  1. Kaarel

    Minu meelest peaks sellist lähenemist de facto kasutama, et küsitakse ainult need väljad mida realselt vajatakse

  2. Gunnar

    Just nimelt - peaks :)

Kommenteeri

sulge
Saada link e-postiga

© DT 2012 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress