bIT_sosswald
Returning Responder

DeltaGenerierung - Gelöschte Datensätze (Entities) ermitteln - FS5

Hallo liebe Community,

ich habe wieder eine Frage zum Thema DeltaGenerierung.

Über getDeletedPageInfos() erhalte ich bei eienr DeltaGenerierung eine Liste der gelöschte Seiten inkl. ihrer NodeId. Diese ID kann ich für meinen Anwendungsfall bei normalen Seiten (keine Deteilseite einer Contentprojektion) direkt verwenden.

Ist die gelöschte Seite jedoch eine Detailseite eienr Contentprojektion, erhalte ich als Id logischerweise die Id der entsprechenden PageRef der Detailseite. Zusätzlich benötige ich allerdings noch die ID der gelöschten Entity, da ich für die eindeutige Indentifikation des Datensatzes sowohl PageId als auch EntityId benötige.

Gibt es hier einen (eleganten) Weg von einer DeletedPageInfo an die IDs der gelöschten Entities zu gelangen?

An neue Entities einer Contentprojektion kommt man im GenerateTask ja über getEntityStartNodes(). Bei DeletedPageInfos habe ich so etwas leider nicht gefunden.

Grüße

Sandro

0 Kudos
8 Replies
Peter_Jodeleit
Crownpeak employee

Es gibt für jeden gelöschten Datensatz einen entsprechendes Element in den "getDeletedPageInfos". Allerdings kommt man darüber nicht an die Datensatz-ID, es gibt also aktuell keinen Weg.

Darf man fragen, wofür wird diese Information benötigt wird?

Peter

Hallo,

danke für die Antwort und natürlich darf man nach dem genauen Anwendungsfall fragen. Smiley Happy

Ich befülle einen Suchindex nach einer Voll- aber auch Deltagenerierung.

Bei der Vollgeneriering, wird entsprechend eine Vollindizierung (gesamten Index löschen und neu aufbauen) durchgeführt.

Bei der Deltagenerierung, wird entsprechend nur eine Deltaindizierung (neue Seiten zum Index hinzufügen, geänderte Seiten Updaten, gelöschte Seiten Entfernen) durchgeführt.

Um Einträge im Suchindex gezielt ändern, bzw. löschen zu können besitzen diese eine eindeutige ID. Diese besteht bei normalen Seiten aus der ID (nicht UId) der PageRef und bei Seiten aus einer Contentprojektion aus der ID der PageRef sowie der ID des entsprechenden Datensatzes, also z.B. "1039_512"

Bei normalen Seiten komme ich problemlos an alle benötigten Daten, so dass eine Deltaindizierung durchgeführt werden kann.


Bei Detailseiten aus einer Contentprojektion kann ich derzeit neue Einträge zum Index hinzufügen, sowie bestehende Einträge updaten, da ich über die EntityStartNodes an die benötigten Informationen gelange. Lediglich das Löschen der entsprechenden Indexeinträge von Detailseiten einer Contentprojektion, ist derzeit noch nicht möglich, da ich wie beschrieben noch nicht an die IDs der gelöschten Datensätze gelange.

Beste Grüße

Sandro

0 Kudos

Beim Suchindex die Seiten-URL als Zugriffsschlüssel zu nehmen ist keine Option?

Peter
0 Kudos

Hallo,

daran den Pfad der jeweiligen Seite als ID im Index zu verwenden habe ich auch schon gedacht.

Ich wollte allerdings erst scher gehen, dass es keine Möglichkeit gibt dies über die ID zu realisieren, da sich die Pfade bzw. URLs bei Änderung der Konfiguration des verwendeten URLCreators oder beim austausch des URLCreators ändern. Die IDs wären in diesem Falle identisch geblieben.

Ich habe das Modul mittlerweise so umgebaut, dass es die vom URLCreator erzeugten Pfade (nicht URL) als ID verwendet, da mir die DeletedPageInfos ja auch die Pfade zurückliefern.

Dies funktioniert auch. Leider gibt es aber beim Löschen von Detailseiten einer Contentprojektion wieder einen Punkt der mich etwas verdutzt.

Die DeteletPageInfos liefern mir nur Pfade zu zu XML-Dateien des Sprachkanals EN und nicht zu den entsprechenden HTML Dateien.

Evtl. liegt dies an meiner Konfiguration der DeltaGenerierung.

Skript zur Erzeugung der DeltaGenerierung

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

deltaGeneration = DeploymentUtil.createDeltaGeneration(context); //(1)

DeltaGeneration.ChangeSet changeSet = deltaGeneration.calculateChangeSet(); //(2)

changeSet.configureGenerateTask(); //(3)

context.setProperty("changeSet", changeSet);

//---------------------------------

context.logInfo("***** isFullGenerate: " + changeSet.isFullGenerate()); //(4)

Die Konfiguration des Generate-Tasks ist in den angehängten Screenshots zu sehen.

Auslesen der DeletedPageInfos im Modul

private Iterable<DeletedPageInfo> getDeletedPageInfos(ScriptContext context) {

        Iterable<DeletedPageInfo> deletedPageInfos = null;

        Object property = context.getProperty("changeSet");

        if (property instanceof ChangeSet) {

            ChangeSet changeSet = (ChangeSet) property;

            deletedPageInfos = changeSet.getDeletedPageInfos();

        }

        return deletedPageInfos;

    }

Beim Iterieren über die DeletedPageInfos werden mir für Detailseiten einer Contentprojektion, wie bereits beschrieben, lediglich Informationen zu XML Dateien im Sprachkanal EN ausgegeben. Ich hätte auch Informationen zu den HTML-Dateien in den einzelnen Sprachkanälen erwartet.

Grüße

Sandro

0 Kudos

Welche FirstSpirit-Version ist das? Das kommt mir vage bekannt vor, eventuell gab es da mal ein Fehlverhalten (aka Bug Smiley Wink). Oder mal den Helpdesk fragen..

Peter

FirstSpirit Client 5.0.425.60000

Version Server: 5.0.425.60000

Java Version: 1.6.0_45 64bit Sun Microsystems Inc.

Ich frage aber parallel noch einmal am Helpdesk nach.

Vielen Dank für die Antwort! Smiley Happy

0 Kudos

Es gibt da einige interne Ids zu dem Thema: #149093, #149074 und #139048

D.h. das ist beim Helpdesk schon richtig aufgehoben. Kannst du diese Info noch an das Ticket dranhängen, den Bezug habe ich hier leider nicht. Danke!

Peter

Schon passiert.

Nochmals Danke für die schnelle Antwort!

0 Kudos