OpenERP工作流祥解(workflow)
<?xml version="1.0"?>
<terp><data>
<record model="workflow" id=workflow_id>
<field name="name">workflow.name</field>
<field name="osv">resource.model</field>
<field name="on_create">True | False</field>
</record>
</data></terp>
model:固定取值"workflow"
id:任意值,唯一標識本工作流
name: 工作流的名稱,任意定義
osv:本工作流關聯的物件型別,是OpenERP模組中定義的某物件名,如採購單物件(purchase.order)。是本工作流處理的資料物件。
on_create:每當系統新產生一個osv 中定義的物件的例項時候,是否對應的產生一個和該物件例項關聯的工作流例項。預設是True.
工作流和工作流例項:工作流定義了對某一型別的物件,如採購訂單(PO)的處理流程。例如,PO單的一般處理流程也許是:1)新建PO,State = draft;2)審批PO,審批的同時,a)系統自動產生收貨單,工倉庫收貨;b)系統自動產生憑據(Invoice),供財務確認付款;c)系統自動產生PDF的採購訂單,並自動EMail給該PO單對應的供應商。但對於特定的某個PO物件,需要一個工作流例項,以記錄本PO物件處在流程的哪個階段,如PO1尚在draft狀態,PO2已經審批通過。
PO單的審批,以及對應的a)、b)、c)的動作,都可以在OE的工作流中定義解決,而不需要全編碼在PO物件上。即工作流實現了流程處理相關的程式碼和被處理物件的程式碼相分離,降低了不同處理程式碼的耦合性,增加了系統功能的柔軟性。
二、活動(Activity)定義
<record model="workflow.activity" id="activity_id">
<field name="wkf_id" ref="workflow_id"/>
<field name="name">activity.name</field>
<field name="kind">dummy | function | subflow | stopall</field>
<field name="subflow_id">subflow_id</field>
<field name="action">(...)</field>
<field name="action_id">(...)</field>
<field name="split_mode">XOR | OR | AND</field>
<field name="join_mode">XOR | AND</field>
<field name="signal_send">(...)</field>
<field name="flow_start">True | False</field>
<field name="flow_stop">True | False</field>
</record>
model:固定取值workflow.activity
wkf_id:本Activity所屬的工作流id
name: 本Activity名稱,任意值
kind:本Activity型別,有Dummy, Function, Subflow, Stop All 四種。kind說明,如果流程到達本節點,系統應執行的動作類別。
Dummy 表示不執行任何動作,即action中定義的程式碼不會被執行。
Function 表示執行action中定義的python程式碼,且,執行action_id中定義的server action。常見情況是,action中定義一個write方法,修改流程關聯的物件的狀態。對於Function型別的節點,action中定義的程式碼或者返回False,或者返回一個客戶端動作id(A client action should be returned)。
Subflow型別表示觸發“subflow_id”中指定的工作流。仔細的讀者或許要問,工作流的執行總是和某個被處理的物件關聯,是的,如果定義了action,subflow 關聯的物件id 由action中定義的程式碼返回。如果沒有定義action,系統預設subflow關聯的物件和本節點所屬的工作流處理的物件id一致。stopall型別表示,流程到此節點則結束,但結束前,系統仍會執行action中的程式碼。
signal_send:執行完本節點的動作(action及action_id定義的動作)後,應向別的工作流發往的signal,格式是:subflow.signal。subflow_id和signal_send必須配合使用,subflow_id表示,觸發子工作流subflow_id,在該子工作流中,通常必須定義signal_send,signal_send定義父流程中的某個signal,表示,子流程處理結束後觸發父流程中的訊號subflow.signal。注意,用於父子流程通訊的工作流signal必須是形如subflow.* 。例如,在HR模組的workflow "wkf_expenses"中,需要開發票時候,它觸發流程account模組中的工作流“account.wkf”(<field name="subflow_id" ref="account.wkf"/>)。account.wkf處理完成後,發出訊號subflow.paid 通知wkf_expenses流程(<field name="signal_send">subflow.paid</field>)。wkf_expenses中定義了訊號subflow.paid(<field name="signal">subflow.paid</field>)。
split_mode:有三個選項,XOR,OR,AND,預設是XOR。XOR 表示,由本節點始發的出遷移中,沿著第一個滿足遷移條件的遷移跳轉。OR 表示由本節點始發的出遷移中,只要滿足遷移條件即沿該遷移跳轉。AND 表示由本節點始發的出遷移中,只有所有遷移皆滿足遷移條件才跳轉,而且是同時沿所有遷移跳轉。XOR 只有一個跳轉,OR 有零或多個跳轉,AND 有零或全部跳轉。
join_mode:有兩個選項,XOR,AND,預設是XOR。XOR 表示,以本節點為終點的入遷移中,只要有一個跳至本節點,即執行本節點的action。AND 表示,以本節點為終點的入遷移中,只有所有遷移都已經跳至本節點,才執行本節點的action。
flow_start:表示流程的開始節點。
flow_stop:表示流程的結束節點。
三、遷移(Transition)的定義
遷移的完整 XML 定義格式如下。
<record model="workflow.transition" id="transition_id">
<field name="act_from" ref="activity_id_1"/>
<field name="act_to" ref="activity_id_2"/>
<field name="signal">(...)</field>
<field name="condition">(...)</field>
<field name="trigger_model">(...)</field>
<field name="trigger_expr_id">(...)</field>
</record>
act_from:本遷移的起始節點,引用之前定義的Activity。
act_to:本遷移的結束節點,引用之前定義的Activity。
signal:觸發本遷移的訊號,表示,如果系統收到signal定義的訊號,則觸發本遷移。觸發訊號有三種方式,1)最常見的是使用者點選檢視中的“name = 本處定義的signal”的button,此時相當於向系統傳送遷移訊號量。系統會根據檢視中的物件id,找到物件關聯的workflow,再找到與button name相同的signal,觸發之。2)呼叫workflow_service的方法:trg_validate(self, uid, res_type, res_id, signal, cr),此方法表示,觸發物件型別res_type關聯的workflow的signal訊號,工作流例項關聯的物件例項是 res_id。3)子流程的signal_send 發出的訊號,此種情況前文已說過。
condition:遷移的條件,是一段Python程式碼,通常是一個函式呼叫。當系統收到signal中定義的訊號時候,檢查此處的條件,條件為真則實際觸發遷移。
trigger_model和trigger_expr_id:此二欄位表示啟動一個新工作流例項。trigger_model定義物件型別,trigger_expr_id 定義一段Python程式碼,返回trigger_model型別的物件id。此二欄位表示,如果act_from 中的action 執行完畢,且condition 條件OK,則系統中插入一個trigger_model型別,trigger_expr_id返回的物件id關聯的工作流例項。然後,可以呼叫workflow_service的方法trg_trigger(self, uid, res_type, res_id, cr)實際執行該工作流。實際使用例子請參考Sale模組的工作流定義 wkf_sale:
<field name="trigger_model">procurement.order</field>
<field name="trigger_expr_id">procurement_lines_get()</field>
遷移(Transition)的定義漏了許可權組group_id,修正如下。表示只有該許可權組可以觸發本遷移。
遷移的完整 XML 定義格式如下。
<record model="workflow.transition" id="transition_id">
<field name="act_from" ref="activity_id_1"/>
<field name="act_to" ref="activity_id_2"/>
<field name="group_id" ref="groupid"/>
<field name="signal">(...)</field>
<field name="condition">(...)</field>
<field name="trigger_model">(...)</field>
<field name="trigger_expr_id">(...)</field>
</record>
相關推薦
OpenERP工作流祥解(workflow)
一、工作流定義: <?xml version="1.0"?> <terp><data> <record model="workflow" id=workflow_id> <field name
工作流引擎Oozie(一):workflow
觸發 line last ssa pig oozie apt cnblogs 定時任務 1. Oozie簡介 Yahoo開發工作流引擎Oozie(馭象者),用於管理Hadoop任務(支持MapReduce、Spark、Pig、Hive),把這些任務以DAG(有向無環圖)方式
10.5-全棧Java筆記:常見流詳解(三)
java上節我們講到「Java中常用流:緩沖流」,本節我們學習數據流和對象流~ 數據流數據流將“基本數據類型變量”作為數據源,從而允許程序以與機器無關方式從底層輸入輸出流中操作java基本數據類型。 DataInputStream和DataOutputStream提供了可以存取與機器無關的所有Java基礎類
C++: I/O流詳解(三)——串流
name namespace 轉換 pac end 成員 col logs nbsp 一、串流 串流類是 ios 中的派生類 C++的串流對象可以連接string對象或字符串 串流提取數據時對字符串按變量類型解釋;插入數據時把類型 數據轉換成字符串 串流I/O具有格式化功能
Activiti工作流的使用(Idea)(感覺文章沒啥用)
原文地址:https://www.cnblogs.com/kanyun/p/8079501.html 首先安裝cativiti外掛,安裝成功後重啟IDEA 然後在資料夾右鍵選擇 然後就可以畫圖了,但是畫圖之後,沒有連線圖示怎麼辦呢 把滑鼠放在開頭的那個圖示上,此時游標的形
工作流工具簡介(轉載)
[教程]打造自己的工作流 打造自己的工作流可以使工作效率大大提高,經過不斷的改進,目前我的工作流是 開啟understand進行程式碼閱讀 使用visio畫出流程圖 遇到的問題時進行搜尋,使用OneNote做好資料整理和解決問題的思路
Activiti工作流的學習(一)——Activiti簡介以及maven中環境搭建
一、工作流簡述 工作流(Workflow),就是通過計算機對業務流程自動化執行管理。它主要解決的是“使在多個參與者之間按照某種預定義的規則自動進行傳遞文件、資訊或任務的過程,從而實現某個預期的業務目標,或者促使此目標的實現”。 工作流就是通過計算機技術對業務流程進行自動化管理。實現多個參與者
flowable工作流進階(二)
Flowable spring boot 進階(二) 資料庫表介紹 Flowable的資料庫名稱都以ACT_開頭。第二部分是表的用例的雙字元標識。此用例也將大致匹配服務API。 ACT_RE_ *:RE代表repository。具有此字首的表包含靜態資訊,例如流程定義和流程
【Java多執行緒】執行緒池的工作原理詳解(下)
接著上篇文章,我接下來繼續介紹執行緒池的工作原理,如果你還沒有看上篇,我建議最好瀏覽一下:執行緒池的工作原理詳解(上) Executors 工具類 1.定義 Executors是java執行緒池的工廠類,通過它可以快速初始化一個符合業務需求的執行緒池。
NIO元件Selector工作機制詳解(上)
在使用Java進行相關網路程式的的設計時,出身C/C++的人,首先想到的框架就是多路複用,想到多路複用,Unix/Linux下馬上就能讓從想到select, poll, epoll系統呼叫。於是,在看到Java的NIO中的Selector類時必然會倍感親切。稍加查閱一下SDK手冊以及相關例程,不一會兒,一個
工作流引擎Oozie(二):coordinator
1. 簡介 coordinator是workflow的定時提交器,基於時間條件與資料生成觸發(based on time and data triggers)。簡單點說,coordinator按所定義的時間週期進行輪詢,若資料生成條件滿足,則觸發workflow任務;否則,則等待資料生成或跳過(排程策略由設定
Activiti工作流框架學習(二)——使用Activiti提供的API完成流程操作
可以在專案中加入log4j,將logj4.properties檔案拷入到src目錄下,這樣框架執行的sql就可以輸出到到控制檯,log4j提供的日誌級別有以下幾種: Fatal error warn info debug trace 一、部署流程定義 1,在工程專
有源匯有上下界最小流詳解(loj117)
例題連結 首先還是得吐槽一下題意。 題意是這樣的: 求出一個流使得源點的總流出量等於匯點的總流入量,其他的點滿足流量守恆,而且每條邊的流量滿足上界和下界限制。在這些前提下要求總流量最小。 好像是有兩種做法的。 做法1: 首先先求出可行流,按照上一
Activiti工作流框架學習(一)之通用資料表詳細介紹
文/朱季謙 Activiti工作流引擎自帶了一套資料庫表,這裡面有一個需要注意的地方: 低於5.6.4的MySQL版本不支援時間戳或毫秒級的日期。更糟糕的是,某些版本在嘗試建立此類列時將引發異常,而其他版本則不會。執行自動建立/升級時,引擎將在執行DDL時更改它。使用DDL檔案方法時,既可以使用常規版本也可以
Gemini.Workflow 雙子工作流正式上線(支援.NET Core)
接觸工作流: 最早接觸工作流,是在04年左右,那年,我創造了 Aries 框架的前身第一版框架,另一個同事,創造了工作流的第一版框架。 只是那時候,我並未參與工作流的核心設計,僅僅是幫寫了個流程設計器,就是下圖這個懷舊的樣子: 然後提供一些(撤回、退回)回收演算法的意見。 並提
JavaScript的事件、DOM模型、事件流模型以及內置對象詳解(三)
dde function n) 事件冒泡 字符 nds rep == 防止 JS中的事件 JS中的事件分類 1.鼠標事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload
工作流設計參考(包括PHP實現)
工作流很少有讓人滿意的,即便是國內用的比較多的jbpm,用起來也會覺得很便扭。再加上PHP中沒有什麼好用的工作流,於是乾脆自己設計一個,設計的原則如下: 1 根據80/20原則,只使用wfmc模型中最符合自身應用的20%功能 2 充分吸收國內使用jbpm開發BOSS中遇到的問題,工作流引擎只
Ansible基礎認識及安裝使用詳解(一)--技術流ken
Ansible簡介 ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。
mybatis配置檔案祥解(mybatis.xml)
以下是mybatis.xml檔案,提倡放在src目錄下,檔名任意 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
Docker run執行流詳解(以volume,network和libcontainer為線索)
通常我們都習慣了使用Docker run來執行一個Docker容器,那麼在我們執行Docker run之後,Docker到底都做了什麼工作呢?本文通過追蹤Docker run(Docker 1.9版本)的執行流程,藉由對volume,network和libcon