Condividi tramite


Attività 1: definire i parametri del flusso di lavoro

Un flusso di lavoro e un'applicazione host possono scambiare dati utilizzando i parametri. Sul lato del flusso di lavoro, un parametro è una proprietà definita nella classe del flusso di lavoro. Se un metodo fisso è definito per la proprietà, l'applicazione host può impostare tale proprietà prima che il flusso di lavoro venga eseguito passando un insieme di parametri durante la chiamata al metodo CreateWorkflow. Per restituire i parametri all'applicazione host al termine dell'esecuzione, è possibile definire un metodo get per la proprietà. L'applicazione host può quindi accedere all'oggetto WorkflowCompletedEventArgs passato all'evento WorkflowCompleted. L'oggetto WorkflowCompletedEventArgs contiene tutte le proprietà definite nel flusso di lavoro che contiene i metodi get.

In questa attività, si crea una proprietà integer denominata Amount. Questa proprietà viene passata al flusso di lavoro quando la nota spese viene inviata. Il flusso di lavoro elabora l'importo e comunica al flusso di lavoro l'approvazione o il rifiuto. Imposta quindi la proprietà della stringa Result alla quale può accedere l'applicazione host quando termina l'esecuzione del flusso di lavoro.

Nota

Anche se consigliabile, non è necessario eseguire gli esercizi in modo lineare. È possibile iniziare l'esercizio aprendo il progetto di esempio e procedendo secondo i passaggi illustrati nella sezione seguente.

Definizione delle proprietà del flusso di lavoro

Seguire questi passaggi per definire una proprietà integer per l'importo e una proprietà stringa per il risultato.

Per definire la proprietà del flusso di lavoro Amount

  1. Nella classe ExpenseReportWorkflow, dichiarare un campo private Int32 di nome reportAmount.

    private int reportAmount = 0;
    
  2. Creare una proprietà Int32 public nella classe ExpenseReportWorkflow e creare un metodo set, che imposta il campo reportAmount creato nel passaggio precedente.

    public int Amount
    {
        set
        {
            this.reportAmount = value;
        }
    }
    

Per definire la proprietà del flusso di lavoro Result

  1. Nella classe ExpenseReportWorkflow, dichiarare un campo private String denominato reportResult.

    private string reportResult = "";
    
  2. Creare una proprietà String public nella classe ExpenseReportWorkflow e creare un metodo get, che restituisce il valore del campo reportResult creato nel passaggio precedente.

    public string Result
    {
        get
        {
            return this.reportResult;
        }
    }
    

Modifica dell'applicazione Windows Form

Modificare l'applicazione Windows Form per impostare la proprietà Amount di ExpenseReportWorkflow e recuperare la proprietà Result al termine dell'esecuzione del flusso di lavoro. Impostare la proprietà Amount quando si crea il flusso di lavoro, e recuperare la proprietà Result quando l'evento WorkflowCompleted viene generato.

Per impostare la proprietà del flusso di lavoro Amount

  1. Nel metodo submitButton_Click della classe MainForm creare un insieme generico Dictionary del tipo Object denominato properties che utilizza un elemento String per la chiave.

    Nota

    È necessario aggiungere questo codice prima di chiamare il metodo CreateWorkflow.

    // Construct workflow parameters
    Dictionary<string, object> properties = new Dictionary<string, object>();
    
  2. Chiamare il metodo Add definito sull'insieme properties appena creato passando la stringa "Amount" come primo parametro e la proprietà Text del controllo amount TextBox convertita in un valore Int32.

    Quando il flusso di lavoro viene avviato, WorkflowRuntime utilizza queste informazioni per impostare la proprietà Amount del flusso di lavoro.

    properties.Add("Amount", Int32.Parse(this.amount.Text));
    
  3. Modificare la chiamata al metodo CreateWorkflow sulla riga successiva passando l'insieme di proprietà come secondo parametro.

    workflowInstance = workflowRuntime.CreateWorkflow(type, properties);
    

Per recuperare la proprietà del flusso di lavoro Result

  1. Nel metodo workflowRuntime_WorkflowCompleted nella classe MainForm, aggiungere un'istruzione If per verificare se InvokeRequired è true per il controllo TextBox risultante.

  2. Nella diramazione true dell'istruzione If, chiamare il metodo Invoke dal controllo TextBox risultante passando un nuovo EventHandler generico del tipo WorkflowCompletedEventArgs denominato workflowRuntime.WorkflowCompleted.

    Passare il sender e la variabile locale e come parametri al gestore eventi.

  3. Nella diramazione else dell'istruzione If, impostare la proprietà Text del controllo result TextBox in modo corrispondente alla chiave "Result" dell'insieme OutputParameters definito nel parametro e.

    Accertarsi di chiamare il metodo ToString per convertire il valore in una stringa.

  4. Cancellare il controllo amount TextBox impostandone la proprietà Text su String.Empty.

  5. Disabilitare i controlli approveButton e rejectButton Button impostando le relative proprietà Enabled su false.

    else
    {
        this.result.Text = e.OutputParameters["Result"].ToString();
    
        // Clear fields
        this.amount.Text = string.Empty;
    
        // Disable buttons
        this.approveButton.Enabled = false;
        this.rejectButton.Enabled = false;
    
    }
    

Compilazione del codice

Per informazioni sulla compilazione del codice, vedere Compilazione del codice.

In Attività 2: definizione dell'interfaccia IExpenseReportService viene creata l'interfaccia che consente al flusso di lavoro e all'applicazione host di comunicare.

Vedere anche

Attività

Attività 2: definizione dell'interfaccia IExpenseReportService

Riferimenti

CreateWorkflow
WorkflowCompleted
WorkflowCompletedEventArgs
OutputParameters

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.