1. 程式人生 > >Odoo工作流

Odoo工作流

工作項 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工作流