Domanda

Ciao comunità SO,

non ho avuto fortuna ottenere aiuto nei forum Alfresco, e spero per di più qui. Stiamo costruendo un'applicazione basata su Alfresco e jBPM ed io abbiamo definito un flusso di lavoro, ma non ho neanche definito sbagliato o manca qualcosa o ci sono bug in materia di integrazione di Alfresco con jBPM e ho bisogno di aiuto per capire quali e risolverlo. Qui è il problema:

Ho un workflow avanzato e sto cercando di lanciarlo da JavaScript. Ecco il codice che sto usando per avviare il flusso di lavoro:

var nodeId = args.nodeid;
var document = search.findNode("workspace://SpacesStore/" + nodeId);
var workflowAction = actions.create("start-workflow");
workflowAction.parameters.workflowName = "jbpm$nmwf:MyWorkflow";
workflowAction.parameters["bpm:workflowDescription"] = "Please edit: " + document.name;
workflowAction.parameters["bpm:assignees"] = [people.getPerson("admin"), people.getPerson("andyg")];
var futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 7);
workflowAction.parameters["bpm:workflowDueDate"] = futureDate;
workflowAction.execute(document);

Questa viene eseguita correttamente, e l'e-mail inviata da incendi di transizione di default del nodo di partenza più che bene. Tuttavia, quando ho andare a cercare il flusso di lavoro nella mia lista di operazione non è lì, ma è nel mio completato elenco di attività. La transizione predefinita (l'unica transizione) dai punti nodali inizio ad un nodo compito che ha quattro transizioni.

Ci sono 8 compiti e 22 transizioni nel flusso di lavoro. Quando uso la console del flusso di lavoro per avviare il flusso di lavoro e terminare l'attività di avvio, segue correttamente il nodo di transizione di avvio di default al prossimo compito. I nuovi spettacoli compito fino in "mostra compiti", ma non viene visualizzato in "mostrare i miei compiti" (apparentemente perché il compito è stato contrassegnato completata per qualche motivo, anche se non è nel nodo "fine"). Il compito è:

task id: jbpm$111 , name: nmwf:submitInEditing , properties: 18

Se faccio "transizioni" sembra proprio come ci si aspetta:

path: jbpm$62-@ , node: In Editing , active: true
 task id: jbpm$111 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 18
 transition id: Submit for Approval , title: Submit for Approval
 transition id: Request Copyediting Review , title: Request Copyediting Review
 transition id: Request Legal Review , title: Request Legal Review
 transition id: Request Review , title: Request Review

Non voglio pubblicare l'intero flusso di lavoro in quanto è grande, ma qui ci sono i primi due nodi:

Per prima le swimlanes:

<swimlane name="initiator"></swimlane>
<swimlane name="Content Providers">
  <assignment actor-id="Content Providers"  class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
     <actor>#{bpm_assignees}</actor>
  </assignment>
</swimlane>

Adesso i nodi:

<start-state name="start">
    <task name="nmwf:submitTask" swimlane="initiator"/>
    <transition name="" to="In Editing">
        <action>
            <runas>admin</runas>
            <script>
                /* Code to send e-mail that a new workflow was started.  I get this e-mail. */
            </script>
        </action>
    </transition>
</start-state>
<task-node name="In Editing">
    <task name="nmwf:submitInEditing" swimlane="Content Providers" />
    <!-- I put e-mail sending code in each of these transitions, but none are firing. -->
    <transition to="In Approval" name="Submit for Approval"></transition>
    <transition to="In Copyediting" name="Request Copyediting Review"></transition>
    <transition to="In Legal Review" name="Request Legal Review"></transition>
    <transition to="In Review" name="Request Review"></transition>
</task-node>

Ecco il modello per questi due nodi:

 <type name="nmwf:submitTask">
    <parent>bpm:startTask</parent>


    <mandatory-aspects>
       <aspect>bpm:assignees</aspect>
    </mandatory-aspects>
 </type>


 <type name="nmwf:submitInEditing">
    <parent>bpm:workflowTask</parent>


    <mandatory-aspects>
       <aspect>bpm:assignees</aspect>
    </mandatory-aspects>
 </type>

Ecco una pseudo-log della gestione del flusso di lavoro nella console del flusso di lavoro:

:: deploy alfresco/extension/workflow/processdefinition.xml

deployed definition id: jbpm$69 , name: jbpm$nmwf:MyWorkflow , title: nmwf:MyWorkflow , version: 28

:: var bpm:assignees* person admin,andyg

set var {http://www.alfresco.org/model/bpm/1.0}assignees = [workspace://SpacesStore/73cf1b28-21aa-40ca-9dde-1cff492d0268, workspace://SpacesStore/03297e91-0b89-4db6-b764-5ada2d167424]

:: var bpm:package package 1

set var {http://www.alfresco.org/model/bpm/1.0}package = workspace://SpacesStore/6e2bbbbd-b728-4403-be37-dfce55a83641

:: start bpm:assignees bpm:package

started workflow id: jbpm$63 , def: nmwf:MyWorkflow
path: jbpm$63-@ , node: start , active: true
 task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 16
 transition id: [default] , title: Task Done

:: show transitions

path: jbpm$63-@ , node: start , active: true
 task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 17
 transition id: [default] , title: Task Done

:: end task jbpm$112

signal sent - path id: jbpm$63-@
path: jbpm$63-@ , node: In Editing , active: true
 task id: jbpm$113 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 17
 transition id: Submit for Approval , title: Submit for Approval
 transition id: Request Copyediting Review , title: Request Copyediting Review
 transition id: Request Legal Review , title: Request Legal Review
 transition id: Request Review , title: Request Review

:: show tasks

task id: jbpm$113 , name: nmwf:submitInEditing , properties: 18

:: show my tasks

admin:
 [there is no output here]

sto facendo l'ipotesi che il bpm: assegnatari che io pongo prima di avviare il flusso di lavoro inizialmente sono sempre passati al primo nodo compito "In Editing". Chiaramente gli assegnatari sono sull'oggetto compito e non sull'oggetto flusso di lavoro. Ho aggiunto l'aspetto assegnatari al compito di start-stato in modo che potesse tenere (dopo ho avuto un problema, inizialmente non erano lì) e, eventualmente, sono ancora seduti lì, ma l'inizio di stato è finita prima ancora di ottenere il controllo indietro dallo script web (non che sarebbe utile se non era finita, ho bisogno di essere in "in Editing" come l'inizio dello stato viene utilizzato solo per registrare il flusso di lavoro che è stato avviato).

Mi ha sempre confuso che le proprietà che ho bisogno di serie su ogni necessità compito da richiedere prima di inserire l'attività (quando si sceglie una transizione è necessario fornire i dati per il prossimo compito prima di poter effettivamente passare al prossimo compito come si deve convalidare la presenza di tutti i dati richiesti prima e allora il segnale della transizione). Tuttavia, il codice per avviare il flusso di lavoro è asincrona e quindi non tornare né il flusso di lavoro iniziato o l'attività corrente (che nel mio caso sarebbe "In Editing"). Così, in entrambi i casi non è possibile impostare le variabili come la BPM: assegnatari e BPM: dueDate.

Mi chiedo se questo è il problema con l'elenco delle attività degli utenti. Sto impostando gli assegnatari nella lista di proprietà, ma forse quelle assegnatari stanno per il compito di start-Stato e non sono sempre passati al compito "In Editing"?

Si noti che questo è il mio primo flusso di lavoro jBPM, quindi per favore non impegna So quello che sto facendo. Se vedi qualcosa che guarda fuori, probabilmente lo è e io non lo so.

Grazie in anticipo per qualsiasi consiglio o aiuto,

È stato utile?

Soluzione

Quindi, si è scoperto che il mio problema è stato malinteso come fare più assegnatari, consentendo il flusso di lavoro per la transizione con uno qualsiasi di questi assegnatari. Si scopre che jBPM non supporta questo in un modello semplice, devi fare un lavoro molto di più di una semplice assegnazione di più assignees.I avevano seguito un cattivo esempio che ho trovato su Internet e avevo fatto un presupposto non corretto su come questo lavori.

jBPM ha un concetto di task paralleli (utilizzando le forcelle), ma l'azione normale richiede che tutti assegnatari per completare le attività prima che il flusso di lavoro transizione. Si scopre che il modo giusto per risolvere questo è quello di sborsare il compito di tutti gli assegnatari, ma quando uno dei assegnatari completa il loro compito che rattoppare la variabile che memorizza quanti assegnatari devono completare i loro compiti (node.nOutOfM) per ingannare jBPM nella finitura del compito che tutti assegnatari hanno completato (questo può anche permettere x solo assegnatari y dover completare l'operazione).

Invece di codice inviando aggiornato, qui ci sono gli articoli che ho usato per risolvere questo problema:

http://forums.alfresco.com/en/viewtopic. php? f = 30 & t = 8691

http://forums.alfresco.com/en/viewtopic. php? f = 34 & t = 5189

http: // dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/workflow/jbpm/ForEachFork.html

http://wiki.alfresco.com/wiki/WorkflowAdministration#For_Each_Fork

Altri suggerimenti

Non sono sicuro, ma penso che si desidera <pooledactors> qui invece di <actor>.

Forse questo è il motivo per cui il wf non funziona come previsto.

<actor>#{bpm_assignees}</actor>

Inoltre, credo che il compito dovrebbe essere nella vostra attività raggruppate, non le mie mansioni, in quanto è un compito in pool (perché si sta cercando di impostare più assegnatari).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top