在這一節,我們一起學習通過其他程式調用工作流程,並且在工作流程啟動時給工作流程傳遞一些資料,使其在工作流程中使用。
在workflow開始執行時,我們有兩種方式給工作流程傳遞資料------參數和事件。今天,我們先說說怎樣通過參數來給工作流程傳遞資料。
需要傳遞給workflow的參數,我們需要先在工作流程中通過屬性來進行設定,而後在其他程式調用這個工作流程建立一個工作流程的執行個體時,通過 Dictionary<string, object>索引值集合進行傳遞,如下:
繼續使用我們上一節用到的代碼,給Workflow1 類添加兩個屬性FirstName和LastName
private string firstName ;
public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
}
}
private string lastName;
public string LastName
{
get
{
return lastName;
}
set
{
lastName = value;
}
}
這裡我們將通過其他應用程式傳遞fristName和lastName並讓這兩個值在工作流程執行過程中以對話方塊的形式顯示出來。
因為我們上一節中建立的是個控制台應用程式,所以讓起彈出對話方塊需要應用System.Windows.Forms程式集。
然後修改我們的Workflow1類中的codeActivity1_CodeHandler
private void codeActivity1_CodeHandler(object sender, EventArgs e)
{
System.Windows.Forms.MessageBox.Show(
"Hello world: " + firstName + " " + lastName);
}
現在我們已經修改好我們要做的工作流程代碼了。
下面我們要建立一個winForm應用程式。
添加一個新的項目WinFormTestHost。
接下來我們要確認我們新建立的項目WinFormTestHost能夠調用工作流程Workflow1。
給WinFormTestHost添加引用,引用項目HelloWorldWorkflow.
同時,我們還要讓我們的這個winfrom應用程式引用wwf程式集。繼續添加引用,選擇.net選項卡,添加如下三項:
System.Workflow.Activities
System.Workflow.ComponentModel
System.Workflow.Runtime
修改我們的Form1表單。
添加兩個Label分別為Label1和Label2,Text屬性分別為First name和 LastName。
添加兩個TextBox分別為txtFirstName和txtLastName。
添加一個按鈕btnStartWorkflow,用來啟動我們的工作流程,Name屬性為btnStartWorkflow,Text屬性為Start Workflow。
這個簡單的表單就做完了,我們來添加代碼。
首先在我們的類Form1.cs中添加工作流程運行時聲明:
private WorkflowRuntime wr;
雙擊btnStartWorkflow添加事件處理常式。
private void btnStartWorkflow_Click(object sender, EventArgs e)
{
if (wr == null)
{
wr = new WorkflowRuntime();
wr.StartRuntime();
}
//定義鍵和值的集合(Dictionary)用來傳遞參數
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("FirstName", txtFirstName.Text);
parameters.Add("LastName", txtLastName.Text);
//建立一個工作流程執行個體
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
//啟動工作流程
instance.Start();
}
最後給FormClosed事件添加一段代碼,使其在關閉表單時關閉工作流程
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (wr != null)
{
if (wr.IsStarted)
{
wr.StopRuntime();
}
}
}
現在,我們的程式就開發完成了,點擊F5,將開啟表單:
我們輸入名稱後點Start Workflow,將彈出表單:
這個表單是在Workflow1中執行的,同時,我們也看到,在winfrom表單中輸入的值成功的傳遞到了工作流程中。