bIT_sosswald
Returning Responder

DeltaGenerierung - Geänderte Ordner ermitteln FS5.1

Jump to solution

Hallo zusammen,

ich hänge gerade etwas an folgendem Problem...

Ich ändere z.B. die Metadaten eines Ordners (oder auch dessen Menüname). Anschließend wird eine DeltaGenerierung ausgeführt, die mit folgendem Skript konfiguriert ist:

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

deltaGeneration = DeploymentUtil.createDeltaGeneration(context);

DeltaGeneration.ChangeSet changeSet = deltaGeneration.levelRule(0,1).levelRule(2,4).calculateChangeSet();

changeSet.configureGenerateTask();

context.setProperty("changeSet", changeSet);

Nach der Deltagenerierung möchte ich ermitteln welche Files bzw. Ordner sich geändert haben.

Wird z.B. der Inhalt (Content) einer Page geändert, so bekomme ich die geänderte Page bzw. deren PageRef(s) in meinem Modul über folgenden Befehl zurückgeliefert:

List<IDProvider> startNodes = generateTask.getStartNodes();

Ändern sich aber nur die Metadaten eines Ordners, so ist die LIste an StartNodes leer. Ich hätte damit gerechnet, dass diese dann den entsprechenden SiteStoreFolder enthält.

Wie kann ich nach einer DeltaGenerierung die Ordner ermitteln, die sich geändert haben?

Ich benötige die Angabe der geänderten Ordner, da ich mit deren MetaDaten Informationen in einem Suchindex ändern will (z.B. alle Kindelemente des Ordners aus dem Index entfernen, wenn ein spezielles Flag in den Metadaten des Ordnes gesetzt wurde.)

Grüße

Sandro

0 Kudos
1 Solution

Accepted Solutions
marro
Crownpeak employee

Hallo Sandro,

ich hab versucht, Dein Problem hier zu rekonstruieren, was mir allerdings nicht gelungen ist.

Mein Auftrag besitzt drei Tasks:

1) Skript:

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

 

deltaGeneration = DeploymentUtil.createDeltaGeneration(context);

DeltaGeneration.ChangeSet changeSet = deltaGeneration.levelRule(0,1).levelRule(2,4).calculateChangeSet();

changeSet.configureGenerateTask();

2) Generierungstask

  • Vollgenerierung
  • Generieren nur wenn erforderlich
  • Generierungsverzeichnis vorher leeren

3) Skript:

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

 

generateTask = context.getTasks().get(context.getTaskIndex() - 1);

startNodes = generateTask.getStartNodes().toArray();

for (int i = 0; i < startNodes.length; i++) {

     context.logInfo("UidType: " + startNodes[i].getUidType());

     context.logInfo("Refname: " + startNodes[i].getReferenceName());

}

generatedFilesList = DeploymentUtil.getGeneratedFiles(context);

it = generatedFilesList.iterator();

 

if(it.hasNext()) {

   context.logInfo("Generated files found.");

}

else {

   context.logInfo("No generated files found.");

}

while(it.hasNext()) {

   generatedFile = it.next();

   context.logInfo(" generatedFile: " + generatedFile);

}

Wenn ich nun den Menünamen eines SiteStoreFolders der 2. Ebene (root -> services -> gallery) änder, diesen Ordner freigebe und dann die DeltaGenerierung ausführe, erhalte ich folgende Ausgaben (gekürzt):

1) Skript:

INFO  21.07.2014 11:23:55.577 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'script' - schedule entry 'Delta' (id=247451)

INFO  21.07.2014 11:23:55.589 (de.espirit.firstspirit.access.schedule.DeltaGenerationImpl): start of current delta generation is Revision [id=20569, editor=Admin [ID=1], state=0, change=1405934625841, comment=unlock], current revision is Revision [id=20570, editor=Admin [ID=1], state=0, change=1405934629796, comment=server release]

2) Generierungstask:

INFO  21.07.2014 11:23:55.707 (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor): start partial generation

INFO  21.07.2014 11:23:55.708 (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor): generating 'gallery' (id=3799), language DE, template set 'html'

INFO  21.07.2014 11:23:55.811 (de.espirit.firstspirit.generate.SiteProduction): creating output stream for /de/services/gallery/gallery_2.html

INFO  21.07.2014 11:23:55.812 (de.espirit.firstspirit.store.access.sitestore.PageRefImpl): generating page reference 'gallery_2' (id=4395, html, DE)

3) Skript:

INFO  21.07.2014 11:23:56.317 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'script (1)' - schedule entry 'Delta' (id=247451)

INFO  21.07.2014 11:23:56.325 (de.espirit.firstspirit.impl.access.ScriptContextImpl): UidType: SITESTORE_FOLDER

INFO  21.07.2014 11:23:56.326 (de.espirit.firstspirit.impl.access.ScriptContextImpl): Refname: pagefolder:gallery

INFO  21.07.2014 11:23:56.327 (de.espirit.firstspirit.impl.access.ScriptContextImpl): Generated files found.

INFO  21.07.2014 11:23:56.327 (de.espirit.firstspirit.impl.access.ScriptContextImpl):  generatedFile: /de/services/gallery/gallery_2.html

Sieht also alles aus wie man es erwarten würde.

Viele Grüße

Donato

View solution in original post

0 Kudos
2 Replies
marro
Crownpeak employee

Hallo Sandro,

ich hab versucht, Dein Problem hier zu rekonstruieren, was mir allerdings nicht gelungen ist.

Mein Auftrag besitzt drei Tasks:

1) Skript:

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

 

deltaGeneration = DeploymentUtil.createDeltaGeneration(context);

DeltaGeneration.ChangeSet changeSet = deltaGeneration.levelRule(0,1).levelRule(2,4).calculateChangeSet();

changeSet.configureGenerateTask();

2) Generierungstask

  • Vollgenerierung
  • Generieren nur wenn erforderlich
  • Generierungsverzeichnis vorher leeren

3) Skript:

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

 

generateTask = context.getTasks().get(context.getTaskIndex() - 1);

startNodes = generateTask.getStartNodes().toArray();

for (int i = 0; i < startNodes.length; i++) {

     context.logInfo("UidType: " + startNodes[i].getUidType());

     context.logInfo("Refname: " + startNodes[i].getReferenceName());

}

generatedFilesList = DeploymentUtil.getGeneratedFiles(context);

it = generatedFilesList.iterator();

 

if(it.hasNext()) {

   context.logInfo("Generated files found.");

}

else {

   context.logInfo("No generated files found.");

}

while(it.hasNext()) {

   generatedFile = it.next();

   context.logInfo(" generatedFile: " + generatedFile);

}

Wenn ich nun den Menünamen eines SiteStoreFolders der 2. Ebene (root -> services -> gallery) änder, diesen Ordner freigebe und dann die DeltaGenerierung ausführe, erhalte ich folgende Ausgaben (gekürzt):

1) Skript:

INFO  21.07.2014 11:23:55.577 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'script' - schedule entry 'Delta' (id=247451)

INFO  21.07.2014 11:23:55.589 (de.espirit.firstspirit.access.schedule.DeltaGenerationImpl): start of current delta generation is Revision [id=20569, editor=Admin [ID=1], state=0, change=1405934625841, comment=unlock], current revision is Revision [id=20570, editor=Admin [ID=1], state=0, change=1405934629796, comment=server release]

2) Generierungstask:

INFO  21.07.2014 11:23:55.707 (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor): start partial generation

INFO  21.07.2014 11:23:55.708 (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor): generating 'gallery' (id=3799), language DE, template set 'html'

INFO  21.07.2014 11:23:55.811 (de.espirit.firstspirit.generate.SiteProduction): creating output stream for /de/services/gallery/gallery_2.html

INFO  21.07.2014 11:23:55.812 (de.espirit.firstspirit.store.access.sitestore.PageRefImpl): generating page reference 'gallery_2' (id=4395, html, DE)

3) Skript:

INFO  21.07.2014 11:23:56.317 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'script (1)' - schedule entry 'Delta' (id=247451)

INFO  21.07.2014 11:23:56.325 (de.espirit.firstspirit.impl.access.ScriptContextImpl): UidType: SITESTORE_FOLDER

INFO  21.07.2014 11:23:56.326 (de.espirit.firstspirit.impl.access.ScriptContextImpl): Refname: pagefolder:gallery

INFO  21.07.2014 11:23:56.327 (de.espirit.firstspirit.impl.access.ScriptContextImpl): Generated files found.

INFO  21.07.2014 11:23:56.327 (de.espirit.firstspirit.impl.access.ScriptContextImpl):  generatedFile: /de/services/gallery/gallery_2.html

Sieht also alles aus wie man es erwarten würde.

Viele Grüße

Donato

0 Kudos

Hi Donato,

vielen Dank für deine Antwort.

Folgender Punkt hat den Knoten in meinem Kopf gelöst...

Wenn ich nun den Menünamen eines SiteStoreFolders der 2. Ebene (root -> services -> gallery) änder, diesen Ordner freigebe und dann die DeltaGenerierung ausführe, erhalte ich folgende Ausgaben (gekürzt):

Ich habe zum Testen immer einen Ordner auf erster Ebene (root -> services) geändert und dabei nicht daran gedacht, dass damit dann ab Ebene 0 (also Root-Knoten) generiert wird und dies damit eine Vollgenerierung ist. Bei einer Vollgenerierung wird dann scheinbar kein Startknoten zurückgeliefert, was zu dem von mir beschrieben Verhalten geführt hat. (Wobei man bei einer Vollgenerierung evtl. auch erwarten könnte, dass der Root-Knoten gleiefert wird...)

Mit deiner Konfiguration komme ich aber nun an die Ordner und kann meine Anforderungen umsetzen.

Danke und beste Grüße

Sandro

0 Kudos