Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc

Cvalikov blog

Čím viac viem, zisťujem čo všetko vlastne neviem
CAML vo WSS a tvorba dotazu na vyhladanie dokumentov

Podme si ukazat jedno zlepsienie pri praci s WSS 3.0 oproti starsim verziam.
Predstavte si, ze potrebujete vyhladavat obsah portalu cez viacero stranok, alebo podla vlastnych kriterii. Vo WSS 2.0 to bol vcelku problem...
Teraz pribudol novy objekt SPSiteDataQuery, ktory je presne urceny k "cross-site or cross-list search".
Dalsim objektom je SPQuery, ale ten pracuje len nad konktretnym listom, co vacsinou je nedostacujuce.

Podme si naprogramovat jednoduchu webpartu, ktora najde vsetky napr. ".docx" dokumenty na stranke a zobrazi ich v gride.
1. Zostavme si CAML dotaz. K tomuto pouzijme free nastroje, ktore to urobia za nas (napr.
U2U CAML Query Builder, Stramit SharePoint Caml Viewer)
2. Vytvorime vlastny webpartu
[Guid("bac182c8-94e0-45f1-afea-8bcea1fee58b")]
public class Caml : System.Web.UI.WebControls.WebParts.WebPart
{
      protected GridView gvResult;
      /// Tu budeme toplnat dalsie override metody
}

3. prepisme OnLoad metodu, kde prevedieme vlastne vyhladanie a naplnenie objektu DataTable
protected override void OnLoad(EventArgs e)
{
      EnsureChildControls();
      DataTable dt = null;

      SPWeb web = SPControl.GetContextWeb(Context);
      SPSiteDataQuery q = new SPSiteDataQuery();
      //Vratene polia dotazu
       q.ViewFields = "<FieldRef Name=\"Title\"/><FieldRef Name=\"Modified\"/>" +
                                  "<FieldRef Name=\"FileLeafRef\"/><FieldRef Name=\"DocIcon\"/>" +
                                  "<ListProperty Name=\"Title\" /><FieldRef Name=\"Editor\"/>" +
                                  "<FieldRef Name=\"FileRef\"/>";
      //nastavenie vyhladavania dokumentovej kniznice 
      q.Lists = "<Lists ServerTemplate=\"101\"/>";
      //Samotny dotaz, kde vyhladavame DocIcon rovna docx
      q.Query = "<Where><Eq><FieldRef Name=\"DocIcon\" />"+
                        "<Value Type=\"Computed\">docx</Value></Eq></Where>";

      //pokial potrebujeme vyhladavat rekurzivne zmenime scope vyhladavania
      //q.Webs = "<webs scope="SiteCollection">";

     
//q.Webs = "<webs scope="Recursive">";

      //DataTable vysledku + bind gridu
      dt = web.GetSiteData(q);
      if (dt != null)
      {
          gvResult.DataSource = dt;
          gvResult.DataBind();
      }
      web = null;
}

4. Render Gridu s vysledkom
protected override void CreateChildControls()
 {
            gvResult = new GridView();
            gvResult.AutoGenerateColumns = true;
            gvResult.Width = Unit.Percentage(100);
            this.Controls.Add(gvResult);
}

protected override void Render(HtmlTextWriter writer)
{
            gvResult.RenderControl(writer);
}
5. Vysledok naseho snazenia. Samozrejme parsovanie a graficku upravu uz ponecham na fantazii programatorov

6. kompletny zdojovy kod je v attachments

Posted: Thursday, March 15, 2007 12:44 PM by cvalik

Attachment(s): WebPart1.txt

Komentář

rado.busovsky napsal:

Ja by som potreboval nieco trocha ine, pridat do WSS listu column z uplne inej databazy, respektive z mojho dataobjektu. Nasiel som iba ze MOSS ma Business Data Catalog ale WSS take nema.

# March 15, 2007 3:53 PM

cvalik napsal:

skuste naprogramovat si vlastny custom column

mozem na to urobit clanok :)

# March 16, 2007 9:06 AM

smidrs napsal:

Chtel bych se zeptat, vim, ze to sem asi nepatri. Ale v SPS 2007 je mozne udelat opravneni na polozku (radek). Co me vsak tedka zajima je jestli jde i udelat opravneni na sloupecek?

Priklad, zobrazit datagrid kde mam jeden sloupecek plat a ten by mohli videt jen treba hlavni vedouci divizi a ostatni zamestnanci by ten sloupec nevideli :)

Myslim si, ale ze to nejde :( bohuzel to nemam zatim potvrzene, tak se Vas chci zeptat, zda to jiz nekdo neresil?

predem diky za odpoved :)

Jarda

# March 20, 2007 4:04 PM

Matus Copik napsal:

Ten sample na vlastny column by pomohol ;)

# September 19, 2007 9:44 AM
Vytvoření nového komentáře

(povinný) 

(povinný) 

(nepovinný)

(povinný) 

Opiš čísla, která vidíš na obrázku:

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS