odoo10学习笔记十六:定时任务

一:定义定时器数据模型

模型中定义需要用到的字段、定时方法

from odoo import models, fields, api, exceptions
import logging
from datetime import datetime
_logger = logging.getLogger(__name__)

class scheduler(models.Model):
    _name = ‘scheduler.demo‘

    #需要用到的字段
    name = fields.Char(required=True)
    numberOfUpdates = fields.Integer(‘Number of updates‘)
    lastModified = fields.Datetime(‘Last updated‘)
    #定时方法
    def process_demo_scheduler_queue(self):
        scheduler_line_ids = self.env[‘scheduler.demo‘].search([])
        for scheduler_line in scheduler_line_ids:
            _logger.info(‘line:‘ + scheduler_line.name)
            scheduler_line.numberOfUpdates += 1
            scheduler_line.lastModified = datetime.utcnow()

二:创建定时器视图

<odoo>
    <data>
        <!--1:创建定时器表单-->
        <record model="ir.ui.view" id="view_scheduler_form">
            <field name="name">scheduler.demo.form</field>
            <field name="model">scheduler.demo</field>
            <field name="arch" type="xml">
                <form string="Schedule Form">
                    <group>
                        <field name="name"/>
                        <field name="numberOfUpdates"/>
                        <field name="lastModified"/>
                    </group>
                </form>
            </field>
        </record>
        <!--2:创建定时器列表视图-->
        <record model="ir.ui.view" id="view_scheduler_tree">
            <field name="name">scheduler.demo.tree</field>
            <field name="model">scheduler.demo</field>
            <field name="arch" type="xml">
                <tree string="Schedule Tree">
                    <field name="name"/>
                    <field name="numberOfUpdates"/>
                    <field name="lastModified"/>
                </tree>
            </field>
        </record>
        <!--最重要:定义定时动作,制定定时任务-->
        <record id="ir_cron_scheduler_demo_action" model="ir.cron">
            <field name="name">Demo scheduler</field>
            <field name="user_id" ref="base.user_root"/>
            <field name="interval_number">2</field>
            <field name="interval_type">minutes</field>
            <field name="numbercall">-1</field>
            <field eval="False" name="doall"/>
            <field eval="‘scheduler.demo‘" name="model"/>
            <field eval="‘process_demo_scheduler_queue‘" name="function"/>
        </record>
        <!--定义定时器视图展示动作-->
        <record model="ir.actions.act_window" id="scheduler_demo_list_action">
            <field name="name">计划任务Demo</field>
            <field name="res_model">scheduler.demo</field>
            <field name="view_mode">tree,form</field>
        </record>
        <!--定义菜单-->
        <menuitem id="scheduler_demo_menu" name="计划任务Demo"
          parent="top_menu"/>
        <menuitem id="scheduler_demo_list_menu" name="计划任务Demo"
          parent="scheduler_demo_menu"
          action="scheduler_demo_list_action"/>
    </data>
</odoo>

其中,定义定时器任务的标签有以下重要字段:

name:
定时任务名称

user_id:
执行定时任务的用户,不同的用户是有不同权限的,为了保证能有足够权限执行定时任务,一般这里就是base.user_root

interval_number:
任务执行的频次,和interval_type字段一起决定了任务执行的间隔时间,比如这里为interval_number为2,interval_type为minutes,就是任务每2分钟执行一次。

interval_type:
任务执行频次的单位,可选项有: minutes,hours,days,work_days,weeks,months,意思很好理解,work_days是星期几执行。

numbercall:
循环运行的次数,比如你填10,那么任务执行10次后将不再执行,这里-1代表一直执行下去。

doall:
如果在服务器重启期间错过了执行时机,是否再次补充执行。

model:
任务方法所在模块

function:
任务方法,与model一起决定了任务时机到来时,调用哪个方法执行。

三:注册定时器

在init中import定时器模型;

在manifest中引入定时器视图文件。

时间: 2024-10-07 16:31:04

odoo10学习笔记十六:定时任务的相关文章

C++学习笔记十六-模板和泛型编程(二)

C++学习笔记十六-模板和泛型编程(二) 16.4 类模板成员 1.模板作用域中模板类型的引用: 通常,当使用类模板的名字的时候,必须指定模板形参.这一规则有个例外:在类本身的作用域内部,可以使用类模板的非限定名.例如,在默认构造函数和复制构造函数的声明中,名字 Queue 是 Queue<Type> 缩写表示.实质上,编译器推断,当我们引用类的名字时,引用的是同一版本.因此,复制构造函数定义其实等价于: Queue<Type>(const Queue<Type> &a

MYSQL进阶学习笔记十六:MySQL 监控!(视频序号:进阶_35)

知识点十六:MySQL监控(35) 一.为什么使用MySQL监控 随着软件后期的不断升级,myssql的服务器数量越来越多,软硬件故障的发生概率也越来越高.这个时候就需要一套监控系统,当主机发生异常时,此时通过监控系统发现和处理. 这个监控实际上是在我们的开发完成之后,这个时候软件就开始在运行,这个运行我们就需要去关注到mysql服务器是否正常,那么我们要观察它就需要给它提供一些监控,这监控就是当它发生故障之后, 那么我们这个监控就会告诉我们到底什么地方发生了一些异常或者一些错误,这个时候我们就

python学习笔记十六 django深入学习一

django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), #精确匹配 url(r'^articles/([0-9]{4})/$', views.year_archive), #动态路由 url(r'^articles/([0-9]{4})/([0-9]{2

spring in action学习笔记十六:配置数据源的几种方式

第一种方式:JNDI的方式. 用xml配置的方式的代码如下: 1 <jee:jndi-lookup jndi-name="/jdbc/spittrDS" resource-ref="true" id="dataSource"/> 用注解方式的代码如下: 1 @Bean 2 public JndiObjectFactoryBean jndiObjectFactoryBean(){ 3 JndiObjectFactoryBean jndi

yii2源码学习笔记(十六)

Module类的最后代码 1 /** 2 * Registers sub-modules in the current module. 3 * 注册子模块到当前模块 4 * Each sub-module should be specified as a name-value pair, where 5 * name refers to the ID of the module and value the module or a configuration 6 * array that can

[傅里叶变换及其应用学习笔记] 十六. 继续上次内容,晶体成像

x射线晶体照像术 1) x射线是1895年由伦琴(Roentgen)发现的,其波长为$10^{-8}$厘米左右,常用的测量可见光波长的方法会由于其波长太小而无法测量. 2) 晶体(Crystals),晶体的原子结构符合一定规律——原子有序地排列成晶格.劳厄(Laue)在1912年做了一系列著名实验,其目的是利用x射线进行衍射实验来研究晶体的本质. 劳尔假设: 1) x射线是波,因此可以进行衍射 2) 晶体可以充当合适的衍射光栅,即晶体具有晶格原子(lattice atomic)——周期性的原子结

JavaScript权威设计--CSS(简要学习笔记十六)

1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domain document.write() document.writeIn() 2.查询选取的文本 使用鼠标mouseup事件 3.浏览器定义了多项文本编辑命令(富文本编辑器) 使用Document对象的execCommand()方法. document.queryCommandSupport()判断浏

Android学习笔记十六.Android数据存储与IO.SharedPreferences

SharedPreferences 对于应用程序的数据输入.输出,如果是应用程序只是少量数据需要保存,那么使用普通文件就可以了(SharedPrefereces);但如果应用程序有大量数据需要存储.访问,就需要借助数据库了.Android系统内置了SQLite数据库,SQLite数据库是一个真正轻量级的数据库,它没有后台进程,整个数据库就对应于一个文件. 1.SharedPreferences简介 (1)概念:SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存

PHP学习笔记十六【方法】

<?php //给一个函数传递基本数据类型 $a=90; $b=90.8; $c=true; $d="hello world"; function test1($a,$b,$c,$d) //test1(&$a,&$b,&$c,&$d)//如果是传地址那么值就会改变 { $a=78; $b=89.5; $c=false; $d="beijing"; } //调用函数 test1($a,$b,$c,$d); echo $a.&quo