Mehrfachfilter für Listen und Bibliotheken in SharePoint

In SharePoint und Bibliotheken besteht die Möglichkeit, über die Spaltenüberschriften Filter zu definieren. Das ist in der Praxis wenig bedienerfreundlich, vor allem wenn häufig über mehrere Spalten gefiltert werden soll.

Wünschenswert wäre ein Formular, das dem Anwender zuerst eine Selektion über die gewünschten Filter ermöglicht und das beim Absenden bewirkt, dass nur die gewünschten Elemente angezeigt werden.

Es soll weder der SharePoint Designer noch Webparts, die nicht im Standard von SharePoint enthalten sind, zum Einsatz kommen.

So geht es nicht

  • SharePoint bietet ein Formular-Webpart. Hier kann zwar ein Formular mit mehreren Eingabemöglichkeiten definiert werden, leider kann dann über die Webpartverbindung nur ein Parameter an die Liste/Bibliothek zum Filtern ausgewählt werden.

Lösung

Betrachtet man die Adresse einer Webpartseite bzw. Listenansicht, wenn gefiltert wird, sieht man dass die Parameter in der Adresse angezeigt werden (Beispiel):

FilterField1=Land&FilterValue1=Germany&FilterField2=Rating&FilterValue2=3

Nun müssen wir also dafür sorgen, dass wir über ein Formular diese Kriterien an die Adresse der aktuellen Seite anhängen. Dazu nutzen wir Javascript.

Leider kann im Inhaltseditor kein Formular direkt ins HTML eingefügt werden, da dort die <FORM>-Tags automatisch wieder entfernt werden. Wir müssen also das Formular dynamisch über JavaScript erzeugen.

Wir zeigen Ihnen unten das fertige Script, nur die wichtigsten Punkte werden erläutert. Sicher gibt es weitere Ideen und Möglichkeiten, das Script zu erweitern. Nutzen Sie unser Beispiel als Idee für eigene Anpassungen.

Beispiel

In einer Bibliothek gibt es drei zusätzliche Spalten:

  • Land
  • Rating
  • Practicability

Der Anwender soll nun über unser Formular die Bibliothek nach allen drei Kriterien filtern können.

Die Lösung sieht folgendermaßen aus:

image

Umsetzung

Das Filterformular wird in ein Inhaltseditor eingefügt. Verwenden Sie dazu unten gezeigten Code und fügen ihn über die Zwischenablage in den Quelltext des Inhaltseditors ein.

Der Code

Folgende Dinge müssen in jedem Fall angepasst werden:

  • Der Name der Webpartseite/Ansicht (im Beispiel "default.aspx")
  • Die Spaltennamen ("Land" etc.), verwenden Sie hier Ihre eigenen Spaltennamen.
    Wichtig: Es werden die internen Spaltennamen verwendet, nicht die Anzeigenamen!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<script type="text/javascript"> 
function submitForm(containerElement) { 
    var theForm = document.createElement("form"); 
        theForm.method = "get"; 
        theForm.innerHTML = document.getElementById(containerElement).outerHTML; 
    var formToSubmit = document.body.appendChild(theForm); 
 
var i = 0; 
var FilterString = ""; 
var MySelect=document.getElementById("FCountry"); 
var MyIndex=MySelect.selectedIndex; 
 
if (MySelect.options[MyIndex].value != ""){ 
    i++; 
    if (i ==1){ 
        FilterString = FilterString + "?"; 
    } else { 
        FilterString = FilterString + "&"; 
    } 
    FilterString = FilterString + "FilterField" + i + "=Land&FilterValue" + i + "=" + MySelect.options[MyIndex].value; 
} 
 
MySelect=document.getElementById("Practicability"); 
MyIndex=MySelect.selectedIndex; 
if (MySelect.options[MyIndex].value != ""){ 
    i++; 
    if (i ==1){ 
        FilterString = FilterString + "?"; 
    } else { 
        FilterString = FilterString + "&"; 
    } 
    FilterString = FilterString + "FilterField" + i + "=Practicability&FilterValue" + i + "=" + MySelect.options[MyIndex].value; 
} 
MySelect=document.getElementById("GeneralRating"); 
MyIndex=MySelect.selectedIndex; 
if (MySelect.options[MyIndex].value != ""){ 
    i++; 
    if (i ==1){ 
        FilterString = FilterString + "?"; 
    } else { 
        FilterString = FilterString + "&"; 
    } 
    FilterString = FilterString + "FilterField" + i + "=Rating&FilterValue" + i + "=" + MySelect.options[MyIndex].value; 
} 
 
window.open("default.aspx" + FilterString, "_self"); 
} 
</script> 
 
<div id="contactForm"> 
<table cellspacing="15" cellpadding="0"><tbody><tr><td><b>Land</b> </td><td><b>General Rating</b><br /></td><td><b>Practicability</b><br /></td></tr><tr><td valign="top"><select id="FCountry" size="15" name="FCountry"> <option selected>Alle</option> <option value="Austria">Austria</option> <option value="Belgium">Belgium</option> ... <option value="Ukraine">Ukraine</option> <option value="United Kingdom">United Kingdom</option> <option value="Vietnam">Vietnam</option></select> </td><td valign="top"><select id="GeneralRating" size="15" name="GeneralRating"> <option selected>Alle</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option></select> </td><td><select id="Practicability" size="15" name="Practicability"> <option selected>Alle</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option></select> </td></tr><tr><td colspan="3"><button onclick="submitForm(&#39;contactForm&#39;)">Suchen</button><button onclick="javascript:window.open(&#39;default.aspx&#39;, &#39;_self&#39;)">Alle anzeigen</button> </td></tr></tbody></table> 
 
</div>

5 Kommentare zu Mehrfachfilter für Listen und Bibliotheken in SharePoint

Hinterlasse eine Antwort

 

 

 

Du kannst diese HTML-Tags benutzen

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">