Filterung eines Lookup Fields

Im Rahmen eines Kundenprojekts entstand der Wunsch, individuell im CPM der LINTRA (Link) angelegte Inhaltstypen hierarchisch und einfacher nutzen zu können.

Hintergrund ist die Liste Projekte samt der Inhaltstypen Programm, Projekt und Teilprojekt.

 

Inhaltstypen nach SharePoint Standard

 

Im eingeführten 3-Ebenen-Modell wird bei der Erstellung der Inhaltstypen eine Eltern-Kind- Beziehung hergestellt, so dass einem Teilprojekt immer nur ein Projekt zugeordnet werden kann und einem Projekt wiederum nur ein Programm.

 

Inhaltstypen hierarchisch konfiguriert

Inhaltstypen hierarchisch konfiguriert

 

Die Konfiguration erfolgt über die SharePoint Oberfläche. Bei der Erstellung der Listeninhaltstypen werden die vorher definierten Websiteinhaltstypen Programm, Projekt und Teilprojekt ausgewählt.

Außerdem werden die Websitespalten Projekt und Teilprojekt erstellt, welche jeweils als Nachschlagespalte auf die Liste Projekte bzw. deren Titel referenzieren.

 

Inhaltstyp Teilprojekt mit der Elternbeziehung zum Inhaltstyp Projekt

Inhaltstyp Teilprojekt mit der Elternbeziehung zum Inhaltstyp Projekt

 

Wird nun ein neues Element auf Basis eines der vorhandenen Inhaltstypen erstellt, so weist die Nachschlagespalte die gleiche Anzahl an Einträgen auf, wie Elemente in der Liste Projekte vorhanden sind.

 

Erstellen eines neuen Elements vom Inhaltstyp Teilprojekt

Erstellen eines neuen Elements vom Inhaltstyp Teilprojekt

 

Zur Auswahl stehende Nachschlageelemente bei dem Inhaltstyp Teilprojekt

Zur Auswahl stehende Nachschlageelemente bei dem Inhaltstyp Teilprojekt

 

Neben thematisch unpassenden Einträgen führt dies ab einer höheren Anzahl ebenfalls zu einem unübersichtlich großen Auswahlfeld.

Für die gewünschte Begrenzung der anzuzeigenden Elemente in der Auswahl kommt nun ein kleines Script zum Einsatz, welches bspw. mittels XML Viewer Webpart an beliebiger Stelle auf der Newform.aspx und Editform.aspx Seite platziert wird.

Zur Vereinfachung für diesen Blogeintrag definieren wir unsere Variablen anhand der Spaltennamen im JavaScript Code selbst (rot markiert) und verlinken auf die gehostete jQuery Bibliothek bei Google.


<script src="/https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.j "></script>

<script>

function filterProgramsOrProjects(ctypename) {

       var clientContext = SP.ClientContext.get_current();

       var camlQuery = new SP.CamlQuery();

       camlQuery.set_viewXml('<View><Query><Where><Neq><FieldRef Name=\'ContentType\'/>' +

             '<Value Type=\'Computed\'>' + ctypename + '</Value></Neq></Where></Query></View>');

       var collListItem = clientContext.get_web()

                                               .get_lists()

                                               .getById(_spPageContextInfo.pageListId)

                                               .getItems(camlQuery);

       clientContext.load(collListItem);      

       clientContext.executeQueryAsync(function(){

          var dd = $("select[title='" + ctypename + "']");

             var listItemEnumerator = collListItem.getEnumerator();

             while (listItemEnumerator.moveNext()) {

                    dd.find('option[value=' + listItemEnumerator.get_current().get_id() + ']').remove();

             }

       }, function(){});

}

function RunFilters() {

       filterProgramsOrProjects("Programm");

       filterProgramsOrProjects("Projekt");

}

$(document).ready(function () { ExecuteOrDelayUntilScriptLoaded(RunFilters, "sp.js"); });

</script>

JavaScript Code zur Manipulation der Nachschlagespalten Projekt und Programm

 

Durch das Script wird nun beim Erstellen eines neuen Elements die Ergebnismenge auf die zum Inhaltstyp passenden Einträge reduziert.

 

Erstellen eines neuen Elements vom Inhaltstyp Teilprojekt

Erstellen eines neuen Elements vom Inhaltstyp Teilprojekt

 

 

Zur Auswahl stehende, passende Nachschlagefelder bei dem Inhaltstyp Teilprojekt

Zur Auswahl stehende, passende Nachschlagefelder bei dem Inhaltstyp Teilprojekt