1

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

<?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 数据文件中使用哪个记录元素来擦除这些记录?

4

2 回答 2

8

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

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

或者您可以使用 Yucer 所说的功能标签

于 2013-09-14T05:46:08.630 回答
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
于 2013-09-13T06:27:21.123 回答