I don't understand :
scheduler_demo/data/sheduler_data.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<record id="ir_cron_scheduler_demo_action" model="ir.cron">
<field name="name">Demo scheduler</field>
<field name="model_id" ref="model_scheduler_demo"></field>
<field name="state">code</field>
<field name="code">model.process_demo_scheduler_queue()</field>
<field name="active" eval="True"></field>
<field name="user_id" ref="base.user_root"></field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
</data>
</odoo>
scheduler_demo/models/init.py :
from . import scheduler_demo
scheduler_demo/models/sheduler_demo.py :
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class SchedulerDemo(models.Model):
_name = 'scheduler.demo'
name = fields.Char(required=True)
number_of_updates = fields.Integer('Number of updates')
@api.model
def _process_demo_scheduler_queue(self):
# Contains all records for the model scheduler.demo
scheduler_demo_records = self.env['scheduler.demo'].search([])
# Loop over the records one by one
for demo_record in scheduler_demo_records:
number_of_updates = demo_record.number_of_updates + 1
# Update the record with the new number of updates
demo_record.write({
'number_of_updates': number_of_updates
})
scheduler_demo/security/ir.model.access.csv :
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_scheduler_demo,access_scheduler_demo,model_scheduler_demo,base.group_user,1,1,1,1
scheduler_demo/views/menu.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<menuitem id="scheduler_demo_menu_root"
name="Scheduler tutorial"
sequence="98"></menuitem>
<menuitem id="menu_scheduler_demo"
name="Scheduler records"
parent="scheduler_demo_menu_root"
action="action_scheduler_demo_records"
sequence="1"></menuitem>
<record id="action_scheduler_demo_records" model="ir.actions.act_window">
<field name="name">Scheduler records</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scheduler.demo</field>
<field name="search_view_id" ref="scheduler_demo_search_view"></field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new scheduler record by clicking on 'Create'.
</p>
</field>
</record>
</odoo>
scheduler_demo/scheduler_demo.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="scheduler_demo_tree_view" model="ir.ui.view">
<field name="name">scheduler.demo.tree</field>
<field name="model">scheduler.demo</field>
<field name="arch" type="xml">
<tree string="Scheduler records">
<field name="name"></field>
<field name="number_of_updates"></field>
</tree>
</field>
</record>
<record id="scheduler_demo_form_view" model="ir.ui.view">
<field name="name">scheduler.demo.form</field>
<field name="model">scheduler.demo</field>
<field name="arch" type="xml">
<form string="Scheduler record">
<sheet>
<group name="main_info">
<field name="name"></field>
<field name="number_of_updates"></field>
<field name="write_date"></field>
</group>
</sheet>
</form>
</field>
</record>
<record id="scheduler_demo_search_view" model="ir.ui.view">
<field name="name">scheduler.demo.search</field>
<field name="model">scheduler.demo</field>
<field name="arch" type="xml">
<search string="Scheduler records">
<field name="name"></field>
<field name="number_of_updates"></field>
</search>
</field>
</record>
</odoo>
scheduler_demo/__init__py :
from . import models
scheduler_demo/manifest.py :
{
'name': "scheduler_demo",
'depends': ['base', 'web'],
'data': [
'security/ir.model.access.csv',
'data/scheduler_data.xml',
'views/scheduler_demo.xml',
'views/menu.xml',
],
'installable': True,
'application': False,
'auto_install': False,
}
ERROR :
Odoo server error
psycopg2.IntegrityError: ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « activity_user_type »
DETAIL: La ligne en échec contient (586, Demo scheduler, ir.actions.server, null, null, action, list,form, 1, 2020-09-25 13:32:44.223276, 1, 2020-09-25 13:32:44.223276, ir_cron, code, 5, 394, null, model.process_demo_scheduler_queue(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/odoo/http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/opt/odoo/odoo/http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo/odoo/http.py", line 915, in __call__
return self.method(*args, **kw)
File "/opt/odoo/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 1326, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/opt/odoo/addons/web/controllers/main.py", line 1314, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo/api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo/api.py", line 374, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "<decorator-gen-65>", line 2, in button_immediate_upgrade
File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 72, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 634, in button_immediate_upgrade
return self._button_immediate_function(type(self).button_upgrade)
File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 573, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "/opt/odoo/odoo/modules/registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/opt/odoo/odoo/modules/loading.py", line 419, in load_modules
force, status, report, loaded_modules, update_module, models_to_check)
File "/opt/odoo/odoo/modules/loading.py", line 315, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/opt/odoo/odoo/modules/loading.py", line 225, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report)
File "/opt/odoo/odoo/modules/loading.py", line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File "/opt/odoo/odoo/tools/convert.py", line 736, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/opt/odoo/odoo/tools/convert.py", line 803, in convert_xml_import
obj.parse(doc.getroot())
File "/opt/odoo/odoo/tools/convert.py", line 721, in parse
exc_info[2]
File "/opt/odoo/odoo/tools/pycompat.py", line 13, in reraise
raise value.with_traceback(tb)
File "/opt/odoo/odoo/tools/convert.py", line 712, in parse
self._tag_root(de)
File "/opt/odoo/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo/tools/convert.py", line 577, in _tag_record
record = model._load_records([data], self.mode == 'update')
File "/opt/odoo/odoo/models.py", line 4084, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/opt/odoo/odoo/models.py", line 3998, in _load_records_create
return self.create(values)
File "<decorator-gen-40>", line 2, in create
File "/opt/odoo/odoo/api.py", line 317, in _model_create_single
return self.browse().concat(*(create(self, vals) for vals in arg))
File "/opt/odoo/odoo/api.py", line 317, in <genexpr>
return self.browse().concat(*(create(self, vals) for vals in arg))
File "/opt/odoo/odoo/addons/base/models/ir_cron.py", line 71, in create
return super(ir_cron, self).create(values)
File "<decorator-gen-3>", line 2, in create
File "/opt/odoo/odoo/api.py", line 335, in _model_create_multi
return create(self, [arg])
File "/opt/odoo/odoo/models.py", line 3740, in create
for data in parent_data_list
File "<decorator-gen-34>", line 2, in create
File "/opt/odoo/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo/addons/base/models/ir_actions.py", line 59, in create
res = super(IrActions, self).create(vals_list)
File "<decorator-gen-3>", line 2, in create
File "/opt/odoo/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo/models.py", line 3746, in create
records = self._create(data_list)
File "/opt/odoo/odoo/models.py", line 3832, in _create
cr.execute(query, params)
File "/opt/odoo/odoo/sql_db.py", line 168, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/odoo/sql_db.py", line 245, in execute
res = self._obj.execute(query, params)
odoo.tools.convert.ParseError: "ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « activity_user_type »
DETAIL: La ligne en échec contient (586, Demo scheduler, ir.actions.server, null, null, action, list,form, 1, 2020-09-25 13:32:44.223276, 1, 2020-09-25 13:32:44.223276, ir_cron, code, 5, 394, null, model.process_demo_scheduler_queue(), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
" while parsing /home/brenda/Code/app_odoo/scheduler_demo/data/scheduler_data.xml:2, near
<odoo>
<data noupdate="1">
<record id="ir_cron_scheduler_demo_action" model="ir.cron">
<field name="name">Demo scheduler</field>
<field name="model_id" ref="model_scheduler_demo"/>
<field name="state">code</field>
<field name="code">model.process_demo_scheduler_queue()</field>
<field name="active" eval="True"/>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
</data>
</odoo>
I do not understand the error, I tested a lot of modification without success, could someone help me please.
Odoo defines
ir_actions_server_idfield (inir.crommodel) and setdelegateattribute toTrue(corresponds to _inherits) which means thatir.actions.serverfields are available in their.cronmodel.The
activity_user_typefield is defined in mail (add it to module dependency) module as required field set by default tospecific, so you can't have the above error using the default implementation.You can reproduce a similar error by inheriting the
ir.actions.servermodel and altering thedefaultattribute (set it toFalse) of a required field.The folowing code will raise an
odoo.tools.convert.ParseErrorIt could also be the result of overriding the
createmethod and setting the value ofactivity_user_typeto another field value which is finally evaluated toFalse.