Odoo工作流
阿新 • • 發佈:2018-07-08
工作項 views form 點擊事件 cor start 文字 usb form表單
轉載請註明原文地址:https://www.cnblogs.com/cnodoo/p/9281264.html
一:工作流
工作流是與業務流程相關聯的模型,可用於跟蹤工序的動態演變過程。
工作流、活動(節點或操作)、轉換 通常在xml裏以record定義。
在工作流中處理的單個流程稱為工作項。
二:工作流的開發流程
1:新建workflow.xml視圖文件,並在manifest中註冊。
2:模型內定義工作流狀態以及節點點擊事件:用下拉列表保存節點狀態,點擊相應節點就轉換為相應狀態
wkf = fields.Selection([
(‘節點值‘, "節點顯示內容"),
(‘節點值‘, "顯示內容"),
(‘節點值‘, "顯示內容"),
], default=‘默認節點值‘)
#函數:改變工作流節點為XX節點值
@api.multi
def action_節點值(self):
self.wkf = ‘節點值‘
.....
3:在工作流所在模型的form表單頭定義工作流按鈕以及工作流狀態條,顯示工作流:
工作流在視圖中的位置:
#views.xml
<form string="模型的form表單">
<header>
<button name="改變工作流狀態所調用的函數名" type="workflow" states="在什麽狀態下顯示該按鈕" string="(上圖左側顯示按鈕顯示文字)" class="oe_highlight"/>
<field name="state(數據模型中的狀態下拉列表字段)" widget="statusbar" statusbar_visible="draft,confirmed,accepted,rejected(狀態列表中可以在狀態條顯示的部分)"/>
</header>
......
</form>
4:在1中新建的workflow.xml文件中,定義工作流,定義3中form表單頭的工作流按鈕點擊事件,定義工作流轉換。
分為:定義工作流——定義按鈕點擊事件(根據前面form表單中button名作為信號,調用模型中的點擊函數)——定義節點間的轉換(起點/終點,分別引用前面定義的節點點擊事件id)
<odoo> <data> <odoo> <data> <!--定義工作流--> <record model="workflow" id="wkf_工作流id"> <field name="name"></field> <field name="osv">數據模型</field> <field name="on_create">True</field> </record>
<!--定義按鈕的點擊事件--> <!--工作流起點--> <record model="workflow.activity" id="act_"> <field name="name"></field> <field name="wkf_id" ref="工作流id"/> <field name="flow_start" eval="True"/> <field name="kind">function</field> <field name="action">數據模型中起點狀態的點擊函數()</field> </record>
<!--定義中間點--> <record model="workflow.activity" id="act_"> <field name="name"> <field> <field name="wkf_id" ref="wkf_工作流id"/> <field name="kind">function</field> <field name="action">節點函數()</field> </record>
<!--工作流終點--> <record model="workflow.activity" id="act_"> <field name="name"></field> <field name="wkf_id" ref="wkf_"/> <field name="kind">function</field> <field name="flow_stop" eval="True"/> <field name="action">節點點擊函數()</field> </record> <!--定義工作流轉換動作--> <record model="workflow.transition" id="模塊名_節點1_to_節點2"> <field name="act_from" ref="act_上面節點1id"/> <field name="act_to" ref="act_節點2 id"/> <field name="signal">btn_節點2(在另一個視圖的form表單定義的工作流按鈕id)</field> <field name="condition">一個條件或一個boolean字段</field> </record> </data> </odoo> </data> </odoo>
5:也可以定義工作流根據某些值而自動轉換:
<record model="workflow.transition" id="session_auto_"> <field name="act_from" ref=""/> <field name="act_to" ref=""/> <field name="condition">條件表達式</field> </record>
6:也可以使用服務器動作來定義節點轉換函數,把 起點——>終點 簡化為 ?——>終點 的轉換:
<!--1:定義一個服務器動作-->
<record model="ir.actions.server" id="set_session_to_">
<field name="name"></field>
<field name="model_id" ref=""/>
<field name="code">
model.search([domain表達式,過濾出需要變化工作流的記錄])]).action_節點值()//節點按鈕點擊事件
</field>
</record>
<!--2:定義一個工作流節點,並指定其點擊動作為上面的服務器動作-->
<record model="workflow.activity" id="節點值">
<field name="name"></field>
<field name="wkf_id" ref="工作流"/>
<field name="flow_start" eval="True"/>
<field name="kind">dummy</field>
<field name="action_id" ref="set_session_to_節點值(引用上面的定義好的響應)"/>
</record>
Odoo工作流