Search the FirstSpirit Knowledge Base
Hallo zusammen,
es geht um FS 5.0. und 5.2
Wir haben einen Löschworkflow, der in Datenquellen die ausgewählte Entity löscht.
Allerdings aktualisiert sich die Ansicht im JavaClient/SiteArchitect nicht.
Wir haben die Community durchwühlt und jeden Hinweis eingebaut. Ohne Erfolg.
Der Code sieht aktuell so aus (soweit extrahiert, dass einem die Probleme um die Ohren fliegen sollten) :
StoreElement element = context.getStoreElement();
ContentWorkflowable workflowable = context.getWorkflowable();
Entity entity = workflowable.getEntity();
context.logInfo(element.getClass().getName());
context.logInfo(element.getUid());
Session session;
try {
session = entity.getSession();
session.delete(entity);
} catch (Exception e) {
context.logError(e);
} finally {
try {
// lock/unlock content2 to force a refresh
element.setLock(true, false);
element.save();
element.setLock(false, false);
element.refresh();
session.commit();
session.rollback();
} catch (Exception e) {
context.logError(e);
}
}
// delete release state
Session releaseSession = element.getTemplate().getSchema().getSession(true);
releaseSession.rollback();
Entity entityRelease = releaseSession.find(entity.getKeyValue());
if (entityRelease != null) {
// if in release store
try {
releaseSession.delete(entityRelease);
releaseSession.commit();
} catch (Exception e) {
context.logError(e);
}
}
context.logInfo("Entity deleted");
context.doTransition("Final");
context.logInfo("refreshing Content2");
element.getSchema().resetReadTimestamp();
element.getSchema().getSession().rollback();
element.refresh();
context.logInfo("Done");
Falls jemand sachdienliche Hinweise hat, wieso, weshalb, warum der Client nicht die Ansicht aktualisiert, würde uns das sehr freuen!
Danke und Gruß
Ralph
Hallo Ralph,
für die Version 1.0.8 muss laut den ReleaseNotes für die BasicWorkflows mindestens die FS-Version 5.1 eingesetzt werden. Deinem ersten Posting nach setzt du jedoch 5.0 und 5.2 ein.
Für 5.0 müsstest du eine ältere Version des Moduls einsetzen.
Hast du mit der FS-Version 5.2 und der Modul-Version 1.0.8 trotzdem dasselbe Problem?
Viele Grüße
Michaela
Hallo Ralph,
beim ersten Vergleich von deinem Code mit dem des Basicworklfows zum Löschen fällt auf, dass du auf dem StoreElement ein setLock und save aufrufst und nicht auf einem Content2.
final ContentWorkflowable contentWorkflowable = (ContentWorkflowable) workflowScriptContext.getWorkflowable();
final Content2 content2 = contentWorkflowable.getContent();
// delete current state
try {
Session session = entity.getSession();
session.delete(entity);
session.commit();
} catch (Exception e) {
Logging.logError(EXCEPTION + entity, e, LOGGER);
} finally {
try {
// lock/unlock content2 to force a refresh
content2.setLock(true, false);
content2.save();
content2.setLock(false, false);
} catch (LockException e) {
Logging.logError(EXCEPTION + entity, e, LOGGER);
} catch (ElementDeletedException e) {
Logging.logError(EXCEPTION + entity, e, LOGGER);
}
}
// delete release state
Session releaseSession = content2.getTemplate().getSchema().getSession(true);
//delete page entity (release state)
releaseSession.rollback();
Entity entityRelease = releaseSession.find(entity.getKeyValue());
if (entityRelease != null) {
// if in release store
try {
releaseSession.delete(entityRelease);
releaseSession.commit();
} catch (Exception e) {
Logging.logError(EXCEPTION + entityRelease, e, LOGGER);
result = false;
}
}
Werden denn sowohl der current als auch der release Stand nicht aktualisiert?
Grüße
Jan
Hallo Jan-Philipp,
danke für's drüber schauen!
Laut log ist storeElement ein Content2Impl.
Die Entites werden in current und release zwar gelöscht, aber die Ansicht wird nicht aktualisiert.
Grüße
Ralph
Hallo Ralph,
einfach mal ins Blaue geraten:
Du machst den session.commit nach dem Refresh. Warum nicht direkt hinter dem session.delete(entity)?
Grüße
Jan
Hallo Jan-Philipp,
eine Begründung dafür gibt es nicht - nach der Änderung hat es auch nichts bewirkt.
Grüße
Ralph
Gibt es noch andere Möglichkeiten, die Ansicht zu aktualisieren?
Hallo Ralph,
wie sieht's denn aus, wenn Du den Code aus den Basicworkflows 1:1 übernimmst?
Viele Grüße
Donato
Hallo Donato,
danke für den Hinweis.
Habe es gerade mit einem BasicWorkflow-Modul bzw. der entspr. executable probiert und die Ansicht aktualisiert sich dann auch nicht.
Viele Grüße
Ralph
Hallo Ralph,
ich hab mir gerade einmal lokal die Basic Workflows in der aktuellsten Version 1.0.8 installiert. Bei mir wird ein Datensatz erwartungskonform gelöscht. D.h. er ist direkt nach der Löschung nicht mehr in der Datenquelle sichtbar - weder im current noch im releast Stand.
Hast du evtl nur das Modul aktualisiert, aber seine Verwendung nicht aktualisiert? Oder hast du möglicherweise die Skripte nicht angepasst?
Viele Grüße
Michaela
Hallo Michaela,
danke für die Hinweise.
Das Modul ist aktuell und eingebunden ist es wie folgt:
#!executable-class
com.espirit.moddev.basicworkflows.delete.WfDeleteExecutable
Könnte es der dahinter liegende Arbeitsablaus sein?
Beim Testen ist es dieser:
Der "große" aus den BasicWorkflows schmeißt bei mir in 5.0.606 einen Fehler:
java.lang.NoSuchMethodError: de.espirit.firstspirit.access.store.templatestore.WorkflowScriptContext.getElement()Lde/espirit/firstspirit/access/store/IDProvider;
at com.espirit.moddev.basicworkflows.delete.WfBranchIfFolderExecutable.execute(WfBranchIfFolderExecutable.java:64)
Das Löschen bzw. den Arbeitsablauf starte ich aus der Statuszeile bei "nicht freigegeben" - aber auch die Wege über "Entf" oder den Papierkorb auf dem Datensatz machen es nicht.
Danke und Viele Grüße
Ralph