Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir haben in einem Projekt einen Freigabe Workflow, der über ein Skript eine Seite in der Struktur und deren Abhängige Objekte freigibt.
In der entsprechenden Inhaltsseite wird neben verschiedenen Medien auch ein Datensatz aus einer Datenquelle referenziert. Die Inhaltsseite und nicht freigegebene Medien werden durch Ausführung dieses Workflows automatisch mit freigegeben. Der Datensatz hingegen nicht. Dies klappt aber auch nicht, wenn ich die Seite über Extras->Freigabe->Abhängige Objekte Freigeben freigebe.
Ist das ein Bug oder ist das bewusst so gemacht?
Hallo Stefan,
Datensätze werden hier nicht einbezogen, siehe Kapitel 6.2.8 in der Doku:
"Weitere Fälle, in denen abhängige Objekte zwar im Referenzgraphen angezeigt werden, aber bei der abhängigen Freigabe nicht mit freigegeben werden.
...
D.h. Du musst hier über eine entsprechende Implementierung den Datensatz gesondert freigeben.
Viele Grüße
Michael
Achso, das hatte ich eben vergessen. Die Freigabe über das Skript erfolgt mit dem DependentType IDProvider.DependentReleaseType.DEPENDENT_RELEASE_NEW_AND_CHANGED.
Wenn das bewusst so gemacht ist, wie kann ich am einfachsten den in der Seite referenzierten Datensatz freigeben? Muss ich mir diesen im Skript noch explizit holen und dann zusätzlich freigeben?
Weiß hier wirklich niemand was zu zu sagen? Ist dies eine so ungewöhnliche Anforderung?
Hallo Stefan,
Datensätze werden hier nicht einbezogen, siehe Kapitel 6.2.8 in der Doku:
"Weitere Fälle, in denen abhängige Objekte zwar im Referenzgraphen angezeigt werden, aber bei der abhängigen Freigabe nicht mit freigegeben werden.
...
D.h. Du musst hier über eine entsprechende Implementierung den Datensatz gesondert freigeben.
Viele Grüße
Michael
Ich weiß es nicht ob das dir Helfen kann, ich habe eine Funktion geschriben...
static public void releaseEntityRelations(Entity entity, UserService us) {
//release all Outgoing reference
ContentStoreRoot cs = (ContentStoreRoot) us.getStore(Store.Type.CONTENTSTORE, false);
Map<String, String> typemap = new HashMap<String, String>();
typemap.put("users", "ds_ext_users");
typemap.put("media", "content_ext_media");
typemap.put("downloads", "content_ext_downloads");
typemap.put("publications", "content_ext_publications");
EntityType entityType = entity.getEntityType();
if (typemap.get(entityType.toString()) != null) {
Content2 content = cs.getContent2ByName(typemap.get(entityType.toString()));
Logging.logInfo(entityType.toString(), LOGGER);
Schema schema = content.getTemplate().getSchema();
ReferenceEntry[] allInReference = schema.getOutgoingReferences(entity);
for (ReferenceEntry reference : allInReference) {
try {
Object element = reference.getReferencedObject();
if (!(element instanceof Entity)) {
if (((IDProvider) element).isReleaseSupported()) {
((IDProvider) element).setLock(true, false);
((IDProvider) element).release(false);
((IDProvider) element).setLock(false, false);
if (element instanceof Media) {
PageUtils.releaseParents((IDProvider) element);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Hey, vielen Dank für die Antworten,
ich werde es mal mit einer eigenen Implementierung versuchen. Ich denke Antonios Lösung mit der Funktion könnte hilfreich sein.