odoo开发教程十六:定时任务
转载请注明原文地址: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中引入定时器视图文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决