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:
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('contactForm')">Suchen</button><button onclick="javascript:window.open('default.aspx', '_self')">Alle anzeigen</button> </td></tr></tbody></table> </div> |

Wie kann ich denn nach mehreren Ländern gleichzeitig filtern.
z.B. Germany und Italy gleichzeitig ?
Hallo,
leider werden nie die aktuellen (in der Dok.bib.) benutzen Spaltenwerte angezeigt. Diese Werte müssen ja manuell mittels “option value=” eingepflegt und vor allem auf dem neuesten Stand gehalten werden!!!
Gibt es da keine automatisierte Lösung, die die Werte aus den Spalten von selbst ausliest und anzeigt?
Viele Grüße