亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

osworkflow descriptor 解析片斷

2019-11-18 11:33:27
字體:
來源:轉載
供稿:網友

Osworkflow定義工作流是通過一個xml文件來完成的,你可以把它取成任何你想要的名字。大致框架如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC 
  "-//OpenSymphony Group//DTD OSWorkflow 2.7//EN"
  "http://www.opensymphony.com/osworkflow/workflow_2_7.dtd">
<workflow>
  <initial-actions>
    ...
  </initial-actions>
  <steps>
    ...
  </steps>
</workflow>

都是按照標準xml指定。通過指定的dtd來校驗xml文件。一般需要輔助工具如xmlspy來自動校驗xml文件里的錯誤,這樣會方便大家檢測xml文件中的錯誤。

Step和actions

理解這個xml文件的第一個重點在于理解step和actions的在工作流系統中的概念。一個step就是這樣的一個概念:一個工作流中所處的不同位置。如在一個文檔治理系統中??梢允瞧鸩?、編輯階段、發布等等。

Actions指定不同step中的變遷。還是用例子來理解更為形象一些。在一個文檔治理系統當中如在“第一個起草”中的“開始第一個起草”和“結束第一個起草”就是actions。

Initial actions 是一個action的非凡類型。在工作流開始時候,是沒有狀態的,也沒有任何step。用戶必須利用某個action來開始流程,這個用來開始工作流的action就被指定為initial-actions。

例如,我們假定我們只有一個initial-action,非常簡單,如下面:

<action id="1" name="Start Workflow">
  <results>
    <unconditional-result old-status="Finished" status="Queued" step="1"/>
  </results>
</action>

 

這個action是個action的最簡單的例子。他只是簡單定義我們需要走想的step。

 

工作流status

Status用來描述特定step中的一個工作流的狀態。如在文檔治理系統當中,我們的“第一次起草”step可以有兩個statuses,“underway”和“queued”

用“queued”來指示此條已經在“first draft”中排隊。沒有安排誰來處理此文檔,但是已經發出請求。而“underway”是指示一個作者已經從隊列中取出此文檔并且或許已經上鎖。表明正在first draft上工作。

 

Step實例:在這個例子中有兩個actions。第一個action(開始第一個起草)是在一個step中進行。但是,更改狀態為underway,第二個action是工作流流轉到下一個step,我們假定下一個工作流step為“finish”。

<step id="1" name="First Draft">
  <actions>
    <action id="1" name="Start First Draft">
      <results>
        <unconditional-result old-status="Finished" status="Underway" step="1"/>
      </results>
    </action>
    <action id="2" name="Finish First Draft">
      <results>
        <unconditional-result old-status="Finished" status="Queued" step="2"/>
      </results>
    </action>
  </actions>
</step>
<step id="2" name="finished" />

Old-status這個屬性用來指示對于當前state(結束)將要進入哪個history table。在絕大多數情況下,被寫為“finished”。

Conditions

Osworkflow有一些內建的conditon。請參看javadocs,假如需要一個特定的condition。Condition可以接收參數。如本例就接收了一個參數“status”用來指定status

 

<action id="1" name="Start First Draft">

  <restrict-to>

    <conditions>

      <condition type="class">

        <arg name="class.name">

          com.opensymphony.workflow.util.StatusCondition

        </arg>

        <arg name="status">Queued</arg>

      </condition>

    </conditions>

  </restrict-to>

  <results>

    <unconditional-result old-status="Finished" status="Underway" step="1"/>

  </results>

</action>

 

這樣就能保證在initial action被調用后才可以正確執行。因為它需要確信當前status是“queued”。

 

Functions

接下來,假如我們希望指定一個用戶開始first draft,他們變為“owner”為了達到這樣的目的,我們需要這樣做:

1、在當前context中防止一個“caller”變量

2、  設置result的“owner”屬性為call變量。

function是osworkflow的一個非常強大的特征,一個function基本上是一個系列在工作流變遷之間執行的工作,并不影響工作流本身。例如,你能夠有個sendmail功能,它的職責就是當一個特定的變遷發生后發送郵件通知。

Functions能夠給當前context添加變量??梢栽谄渌鹒unctions或者scripts中使用。

Osworkflow 有自己內建function。其中一個比較有用的就是“caller”。這個function的作用就是通過查找當前的能夠調用工作流的用戶,把該用戶以字符串形式命名為caller變量的值。

<action id="1" name="Start First Draft">

  <PRe-functions>

    <function type="class">

      <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>

    </function>

  </pre-functions>

  <results>

    <unconditional-result old-status="Finished" status="Underway"

                                       step="1" owner="${caller}"/>

  </results>

</action>

 

 

整合后的結果:

 

<action id="1" name="Start First Draft">

  <restrict-to>

    <conditions>

      <condition type="class">

        <arg name="class.name">

                com.opensymphony.workflow.util.StatusCondition

        </arg>

        <arg name="status">Queued</arg>

      </condition>

    </conditions>

  </restrict-to>

  <pre-functions>

    <function type="class">

      <arg name="class.name">

              com.opensymphony.workflow.util.Caller

      </arg>

    </function>

  </pre-functions>

  <results>

    <unconditional-result old-status="Finished" status="Underway"

                                       step="1"  owner="${caller}"/>

  </results>

</action>

 

<action id="2" name="Finish First Draft">

  <restrict-to>

    <conditions type="AND">

      <condition type="class">

        <arg

        name="class.name">com.opensymphony.workflow.util.StatusCondition

        </arg>

        <arg name="status">Underway</arg>

      </condition>

      <condition type="class">

        <arg name="class.name">

              com.opensymphony.workflow.util.AllowOwNeronlyCondition

       </arg>

      </condition>

    </conditions>

  </restrict-to>

  <results>

    <unconditional-result old-status="Finished" status="Queued" step="2"/>

  </results>

</action>

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品久久久中文字幕免费| 国产精品羞羞答答| 日韩欧美国产激情| 日韩av在线资源| 欧美激情videoshd| 久久国产精品电影| 国产91在线播放| 色偷偷9999www| 精品日韩视频在线观看| 色婷婷综合久久久久中文字幕1| 亚洲成人黄色在线| 亚洲女人天堂色在线7777| 91精品国产精品| 亚洲老头老太hd| 国产精品日韩在线一区| 国产精品久久久久秋霞鲁丝| 91影视免费在线观看| 91久久嫩草影院一区二区| 日韩精品一区二区三区第95| 亚洲国产成人在线视频| 欧美成人午夜激情视频| 久久亚洲精品国产亚洲老地址| 伊人伊成久久人综合网站| 欧美电影在线观看网站| 久久中文久久字幕| 亚洲国产成人精品久久久国产成人一区| 91高清视频在线免费观看| 国产精品视频资源| 国产精品中文字幕在线| 亚洲第一精品夜夜躁人人躁| 欧美黑人国产人伦爽爽爽| 欧美性xxxx极品hd欧美风情| 久久久久久久久久国产精品| 亚洲护士老师的毛茸茸最新章节| 国产精品爽爽爽爽爽爽在线观看| 国产美女精品视频免费观看| 国产精品日韩欧美| 第一福利永久视频精品| 欧美激情视频在线观看| 一本一本久久a久久精品综合小说| 欧美中文字幕在线视频| 欧美在线精品免播放器视频| 欧美激情一区二区久久久| 欧美精品九九久久| 欧美在线www| 韩国精品美女www爽爽爽视频| 午夜精品久久久久久久99热| 亚洲国产中文字幕久久网| 欧美一区二区三区艳史| 亚洲级视频在线观看免费1级| 成人精品视频久久久久| 亚洲娇小xxxx欧美娇小| 久久青草福利网站| 国产精品wwwwww| 欧美午夜激情小视频| 亚洲成人av中文字幕| 国产精品免费视频xxxx| 69av视频在线播放| 91网站在线看| 国产一区视频在线| 亚洲国产成人久久综合一区| 欧美成人亚洲成人| 高清欧美性猛交| 国产一区二区丝袜| 欧美日韩亚洲精品一区二区三区| 亚洲成色www8888| 性欧美在线看片a免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 中文字幕亚洲综合| 丝袜情趣国产精品| 日本sm极度另类视频| 欧美区二区三区| 久久99精品久久久久久噜噜| 日韩欧美有码在线| 中文字幕免费精品一区| 色在人av网站天堂精品| 国产成人综合一区二区三区| 欧美日韩国产va另类| 俺去亚洲欧洲欧美日韩| 国产精品热视频| 欧美电影免费观看网站| 欧美激情一区二区三区成人| 亚洲网站视频福利| 国产精品视频yy9099| 亚洲精品suv精品一区二区| 欧美精品第一页在线播放| 成人黄色大片在线免费观看| 大胆人体色综合| 国产精品自拍偷拍视频| 日韩亚洲成人av在线| 社区色欧美激情 | 国产成人91久久精品| 夜夜躁日日躁狠狠久久88av| 久久久久久久久亚洲| 亚洲综合在线播放| 这里只有精品视频在线| 国产日韩欧美黄色| 亚洲综合中文字幕68页| 亚洲国产欧美一区二区三区久久| 不用播放器成人网| 亚洲国产精品美女| 日韩av中文在线| 国产视频精品xxxx| 九九热99久久久国产盗摄| 疯狂做受xxxx高潮欧美日本| 日韩69视频在线观看| 91精品国产91| 亚洲最大av网站| 91免费在线视频| 亚洲欧美另类人妖| 国产精品成人免费电影| 久久久久北条麻妃免费看| 91精品国产乱码久久久久久久久| 亚洲第一精品自拍| 中文字幕九色91在线| 国产欧美韩国高清| 亚洲激情 国产| 久久韩国免费视频| 国产一区二中文字幕在线看| 91夜夜揉人人捏人人添红杏| 91精品中文在线| 成人性教育视频在线观看| 久久久久99精品久久久久| 国产中文字幕91| 精品小视频在线| 热99精品只有里视频精品| 久久视频中文字幕| 日韩成人av在线播放| 精品免费在线观看| 亚洲欧洲国产一区| 久久久国产一区二区| 91啪国产在线| 日本久久久久久| 欧美日韩在线视频一区| 欧美成人网在线| 91精品视频一区| 久久久人成影片一区二区三区观看| 麻豆国产va免费精品高清在线| 欧美黑人巨大精品一区二区| 日韩在线观看视频免费| 久久国产加勒比精品无码| 欧美xxxx做受欧美| 欧美成人全部免费| 国产精品久久久久久久久借妻| 亚洲free性xxxx护士白浆| 日韩国产高清视频在线| 精品亚洲永久免费精品| 26uuu久久噜噜噜噜| 成人黄色片在线| 中文字幕在线看视频国产欧美在线看完整| 91亚洲永久免费精品| 日韩欧美在线中文字幕| 成人在线一区二区| 欧美日韩亚洲视频一区| 日韩女优人人人人射在线视频| 日韩中文在线中文网三级| 欧美大学生性色视频| 5566成人精品视频免费| 中文.日本.精品| 大伊人狠狠躁夜夜躁av一区| 国产精品国语对白| 日韩电影免费观看中文字幕| 最近中文字幕日韩精品| 欧美日韩国产va另类|