I like: JSOM Listenfilterung
avatar

Als erfahrener SharePoint-Entwickler (seit 2004)  kann ich mich noch an Zeiten erinnern, in denen JavaScript in einem Editor Web Part als Gefahrenquelle unterdrückt wurde. Um so erstaunlicher finde ich es heute, dass das Injizieren von JavaScript einer der am meisten propergierten Ansätze von Microsoft ist. Wann immer Standardfunktionen vom SharePoint erweitert werden müssen, ist der Einsatz vom Client Side Object Model die erste Wahl.

Hat man ein schlankes, in sich gekapseltes Modul entwickelt, dann ist die Bereitstellung über eine SharePoint App eventuell zum umständlich. Das hängt natürlich vom Anwendungsfall ab. Je genereller die Funktionalität der Anwendung, desto interessanter der Einsatz einer App. Entwickelt man ein sehr spezielles Modul, das ohnehin nur an einer einzigen Stelle im SharePoint betrieben wird, dann ist es evtl. völlig ausreichend dieses über ein Web Part bereitzustellen. Wo wir wieder bei meinem Erstaunen aus Absatz 1 wären. 🙂 Denn das Bereitstellen von JavaScript-Komponenten über Content – oder Script Editor Webparts funktioniert hervorragend und lässt sich auch über eine WSP automatisieren.  

Mit JSOM  – dem JavaScript Object Model – kann man mittlerweile unglaublich viele Anwendungsfälle implementieren. Nachfolgend habe ich ein kleines, noch sehr rudimentäres Szenario implementiert, in dem eine Liste von Fischarten in einem List View Web Part (Standard Web Part) gefiltert werden kann.

Der erste Filter geht auf eine Liste mit Kategorien, die über ein Lookup mit der Liste der Fischarten verbunden ist. Wird über die Suche eine Kategorie selektiert, dann wird die Ansicht im Web Part automatisch nach dieser Kategorie gefiltert.

Der zweite Filter basiert auf einem Termset aus dem Taxonomiespeicher. Per Klick auf einen der Terms wird der zweite Filter im List View Web Part gesetzt.

image

Wie genau die Filterung mit Hilfe der “INPLVIEW.JS” technisch funktioniert, ist im Artikel http://platinumdogs.me/2014/07/15/dynamically-filtering-sharepoint-list-views-using-javascript/ super erläutert.

Unterm Strich werden die Filterkriterien per URL bekannt gemacht. Bspw.: https://<your server>/sites/<SC>/#InplviewHash9cf5bf3c-ce10-4c5a-acb6-e100c79f42c8=FilterField1%3DKategorie-FilterValue1%3DKarpfenartige%20(Cypriniden)-FilterField2%3DHabitat-FilterValue2%3D3-FilterOp2%3DIn-FilterLookupId2%3D1. (Dies hat zudem den Vorteil, dass die URL inkl. Filterung als Link weitergereicht werden kann.)

 

Um eine SharePoint Liste nach einer Taxonomiespalte filtern zu können, ist es erforderlich die WssId zu kennen. Diese bekommt man nur über die Abfrage der TaxonomyHiddenList heraus.

 function onclickTerm(termGuid) {
        var ctx = SP.ClientContext.get_current();
        var oList = ctx.get_web().get_lists().getByTitle('TaxonomyHiddenList');
        //default value: if term is not in taxonomie hidden, use a wss ID getting no result on filtering 
        wssId = 9999;

        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'IdForTerm\'/>' +
            '<Value Type=\'Text\'>' + termGuid + '</Value></Eq></Where></Query></View>');
        this.collListItem = oList.getItems(camlQuery);
        ctx.load(collListItem);
        ctx.executeQueryAsync(Function.createDelegate(this, function (sender, args) {
            var listItemEnumerator = collListItem.getEnumerator();
            while (listItemEnumerator.moveNext()) {
                var oListItem = listItemEnumerator.get_current();
                wssId = oListItem.get_id();
                //only one or no match
                break;
            }
            //call filter function
            doFilter(false);
        }),
        Function.createDelegate(this, function (sender, args) { alert('Error on getting Taxonomy hidden item!'); }));
    }

Wie man sieht, kann man bereits mit einem kleinen Editor Web Part und JSOM wirklich tolle, leichtgewichtige Lösungen realisieren.

Schreibe einen Kommentar