转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189382.html

一:定义定时器数据模型

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

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

最新文章

  1. 一个简单的linux线程池(转-wangchenxicool)
  2. 20.allegro.铺铜[原创]
  3. bash里,echo对换行符的处理
  4. FullPage.js全屏滚动插件的配置项、方法和回调函数
  5. 对static静态成员的理解
  6. Swift - 多线程实现方式(2) - NSOperation和NSOperationQueue
  7. 深入理解 JBoss 7/WildFly Standalone 模式启动过程
  8. STL(标准模板库)理论基础,容器,迭代器,算法
  9. miui10 傻瓜式安装google框架方法
  10. JavaBean-EL-JSTL-MVC
  11. linux-shell-变量参数
  12. python SMTP attachment
  13. npm node sass 安装报错
  14. L306 词汇题
  15. Android下基于PCM的音频渲染
  16. JIRA Rest JAVA Client API实现问题管理及自定义字段(原创)
  17. Call to undefined function mysqli_connect() in xx.连接数据库出现mysqli_connect()未定义的问题。
  18. css鼠标移动到文字上怎样变化背景颜色
  19. Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题
  20. python urllib使用

热门文章

  1. Eclipse修改JSP文件的默认编码
  2. MATLAB实例:PCA降维
  3. jQuery中的事件(七)
  4. 快读&amp;快写模板【附O2优化】
  5. Django signal(信号)
  6. ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测
  7. Spark内核| 调度策略| SparkShuffle| 内存管理| 内存空间分配| 核心组件
  8. Python Dataframe 分组排序和 Modin
  9. JS分类选择插件
  10. 在项目中使用Solr