Domanda

Sto provando a utilizzare Windows Workflow e ho un modello simile all'immagine nel link seguente:
Schermata del flusso di lavoro

Dopo ciascuna delle attività di invio ( GetSomthing , GetSomthingElse , GetSomeMoreStuff ) viene chiamata la stessa attività personalizzata ( LogSomthingBadHappened ).

Anche se potrebbe non sembrare così brutto in questa immagine nel mio modello reale, l'attività personalizzata è SequenceActivty, ha parecchi nodi e quando le sue ripetute 3 volte iniziano a rendere il flusso di lavoro molto brutto.

Vorrei fare qualcosa del genere:
Schermata del flusso di lavoro modificato

I rami IfElse possono essere uniti in questo modo?
Dovrei invece utilizzare un flusso di lavoro di State Machine (non l'ho ancora capito)?

È stato utile?

Soluzione

Utilizzare un FaultHandler sul flusso di lavoro e generare un tipo di eccezione specifico che verrà catturato dal gestore. Non il più grazioso, ma penso che dovrebbe funzionare.

Altri suggerimenti

Nei flussi di lavoro sequenziali tutti i passaggi devono essere visualizzati in un ordine specifico e il percorso di esecuzione è regolato esclusivamente da strutture di controllo (IF, WHILE). Modificare il percorso di esecuzione nel modo descritto è come usare un'istruzione GOTO nel codice imperativo, che conosciamo porta a complessità inutili.

Se le attività contenute nella SequenceActivity che devi eseguire in diverse fasi del tuo flusso di lavoro sono esattamente uguali, puoi incorporarle in una attività personalizzata . In questo modo è più facile gestirli poiché sono contenuti in una singola unità logica.
Nel codice imperativo, sarebbe come riformattare una parte di codice duplicato in un metodo, che viene quindi invocato in più posizioni.

Un'altra alternativa che potrebbe funzionare è quella di inserire la tua attività LogSomthingBadHappened in un flusso di lavoro personalizzato e includerlo più volte. Diverse cose a cui prestare attenzione: il flusso di lavoro secondario viene eseguito asincrono , se l'attività LogSomthingBadHappened necessita di informazioni sullo stato dal flusso di lavoro principale, copiarle nel flusso di lavoro secondario potrebbe essere difficile.

Non l'ho provato, quindi potrebbe non funzionare nemmeno.

Penso che la risposta di gbanfill indichi la giusta direzione.

Per generalizzare, definisco il problema come:

Esiste un modo per definire un gruppo di attività che verranno eseguite in diversi punti di un flusso di lavoro?
Ulteriori requisiti sono:

  1. Il gruppo di attività dovrebbe essere definito solo in XAML, cioè senza codice.
  2. Il tipo di input per questo gruppo sarà, ovviamente, fisso, ma i valori effettivi dovrebbero dipendere dalla chiamata (come chiamare una funzione).

Forse il modo per farlo è definire i flussi di lavoro secondari e creare un'attività personalizzata che crei un'istanza del flusso di lavoro secondario e ne attenda il completamento prima di continuare.

Questa attività personalizzata dovrebbe avere almeno due parametri: l'id del flusso di lavoro secondario e i parametri di input.

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