thomas_ritter
I'm new here

Templatestore getChildren Filter

Jump to solution

Hallo zusammen,

ich benötige für ein Skript alle Seitentemplates bis auf einen Ordner (__dev). Bisher habe ich mir alle geholt (inkl. __dev) mit folgendem Code:

pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);

Nun würde ich gerne den __dev-Ordner ausschließen. Hierzu habe ich folgende Methode gefunden:

getChildren(filter, true);

Leider weiß ich nicht wie ich den Filter bauen soll. Das Beispiel (http://localhost:8000/help/odfs/access/examples/de/espirit/firstspirit/access/store/StoreElementFilt...) habe ich mir bereits angsehen. Hat mir aber leider nicht geholfen.

Hat jemand evtl. ein Beispielcode für mich für meinen Anwendungsfall?

Danke im Voraus.

LG Thomas

0 Kudos
1 Solution

Accepted Solutions

Hallo Michael,

danke für deine Antwort. Mir ist dank deiner Antwort auftgefallen, dass ich das releativ einfach lösen kann, da ich die Templatenamen nur in eine ComboBox schreibe.

// Constants

REGEX_PATTERN = "(.*__master$)";

// Regex Pattern

Pattern pattern = Pattern.compile(REGEX_PATTERN);

// Get list of Templates for Combobox

pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);

// Fill ComboBoxes

for(item:pageChilds){   

    Matcher matcher = pattern.matcher(item.getUid());   

    if(matcher.find()){

        pageComboBoxData.add(item.getUid());

    }

}

Somit fallen bei uns alle _dev Templates weg, da diese hinter "__master" noch mit "__dev" erweitert werden, was durch die REGEX herausgefiltert wird Smiley Happy

lg thomas

View solution in original post

0 Kudos
4 Replies
mbergmann
Crownpeak employee

Hallo Thomas,

hier sollte es reichen, eine Klasse von StoreElementFilter erben zu lassen und die accept-Methode zu implementieren. Hier müsstest Du nur schauen, ob das Element (wenn es kein Ordner ist) im Ordner __dev liegt - ggf über ein Hochlaufen der Elternkette. Denn mit dem Filter kannst Du nur steuern, welche Elemente zurückgeliefert werden, aber nicht bei welchen die (von "außen") gesteuerte Rekursion abgebrochen wird.

Dabei daran denken, dass TemplateStore-Folder keine UID haben 😉

Das von Dir verlinkte Beispiel bringt in Deinem Fall tatsächlich nichts, weil hier letztlich nur "vorkonfektionierte" Filter aus den FilterUtils benutzt werden.

Zuerst hatte ich spontan übrigens die Idee, einfach alle Templates zu holen, in eine Map zu packen, dann rekursiv alle Kinder des __dev-Ordners zu nehmen und die wieder rauszuwerfen. Das ist aber auch nicht besser, weil eben TemplatestoreFolder keine UID haben und Du den Ordner nicht einfach anhand seines Namens holen kannst...

Viele Grüße

Michael

Hallo Michael,

danke für deine Antwort. Mir ist dank deiner Antwort auftgefallen, dass ich das releativ einfach lösen kann, da ich die Templatenamen nur in eine ComboBox schreibe.

// Constants

REGEX_PATTERN = "(.*__master$)";

// Regex Pattern

Pattern pattern = Pattern.compile(REGEX_PATTERN);

// Get list of Templates for Combobox

pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);

// Fill ComboBoxes

for(item:pageChilds){   

    Matcher matcher = pattern.matcher(item.getUid());   

    if(matcher.find()){

        pageComboBoxData.add(item.getUid());

    }

}

Somit fallen bei uns alle _dev Templates weg, da diese hinter "__master" noch mit "__dev" erweitert werden, was durch die REGEX herausgefiltert wird Smiley Happy

lg thomas

0 Kudos

Hallo Thomas,

kleine Anmerkung: Eigentlich sollte ja in Deinem Fall keine RegEx nötig sein, ein

if(item.getUid().endsWith("__master"))

sollte es auch tun...

Macht es vielleicht einfacher lesbar 😉

Viele Grüße

Michael

Hallo Michael,

jetzt wo du es sagt, ja das ist etwas besser Smiley Happy.

Ist sicher auch etwas performanter als die RegEx.

Danke.

lg thomas

0 Kudos