Ritorna alla Home Page della Biblioteca di Microsoft .NET

Paginazione :   1 2 3 4 5 [6] 7 8 9 10 

 

Definiamo a questo punto la famosa Interfaccia che verrà utilizzata dal Servizio utilizzato dall’applicazione che ne implementerà i tipi e dal Workflow.

 

Imports System.Workflow.Activities

<ExternalDataExchange()> Public Interface IWorkflowInterface

    'Funzione legata all'attività CallExternalMethod del Workflow,

    'invia un messaggio all'applicazione

    Sub SendMessageToApplication(ByVal Guid As Guid, ByVal Message As String)

    '2 Azione

    'Funzione legata all'attività CallExternalMethod del Workflow,

    'invia un messaggio all'applicazione

    Sub StartWorking(ByVal Guid As Guid, ByVal Message As String, ByVal OperatorName As String, ByVal Tipology As String)

    '2 Azione

    'Eventi legati alle Attività HandleExternalEvent del Workflow

    Event ValidateTicket As EventHandler(Of WorkflowValue)

    '3 Azione

    'Eventi legati alle Attività HandleExternalEvent del Workflow

    Event WorkTicket As EventHandler(Of WorkflowValue)

End Interface

 

Da notare che l’interfaccia dovrà essere marcata dal suffisso <ExternalDataExchange()>.

L’interfaccia conterrà degli eventi e delle sub routine. Vedremo successivamente come verranno legate al funzionamento del Workflow e dell’applicazione.


Noteremo che gli eventi ValidateTicket e WorkTicket presenti all’interno della nostra interfaccia trasmetteranno un oggetto di tipo WorkflowValue che abbiamo definito in precedenza.

 

A questo punto, definiti gli argomenti e l’interfaccia, dobbiano definire il servizio, o meglio scrivere il codice che verrà invocato dall’applicazione.

Incolliamo quindi il codice seguente all’interno della classe WorkflowService

 

<Serializable()> Public Class WorkflowService

    Implements IWorkflowInterface

 

    <NonSerialized()> Dim _Target As System.ComponentModel.ISynchronizeInvoke

    <NonSerialized()> Dim _Callback As EventHandler(Of WorkflowValue)

 

    Public Sub New(ByVal Target As System.ComponentModel.ISynchronizeInvoke, _

                   ByVal Callback As EventHandler(Of WorkflowValue))

        _Target = Target

        _Callback = Callback

    End Sub

 

    Public Sub StartWorking(ByVal Guid As Guid, ByVal Message As String, _

                            ByVal OperatorName As String, ByVal Tipology As String) _

                            Implements IWorkflowInterface.StartWorking

        _Target.Invoke(_Callback, New Object() {Me, New WorkflowValue(Guid, Message, OperatorName, Tipology, _

                                                        WorkflowValue.ValidateStateEnum.Validate)})

    End Sub

 

    Public Sub SendMessageToApplication(ByVal Guid As Guid, ByVal Message As String) _

                                        Implements IWorkflowInterface.SendMessageToApplication

        _Target.Invoke(_Callback, New Object() {Me, New WorkflowValue(Guid, Message)})

    End Sub

 

    Public Event ValidateTicket(ByVal sender As Object, ByVal e As WorkflowValue) Implements IWorkflowInterface.ValidateTicket

    Public Sub RaiseValidateTicket(ByVal Guid As Guid, ByVal ValidateState As WorkflowValue.ValidateStateEnum)

        RaiseEvent ValidateTicket(Me, New WorkflowValue(Guid, , , , ValidateState))

    End Sub

 

    Public Event WorkTicket(ByVal sender As Object, ByVal e As WorkflowValue) Implements IWorkflowInterface.WorkTicket

    Public Sub RaiseWorkTicket(ByVal Guid As Guid, ByVal ValidateState As WorkflowValue.ValidateStateEnum, _

                               ByVal WorkState As WorkflowValue.WorkStateEnum)

        RaiseEvent WorkTicket(Me, New WorkflowValue(Guid, , , , ValidateState, WorkState))

    End Sub

 

End Class

 

La classe WorkflowService ha due variabili di classe denominate _Target e _CallBack.

Già dal nome si capisce che queste due istanze di oggetti ci permettono di andare ad invocare l’oggetto Chiamato e l’oggetto chiamante.

Il _Target descrive l’applicazione Windows Form mentre l’oggetto CallBack  descrive il chiamante o meglio dire il Workflow.

Tale costrutto verrà utilizzato quando verrà invocata una Attività di tipo CallExternalMethod.

Ovviamente verranno implementati gli eventi così come dichiarati all’interno dell’interfaccia e verranno sviluppate delle funzioni RaiseValidateTicket e RaiseWorkTicket che verranno richiamate dall’applicazione per generare una chiamata a funzione presente all’interno del Workflow.

 

Nota Bene : In conclusione, tutto ciò che nell’interfaccia viene definito come Evento, si allaccierà all’attività del workflow HandleExternalEvent e quindi permetterà all’applicazione di eseguire del codice presente all’interno del Workflow.
Viceversa tutto ciò che viene definito all’interno dell’interfaccia come Sub Routine, si riallaccierà all’attività CallExternalMethod e quindi permetterà al Workflow di eseguire del codice all’interno dell’applicazione

 

Arrivati a questo punto occorre andare a collegare il Workflow precedentemente creato all’applicazione, quindi accediamo alla Windows Application e apriamo il codice della Form1.vb. Incolliamo il codice presente qua sotto.

 

Imports System.Workflow.Activities

Imports System.Workflow.Runtime

Imports System.Workflow.Runtime.Hosting

Imports System.Workflow.Runtime.Tracking

 

Public Class Application

 

    Public objWorkflowRuntime As WorkflowRuntime    'istanza che contiene il Runtime

    Public objWorkflowInstance As WorkflowInstance  'istanza al Workflow

    Public objWorkflowService As WorkflowService    'istanza al Servizio Workflow WorkflowInterface

 

End Class