wolfmich
I'm new here

Delta-Generation

Hallo zusammen,

aktuell befassen wir uns mit der Erweiterung unseres Deployment-Prozesses mit FirstSpirit. In diesem Kontext erweist sich die Delta-Generierung von FirstSpirit 5.1 als interessante Funktion für die Beschleunigung der Generierung. Im Rahmen unserer ersten Tests mussten wir feststellen, dass der Einsatz der Delta-Generierung nur möglich ist, wenn die Generierung als "Full Generation" konfiguriert wurde. Dies erweist sich für unsere Projekt-Struktur als hinderlich, das wir innerhalb eines Projektes über mehrere Ländermandanten verfügen, die souverän generiert und deployed werden sollen.

Existiert ein Workaround für die Delta-Generierung von Teil-Projekten (Partial-Generierungen) oder erfolgt die Ermittlung von Deltas rekursiv über den Root-Knotes eines FS-Projektes?

Ich bedanke mich vorab für Ihre Mühe sowie für etwaige Lösungsskizzen.

Viele Grüße,
Michael Wolf

2 Replies
kohlbrecher
Crownpeak employee

Hallo,

für den Ansatz haben wir in einem Projekt ein Skript geschrieben, das so ziemlich das macht, was du dir vorstellst. Und zwar handelt es sich dabei auch um ein Volldeployment. DAs Skript sorgt aber dafür, dass nur die Seiten rausgeschrieben werden, die unterhalb eines bestimmten Ordners liegen. Das Skript muss zwischen der Ermittlung des Deltas und der Generierung eingebaut werden. Für jeden Ordner, für den die Teilgenerierung ausgeführt werden soll, muss ein eigener Auftrag angelegt werden.

import de.espirit.firstspirit.access.schedule.GenerateTask;

import de.espirit.firstspirit.access.store.sitestore.PageRef;

import de.espirit.firstspirit.access.ReferenceEntry;

sitename="<ORDNERNAME>";

metadatafield="md_communityName";

tasks = context.getTasks();

for (int i = context.getTaskIndex() + 1; i < tasks.size(); i++) {

    task = tasks.get(i);

    if (task instanceof GenerateTask) {

        context.logInfo("manipulating task " + task.getName());

        startNodes = task.getStartNodes();

        nodesToRemove = new HashSet();

        addNodes = new HashSet();

        for (int j = 0; j < startNodes.size(); j++) {

            node = startNodes.get(j);

            if(node instanceof PageRef) {

                page = node.getPage();

                context.logInfo("Get Page: " + page.getUid());

                for(ref : page.getIncomingReferences()) {

    //&& ref.getReferencedElement() != node

                    if(!ref.isBroken() && !ref.isRemote() && ref.isType(ReferenceEntry.SITE_STORE_REFERENCE) ) {

                        context.logInfo("add node " + ref.getId());

                        addNodes.add(ref.getReferencedElement());

                    }

                           

                }

               

            }

           

        }

        //startNodes.addAll(addNodes);

context.logInfo("How many startnodes after add? " + startNodes.size());

        for (int j = 0; j < startNodes.size(); j++) {

            node = startNodes.get(j);

           

           context.logInfo("Value of metadata: " + node.getMetaFormData().get(null, metadatafield).get());

            while (node != null && node.getMetaFormData().get(null, metadatafield).get() == null) {

                context.logInfo("Change Parent to: " + node.getName());

                node = node.getParent();

                context.logInfo("Where I get my information from: " + node.getName());

            }

            if (node == null || node.getParent() == null || !sitename.equals(node.getMetaFormData().get(null, metadatafield).get().getValue())) {

               context.logInfo("remove node " + startNodes.get(j).getId());

                nodesToRemove.add(startNodes.get(j));

            }

        }

        addNodes.removeAll(nodesToRemove);

        startNodes.clear();

        startNodes.addAll(addNodes);

context.logInfo("How many startnodes? " + startNodes.size());

    }

}

Ich hoffe, dass das Skript hilft.

Grüße

Jan

rednoss
I'm new here

Hallo Michael,

benötigst Du noch weitere Hilfe oder hat Dir die Antwort von Jan bereits geholfen?

In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere

Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Rene

0 Kudos