一:定义定时器数据模型

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

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中引入定时器视图文件

odoo开发教程十六:定时任务的更多相关文章

  1. Spring Boot2 系列教程(十六)定时任务的两种实现方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...

  3. 无废话ExtJs 入门教程十六[页面布局:Layout]

    无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...

  4. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

    目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...

  5. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...

  6. [转]PostgreSQL教程(十六):系统视图详解

    这篇文章主要介绍了PostgreSQL教程(十六):系统视图详解,本文讲解了pg_tables.pg_indexes.pg_views.pg_user.pg_roles.pg_rules.pg_set ...

  7. iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面

    iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...

  8. RabbitMQ入门教程(十六):RabbitMQ与Spring集成

    原文:RabbitMQ入门教程(十六):RabbitMQ与Spring集成 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  9. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...

  10. css3基础教程十六变形与动画animation

    前面我们讲过的变形与动画一般都是通过鼠标的单击.获得焦点,被点击或对元素进行一定改变后以后触发效果的,那么有没有像Flash一样自动播放的动画效果呢?答案当然是肯定的,这就是我们今天要讲到的anima ...

随机推荐

  1. (3) MasaFramework 入门第三篇,使用MasaFramework

    首先我们需要创建一个MasaFramework模板的项目,项目名称TokenDemo,项目类型如图所示 删除Web/TokenDemo.Admin项目,新建Masa Blazor Pro项目模板 项目 ...

  2. Gitee 码云与Git 交互

    一.进入码云官方网站,注册用户 官网地址:https://gitee.com/ 二.创建远程仓库 [1]点击右上角的 + 号进行创建

  3. ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】

    可以先看下列文章 目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文 ...

  4. [C++STL教程]4.map超强的容器,它终于来了!零基础都能理解的入门教程

    之前我们介绍过vector, queue, stack,他们都有一个共同的特点,就是都可以用线性表来模拟.今天我们来学习一个全新且高封装性的容器:map. 作者:Eriktse 简介:19岁,211计 ...

  5. 用 Go 剑指 Offer 09. 用两个栈实现队列

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  6. python进程之进程池、线程池与异步回调机制

    进程线程不可以无限制的创建,因为有硬件的限制.为了避免资源被程序消耗过度,可以使用进程池或线程池的技术. 池     降低程序的执行效率,但是保证了计算机硬件的安全 进程池     提前创建好固定数量 ...

  7. 深入理解 python 虚拟机:字节码教程(2)——控制流是如何实现的?

    深入理解 python 虚拟机:字节码教程(2)--控制流是如何实现的? 在本篇文章当中主要给大家分析 python 当中与控制流有关的字节码,通过对这部分字节码的了解,我们可以更加深入了解 pyth ...

  8. oracle数据对比--用户,索引,分区,dblink,同义词,视图

    问题描述:需要对比用户数据一般在数据库迁移之后,需要对比一下两个库之间的差距,如果登上去一条命令的执行,去统计,就会比较麻烦,这里整理了一些脚本可用.通过创建dblink的方式快速查询,也可以整合到一 ...

  9. Vuex刷新页面数据会丢失吗?咋解决的?

    1.问题描述:页面刷新的时候vuex里的数据会重新初始化,导致数据丢失.因为vuex里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,vuex里面的数据就会被重新赋值. 2.解决思 ...

  10. MIT6.824 Distributed-System(Lab1)-MapReduce

    Lab address: http://nil.csail.mit.edu/6.824/2020/labs/lab-mr.html paper: MapReduce: Simplified Data ...