Attività 1: creazione di attività CallExternalMethod
In questa attività viene modificato il flusso di lavoro sequenziale aggiungendo un'attività IfElseActivity per determinare se un dirigente o un responsabile deve approvare o rifiutare l'importo della nota spese. Quando viene determinato questo, il flusso di lavoro utilizza un'attività CallExternalMethodActivity corrispondente per chiamare un metodo definito nell'applicazione host. Il metodo nell'applicazione host aggiorna l'interfaccia utente, notificando all'utente che è necessario specificare un'approvazione o un rifiuto e la persona responsabile.
Nota
Anche se è consigliabile seguire gli esercizi in modo lineare, non è strettamente necessario. È possibile iniziare l'esercizio aprendo il file di progetto e procedendo secondo i passaggi illustrati nella sezione seguente.
Modifica del flusso di lavoro
Modificare il flusso di lavoro aggiungendo un'attività IfElseActivity per determinare chi deve approvare o rifiutare l'importo della nota spese.
Per modificare ExpenseReportWorkflow
Nella classe ExpenseReportWorkflow creare le variabili dei membri privati seguenti.
Tipo Name IfElseActivity
evaluateExpenseReportAmount
ifNeedsLeadApproval
IfElseBranchActivity
elseNeedsManagerApproval
CallExternalMethodActivity
invokeGetLeadApproval
CallExternalMethodActivity
invokeGetManagerApproval
private IfElseActivity evaluateExpenseReportAmount; private IfElseBranchActivity ifNeedsLeadApproval; private IfElseBranchActivity elseNeedsManagerApproval; private CallExternalMethodActivity invokeGetLeadApproval; private CallExternalMethodActivity invokeGetManagerApproval;
Nel metodo InitializeComponent della classe ExpenseReportWorkflow creare un'istanza di ogni variabile dichiarata nel passaggio precedente.
NotaQuesta operazione deve essere effettuata dopo la chiamata che imposta la proprietà CanModifyActivities su true, ma prima del codice che imposta la stessa proprietà su false.
this.evaluateExpenseReportAmount = new IfElseActivity();
this.ifNeedsLeadApproval = new IfElseBranchActivity();
this.elseNeedsManagerApproval = new IfElseBranchActivity();
this.invokeGetLeadApproval = new CallExternalMethodActivity();
this.invokeGetManagerApproval = new CallExternalMethodActivity();
Definizione delle attività CallExternalMethod
In questo passaggio viene definita l'attività CallExternalMethodActivity corrispondente. Il flusso di lavoro utilizza questa attività per chiamare un metodo definito nell'applicazione host.
Per definire le attività CallExternalMethod
Dopo il codice creato nel passaggio precedente della procedura nel metodo InitializeComponent, impostare la proprietà InterfaceType dell'oggetto invokeGetLeadApproval sulla classe Type dell'interfaccia IExpenseReportService.
Impostare la proprietà MethodName dell'oggetto invokeGetLeadApproval sul valore "GetLeadApproval".
Impostare la proprietà Name dell'oggetto invokeGetLeadApproval sul valore "invokeGetLeadApproval".
Impostare la proprietà ParameterName dell'oggetto workflowparameterbinding1 sul valore "message".
Impostare la proprietà Value dell'oggetto workflowparameterbinding1 sul valore "Lead approval needed".
Aggiungere l'oggetto workflowparameterbinding1 all'insieme ParameterBindings dell'oggetto invokeGetLeadApproval chiamando il metodo Add dell'insieme ParameterBindings e passando l'oggetto workflowparameterbinding1 come un parametro a tale metodo.
this.invokeGetLeadApproval.InterfaceType = typeof(IExpenseReportService); this.invokeGetLeadApproval.MethodName = "GetLeadApproval"; this.invokeGetLeadApproval.Name = "invokeGetLeadApproval"; workflowparameterbinding1.ParameterName = "message"; workflowparameterbinding1.Value = "Lead approval needed"; this.invokeGetLeadApproval.ParameterBindings.Add(workflowparameterbinding1);
Impostare la proprietà InterfaceType dell'oggetto invokeGetManagerApproval sulla classe Type dell'interfaccia IExpenseReportService.
Impostare la proprietà MethodName dell'oggetto invokeGetManagerApproval sul valore "GetManagerApproval".
Impostare la proprietà Name dell'oggetto invokeGetManagerApproval sul valore "invokeGetManagerApproval".
Impostare la proprietà ParameterName dell'oggetto workflowparameterbinding2 sul valore "message".
Impostare la proprietà Value dell'oggetto workflowparameterbinding2 sul valore "Manager approval needed".
Aggiungere l'oggetto workflowparameterbinding2 all'insieme ParameterBindings dell'oggetto invokeGetManagerApproval chiamando il metodo Add dell'insieme ParameterBindings e passando l'oggetto workflowparameterbinding2 come un parametro a tale metodo.
this.invokeGetManagerApproval.InterfaceType = typeof(IExpenseReportService); this.invokeGetManagerApproval.MethodName = "GetManagerApproval"; this.invokeGetManagerApproval.Name = "invokeGetManagerApproval"; workflowparameterbinding2.ParameterName = "message"; workflowparameterbinding2.Value = "Manager approval needed"; this.invokeGetManagerApproval.ParameterBindings.Add (workflowparameterbinding2);
Aggiungere l'oggetto evaluateExpenseReportAmount all'insieme Activities del flusso di lavoro chiamando il metodo Add dell'insieme Activities e passando l'oggetto evaluateExpenseReportAmount come parametro a tale metodo.
this.Activities.Add(this.evaluateExpenseReportAmount);
Definizione dei metodi di interfaccia
A questo punto è necessario definire i metodi di interfaccia IExpenseReportService affinché l'utente possa essere informato della necessità di un'approvazione o di un rifiuto.
Per definire i metodi di interfaccia IExpenseReportService
Nella classe MainForm del metodo GetLeadApproval creare un'istruzione If per determinare se InvokeRequired è true per il controllo approvalState Label.
Se InvokeRequired è true, chiamare il metodo Invoke del controllo approvalState Label passando un nuovo metodo GetApprovalDelegate che utilizza il metodo GetLeadApproval come parametro e il parametro message.
Se InvokeRequired è false, impostare la proprietà Text del controllo approvalState Label sullo stesso valore del parametro message.
Impostare la proprietà Enabled dei controlli approveButton e rejectButton Button su true e il controllo submitButton Button su false.
Aumentare il valore Height del modulo aggiungendo il valore Height del controllo panel1 alla proprietà Height del modulo.
public void GetLeadApproval(string message) { if (this.approvalState.InvokeRequired) this.approvalState.Invoke(new GetApprovalDelegate (this.GetLeadApproval), message); else { this.approvalState.Text = message; this.approveButton.Enabled = true; this.rejectButton.Enabled = true; // expand the panel this.Height = this.MinimumSize.Height + this.panel1.Height; this.submitButton.Enabled = false; } }
Nella classe MainForm del metodo GetManagerApproval creare un'istruzione If per determinare se InvokeRequired è true per il controllo approvalState Label.
Se InvokeRequired è true, chiamare il metodo Invoke del controllo approvalState Label passando un nuovo metodo GetApprovalDelegate che utilizza il metodo GetManagerApproval come parametro e il parametro message.
Se InvokeRequired è false, impostare la proprietà Text del controllo approvalState Label sullo stesso valore del parametro message.
Impostare la proprietà Enabled dei controlli approveButton e rejectButton Button su true e il controllo submitButton Button su false.
Aumentare il valore Height del modulo aggiungendo il valore Height del controllo panel1 alla proprietà MinimumSize.Height del modulo.
public void GetManagerApproval(string message) { if (this.approvalState.InvokeRequired) this.approvalState.Invoke(new GetApprovalDelegate (this.GetManagerApproval), message); else { this.approvalState.Text = message; this.approveButton.Enabled = true; this.rejectButton.Enabled = true; // expand the panel this.Height = this.MinimumSize.Height + this.panel1.Height; this.submitButton.Enabled = false; } }
Compilare ed eseguire l'applicazione.
Immettere un valore nella casella di testo Importo, quindi fare clic su Invia.
Il modulo si espande per visualizzare i pulsanti Approva e Rifiuta e il messaggio generato dal flusso di lavoro.
Compilazione del codice
Per informazioni sulla compilazione del codice, vedere Compilazione del codice.
In Attività 2: Creare attività HandleExternalEvent viene completata l'esercitazione aggiungendo attività che restano in attesa di eventi specifici generati dall'applicazione host.
Vedere anche
Attività
Attività 2: Creare attività HandleExternalEvent
Riferimenti
Activities
IfElseActivity
IfElseBranchActivity
CallExternalMethodActivity
InterfaceType
MethodName
ParameterName
ParameterBindings
Concetti
Utilizzo dell'attività CallExternalMethodActivity
Utilizzo dell'attività IfElseActivity
Altre risorse
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.