删除OpenERP上的模块升级记录

时间:2013-09-13 06:11:33

标签: openerp

我有一个应用程序模块,用于加载员工以进行数据库初始化 上一个模块版本中的自定义数据:

<?xml version="1.0"?>
<openerp>
    <data>
        ....
        <!-- John Smith -->
        <record id="emp_john_smith" model="hr.employee">
            <field name="name">John Smith</field>
            <field name="company_id" ref="base.main_company"/>
            <field name="department_id" ref="dp_production"/>
            <field name="job_id" ref="jb_production_officer"/>
            <field name="work_email">john@company.com</field>
            <field name="begin_date">2012-01-01</field>
            <field name="gender">male</field>
            <field name="work_location">Madrid</field>
            <field name="lang">es_ES</field>            
        </record>
    ....
    <record id="ctr_john_smith_hr" model="hr.contract">
        <field name="name">John Smith Production Contract</field>
        <field name="employee_id" ref="emp_john_smith"/>
        <field name="job_id" ref="jb_production_officer"/>
        <field name="email">john@company.com</field>
        <field name="date_start">2012-01-01</field>
        <field name="wage">0</field>
        <field name="percent_working_hours">15</field>
        <field name="working_hours" ref="spain_calendar"/>
    </record>
    </data>
</openerp>

但是必须在该模块的下一个版本中删除这些记录。我应该在下一个版本的XML数据文件中使用哪个记录元素来删除这些记录?

2 个答案:

答案 0 :(得分:4)

您可以在xml中使用delete标记。 不要删除您在xml文件中创建的xml数据记录。在新版本中,只需在文件末尾添加删除标记。

<delete id="module_name.xml_record_id" model="hr.employee"/>

或者你可以使用函数标签作为Yucer说

答案 1 :(得分:1)

此代码应该有效:

<?xml version="1.0"?>
<openerp>
    ....
    <data>
        <!-- removes John Smith-->
        <function model="hr.contract" name="unlink">
            <function eval="[[('employee_id', '=', ref('emp_john_smith'))]]" model="hr.contract" name="search"/>
        </function>
        <function model="hr.employee" name="unlink">
            <!-- ids = -->   <value eval="[ref('emp_john_smith')]"/>
        </function>
    </data>
</openerp>

但它有点冒险删除hr.employee,因为它有很多相关的实体。也许更好地“停用”它们就像这样:

<?xml version="1.0"?>
<openerp>
    ....
    <data noupdate="1">
        <!-- deactivates John Smith -->
        <function model="hr.employee" name="deactivate">
            <!-- ids = -->   <value eval="[ref('emp_john_smith')]"/>
        </function>
    </data> 
</openerp>

其中,deactivate是这样的方法:

class hr_employee(Model):
    _name = str('hr.employee')
    _inherit = str('hr.employee')

    def deactivate(self, cr, uid, ids, context=None):
        if isinstance(ids, (int, long)):
            ids = [ids]
        vals = {'active': False}
        res = super(hr_employee, self).write(cr, uid, ids, vals, context)
        return res