4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Creazione degli eventi di comunicazione
Il sistema di comunicazione che c'è tra ogni istanza del workflow e l'applicazione che funge da host è basato sull'utilizzo di servizi di comunicazioni locali, che vengono inseriti nel runtime di WF subito dopo la sua partenza.
La definizione di tali servizi è fondamentale per permettere all'applicazione host di comunicare con il workflow e, nel nostro caso, di deviare il flusso di operazioni su un ramo al posto di un altro.
Come abbiamo detto infatti, alcuni passi del nostro workflow sono in attesa dello scatenarsi di particolari eventi lanciati dall'applicazione host. E' nostro compito quello di sviluppare tali eventi, i relativi gestori e le interfacce di servizio che permettono al workflow di comunicare con l'esterno. Tali interfacce, che devono essere marcate con l'attributo ExternalDataExchange, vedono definiti tutti i vari eventi che andranno a cambiare il percorso del nostro flusso di operazioni.
Nota: per mantenere l'ordine si è deciso di inserire queste classi di supporto in un assembly a parte, in modo tale che la logica del workflow, quella dello strato di comunicazione e quella propria dell'applicazione host restino separate l'una dall'altra.
namespace Service
{
[Serializable]
public class ApprovalEventArgs : ExternalDataEventArgs
{
private Item item;
public ApprovalEventArgs(Guid instanceID, Item item)
: base(instanceID)
{
this.item = item;
WaitForIdle = true;
}
public Item Item
{
get { return item; }
set { item = value; }
}
}
[ExternalDataExchange]
public interface IApprovalService
{
event EventHandler<ApprovalEventArgs> ItemApproved;
event EventHandler<ApprovalEventArgs> ItemRejected;
}
public class ApprovalService : IApprovalService
{
public event EventHandler<ApprovalEventArgs> ItemApproved;
public event EventHandler<ApprovalEventArgs> ItemRejected;
public void Approve(Guid instanceID, Item item)
{
if (ItemApproved != null)
ItemApproved(null, new ApprovalEventArgs(instanceID, item));
}
public void Reject(Guid instanceID, Item item)
{
if (ItemRejected != null)
ItemRejected(null, new ApprovalEventArgs(instanceID, item));
}
}
}
Una volta aggiunto il riferimento all'assembly contenente queste classi di sevizio, siamo in grado di configurare le attività del nostro workflow per la comunicazione con l'applicazione host.
In particolare, le due attività di tipo HandleExternalEventActivity, vedranno impostate le rispettive proprietà InterfaceType ed EventName, con il nome dell'interfaccia utilizzata per la comunicazione e i nomi dei due differenti eventi che dovranno ascoltare (ItemApproved e ItemRejected).
La finestra delle proprietà di Visual Studio .NET 2005 facilita la scelta dei valori di tali proprietà attraverso l'utilizzo di finestre specifiche che selezionano tutte le interfacce all'interno del progetto o inserite in assembly esterni, marcate con l'attributo ExternalDataExchange.

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
