• Odoo工作流


    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826184.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>
  • 相关阅读:
    Oracle用户管理
    Oracle基本使用
    Oracle 11g安装、卸载
    Oracle
    C#面向对象
    看看Google用户体验十大设计原则
    [转]Delphi 常用控件之TlistView总结
    github + hexo 搭建博客
    CSS3 filter属性学习
    border-box——一种改变盒子尺寸的方法
  • 原文地址:https://www.cnblogs.com/ygj0930/p/10826184.html
Copyright © 2020-2023  润新知