<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      編程 & 生活 -- 西西吹雪

      開心工作,快樂生活 (原創(chuàng)文章,轉(zhuǎn)載請注明出處)

      導航

      Windows WorkFlow Foundation入門(二)


      二、使用WF開發(fā)介紹

             WF允許我們用.net framework來開發(fā)自己的工作流程序,它并不是一個可執(zhí)行程序,但它使得我們能開發(fā)自己的工作流應用程序。  
            傳統(tǒng)的通用編程語言致力于開發(fā)短生命期的程序,它們?nèi)狈Τ绦蜻\行的持續(xù)性和穩(wěn)固性的內(nèi)在的支持。WF是一個框架,不是一門語言。它對工作流編程有著深入的理解,從而能很好的處理諸于persistence and compensation這樣的工作。  
            WF是靈活的,可擴展的。你可以直接通過代碼或markup(?)來編寫工作流,可使用兩者組合。你可以通過定義可重用的活動來,來實現(xiàn)自定義的工作流模式。
            WF支持模型驅(qū)動的工作流開發(fā),它支持自然的可視化設計,同時隱藏了一些系統(tǒng)級的概念,如事務、狀態(tài)管理以及并發(fā)控制。
            開發(fā)工作流程序有兩件基本的事情,一是定義工作流和它的活動,再就是在程序使用這些工作流。

      (一)工作流程模式
            WF支持多種工作流程式,如順序工作流,以及數(shù)據(jù)驅(qū)動。順序模式是一直向前執(zhí)行,它在重復和、可預見的操作(這些操作通常相同)中非常有用。狀態(tài)機模式由一系列事件驅(qū)動的狀態(tài)組成,數(shù)據(jù)驅(qū)動模式依賴于數(shù)據(jù)來決定某個活動是否執(zhí)行。 
            順序工作流 
            順序模式是一直向前執(zhí)行,它在重復和、可預見的操作(這些操作通常相同)中非常有用,例如,一系列的活動以規(guī)定的、通常相同的順序來運行。參見下圖。



      順序工作流以按順序執(zhí)行的方式來執(zhí)行活動,直到最后一個活動執(zhí)行完成。順序工作流不一定是完全確定的,即使在非正常操作中。例如,你可以使用一個“監(jiān)聽”活動或一個“并發(fā)”活動,事件的具體順序在不同的情況下可以不同。

            狀態(tài)機工作流 
            在狀態(tài)機模型中,工作流就是一個狀態(tài)機,它由一系列的狀態(tài)組成。其中一個狀態(tài)指示了開始狀態(tài),每個狀態(tài)都可以接收一系列的事件。基于一件,工作流從一個狀態(tài)遷移到另一個狀態(tài)。狀態(tài)機工作流可以有一個終結(jié)狀態(tài),當遷移到終結(jié)狀態(tài)時,工作流就完成了。
             下面這幅圖是一個狀態(tài)機工作流的例子。

       
         下面這張表列出了在WF框架的活動集合中與狀態(tài)機相關(guān)的活動
       

      活動 說明
      EventDrivenActivity
      用于依賴于外部事件才能開始執(zhí)行的狀態(tài)。EventDrivenActivity必須有一個Activity實現(xiàn)在了IEventActivity 接口,作為其第一個子活動。
      SetStateActivity 用于遷移到一個新狀態(tài)。
      StateActivity
      代表狀態(tài)機中的一個狀態(tài),可以包含附加的“狀態(tài)”活動  
      StateInitializationActivity
      當進一個狀態(tài)時執(zhí)行,可以包含其它活動。
      StateFinalizationActivity 當離開一個StateActivity時會執(zhí)行它所包含的活動。 
         
      使用活動來控制流程
             WF框架包含不同功能的活動,我們可以這些活動來控制工作流的邏輯流程。  
            下面這張表列出了在WF框架的活動集合中用來控制工作流邏輯流程的活動。
      活動   說明
      ListenActivity 可以根據(jù)一些事件或超時操作來產(chǎn)生分支。
      IfElseActivity 在每個分支上測試同一個條件,并且執(zhí)行第一個返回True的分支上的活動。
      ParallelActivity 可以使工作流同時執(zhí)行兩個以上互不相關(guān)的操作。
      SuspendActivity 掛起一個操作,可以產(chǎn)生錯誤用來干預流程。
      TerminateActivity 當錯誤發(fā)生時,可以用來立即終止工作流中的一個操作。
      WhileActivity 循環(huán)執(zhí)行一個操作,執(zhí)行指定的條件得到滿足。
      ConditionedActivityGroup 也被稱為CAG。當設定到CAG的條件滿足時,會執(zhí)行CAG包含的子活動。子活的執(zhí)行也必須滿足該子活動設定的條件。
      EventDrivenActivity 它是一個包含另一個活動的活動,在指定的事件發(fā)生時執(zhí)行。

      在工作流中使用條件

            我們可以通過條件來控制工作流的狀態(tài)。運行時引擎會自動判別一個條件,并根據(jù)判別的結(jié)果來執(zhí)行某一些操作。 

            有兩種方式來表達工作流中的條件:

            一是代碼方式,編寫一個Handler返回Bool值;(注:以下譯作代碼條件)

            二是通過工作流定義中的規(guī)則(rule)。(注:以下譯作規(guī)則條件)

            我們可以在運行的時候動態(tài)的更新規(guī)則條件來改變工作流的行為。

            我們還可以使用PolicyActivity,通過規(guī)則來完成有條件的行為。 

       條件活動

            WF提供了多個使用條件的活動:
      • IfElseActivity分支:基于對條件結(jié)果的判別。
      • WhileActivity:只要條件保持為True,就會持續(xù)的執(zhí)行它包含的所有活動。條件的值會在每次循環(huán)執(zhí)行時重新進行判別。
      • ConditionedActivityGroup:持續(xù)的執(zhí)行它包含的所有活動直到其條件為真,它包含的每個活動都有一個When條件,只有當When條件為真時,活動才會執(zhí)行。

            你可以在你創(chuàng)建的工作流中自定義條件。   

            注意:規(guī)則條件可以引用public成員(即在你的工作流類中定義的變量或方法),而代碼條件可以引用public或private成員。

      使用規(guī)則條件

             規(guī)則條件在條件表達式編輯器中定義,根據(jù)工作流狀態(tài)和數(shù)據(jù)來確定條件的值。運行時引擎會判別這個條件,從而決定要不要讓與之相聯(lián)的活動執(zhí)行或使之可用。

            規(guī)則條件非常有用,因為你在運行的時候可以修改它們,這意味著你可以不用停止、修改或編譯你的工作流就可以改變它的行為。

            可以使用下面的要素來構(gòu)建規(guī)則條件:

      • 邏輯操作符,如AND,,OR, NOT
      • 算術(shù)操作符,如+,-,*,/
      •  工作流中的public成員,間接地使用其它程序集中的成員

         對包含復雜類型的變量的嵌套調(diào)用,這種變量如:this.Address.State == "WA"

         注意:if關(guān)鍵字會被自動添加到條件語句的前面,但它不會顯示在這個語句中。

      動態(tài)更新規(guī)則條件

            你可以通過動態(tài)更新規(guī)則條件,在工作流運行的時候修改它的行為,而不需要重新編譯。
            條件會作為活動的一個屬性出現(xiàn),這些活動諸如:WhileActivity, IfElseActivity, ReplicatorActivity, 和 ConditionedActivityGroup。宿主程序會顯式的更新這些條件定義,更新后的條件會在下次條件被判別時使用到。
            
      因為條件是可序列化的,如果工作注被暫停或終止時,更新后的條件也會被保存。

            重要:任何動態(tài)更新只能當前正在運行的實例有效,而不會影響到工新創(chuàng)建的作流實例。
       
      使用代碼條件 

               要以用C#或VB.net來創(chuàng)建條件。代碼條件簡單看,是分隔代碼的處理器,它為ConditionalEventArgs.Result設置一個布爾值。代碼條件被編譯后,成為程序集一的部份。運行時引擎執(zhí)行這個方法,并返回一個一個布爾值作為代碼條件的判別結(jié)果。

             下面的例子是一個用于判別某個值是否大于10的一個代在條件:

      private void EvaluateCondition(object sender, ConditionalEventArgs e) 

          e.Result 
      = (this.CustomPropertyValue > 10); 
      }

       

      posted on 2007-01-19 11:10  西西吹雪  閱讀(1586)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 色综合色狠狠天天综合网| 欧美中文亚洲v在线| 精品亚洲无人区一区二区| 国产91色综合久久免费| mm1313亚洲国产精品| 国产熟睡乱子伦视频在线播放| 丰满大爆乳波霸奶| 精品亚洲国产成人性色av| 十八禁午夜福利免费网站 | 亚洲精品动漫免费二区| 亚洲国产精品久久久天堂麻豆宅男| 免费无码高H视频在线观看| 亚洲欧美激情另类| 激情综合网激情五月我去也| 天海翼激烈高潮到腰振不止| 久久国产精品精品国产色| 西昌市| 午夜国产理论大片高清| 日区中文字幕一区二区| 狠狠色狠狠色综合久久蜜芽| 免费无码午夜理论电影| 亚洲国产高清av网站| 人人人澡人人肉久久精品| 无码高潮爽到爆的喷水视频app| 青青草国产自产一区二区| 国产明星精品无码AV换脸| 免费无码成人AV片在线| 日日噜噜大屁股熟妇| 人妻伦理在线一二三区| 久久欧洲精品成av人片| 国产福利在线观看免费第一福利| 2021国产成人精品久久| 免费国产拍久久受拍久久| 六月丁香婷婷色狠狠久久| 亚洲成人av免费一区| 亚洲精品第一区二区在线| 亚洲深夜精品在线观看| 中文无码妇乱子伦视频| 亚洲成A人片在线观看的电影| 欧美亚洲精品中文字幕乱码| 国产极品精品自在线不卡|