rkurz
Elite Observer

Aktualisierung Datenquelle nach Löschworkflow

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
12 Replies
kohlbrecher
Crownpeak employee

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

0 Kudos

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

0 Kudos

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

0 Kudos

Hallo Jan-Philipp,

eine Begründung dafür gibt es nicht - nach der Änderung hat es auch nichts bewirkt.

Grüße

Ralph

0 Kudos

Gibt es noch andere Möglichkeiten, die Ansicht zu aktualisieren?

0 Kudos
marro
Crownpeak employee

Hallo Ralph,

wie sieht's denn aus, wenn Du den Code aus den Basicworkflows 1:1 übernimmst?

Viele Grüße

Donato

0 Kudos

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

0 Kudos

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

0 Kudos

Hallo Michaela,

danke für die Hinweise.

09-07-2015 11-22-03.jpg

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:

09-07-2015 11-24-55.jpg

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

0 Kudos