philipp_mueller
I'm new here

FS_CATALOG context parent als Ebeneninfo (Beanshell)

Via FS_BUTTON (Beanshell) manipuliere ich ein FS_CATALOG Feld. Es können sich jedoch darin auch Absatzelemente mit wiederum FS_CATALOG Feldern befinden, was somit verschachtelte Ebenen ermöglicht. Nun muss ich in dem Zusammenhang wissen, auf welcher Ebene sich das aktuell in Bearbeitung befindliche Absatzelement befindet.

Auf oberster Ebene wäre als Parent ja die Page. Darunter jeweils ein Absatzelement. Im besten Falle bekommt ich direkt die Tiefe oder ich "hangel" mich rekursiv wieder hoch.

Bisher konnte mir element.parent oder context nicht helfen.

0 Kudos
1 Reply
philipp_mueller
I'm new here

Ich habe nun selbst eine Lösung gefunden, aber wirklich befriedigend ist es nicht, weil ich es als kompliziert ansehe, das es keine direkte Möglichkeit gibt, sich die Informationen zu holen.

Die elementId ist das erste Element aus dem FS_CATALOG Feld, welches ich an den FS_BUTTON als Parameter übergebe.

// Gibt die Ebenentiefe der aktuellen Sektion zurück
getSectionDepth(section, elementId, depth) {
FormData formData = depth == 1 ? section.getFormData() : section.getItem();
  String sectionName = formData.get(language, "st_headline").get();
  SectionTemplateImpl sectionTemplate = section.getTemplate();

sectionDepth = null;
   if(sectionTemplate.getUid().equals("contentarea")) {
     CatalogImpl elements = formData.get(language, "st_elements").get();
     if(elements.size() > 0) {
      breakforloop;
      for(el : elements) {
       // Element gefunden?
       if(elementId.equals(el.getId())) {
      sectionDepth = depth;
      return sectionDepth;
     } else { // Ansonsten in der Ebene tiefer suchen...
      sectionDepth = getSectionDepth(el, elementId, depth + 1);
      if(sectionDepth != null) {
       break breakforloop;
      }
     }
    }
   }
  }
  return sectionDepth;
}


int sectionDepth = 1;

int sectionId = element.getId();

// Absatz laden und Ebenentiefe bestimmen
QueryAgent queryAgent = context.requireSpecialist(QueryAgent.TYPE); 
Iterable<IDProvider> iterable = queryAgent.answer("fs.id=" + sectionId); 
Iterator<IDProvider> iterator = iterable.iterator(); 
if(iterator.hasNext()) {
IDProvider idProvider = iterator.next();
FormData formData = idProvider.getFormData();

// Sektion gefunden?
if(idProvider != null) {
  sectionDepth = getSectionDepth(idProvider, elementId, sectionDepth);
}
}
// message.append("\nEbenentiefe: " + sectionDepth);

0 Kudos