WF學習筆試1-HelloWorld

來源:互聯網
上載者:User

        好久都沒有接觸和學習新技術,要抱怨說公司忙,實在為自己的懶惰找借口。工作的人慢慢的就與學生不太一樣,有時抱著得過且過的心態!現在想想還是很懷念以前學生年代深夜敲擊鍵盤的學習勁頭!
流程引擎不是第一次接觸,在去年的時候與一個同事在外面接了一個萬科的OA系統,當時對方指定要使用K2.NET流程引擎開發。並給我們提供了帶伺服器的虛擬機器。那時是我第一次接觸流程引擎,對工作流程的概念也有了比較直觀的認識!。
上周六陪朋友去了書店看書,拿了二本.NET3.0方面的書。其中一本第32章講到用WF製作訂單狀態管理工作流程。翻開看了一下知道WF,瞭解到微軟現在給VS2008中整合了這樣一個架構,個人感覺,它的應用範圍應該會越來越廣。於是這二天下班回來後開始學習WF。

        閑話打住,切入正題。在開始還是先給不明白的朋友介紹一下WF(網上也有稱為WWF,不過微軟建議稱為WF)
WF全稱是 Microsoft Windows Workflow Foundation ,它是一個可擴充架構,用於在 Windows 平台上開發工作流程解決方案,VS2005下需要安裝.NET3.0架構及Visual Studio 2005 Extensions for Windows Workflow Foundation.exe。VS2008中預設整合WF。

        我學東西也不大喜歡先搞概念,理論的東西,喜歡比較直觀的,看的見的,HelloWorld基本是學每種程式的入門級樣本。雖然老套,但我想還是很有用。今天的筆記就寫寫WF版本的HelloWorld。
        第1步:開啟VS2008,建立立項目Workflow->順序工作流程控制台程式 WFHelloWorld

         建立後項目結構如下:

1.其中Program.cs是宿主程式,也即是控制台程式可以理解為主程式!
2.Workflow1.cs是可視化的workflow工作流程設計工具,你可以將工具箱裡的作用中的控制項拖到該設計器中,這裡是你定義工作流程的主要地方,該可視化的設計器有自動檢測功能,沒有通過檢測會有歎號做相應提示。
    在這裡有必要介紹一下WF中的Activity(活動)。
    WF主要的組成組件是活動(Activity),活動組成了工作流程中的步驟(或任務),也可以說活動定義了工作流程.我們按順序和層次組織活動,然後這些活動將作為指令供工作流程引擎執行.WF中所有的活動都繼承一個基類-Activity,WF就運作在這些基本活動庫中的現成活動之上.Windows Workflow允許開發人員擴充基本活動庫的功能,通過建立自訂活動來解決特定領域的問題.
    我們可以自己定義Actitvity,微軟也為我們提供了一些Actitvity

瞭解這些後,我們接著做。

        第2步:我們往Workflow1.cs中拖入一個CodeActivity,注意圖中有個驚嘆號,這裡就是前面說的工作流程設計工具的檢測功能,如:

這是因為code活動,我們沒有定義他的ExecuteCode(執行代碼)

在ExecuteCode中輸入一個方法名,程式會自動產生一個事件方法。

 

/************************************************
//author:fengyan
//blog:http://eflylab.cnblogs.com
//date:2008-06-18 22:43
/***********************************************/ 
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Linq;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace WFHelloWorld
{
    public sealed partial class Workflow1: SequentialWorkflowActivity
    {
        public Workflow1()
        {
            InitializeComponent();
        }

        private void ExecuteHello(object sender, EventArgs e)
        {
            System.Console.WriteLine("Hello world");
        }
    }

}

我們給方法輸入一個代碼,很簡單的輸出!
這時我們返回去看Program.cs裡面的代碼體static void Main(string[] args)
        {
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };

                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFHelloWorld.Workflow1));
                instance.Start();

                waitHandle.WaitOne();
            }
        }

這是工具自動產生的先別著急它們的意思,我們在最後稍加修改,

static void Main(string[] args)
        {
            //WorkflowRuntime:在工作流程的運行環境(宿主)中,為工作流程提供啟動並執行引擎。
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                //以下二個事件是引擎中的某個執行個體完成後和終止後的事件
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };

                //WorkflowInstance:是指在工作流程引擎中啟動並執行工作流程執行個體。
                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFHelloWorld.Workflow1));
                instance.Start();

                waitHandle.WaitOne();

                //等待使用者響應退出
                Console.WriteLine("Press any key to exit");
                Console.ReadLine();
            }
        }

在最後加上二行,為方便觀看效果!現在可以運行,F5

輸入HelloWorld。
這可能是最簡單的WFHelloWord了,稍微加修改一下,增加一個簡單的互動功能。
我們在Workflow1中添加一個屬性UserName

private string username = "";
        public string UserName
        {
            get { return username; }
            set { username = value; }

        }
        public Workflow1()
        {
            InitializeComponent();
        }

        private void ExecuteHello(object sender, EventArgs e)
        {
            System.Console.WriteLine("{0},Hello world",username);
        }

修改Program.cs中 static void Main(string[] args)
        {
            //WorkflowRuntime:在工作流程的運行環境(宿主)中,為工作流程提供啟動並執行引擎。
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                //以下二個事件是引擎中的某個執行個體完成後和終止後的事件
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };
                
               
                Console.WriteLine("Press enter your userName");
                Dictionary<string, object> dictionary = new Dictionary<string, object>();
                //接收使用者輸入
                string userName = Console.ReadLine();
                //注意下面的UserName必須與Workflow1中的屬性名稱完全一致才行
                dictionary.Add("UserName", userName);
                //WorkflowInstance:是指在工作流程引擎中啟動並執行工作流程執行個體。
                //利用重載建立
                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFHelloWorld.Workflow1), dictionary);
                instance.Start();

                waitHandle.WaitOne();

                //等待使用者響應退出
                Console.WriteLine("Press any key to exit");
                Console.ReadLine();
            }
        }

運行效果

DownLaod Demo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.