一:定义定时器数据模型

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

  1. from odoo import models, fields, api, exceptions
  2. import logging
  3. from datetime import datetime
  4. _logger = logging.getLogger(__name__)
  5.  
  6. class scheduler(models.Model):
  7. _name = 'scheduler.demo'
  8.  
  9. #需要用到的字段
  10. name = fields.Char(required=True)
  11. numberOfUpdates = fields.Integer('Number of updates')
  12. lastModified = fields.Datetime('Last updated')
  13. #定时方法
  14. def process_demo_scheduler_queue(self):
  15. scheduler_line_ids = self.env['scheduler.demo'].search([])
  16. for scheduler_line in scheduler_line_ids:
  17. _logger.info('line:' + scheduler_line.name)
  18. scheduler_line.numberOfUpdates += 1
  19. scheduler_line.lastModified = datetime.utcnow()

二:创建定时器视图

  1. <odoo>
  2. <data>
  3. <!--1:创建定时器表单-->
  4. <record model="ir.ui.view" id="view_scheduler_form">
  5. <field name="name">scheduler.demo.form</field>
  6. <field name="model">scheduler.demo</field>
  7. <field name="arch" type="xml">
  8. <form string="Schedule Form">
  9. <group>
  10. <field name="name"/>
  11. <field name="numberOfUpdates"/>
  12. <field name="lastModified"/>
  13. </group>
  14. </form>
  15. </field>
  16. </record>
  17. <!--2:创建定时器列表视图-->
  18. <record model="ir.ui.view" id="view_scheduler_tree">
  19. <field name="name">scheduler.demo.tree</field>
  20. <field name="model">scheduler.demo</field>
  21. <field name="arch" type="xml">
  22. <tree string="Schedule Tree">
  23. <field name="name"/>
  24. <field name="numberOfUpdates"/>
  25. <field name="lastModified"/>
  26. </tree>
  27. </field>
  28. </record>
  29. <!--最重要:定义定时动作,制定定时任务-->
  30. <record id="ir_cron_scheduler_demo_action" model="ir.cron">
  31. <field name="name">Demo scheduler</field>
  32. <field name="user_id" ref="base.user_root"/>
  33. <field name="interval_number">2</field>
  34. <field name="interval_type">minutes</field>
  35. <field name="numbercall">-1</field>
  36. <field eval="False" name="doall"/>
  37. <field eval="'scheduler.demo'" name="model"/>
  38. <field eval="'process_demo_scheduler_queue'" name="function"/>
  39. </record>
  40. <!--定义定时器视图展示动作-->
  41. <record model="ir.actions.act_window" id="scheduler_demo_list_action">
  42. <field name="name">计划任务Demo</field>
  43. <field name="res_model">scheduler.demo</field>
  44. <field name="view_mode">tree,form</field>
  45. </record>
  46. <!--定义菜单-->
  47. <menuitem id="scheduler_demo_menu" name="计划任务Demo"
  48. parent="top_menu"/>
  49. <menuitem id="scheduler_demo_list_menu" name="计划任务Demo"
  50. parent="scheduler_demo_menu"
  51. action="scheduler_demo_list_action"/>
  52. </data>
  53. </odoo>

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

  1. name
  2. 定时任务名称
  3.  
  4. user_id
  5. 执行定时任务的用户,不同的用户是有不同权限的,为了保证能有足够权限执行定时任务,一般这里就是base.user_root
  6.  
  7. interval_number
  8. 任务执行的频次,和interval_type字段一起决定了任务执行的间隔时间,比如这里为interval_number2interval_typeminutes,就是任务每2分钟执行一次。
  9.  
  10. interval_type
  11. 任务执行频次的单位,可选项有: minutes,hours,days,work_days,weeks,months,意思很好理解,work_days是星期几执行。
  12.  
  13. numbercall
  14. 循环运行的次数,比如你填10,那么任务执行10次后将不再执行,这里-1代表一直执行下去。
  15.  
  16. doall
  17. 如果在服务器重启期间错过了执行时机,是否再次补充执行。
  18.  
  19. model
  20. 任务方法所在模块
  21.  
  22. function
  23. 任务方法,与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. 工良出品:包教会,Hadoop、Hive 搭建部署简易教程

    目录 导读 Hadoop.Hive 是什么 运行环境 Java 环境 Mysql 下载 Hadoop.Hive 和 驱动 安装 Hadoop core-site.xml hdfs-site.xml m ...

  2. Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口

    环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮 ...

  3. 表现标准语言CSS3学习 入门+导入方式

    表现标准语言CSS3学习 入门+导入方式 如何学习: css是什么 css怎么用(快速入门) css选择器(重点+难点) 美化网页(文字.阴影.超链接.列表.渐变...) 盒子模型 浮动 定位 网页动 ...

  4. Facebook 的 Thrift

    更多内容,前往个人博客 Thrift 源于 Facebook,在 2007 年 Facebook 将 Thrift 作为一个开源项目提交给了 Apache 基金会.对于当时的 Facebook 来说, ...

  5. Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意

    Moho,以前被称为动画工作室专业版,是最好的质量的2D动画软件之一.这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画,没有繁琐的详细逐帧处理.具有直观的界面和现成的人物和附加对象(卡通对象 ...

  6. AI工具导航

    .xe-comment-entry img { float: left; display: block; background: rgba(136, 136, 136, 0.15); margin-r ...

  7. GitLab服务器傻瓜式搭建教程

    开始前的准备 需要有一台Linux系统的服务器或虚拟机 QAQ 安装包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ 注* 本教程无需下载安装 ...

  8. SQL Case条件判断语句

    问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...

  9. defineProperty在数据劫持后是如何通知数据的更新和视图的更新的

    vue的双向绑定是由数据劫持结合发布者-订阅者模式实现的,那么什么是数据劫持?vue是如何进行数据劫持的?说白了就是通过Object.defineProperty()来劫持对象属性的setter和ge ...

  10. 【LeetCode动态规划#10】完全背包问题实战,其三(单词拆分,涉及集合处理字符串)

    单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆 ...