首页 > 其他分享 >odoo Workflows 老版本参考

odoo Workflows 老版本参考

时间:2023-04-26 21:12:50浏览次数:45  
标签:xml workflow Workflows session draft 版本 odoo action openacademy

Workflows

Workflows 是通过model 来描述业务逻辑之间的变化过程,Workflows are also used to track processes that evolve over time.

练习 6-1

session 添加一个 state field ,用来帮助弄 workflow
一个 session 有3个状态,分别是 Draft(默认),Confirmed, Done
在session form中,添加一个 read-only field 用来显示 state,添加一个button 用来调整 state。

  • Draft -> Confirmed
  • Confirmed -> Draft
  • Confirmed -> Done
  • Done -> Draft

openacademy/models.py

    attendees_count = fields.Integer(
        string="Attendees count", compute='_get_attendees_count', store=True)
    # 新增
    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'
    # 结束
    @api.depends('seats', 'attendee_ids')
    def _taken_seats(self):
        for r in self:

  

openacademy/views/openacademy.xml

            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <form string="Session Form">
                    <!-- 新增 -->
                    <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>
                    <!-- 结束 -->

                    <sheet>
                        <group>
                            <group string="General">

  

workflows 可以与任何 Odoo object 相关联起来,而且完全的可定制化。Workflows 是用来的管理将商业闭环,还可以通过可视化的方式,修改业务之间的转化关系和各种触发条件的钩子。Workflows, activities (nodes or actions) and transitions (conditions) are declared as XML records, as usual. The tokens that navigate in workflows are called workitems.

注意:
workflow 与 session 关联之后,只有新建的 session 才有 workflow instance,之前的 session 都不会有 workflow instance

  

练习 6-2
替换上面的 伪 workflow, 用真正的 workflow 来重写,所以 button 点击后,调用的就不是 object的method,而是 workflow的 trigger。
openacademy/__openerp__.py

        'templates.xml',
        'views/openacademy.xml',
        'views/partner.xml',
        'views/session_workflow.xml', # new line
    ],
    # only loaded in demonstration mode
    'demo': [

  

openacademy/models.py

        ('draft', "Draft"),
        ('confirmed', "Confirmed"),
        ('done', "Done"),
    ])  # 去掉了 default

    @api.multi
    def action_draft(self):

  

openacademy/views/openacademy.xml

            <field name="arch" type="xml">
                <form string="Session Form">
                    <header>
                        <!-- 3个 button 的 type 由 object 变为 workflow -->
                        <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"/>

  

openacademy/views/session_workflow.xml

<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>

  

为了检测,是否建立了 workflow ,可以到 Settings ‣ Technical ‣ Workflows ‣ Instances 查看

  

练习 6-3
添加一个根据条件自动触发的 workflow

openacademy/views/session_workflow.xml

            <field name="act_to" ref="done"/>
            <field name="signal">done</field>
        </record>
        <!-- 添加 -->
        <record model="workflow.transition" id="session_auto_confirm_half_filled">
            <field name="act_from" ref="draft"/>
            <field name="act_to" ref="confirmed"/>
            <field name="condition">taken_seats > 50</field>
        </record>
    </data>
</openerp>

  

练习 6-4
用 server action 代替 python methods
workflow 和 server action 都可以从用户界面,手动建立。

openacademy/views/session_workflow.xml

            <field name="on_create">True</field>
        </record>
        <!-- 新增 -->
        <record model="ir.actions.server" id="set_session_to_draft">
            <field name="name">Set session to Draft</field>
            <field name="model_id" ref="model_openacademy_session"/>
            <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_draft()
            </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">dummy</field>
            <field name="action"></field>
            <field name="action_id" ref="set_session_to_draft"/>
            <!-- 结束 -->
        </record>
        <!-- 新增 -->
        <record model="ir.actions.server" id="set_session_to_confirmed">
            <field name="name">Set session to Confirmed</field>
            <field name="model_id" ref="model_openacademy_session"/>
            <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_confirm()
            </field>
        </record>
        <!-- 结束 -->
        <record model="workflow.activity" id="confirmed">
            <field name="name">Confirmed</field>
            <field name="wkf_id" ref="wkf_session"/>
            <!-- 修改 -->
            <field name="kind">dummy</field>
            <field name="action"></field>
            <field name="action_id" ref="set_session_to_confirmed"/>
            <!-- 结束 -->
        </record>
        <!-- 新增 -->
        <record model="ir.actions.server" id="set_session_to_done">
            <field name="name">Set session to Done</field>
            <field name="model_id" ref="model_openacademy_session"/>
            <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_done()
            </field>
        </record>
         <!-- 结束 -->
        <record model="workflow.activity" id="done">
            <field name="name">Done</field>
            <field name="wkf_id" ref="wkf_session"/>
            <!-- 修改 -->
            <field name="kind">dummy</field>
            <field name="action"></field>
            <field name="action_id" ref="set_session_to_done"/>
            <!-- 结束 -->
        </record>

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

  

标签:xml,workflow,Workflows,session,draft,版本,odoo,action,openacademy
From: https://www.cnblogs.com/pythonClub/p/17357357.html

相关文章

  • freemarker 与 servlet 之 Helloworld版本
    新建web工程,新建servlet类:packagecom.freemaker.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.......
  • 【更新公告】AirtestIDE更新至1.2.15版本
    1.前言本次更新为AirtestIDE、Airtest、Poco、iOS-tagent更新。AirtestIDE更新至1.2.15版本,Airtest更新为1.2.10版本,Poco更新为1.0.89版本,iOS-tagent重新梳理了master分支内容。更新内容详见下文。2.更新内容1)AirtestIDE更新至1.2.15版本新版IDE主要是更新了内置python环境......
  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库
    前言  mysql驱动版本msvc2015x32版本调好,mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享......
  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的
    一. 问题描述创建地图对象,并添加marker标记,对map和marker均添加了点击事件;<body><script>functioninitMap(){//创建地图对象constmap=newHWMapJsSDK.HWMap(document.getElementById('map'),{center:{lat:39.36322,lng:......
  • jdk环境配置已经版本切换
    下载安装jdk到电脑盘,两个版本要下载到一个盘里面下安装好后右击我的电脑找到高级系统设置,点开环境变量新建环境变量总计环境变量一共添加四个其中java8和java11是是选择文件路径JAVA_HOME是用来选择连个jdk版本环境变量设置好之后双击path双击打开把java文件路径下移到最下面然后......
  • Google浏览器 查看http版本是1.1还是2.0
    1、打开网页2、F12进入开发者模式3、找到请求4、找到请求头5、找到ResPonseHeather点击Viewparsed......
  • php 版本号对比,1.0.5和1.15.0
    $version1='1.0.5';$version2='1.15.0';//自定义比较函数functioncompare_versions($v1,$v2){$ver1=explode('.',$v1);$ver2=explode('.',$v2);//将每个版本号中的字符串转换为整数$ver1=array_map('intval&......
  • 编译部署LNMP-php8.1.18版本
    由于mysql编译会非常耗费资源,故咱们这里不做介绍,只介绍nginx的编译、php的编译以及nginx和php的联动,至于mysql如何接入,需要看具体业务,在LNMP中mysql是相对独立的,不需要特别的配置编译安装nginx新建www用户groupaddwwwuseradd-s/sbin/nologin-gwwwwww安装必要依赖yum......
  • 在jupyter notebook中切换PY版本
    首先,确保已经成功安装完了Condacondaenvlist #查看当前已经创建的py环境condaactivatepaddle242#切换到需要使用的py环境pipinstallipykernel python-mipykernelinstall--user--name<PY的环境名称>--display-name<Jupyter的环境名称>example:python-mip......
  • linux中查看Python版本和路径
    1,查看python版本,输入python2,查看python路径,输入whereispython ......