Questions & Answers

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

Type a product name