流程發(fā)送動作

          發(fā)送動作是流程中的關鍵動作,程序或用戶通過觸發(fā)發(fā)送動作來進行流程的流轉(zhuǎn),對于人工干預的發(fā)送動作來說,通常會顯得很復雜,做過類似辦公系統(tǒng)的人都會體會到這點,發(fā)送為什么會變得復雜呢,首先發(fā)送是由多個步驟構成的,其次就是各個步驟都有一些用戶可通過配置來改變發(fā)送步驟的行為的點,在人工干預要求很強的發(fā)送動作中,就變得更為復雜了,來看看正常情況下發(fā)送動作的步驟以及其可配置點:

          1、? 選擇下一環(huán)節(jié);

          u?????? 配置為由用戶自行選擇環(huán)節(jié);

          在這種情況下,用戶又可以配置為選擇一個環(huán)節(jié)或多個環(huán)節(jié),當用戶配置為僅選擇一個環(huán)節(jié)時,如該環(huán)節(jié)下可用的環(huán)節(jié)為多個時,則需提供給用戶選擇,如可用環(huán)節(jié)僅一個時,程序應自動選擇;當配置為選擇多個環(huán)節(jié)時,則由用戶自行選擇。

          u?????? 配置為由程序決定下一環(huán)節(jié);

          在這種情況下,用戶可配置為條件流轉(zhuǎn)、或分離以及與分離三種情況。條件流轉(zhuǎn)是指根據(jù)特定的條件來決定流向哪個環(huán)節(jié),如當資金大于 100w 小于 1000w 時需要流轉(zhuǎn)到環(huán)節(jié) A ,當大于 1000w 時需要流轉(zhuǎn)到環(huán)節(jié) B ;或分離以及與分離都僅適用于后續(xù)環(huán)節(jié)超過一個時,或分離指由程序隨機發(fā)送給后續(xù)的任一環(huán)節(jié),與分離指發(fā)送給后續(xù)的所有環(huán)節(jié)。

          2、? 選擇環(huán)節(jié)參與者;

          u?????? 配置為由用戶自行選擇參與者;

          同樣,在這種情況下,用戶又可以配置為選擇一個或多個參與者,在環(huán)節(jié)可用的參與者僅為一個時,由程序自動選擇。

          u?????? 配置為由程序決定環(huán)節(jié)參與者。

          同樣,在這種情況下,用戶又可配置為條件選擇參與者、或選擇以及與選擇三種情況。

          3、? 流轉(zhuǎn)流程到指定環(huán)節(jié)的指定參與者。

          ?由程序自行實現(xiàn)。

          在這樣的整理下,可以看出流程的發(fā)送動作也不算太復雜,只是在實際的實現(xiàn)中往往會有各種各樣不夠好的實現(xiàn),個人覺得對于流程的發(fā)送動作首先要看成一個完整的事務來實現(xiàn),發(fā)送動作由各步驟來組成,各步驟中的失敗后都可自動或由用戶進行回滾操作,而各步驟的擴展配置點則可采用類似 Template Pattern 的方式或擴展點的方式來實現(xiàn),在這樣的設計下,發(fā)送動作具體怎么進行是可以通過配置來形成的,而不是通過代碼反復的 copy 或調(diào)用,一個選環(huán)節(jié)、由程序自動根據(jù)條件選擇參與者的發(fā)送動作可配置類似如下:

          <action name=” 選環(huán)節(jié)但不選參與者 ”>

          ?????? <step ref=” 選環(huán)節(jié) ”>

          ????????????? <param name=”auto”>false</param>

          ?????? </step>

          ?????? <step ref=” 選參與者 ”>

          ????????????? <param name=”auto”>true</param>

          ????????????? <param name=“extend” ref="條件選擇參與者">
          ??????????????????? <conditions>
          ???????????????????????????<condition participant="roleA,roleB">
          ??????????????????????????????<value name="form.money" condition=">">10000</value>
          ??????????????????????????????<value name="form.money" condition="<">100000</value>
          ????????????????????????? </condition>
          ???????????????????????????<condition participant="roleC">
          ????????????????????????????? <value name="form.money" condition=">=">100000</value>
          ???????????????????????????</condition>
          ?????????????????? </conditions>
          ????????????? </param>
          ??????
          </step>

          ?????? <step ref=” 流轉(zhuǎn) ”/>

          </action>

          而在 step 的配置文件中類似如下:

          <step name=” 選環(huán)節(jié) ” class=”com.blogjava.bluedavy.workflow.SelectActivityStep”/>

          <step name=” 選參與者 ” class=”com.blogjava.bluedavy.workflow.SelectParticipantStep”/>

          <step name=” 流轉(zhuǎn) ” class=”com.blogjava.bluedavy.workflow.SendStep”/>

          <extend name="條件選擇參與者" class="com.blogjava.bluedavy.workflow.SelectParticipantByConditionExtend"/>
          在允許人工干預的發(fā)送動作中,要注意的是盡管發(fā)送動作是由多步驟來組成實現(xiàn)的,但基本上很難按照傳統(tǒng)的責任鏈的方式去實現(xiàn),這是因為流程發(fā)送動作的步驟是有界面中斷交互的,最佳的方式是采用責任鏈加
          continuations 的支持,就可以很好的實現(xiàn)流程的發(fā)送動作。
          在實際的流程發(fā)送動作中,還有更為復雜的情況,象抄送、傳閱辦理、跳轉(zhuǎn)、會簽等這些特殊類型的發(fā)送動作,實現(xiàn)起來就比上述的發(fā)送動作更為復雜,但其實現(xiàn)原理仍然類似上面所述。

          posted on 2006-07-12 16:32 BlueDavy 閱讀(2326) 評論(0)  編輯  收藏 所屬分類: Workflow


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙口市| 霞浦县| 璧山县| 双城市| 邳州市| 永年县| 宁陵县| 古浪县| 天峻县| 莆田市| 来安县| 井冈山市| 昌都县| 玉溪市| 多伦县| 专栏| 吉隆县| 额敏县| 玉门市| 新丰县| 阳谷县| 赞皇县| 盐源县| 泰顺县| 淳化县| 平陆县| 扶绥县| 安国市| 肇庆市| 吴桥县| 祁阳县| 宁武县| 庆安县| 黔江区| 巴青县| 军事| 隆化县| 通城县| 普格县| 犍为县| 柳江县|