Search the FirstSpirit Knowledge Base
Hallo Community,
ich habe ein Workflow-Skript zum Löschen eines Datensatzes. Der Datensatz soll nur dann gelöscht werden, wenn keine Referenzen mehr auf ihn existieren.
Falls Referenzen existieren, sollen diese angezeigt werden, um dem Redakteur die Möglichkeit zu geben, diese zu löschen und dann das Skript nochmal auszuführen.
Das Skript benutzt die Methode ReferenceEntry.getReferencedObject() und unterscheidet dann die Fälle, wenn eine Entity zurückgeliefert wird oder ein IDProvider.
Im Fall des IDProviders kann ich anhand der Methode getId() die ID ausgeben, mit der der Redakteur das entsprechende Inhaltselement auch finden kann.
Im Fall der Entity liegt nach meinem Verständnis eine Referenz von einem (anderen) Datensatz vor. Mit getValue("fs_id") kann ich die ID erhalten.
Meine Frage wäre jetzt, wie ich vom Entity Object auf das Schema komme (um einen informativen Dialog schreiben zu können der Art "Der Datensatz in Tabelle x im Schema y enthält noch eine Referenz auf..".
Hier die relevanten Teile des Sktipts:
// current Session
contentStore = context.getProject().getUserService().getStore(Store.Type.CONTENTSTORE,false);
table = contentStore.getContent2ByName(storeElement.getUid());
// get current row
currentRow = context.getWorkflowable().getEntity();
currentRowId = currentRow.getValue("fs_id");
referenceEntries = table.getDataset(currentRow).getIncomingReferences();
if (referenceEntries != null && referenceEntries.length > 0) {
for (int i = 0; i < referenceEntries.length; i++) {
refElement = referenceEntries[i].getReferencedObject();
if (refElement instanceof de.espirit.or.schema.Entity) {
// => referenz von dataset => get ID with refElement.getValue("fs_id") aber wie komme ich auf das schema??
} else if (refElement instanceof de.espirit.firstspirit.access.store.IDProvider) {
// => referenz von Inhaltselement => get ID with refElement.getId()
} else {
// kann null sein => gelöschtes Objekt ?
}
}
}
FS Version 5.1.311.65223
Danke für einen Tipp!
Viele Grüße, Benny Kannengießer
// re-lounge
Hallo Benny,
mir ist leider kein direkter Weg bekannt, um über die Entity an das Schema zu kommen. Soweit ich weiß musst du den Umweg über das Content2 Objekt gehen. Dieses Objekt erhält man aber leider auch nur über einen kleinen Umweg:
Entity entity = ...;
ContentStoreRoot contentStoreRoot = ...;
TypedFilter<StoreElement> content2Filter = new TypedFilter<StoreElement>(StoreElement.class) {
public boolean accept(final StoreElement storeElement) {
return storeElement instanceof Content2 && ((Content2) storeElement).getEntityType().getName().equals(entity.getEntityType().getName());
}
};
Content2 content2 = contentStoreRoot.getChildren(content2Filter, true).iterator().next();
Schema schema = content2.getSchema();
Ich hoffe das hilft dir weiter.
Viele Grüße
Tim
Hallo Benny,
mir ist leider kein direkter Weg bekannt, um über die Entity an das Schema zu kommen. Soweit ich weiß musst du den Umweg über das Content2 Objekt gehen. Dieses Objekt erhält man aber leider auch nur über einen kleinen Umweg:
Entity entity = ...;
ContentStoreRoot contentStoreRoot = ...;
TypedFilter<StoreElement> content2Filter = new TypedFilter<StoreElement>(StoreElement.class) {
public boolean accept(final StoreElement storeElement) {
return storeElement instanceof Content2 && ((Content2) storeElement).getEntityType().getName().equals(entity.getEntityType().getName());
}
};
Content2 content2 = contentStoreRoot.getChildren(content2Filter, true).iterator().next();
Schema schema = content2.getSchema();
Ich hoffe das hilft dir weiter.
Viele Grüße
Tim
Hallo Benny,
versuch doch mal
entity.getSession().getSchema();
Viele Grüße
Michael