Search the FirstSpirit Knowledge Base
FirstSpirit benutzt UUIDs für die eindeutige Identifikation von Datensätzen. Diese UUIDs, im folgenden GIDs genannt, werden beispielsweise für die Verlinkung von Datensätzen verwendet, wenn diese nicht über eine Fremdschlüsselbeziehung in der Datenbank abgebildet werden und auch für die Identifikation von Datensätzen, wenn diese mittels Content Transport in ein Projekt eingespielt werden (gibt es einen Datensatz mit derselben GID, so wird dieser aktualisiert, ansonsten wird ein neuer Datensatz angelegt).
Aus technischen Gründen werden diese GIDs an zwei Stellen gespeichert. Einmal in der Spalte FS_GID an dem Datensatz selber und einmal in einer Backend Datenbank, genannt Registry.
Die Fehlermeldung
de.espirit.firstspirit.common.DuplicateGidException: Entry already exits with different gid '<GID>': EntityGidEntry[<GID> | schema=<ID des Schemas 1>, dbTable=<Datenbanktabelle 1>, id=<FS_ID 1>], EntityGidEntry[<GID> | schema=<ID des Schemas 2>, dbTable=<Datenbanktabelle 2>, id=<FS_ID 2>]
bedeutet nun, dass FirstSpirit festgestellt hat, dass die GID, die beim Speichern des aktuellen Datensatzes verwendet werden soll, bereits für einen anderen Datensatz verwendet wird.
Mögliche Ursachen
Auswirkungen
Lösungen
Hinweis:
Dieses Skript darf nicht verwendet werden, wenn CaaS V3 in diesem Projekt verwendet wird. In diesem Fall kontaktieren Sie bitte den Technical Support wie gewohnt über unser Ticketsystem.
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.common.GidAgent;
import de.espirit.firstspirit.access.store.contentstore.Content2;
storeAgent = context.requestSpecialist(StoreAgent.TYPE);
contentStore = storeAgent.getStore(Store.Type.CONTENTSTORE);
gidAgent = context.requireSpecialist(GidAgent.TYPE);
storeElements = contentStore.getChildren(Content2.class,true);
storeElementCounter = storeElements.iterator();
while (storeElementCounter.hasNext()) {
content2 = storeElementCounter.next();
schema = content2.getSchema();
try {
orSession = gidAgent.migrateSchema(schema);
select = orSession.createSelect(content2.getEntityType().getName());
entityList = orSession.executeQuery(select);
context.logInfo("EntityList.size(): " + entityList.size().toString());
// gidAdaptionResult = gidAgent.adaptGid(schema, entityList, false);
// context.logInfo("gidAdaptionResult.size(): " + gidAdaptionResult.size().toString());
for (entity:entityList) {
gidAgent.adaptGid(schema, Collections.singletonMap(entity, entity.getGid()), true);
}
} catch (Exception e) {
context.logError("ERROR: "+e);
}
}
Anmerkung: Die beiden auskommentierten Zeilen sollte man einkommentieren, wenn man nicht sicherstellen kann, dass alle Datensätze bereits eine GID haben (das Projekt also aus der Version 4 stammt und man die GIDs noch nicht per Skript gesetzt hat)
Subject | Latest Article | |
---|---|---|