Questions & Answers

SOLVED
phillip_austerf
New Creator

Arbeitsablauf WebClient - Workflow stoppt nach Formulareingabe

Jump to solution

Hallo zusammen,

ich habe eine Frage bzgl. eines Arbeitsbalaufs "generate Partly" im WebClient.

Mein Arbeitsablauf verwendet ein Formular, welches im WebClient auch angezeigt werden soll. Hier kann der User eine Seite/Folder auswรคhlen, welcher dann in ein Generierungsskript รผbertragen werden soll.

Im JavaClient gibt es hier keine Probleme, jedoch im WebClient.

Es scheint, als wรผrde der Arbeitsablauf noch am Startelement des Ablaufs hรคngen bleiben. Das Formular (also Teil meines Scripts) wird jedoch korrekt angezeigt.

Gibt es hier eine besondere Einstellung, welche ich wรคhlen muss?

Hier der Code:

import de.espirit.firstspirit.access.store.templatestore.WorkflowScriptContext;

import de.espirit.firstspirit.access.store.IDProvider.UidType;

import de.espirit.firstspirit.access.store.sitestore.PageRef;

import de.espirit.firstspirit.access.store.sitestore.SiteStoreFolder;

import com.idmedia.fs.publisher.Publisher;

wsc = (WorkflowScriptContext) context;

storeElement = wsc.getWorkflowable();

pData = wsc.showForm();

if (pData != null)

{

    try

    {

        pElem = pData.get(null, "st_ref");

        if (pElem != null)

            storeElement = pElem.get().get(); // FormData.TargetReference.IDProvider

    }

    catch(Exception x)

    {

        storeElement = null;

    }

}

OperationAgent operationAgent = wsc.requireSpecialist(OperationAgent.TYPE);

RequestOperation pRequestOperation = operationAgent.getOperation(RequestOperation.TYPE);

pRequestOperation.setKind(RequestOperation.Kind.INFO);

pRequestOperation.setTitle("Generate Partly");

pRequestOperation.perform("do transition done");

context.doTransition("Final");

Viele GrรผรŸe,
Phillip.

0 Kudos
1 Solution

Accepted Solutions

okay ein letzter versuch meinerseits:

connection = wFSContext.getConnection().getRemoteConnection(configuration);

final Project remoteProject = connection.getProjectByName(projectName);

wie wird der schedule entry geholt? AdminService รผber die connection?

Wenn das nicht hilft  muss ich leider passen, dann mรผsste man sich das im Detail ansehen.

Viele GrรผรŸe

Tobias

View solution in original post

0 Kudos
13 Replies
phillip_austerf
New Creator

kurzer Nachtrag:

Die Rechte sind definiert fรผr die einzelnen Schritte; Berechtigung: everyone; Start automatisch รผber Rechte.

0 Kudos
tklein
I'm new here

Hallo,

das nichts passiert deutet ja auf eine Exception hin. Scripte in Workflows sollten immer mit einem Try{}-catch(Exception e) {context.goToErrorState("Fehler", e); umschlossen werden. Im WF-Modell sollte eine Error Status eingebaut werden. Dann sollte man vorher die die Fehlerinformationen loggen oder aber vom ErrorState ausgehend eine Aktivitรคt starten, die aus der WF Session die vorhanden Fehlerinfomationen ausliest. In diesem Falle wรผrde ich zu ersterem tendieren zu debug zwecken. Fรผr den Einsatz bei Redakteueren wรคre letzteres empfehlenswert, da sie den Fehlerstatus sehen und dann noch handeln kรถnnen, z.B: zuweisung an jemanden, der dann eine Mail mit den Fehlerinformationen bekommt.

Viele GrรผรŸe

Tobias

0 Kudos
phillip_austerf
New Creator

Hallo,

ich habe dies nun einmal umgsetzt, aber der Arbeitsablauf bleibt leider dennoch wieder beim Startelement stehen; ich kann mittels

WorkflowScriptContext.showForm() lediglich Inhalte speichern, nicht aber ausfรผhren.

Selbst wenn ich nach dem Anzeigen des Forms mittels  context.doTransition(....) zum Ende gehe wird der Arbeitsablauf immer auf dem Startelement stehen bleiben.

Woran kann das liegen? Es scheint schlicht, als wรผrde es nach showForm() im WebClient nicht weitergehen.

Viele GrรผรŸe,
Phillip.

PS: Hier nun aber einmal der angepasste Code:

import de.espirit.firstspirit.access.store.templatestore.WorkflowScriptContext;

import de.espirit.firstspirit.access.store.IDProvider.UidType;

import de.espirit.firstspirit.access.store.sitestore.PageRef;

import de.espirit.firstspirit.access.store.sitestore.SiteStoreFolder;

import com.idmedia.fs.publisher.Publisher;

wsc = (WorkflowScriptContext) context;

storeElement = null;

pData = null;

bError = false;

try

{

    storeElement = wsc.getWorkflowable();

    pData = wsc.showForm();

}

catch(Exception e)

{

    bError = true;

    pData = null;

    storeElement = null;

}

if (pData != null && bError == false)

{

    try

    {

        pElem = pData.get(null, "st_ref");

        if (pElem != null)

            storeElement = pElem.get().get(); // FormData.TargetReference.IDProvider

    }

    catch(Exception x)

    {

        storeElement = null;

    }

}

if (storeElement != null)

{

    Publisher pPublish = new Publisher(context);

    pPublish.publish("generate partly [DE]", storeElement);

    if (storeElement instanceof SiteStoreFolder)

        pPublish.publishRemoteReferences((SiteStoreFolder)storeElement, "generate partly", "remoteMedia");

    else if (storeElement instanceof PageRef)

        pPublish.publishRemoteReferences((PageRef)storeElement, "generate partly", "remoteMedia" );

}

try

{   

    if (bError == false)

        context.doTransition("Final");

    else

        context.doTransition("Error");

}

catch(Exception x)

{

    context.goToErrorState("Error", e);

}

2013-08-13_1430.png

0 Kudos

Hm das try catch mit dem gotoErrorState() muss anz aussen rum, die inneren catches sollten weg oder spezifiziert werden, sonst kรถnnen ausserordentliche Exceptions ja nicht im Error Status enden.

Ein Error Status hat keine keine eingehenden Transtionen sondern nur ausgehende...

0 Kudos

Ich habe das nun so umgestellt aber es รคndert sich nichts am Verhalten.

Ist dies ein gewollter Effekt von showForm()? Oder gibt einen anderen (richtige) Weg?

Viele GrรผรŸe,
Phillip Austerfield.

0 Kudos

Nein das ist natรผrlich kein gewollter Effekt Bitte mal so probieren (ungetestet):

import de.espirit.firstspirit.access.store.templatestore.WorkflowScriptContext;

import de.espirit.firstspirit.access.store.IDProvider.UidType;

import de.espirit.firstspirit.access.store.sitestore.PageRef;

import de.espirit.firstspirit.access.store.sitestore.SiteStoreFolder;

import com.idmedia.fs.publisher.Publisher;

wsc = (WorkflowScriptContext) context;

storeElement = null;

pData = null;

bError = false;

try

{

    storeElement = wsc.getWorkflowable();

    pData = wsc.showForm();

if (pData != null )

{

        pElem = pData.get(null, "st_ref");

        if (pElem != null)

            storeElement = pElem.get().get(); // FormData.TargetReference.IDProvider

}

if (storeElement != null)

{

    Publisher pPublish = new Publisher(context);

    pPublish.publish("generate partly [DE]", storeElement);

    if (storeElement instanceof SiteStoreFolder)

        pPublish.publishRemoteReferences((SiteStoreFolder)storeElement, "generate partly", "remoteMedia");

    else if (storeElement instanceof PageRef)

        pPublish.publishRemoteReferences((PageRef)storeElement, "generate partly", "remoteMedia" );


}

context.doTransition("Final");

}

catch(Exception e)

{

     context.logError(e.getMessage(), e);

    context.goToErrorState("Error", e);

}

was macht den der Publischer? Wenn der den Thread blockiert wird die Transtion evtl. erst verspรคtet geschaltet.

0 Kudos

so, jetzt ist es klar.

Das Problem lag leider wirklich im Publisher.

Wir verwenden ein remote Media Projekt und ich starte รผber den Publisher nicht nur die Generierung im eigenen Projekt sondern fรผge auch alle referenzierten remote Medien in den generate Partly Auftrag des Remote Projektes und fรผhre diesen Task aus.

Die Exception, die geworfen wird ist nun

Target exception: de.espirit.firstspirit.client.io.SessionAlreadyBoundException: Session already bound to project 'Master [EN|DE|FR|IT] PROD'! You have to call unbindSession() first.

Ist dies รผberhaupt รผber den WebClient mรถglich?

Viele GrรผรŸe,

Phillip.

0 Kudos

Der Fehler kommt mir bekannt vor (habe so ziemlich das selbe gebaut)

Welche Connection wird benutzt? Fรผr Aktionen im RemoteProjekt sollte auch die RemoteConnection benutzt werden.

Viele GrรผรŸe

Tobias

0 Kudos

Hm, ich verรคndere die Connection nicht, sondern greife รผber den UserService auf das RemoteProject zu:

WorkflowScriptContext m_pContext

UserService pUserService = m_pContext.getUserService().getRemoteUserService(sSymName);

Project pProject = pUserService.getProject();

Und dann kann ich รผber pProject auf die Publizierungsauftrรคge zugreifen.

Wie sรคhe denn die alternative aus? Gibt es dazu eine Doku?

Viele GrรผรŸe,

Phillip.

0 Kudos

Type a product name