Ritorna alla Home Page della Biblioteca di Microsoft .NET

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

 

Dopo aver importato la classe Workflow e la classe WorkflowInterface e definite le variabili di classe objWorkflowRuntime, objWorkflowInstance e objWorkflowService andiamo a scrivere il codice che dovrà essere lanciato nella load dell’applicazione.

 

    Private Sub Application_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        CheckForIllegalCrossThreadCalls = False                     'Imposto l'accesso all'applicazione da parte di thread separati

        objWorkflowRuntime = New WorkflowRuntime()                  'Creo il Runtime del Workflow

        Dim extDataService As New ExternalDataExchangeService()     'Creo il servizio

        objWorkflowRuntime.AddService(extDataService)               'Passo il servizio al Runtime

 

        Dim CallBack As EventHandler(Of WorkflowValue)

        CallBack = New EventHandler(Of WorkflowValue)(AddressOf ReturnCallbackSwitch)

        objWorkflowService = New WorkflowService(Me, CallBack)

 

        extDataService.AddService(objWorkflowService)

        objWorkflowRuntime.StartRuntime()

 

    End Sub

 

Nella load verrà istanziato il Runtime del Workflow e verrà creato il servizio che infine verrà passato al Runtime. Definito il Runtime e il servizio verranno dirottate gli eventi dell’oggetto WorkflowValue (la classe definita in precedenza contenente i valori di passaggio tra workflow e applicazione) all’interno della subroutine ReturnCallbackSwitch presente nell’applicazione.

 

Inseriamo quindi il codice per la sub routine ReturnCallbackSwitch.

 

 

    Public Sub ReturnCallbackSwitch(ByVal sender As Object, ByVal e As WorkflowValue)

        WorkFlowLog.AppendText(e.InstanceId.ToString & " - " & e.Message & vbCrLf)

        Select Case e.ValidateState

            Case WorkflowValue.ValidateStateEnum.Validate

                BackEndGuid.Text = e.InstanceId.ToString

                BackEndOperatorName.Text = e.OperatorName

                BackEndTipology.Text = e.Tipology

                BackEndValidate.Text = e.ValidateState.ToString

        End Select

    End Sub

 

 

Infine definita l’istanza del runtime e definita la routine ReturnCallbackSwitch che verrà avviato ogni qual volta verrà eseguita una CallExternalMethod da parte del workflow andiamo a definire il codice che verrà eseguito al verificarsi degli eventi click sui vari bottoni.

 

    Private Sub CreateTicket_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CreateTicket.Click

        Dim parameters As New Dictionary(Of String, Object)

        parameters.Add("OperatorName", OperatorName.Text)

        parameters.Add("Tipology", Tipology.SelectedItem.ToString())

        objWorkflowInstance = objWorkflowRuntime.CreateWorkflow(GetType(Workflow.Workflow), parameters)

        objWorkflowInstance.Start()

        ValidateList.Items.Add(objWorkflowInstance.InstanceId.ToString)

    End Sub

 

    Private Sub Validate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Validate.Click

        Dim id As New Guid(ValidateList.SelectedItem.ToString())

        objWorkflowService.RaiseValidateTicket(id, WorkflowValue.ValidateStateEnum.Validate)

        ValidateList.Items.Remove(ValidateList.SelectedItem.ToString())

    End Sub

 

    Private Sub Rejected_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Rejected.Click

        Dim id As New Guid(ValidateList.SelectedItem.ToString())

        objWorkflowService.RaiseValidateTicket(id, WorkflowValue.ValidateStateEnum.Reject)

        Call inizialize()

    End Sub

 

    Private Sub Corrupt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Corrupt.Click

        Dim id As New Guid(BackEndGuid.Text)

        objWorkflowService.RaiseWorkTicket(id, WorkflowValue.ValidateStateEnum.Validate, WorkflowValue.WorkStateEnum.Corrupt)

        Call inizialize()

    End Sub

 

    Private Sub Close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Close.Click

        Dim id As New Guid(BackEndGuid.Text)

        objWorkflowService.RaiseWorkTicket(id, WorkflowValue.ValidateStateEnum.Validate, WorkflowValue.WorkStateEnum.Close)

        Call inizialize()

    End Sub

 

    Public Sub inizialize()

        BackEndGuid.Text = ""

        BackEndOperatorName.Text = ""

        BackEndTipology.Text = ""

        BackEndValidate.Text = ""

    End Sub

 

    Private Sub ValidateList_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ValidateList.MouseDoubleClick

 

        Dim id As New Guid(ValidateList.SelectedItem.ToString())

        Dim objWorkflowInstance As WorkflowInstance

        For Each objWorkflowInstance In objWorkflowRuntime.GetLoadedWorkflows()

            If objWorkflowInstance.InstanceId = id Then

                MsgBox("trovato!")

            End If

        Next

    End Sub

 

    Private Sub Refresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Refresh.Click

        Call RefreshWorkflow()

    End Sub

    Public Sub RefreshWorkflow()

        ValidateList.Items.Clear()

        Dim objWorkflowInstance As WorkflowInstance

        For Each objWorkflowInstance In objWorkflowRuntime.GetLoadedWorkflows()

            ValidateList.Items.Add(objWorkflowInstance.InstanceId)

        Next

    End Sub

 

 

 

Ora per completare la nostra soluzione e renderla finalmente funzionante occorre andare a specificare per ogni attività presente sul Workflow l’azione che ne corrisponderà.

 

Accediamo nuovamente alla libreria di classi che contiene il Workflow facendo doppio click sul file Workflow.vb.

Selezioniamo con il mouse la prima CallExternalMethod e accediamo al pannello delle sue proprietà come abbiamo fatto in precedenza per impostarne il nome.

 

Compiliamo il progetto WorkflowInterface.

Se non sono stati fatti errori il progetto dovrebbe generare l’Assembly desiderato.


Clicchiamo sul quadrato presente alla destra accanto al campo InterfaceType, verrà mostrata una maschera che riporterà il nome della nostra interfaccia WorkflowInterface, selezioniamola e clicchiamo su OK.

 

 

Clicchiamo ora sulla tendina presente sulla destra del campo MethodName.

Verranno mostrate le routine presenti all’interno dell’interfaccia, selezioniamo SendMessageToApplication.

 

 

 

Una volta selezionato il metodo, nel pannello delle proprietà verranno inseriti i parametri di ingresso ai metodo descritti dall’interfaccia nel nostro caso GUID e Message. Nel campo Message inserite Inizialize.