odoo开发教程十六:定时任务
一:定义定时器数据模型
模型中定义需要用到的字段、定时方法



- 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开发教程十六:定时任务的更多相关文章
- Spring Boot2 系列教程(十六)定时任务的两种实现方式
在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...
- 无废话ExtJs 入门教程十六[页面布局:Layout]
无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...
- EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换
目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...
- [转]PostgreSQL教程(十六):系统视图详解
这篇文章主要介绍了PostgreSQL教程(十六):系统视图详解,本文讲解了pg_tables.pg_indexes.pg_views.pg_user.pg_roles.pg_rules.pg_set ...
- iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面
iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...
- RabbitMQ入门教程(十六):RabbitMQ与Spring集成
原文:RabbitMQ入门教程(十六):RabbitMQ与Spring集成 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
- css3基础教程十六变形与动画animation
前面我们讲过的变形与动画一般都是通过鼠标的单击.获得焦点,被点击或对元素进行一定改变后以后触发效果的,那么有没有像Flash一样自动播放的动画效果呢?答案当然是肯定的,这就是我们今天要讲到的anima ...
随机推荐
- 工良出品:包教会,Hadoop、Hive 搭建部署简易教程
目录 导读 Hadoop.Hive 是什么 运行环境 Java 环境 Mysql 下载 Hadoop.Hive 和 驱动 安装 Hadoop core-site.xml hdfs-site.xml m ...
- Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口
环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮 ...
- 表现标准语言CSS3学习 入门+导入方式
表现标准语言CSS3学习 入门+导入方式 如何学习: css是什么 css怎么用(快速入门) css选择器(重点+难点) 美化网页(文字.阴影.超链接.列表.渐变...) 盒子模型 浮动 定位 网页动 ...
- Facebook 的 Thrift
更多内容,前往个人博客 Thrift 源于 Facebook,在 2007 年 Facebook 将 Thrift 作为一个开源项目提交给了 Apache 基金会.对于当时的 Facebook 来说, ...
- Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意
Moho,以前被称为动画工作室专业版,是最好的质量的2D动画软件之一.这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画,没有繁琐的详细逐帧处理.具有直观的界面和现成的人物和附加对象(卡通对象 ...
- AI工具导航
.xe-comment-entry img { float: left; display: block; background: rgba(136, 136, 136, 0.15); margin-r ...
- GitLab服务器傻瓜式搭建教程
开始前的准备 需要有一台Linux系统的服务器或虚拟机 QAQ 安装包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ 注* 本教程无需下载安装 ...
- SQL Case条件判断语句
问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...
- defineProperty在数据劫持后是如何通知数据的更新和视图的更新的
vue的双向绑定是由数据劫持结合发布者-订阅者模式实现的,那么什么是数据劫持?vue是如何进行数据劫持的?说白了就是通过Object.defineProperty()来劫持对象属性的setter和ge ...
- 【LeetCode动态规划#10】完全背包问题实战,其三(单词拆分,涉及集合处理字符串)
单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆 ...