Donnerstag, 12. März 2009

Mit SPQuery nach Items in DocumentLibrary suchen

Eine Anforderung, die es gestern umzusetzen galt, bestand darin, nach Items (in diesem speziellen Falle Subfoldern) in einer DocumentLibrary zu suchen und diesen Wert einem speziellen Lookup-Feld als Standardauswahl anzugeben. Die normale SPQuery-Abfrage sucht leider nur auf der obersten Ebene. Abhilfe schafft hier das ViewAttribute Scope="RecursiveAll". Dieses sucht rekursiv in der DocumentLibrary und zwar nach allem, also Dokumenten und Foldern.

Die Code-Abfrage lautet dann so:


SPFieldLookup spFieldLookup = (SPFieldLookup)spListItem.Fields[property];
SPList spLookupList = spListItem.Web.Lists[new Guid(spFieldLookup.LookupList)];

SPQuery query = String.Format("{1}", spLookupFieldName, value);
query.ViewAttributes += " Scope=\"RecursiveAll\"";
SPListItemCollection results = spLookupList.GetItems(query);


spListItem und property sind das SPListItem welches ich updaten möchte und der Name des Lookup-Feldes, welches benutzt werden soll. value ist der Foldername, nach dem gesucht werden soll.

Mehr zum dem Attribut "Scope" gibt es auf http://msdn.microsoft.com/en-us/library/ms438338.aspx.