如何在计划中引用计划类型
How to reference a planning type in a plan
我有一个自定义的odoo模块,它扩展了一些现有的模块,比如hr。我想创建一个包含多个预定义任务的入职计划。
这是我的计划活动类型 xml,它应该可以正常工作。如果我使用此文件更新应用程序,我会在计划类型概述中获得所需的任务。
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="hr_plan_activity_type_create_work_contract" model="hr.plan.activity.type">
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="responsible">manager</field>
<field name="summary">Create work contract</field>
<field name="note">Create the work contract for the employee.</field>
</record>
<record id="hr_plan_activity_type_employee_model_in_erp" model="hr.plan.activity.type">
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="responsible">manager</field>
<field name="summary">Employee model in ERP</field>
<field name="note">Complete the employee model in ERP (AHV, Banking, etc.)</field>
</record>
</odoo>
这是我的 plan.xml,它应该创建一个具有 activity 类型的计划。计划的创建有效,但如果我引用 activity 类型,我将收到一条错误消息。
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Onboarding -->
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids"
eval="[(6,0,[ref('mycompany.hr_plan_activity_type_employee_model_in_erp')])]"/>
<field name="plan_activity_type_ids"
eval="[(4,0,[ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
</record>
</odoo>
在 manifest.py 文件中,我首先加载 plan.activity.type.xml,然后加载 plan.xml,所以这应该不是问题。
这是我在尝试升级自定义模块 mycompany 时收到的错误消息:
File "C:\Program Files (x86)\Odoo 13.0e\server\odoo\addons\base\models\ir_model.py", line 1670, in xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
odoo.tools.convert.ParseError: "External ID not found in the system: hr.plan.activity.type.hr_plan_activity_type_create_work_contract" while parsing file:/c:/users/myuser/appdata/local/openerp%20s.a/odoo/addons/13.0/mycompany/data/hr/plan.xml:2, near
<odoo>
<!-- Onboarding -->
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" ref="hr.plan.activity.type.hr_plan_activity_type_create_work_contract"/>
</record>
有没有人有什么想法?
您的参考 ID 有误。 hr.plan.activity.type.hr_plan_activity_type_create_work_contract
是错误的。您在参考文献中只得到一个 .
。它的 [<module_name>.]ext_id_of_object
.
如果您从同一模块引用对象,则不必使用模块 name.part
如果可以看到数据库 tables。那么你引用的东西在 table ir_model_data
因此,如果您引用的东西在您自己的模型中,那么您不能只使用 hr_plan_activity_type_create_work_contract
作为参考或 your_model_name.hr_plan_activity_type_create_work_contract
存储在 ir.model.data
中的字符串标识符可用于在数据导入或 export/import
往返期间引用记录而不考虑其数据库标识符。
外部标识符的格式为 module.id
(例如 account.invoice_graph
)。从模块内部,模块。前缀可以省略。
有时称为 xml id
或 xml_id
,因为 XML-based 数据文件广泛使用它们。
在您的示例中,您使用了数据库中可能不存在的 model_name.id
来引用 hr_plan_activity_type_create_work_contract
记录,您只需将模型名称替换为模块名称即可。
从日志信息中可以看出模块名称为mycompany
,尝试将型号名称替换为mycompany
:
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" ref="mycompany.hr_plan_activity_type_create_work_contract"/>
</record>
更新:plan_activity_type_ids
是一个 x2many 字段
使用special commands格式设置x2many字段值:
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" eval="[(6,0,[ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
</record>
编辑:只有第一个出现在 GUI 中
要用 ids
列表(使用“(6, 0, ids)”)替换集合中的所有现有记录,您可以在三元组内提供一个 ID 列表。您可以在基本模块内的 res_partner_demo.xml 中找到示例。
示例:
<field name="plan_activity_type_ids" eval="[(6,0,[ref('mycompany.hr_plan_activity_type_employee_model_in_erp'), ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
要将 ID 为 id
的现有记录添加到集合中(使用 (4, id)
),您需要为每个三元组提供一个 ID。您可以在基本模块内的 base_groups.xml 中找到示例。
示例:
<field name="plan_activity_type_ids" eval="[(4,ref('mycompany.hr_plan_activity_type_employee_model_in_erp')), (4,ref('mycompany.hr_plan_activity_type_create_work_contract'))]"/>
我有一个自定义的odoo模块,它扩展了一些现有的模块,比如hr。我想创建一个包含多个预定义任务的入职计划。
这是我的计划活动类型 xml,它应该可以正常工作。如果我使用此文件更新应用程序,我会在计划类型概述中获得所需的任务。
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="hr_plan_activity_type_create_work_contract" model="hr.plan.activity.type">
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="responsible">manager</field>
<field name="summary">Create work contract</field>
<field name="note">Create the work contract for the employee.</field>
</record>
<record id="hr_plan_activity_type_employee_model_in_erp" model="hr.plan.activity.type">
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="responsible">manager</field>
<field name="summary">Employee model in ERP</field>
<field name="note">Complete the employee model in ERP (AHV, Banking, etc.)</field>
</record>
</odoo>
这是我的 plan.xml,它应该创建一个具有 activity 类型的计划。计划的创建有效,但如果我引用 activity 类型,我将收到一条错误消息。
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Onboarding -->
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids"
eval="[(6,0,[ref('mycompany.hr_plan_activity_type_employee_model_in_erp')])]"/>
<field name="plan_activity_type_ids"
eval="[(4,0,[ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
</record>
</odoo>
在 manifest.py 文件中,我首先加载 plan.activity.type.xml,然后加载 plan.xml,所以这应该不是问题。
这是我在尝试升级自定义模块 mycompany 时收到的错误消息:
File "C:\Program Files (x86)\Odoo 13.0e\server\odoo\addons\base\models\ir_model.py", line 1670, in xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
odoo.tools.convert.ParseError: "External ID not found in the system: hr.plan.activity.type.hr_plan_activity_type_create_work_contract" while parsing file:/c:/users/myuser/appdata/local/openerp%20s.a/odoo/addons/13.0/mycompany/data/hr/plan.xml:2, near
<odoo>
<!-- Onboarding -->
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" ref="hr.plan.activity.type.hr_plan_activity_type_create_work_contract"/>
</record>
有没有人有什么想法?
您的参考 ID 有误。 hr.plan.activity.type.hr_plan_activity_type_create_work_contract
是错误的。您在参考文献中只得到一个 .
。它的 [<module_name>.]ext_id_of_object
.
如果您从同一模块引用对象,则不必使用模块 name.part
如果可以看到数据库 tables。那么你引用的东西在 table ir_model_data
因此,如果您引用的东西在您自己的模型中,那么您不能只使用 hr_plan_activity_type_create_work_contract
作为参考或 your_model_name.hr_plan_activity_type_create_work_contract
存储在 ir.model.data
中的字符串标识符可用于在数据导入或 export/import
往返期间引用记录而不考虑其数据库标识符。
外部标识符的格式为 module.id
(例如 account.invoice_graph
)。从模块内部,模块。前缀可以省略。
有时称为 xml id
或 xml_id
,因为 XML-based 数据文件广泛使用它们。
在您的示例中,您使用了数据库中可能不存在的 model_name.id
来引用 hr_plan_activity_type_create_work_contract
记录,您只需将模型名称替换为模块名称即可。
从日志信息中可以看出模块名称为mycompany
,尝试将型号名称替换为mycompany
:
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" ref="mycompany.hr_plan_activity_type_create_work_contract"/>
</record>
更新:plan_activity_type_ids
是一个 x2many 字段
使用special commands格式设置x2many字段值:
<record id="hr_plan_onboarding" model="hr.plan">
<field name="name">Onboarding</field>
<field name="plan_activity_type_ids" eval="[(6,0,[ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
</record>
编辑:只有第一个出现在 GUI 中
要用 ids
列表(使用“(6, 0, ids)”)替换集合中的所有现有记录,您可以在三元组内提供一个 ID 列表。您可以在基本模块内的 res_partner_demo.xml 中找到示例。
示例:
<field name="plan_activity_type_ids" eval="[(6,0,[ref('mycompany.hr_plan_activity_type_employee_model_in_erp'), ref('mycompany.hr_plan_activity_type_create_work_contract')])]"/>
要将 ID 为 id
的现有记录添加到集合中(使用 (4, id)
),您需要为每个三元组提供一个 ID。您可以在基本模块内的 base_groups.xml 中找到示例。
示例:
<field name="plan_activity_type_ids" eval="[(4,ref('mycompany.hr_plan_activity_type_employee_model_in_erp')), (4,ref('mycompany.hr_plan_activity_type_create_work_contract'))]"/>