我設計的流程引擎是腳步驅動的。腳本中定義了流程執(zhí)行的環(huán)境,流程操作的對象,流程執(zhí)行的步驟。下面是一個流程腳本的示例:

          <?xml version="1.0" encoding="utf-8"?>
          <process name="make_call">
              <data type="user_tel">called_number</data>
               <object type="user" id="global_data:called_number" operation="must">obj_user</object>
               //用戶對象描述中,號碼是必須的,是流程引擎和業(yè)務的交互唯一標識,callid是可選的。
              <object type="user" object_num="global_data:called_number" operation="must">obj_user</object>
              <sequence name="make_call">
                  <invoke interface="make_call" node="make_call_001" object_user="obj_user" calling_number="6699" original_number="123456" call_type="local_call">

                  </invoke>
                  <invoke interface="play_voice" node="play_voice_001" object_user="obj_user" play_long="100" play_file="/home/welcome.au">

                   </invoke>   
              </sequence>
          </process>


          腳本的含義

          1、process的name屬性表示流程的名稱,用于在程序中調用。

          2、<data type="user_tel">called_number</data>表示定義了一個流程的全局外部變量。有程序在調用流程是作為流程數(shù)據(jù)傳送給流程。這個數(shù)據(jù)要在后面的流程中使用。

          3、<object>部分在流程中定義流程操作的對象。一般分為用戶和會場。這里表示是用戶。屬性“id”表示對象的唯一標識。這里引用的是流程的全局數(shù)據(jù):global_data:called_number,也就是在上面定義的數(shù)據(jù)。屬性“operation”表示此對象是可選還是必選。如果是必須,這如果此對象被釋放,這流程也要被被結束。否則,不結束。中間的內容表示對象在流程中的唯一標示,這里是obj_user,后面的節(jié)點可以通過使用它來操作對象。

          4、<sequence>表示順序調用下面的節(jié)點。

          5、<invoke >表示調用節(jié)點。屬性“interface="make_call"”表示此節(jié)點調用的接口是make_call。make_call是在代碼中定義好的關鍵字,對應一個軟交換系統(tǒng)的接口。屬性“node”表示節(jié)點的唯一標識,在流程內部唯一,可以在流程跳轉的時候使用。 “object_user="obj_user"“表示make_call 接口操作的對象。有<object>創(chuàng)建。 calling_number="6699" original_number="123456" call_type="local_call"表示的是make_call接口調用時的數(shù)據(jù)。

          6、<invoke interface="play_voice"表示對此對象進行放音。

          這個腳本的意思是,根據(jù)流程輸入的號碼,創(chuàng)建用戶對象,并且發(fā)起呼叫,對用戶進行放音。


          復雜的腳步定義:

          上面的是一個簡單的示例。為了能夠實現(xiàn)流程編輯,要考慮很多的情況,要能夠進行分支處理,跳轉執(zhí)行,捕獲事件等。

          1、分支的實現(xiàn)

              <recive event="user_key" ="" node="receive_key" object_user="obj_user" time_out="10"></recive>
              <switch condition_type="user_key" object="obj_user">
                      <case condition="9092">
                          <sequence name="d">
                          </sequence>
                      </case>
                      <case condition="time_out">
                          <sequence name="d">
                          </sequence>
                      </case>           
                      <otherwise>
                            <sequence name="">
                                <goto node="play_voice_001">goto_001</goto>
                            </sequence>
                      </otherwise>
              </switch>

          1)<recive event="user_key"表示接受指定用戶的按鍵。如果超過10秒為收到按鍵則認為用戶按鍵結束。

          2)<switch condition_type="user_key"表示一用戶的按鍵為分支條件,進行分支處理。

          3)<case condition="9092">表示如果用戶的按鍵式0092的話則進入此分支進行處理。

          4)<case condition="time_out">如果超時為收到用戶按鍵,這進入此分支處理

          5)<otherwise>如果上面的條件都不滿足,則進入此分支處理。


          2、跳轉的實現(xiàn):

          <goto node="goto_001" next_node="play_voice_001"></goto>

          表示此節(jié)點是一個跳轉節(jié)點,要跳轉到的下一個節(jié)點是play_voice_001。


          3、信號捕獲的實現(xiàn):

                 <pick name="pick_001" time_out="10">
                      <on_event event="on_ring_180" result="success" reason="normal">
                          <sequence name="008">
                          </sequence>
                      </on_event>
                      <time_out>
                          <sequence name="008">
                          </sequence>
                      </time_out>
                      <otherwise event="on_ring_180:on_ring_183">
                            <sequence name="009">
                              </sequence>
                      </otherwise>
                  </pick>

          1)<pick name="pick_001" time_out="10"><pick>活動會等待一組相互排斥事件中的一個事件的發(fā)生,然后執(zhí)行與發(fā)生的事件相關聯(lián)的活動。它會阻塞業(yè)務流程執(zhí)行,以等待某一特定的事件發(fā)生,比如接收到一個合適的消息或超時警報響起。當其中任何一個事件被觸發(fā)后,業(yè)務流程就會繼續(xù)執(zhí)行,pick也隨即完成了,不會再等待其他事件的發(fā)生。

          2)<on_event event="on_ring_180" result="success" reason="normal">表示如果收到的on_ring_180,且結果是success,原因是normal。觸發(fā)此流程的處理。

          3)<time_out>表示超時為收到制定事件的處理。

          4)<otherwise event="on_ring_180:on_ring_183">表示收到其他的事件,比如:on_ring_180或on_ring_183,都進入此分支處理。

          posts - 19, comments - 0, trackbacks - 0, articles - 0

          Copyright © 常高偉

          主站蜘蛛池模板: 富锦市| 彰武县| 马龙县| 南漳县| 秦皇岛市| 高清| 遵义市| 土默特左旗| 孟连| 呼图壁县| 南开区| 乳源| 峡江县| 禹州市| 雷州市| 贵阳市| 洛阳市| 万年县| 林口县| 探索| 延庆县| 清镇市| 徐州市| 七台河市| 绥德县| 石河子市| 自贡市| 吴江市| 军事| 揭阳市| 大同县| 广昌县| 吴忠市| 凤阳县| 兰州市| 和田县| 天镇县| 祁门县| 郧西县| 万宁市| 德昌县|