Odoo工作流

工作流是业务对象描述其动态的模型。工作流程也用来跟踪过程,随着时间的推移发展。

1。简单的工作流

在model里定义一个状态,然后重写相应的几个状态改变的函数

    state = fields.Selection([

        ('draft', "Draft"),

        ('confirmed', "Confirmed"),

        ('done', "Done"),

    ], default='draft')

 

    @api.multi

    def action_draft(self):

        self.state = 'draft'

 

    @api.multi

    def action_confirm(self):

        self.state = 'confirmed'

 

    @api.multi

    def action_done(self):

        self.state = 'done'

然后在视图里定义一个header,分别是按钮动作以及状态显示的bar,按钮名字就是动作函数的名字。

                    <header>

                        <button name="action_draft" type="object"

                                string="Reset to draft"

                                states="confirmed,done"/>

                        <button name="action_confirm" type="object"

                                string="Confirm" states="draft"

                                class="oe_highlight"/>

                        <button name="action_done" type="object"

                                string="Mark as done" states="confirmed"

                                class="oe_highlight"/>

                        <field name="state" widget="statusbar"/>

                    </header>

2.使用odoo的workflow

这样的话,得把    state = fields.Selection([

        ('draft', "Draft"),

        ('confirmed', "Confirmed"),

        ('done', "Done"),

    ], default='draft')的default='draft'去掉变成

state = fields.Selection([

        ('draft', "Draft"),

        ('confirmed', "Confirmed"),

        ('done', "Done"),

    ])

然后视图里的header的按钮的type不是object了,改成workflow,按钮的name改成workflow里的activity的id

                    <header>

                        <button name="draft" type="workflow"

                                string="Reset to draft"

                                states="confirmed,done"/>

                        <button name="confirm" type="workflow"

                                string="Confirm" states="draft"

                                class="oe_highlight"/>

                        <button name="done" type="workflow"

                                string="Mark as done" states="confirmed"

                                class="oe_highlight"/>

                        <field name="state" widget="statusbar"/>

                    </header>

 

然后定义workflow的datafile,工作流,活动,和迁移

<openerp>

    <data>

        <record model="workflow" id="wkf_session">

            <field name="name">OpenAcademy sessions workflow</field>

            <field name="osv">openacademy.session</field>

            <field name="on_create">True</field>

        </record>

 

        <record model="workflow.activity" id="draft">

            <field name="name">Draft</field>

            <field name="wkf_id" ref="wkf_session"/>

            <field name="flow_start" eval="True"/>

            <field name="kind">function</field>

            <field name="action">action_draft()</field>

        </record>

        <record model="workflow.activity" id="confirmed">

            <field name="name">Confirmed</field>

            <field name="wkf_id" ref="wkf_session"/>

            <field name="kind">function</field>

            <field name="action">action_confirm()</field>

        </record>

        <record model="workflow.activity" id="done">

            <field name="name">Done</field>

            <field name="wkf_id" ref="wkf_session"/>

            <field name="kind">function</field>

            <field name="action">action_done()</field>

        </record>

 

        <record model="workflow.transition" id="session_draft_to_confirmed">

            <field name="act_from" ref="draft"/>

            <field name="act_to" ref="confirmed"/>

            <field name="signal">confirm</field>

        </record>

        <record model="workflow.transition" id="session_confirmed_to_draft">

            <field name="act_from" ref="confirmed"/>

            <field name="act_to" ref="draft"/>

            <field name="signal">draft</field>

        </record>

        <record model="workflow.transition" id="session_done_to_draft">

            <field name="act_from" ref="done"/>

            <field name="act_to" ref="draft"/>

            <field name="signal">draft</field>

        </record>

        <record model="workflow.transition" id="session_confirmed_to_done">

            <field name="act_from" ref="confirmed"/>

            <field name="act_to" ref="done"/>

            <field name="signal">done</field>

        </record>

    </data>

</openerp>

特别注意的是,工作流关联的model只有在记录创建的时候才会创建工作流,所以,定义工作流之前的记录对于工作流来说是失效的。

 

服务器端action

可以创建一个服务器端的命令来执行python等同于上面的直接调用python

model.search([('id', 'in', context['active_ids'])]).action_draft()     active_ids??要调查

 

 

猜你喜欢

转载自radzhang.iteye.com/blog/2273652