2009-04-29 8 views
2

Ich habe eine SharePoint-Dokumentbibliothek mit einer Ordnerstruktur, die zum Organisieren der Dokumente verwendet wird (aber auch zum Steuern des Zugriffs über Berechtigungen für die Ordner).SharePoint: Filtern einer Liste mit Ordnern

Die Dokumente in der Bibliothek werden jeden Monat aktualisiert, und wir speichern jede Monatsversion des Dokuments im selben Ordner; es gibt einen „Monat“ -Spalte zum Filtern verwendet, die 09, 9. Februar Werte wie Jan enthalten, etc. Es sieht wie folgt aus:

 
    Title     Month 
    -----     ----- 
    SubFolder 1 
    SubFolder 2 
[] Interesting Facts  Jan 09 
[] Interesting Facts  Feb 09 
[] Interesting Facts  Mar 09 
[] Fascinating Numbers Jan 09 
[] Fascinating Numbers Feb 09 
    ... 

Jetzt, da Nutzer in der Regel am meisten interessieren wird in der ‚aktuellen‘ Monat, Ich möchte, dass sie einen Filter anwenden können, und wählen (sagen wir) Mar 09. Wenn sie dies jedoch mit der integrierten Filterung tun, filtert sie auch die Ordner und sie können nicht mehr durch die Ordnerhierarchie navigieren . Das ist nicht gut - ich möchte, dass sie sich zwischen Ordnern mit intaktem Filter bewegen können, so dass sie sie nicht ständig aus- und wieder einschalten müssen.

Ich dachte, ich könnte in der Lage sein, eine benutzerdefinierte Ansicht (Auswahl wo Typ = Ordner oder Monat = [Monat]), und in einem Umfang, der funktioniert. Allerdings kann ich es nur für einen festen Monat arbeiten, während ich den Benutzer in der Lage sein muss, den Monat auszuwählen - vielleicht über ein Dropdown-Steuerelement auf der Seite (und ich möchte nicht 60 Ansichten erstellen für 5 Jahre von Monaten, noch möchte ich jeden Monat eine neue Sicht erstellen müssen).

Ich dachte, es wäre möglich, eine Ansicht in Code zu erstellen (anstatt über die Benutzeroberfläche), aber ich konnte nicht herausfinden, wie man einen dynamischen Wert (eine benutzerspezifische Einstellung) in die CAML bekommt Abfrage.

Alle Hinweise dankbar geschätzt! Und übrigens, ich bin bewusst das Dogma, dass Ordner schlecht sind, und dass alles nur eine Liste sein sollte. Nachdem ich die Alternativen in Erwägung gezogen habe, favorisiere ich immer noch die Verwendung von Ordnern - wenn ich dieses Problem lösen kann.

Vielen Dank im Voraus.

Antwort

0

Sie können dies mit einem DataViewWebpart filtered by a form webpart versuchen. Verwalten der Anzeige der Ordner und dann der Ordner Elemente, wenn es angeklickt wird, wird ein Problem sein. Das ist einer der Gründe, Ordner nicht zu benutzen, denke ich.

0

Ich erfahre gerade das gleiche Problem, anstatt eines einfachen Datums, muss ich basierend auf Ordnernamen filtern und dann diese Ordner auf der Seite anzeigen. Sobald sie auf einen Ordner klicken, können sie den Inhalt dieses Ordners anzeigen.

Ich habe noch keine gute Lösung dafür gefunden, aber für Ihre sollten Sie in der Lage sein, einfach eine benutzerdefinierte CAML-Abfrage mit dem contentQueryWebpart zu erstellen.

Etwas wie folgt aus: Further Customize CQWP

Aber Sie würden es auf dem Datum/Uhrzeit des Ordners und nichts anderes tun.

Ihre Anfrage wäre so etwas wie:

<![CDATA[ 
    <Where> 
    <Gt> 
     <FieldRef Name="Created" Nullable="True" Type="DateTime"/> 
     <Value Type="DateTime"><Today /></Value> 
    </Gt> 
    </Where> 
    <OrderBy> 
     <FieldRef Name="Created" Nullable="True" Type="DateTime"Ascending="FALSE"/> 
    </OrderBy>]]> 

ich auch den Namen des Ordners, den Sie suchen hinzufügen würde sicher nichts anderes zurückgeführt wird zu machen.

Hoffe, das hilft. Und bitte postback, wenn Sie eine andere Lösung finden.

0

Ich glaube, ich Ihre Lösung gefunden - Das DataWebPart tatsächlich ist das, was mir geholfen ....

Mit diesem auch ein großer Augenöffner war: ASP.NET Controls Filter Data View

es Zusammengefasst, können Sie einfach Ihre füllen Drop-Down mit dem Monat Jahr Combo, fügen Sie die freigegebene Doc-Bibliothek auf der Seite über die Designer-Ansicht, verwenden Sie eine "Filter" Verbindung zu Ihrem ASP.NET-Dropdown und sofort haben Sie einen Filter für einen pro Monat. Sie haben es auch zu einem bestimmten Datum Standard XSL verwenden, es ist alles in der Code-Ansicht jetzt :)

0

@Gary Die Bedienelemente Filter der DATA-Ansicht (meine zweite Antwort) nicht halten eigentlich die Ordnerhierarchie.

Sie können es bei Bedarf in Unterordner verschieben, aber in Ihrem Fall sind Sie nur daran interessiert, einen bestimmten Ordner korrekt anzuzeigen?

Was Sie tun, ist SP-Designer zu tun, ich konnte keinen Weg finden, es über die regulären Webparts zu tun.

  1. per Drag & Drop Ihre freigegebenen Dokumentbibliothek in der ‚design‘ Ansicht für die Seite
  2. Klicken Sie auf die gemeinsame Aufgabe Pfeil (>) und passen Sie die Spalten
  3. Noch in der gemeinsamen Aufgabe zeigen wollen, wende einen Filter deiner Wahl an. Was Sie hier tun möchten, ist ein Filter für Ihre Monatsspalte, so dass die Spalte Monat dem aktuellen Monat/Jahr entspricht, richtig? Der Filter wird nur eine Wahl geben, etwas zu geben, den aktuellen Monat eingeben, sagt Mai 09. wechseln Sie dann auf ‚Code‘ Ansicht
  4. findet die gemeinsame Dokumentbibliothek und mehr gezielt nach so etwas wie: & lt ; Wo & gt; .... Das ist die CAML-Abfrage, die ich zuvor erwähnt habe. Sie können eine HTML-Dekodierung für das ganze Ding machen, so dass es etwas lesbarer ist. Aber im Wesentlichen ist der Filter eine einfache CAML-Abfrage. Sie möchten diese Abfrage ändern, sodass die Kombination aus Monat und Jahr dem aktuellen Monat/Jahr entspricht. CAML hat eine Funktion namens < MONTH/>, die den Monat im folgenden Format zurückgibt: MM/JJJJ (Sie müssen möglicherweise das Format für Ihre Spalte ändern oder eine neue erstellen, um es sich einfach zu machen) - Ihre CAML-Abfrage sollte etwas, das ein bisschen wie folgt sein:

<Where> 
<Eq> 
    <FieldRef Name='Month'/> 
    <Value Type='Number'><Month/></Value> 
</Eq> 
</Where> 
 

oder html codiert:

&lt ;Where&gt ;&lt ;Eq&gt ;&lt ;FieldRef Name='Month'/&gt ;&lt ;Value Type='Number'&gt ;&lt ;Month/&gt ;&lt ;/Value&gt ;&lt ;/Eq&gt ;&lt ;/Where&gt ;

der Schlüssel dazu ist, dass Sie nur einen Filter auf der Stammebene zu schaffen , in der Datenansicht. Sobald sie auf den Ordner klicken, werden sie einfach in die Dokumentbibliothek geworfen und können alles innerhalb des Ordners anzeigen.

Hoffe diese Hilfe!

ps: auf dem HTML-Code musste ich Leerzeichen vor dem ';' damit du den Code sehen kannst.

0

Ich habe sehr viel mit Filterung und dem SPGridView gearbeitet. Vielleicht können Sie etwas in diesem post auf meinem meinem Blog schauen. Wie gesagt, weiß nicht, ob es dir hilft, aber sieh es dir an.

1

Können Sie einen Inhaltstyp erstellen, der von Ordner erbt, der eine Spalte Monat enthält? Ersetzen Sie dann den normalen Inhaltstyp des Ordners durch den neuen in dieser Liste. Stellen Sie den Monat entsprechend ein, und nun würde Ihr Filter auch den Ordner enthalten.