XML 数据序列化
4.2版本之后, OpenERP 提供基于XML的数据序列化格式.
基本的 OpenERP XML 文件格式如下:
<?xml version="1.0"?>
<openerp>
<data>
<record model="model.name_1" id="id_name_1">
<field name="field1">
field1 content
</field>
<field name="field2">
field2 content
</field>
(...)
</record>
<record model="model.name_2" id="id_name_2">
(...)
</record>
(...)
</data>
</openerp>
Fields 内容是 strings 类型,保存在以 UTF-8 编码的 XML 格式的文件中.
下面是一个来自 OpenERP 的源码的例子 (base_demo.xml 在 base 模块中):
<record model="res.company" id="main_company">
<field name="name">OpenERP SA</field>
<field name="partner_id" ref="main_partner"/>
<field name="currency_id" ref="EUR"/>
</record>
<record model="res.users" id="user_admin">
<field name="login">admin</field>
<field name="password">admin</field>
<field name="name">Administrator</field>
<field name="signature">Administrator</field>
<field name="action_id" ref="action_menu_admin"/>
<field name="menu_id" ref="action_menu_admin"/>
<field name="address_id" ref="main_address"/>
<field name="groups_id" eval="[(6,0,[group_admin])]"/>
<field name="company_id" ref="main_company"/>
</record>
最后的字段定义的 admin user :
登录,密码等字段比较直接.
ref 属性用于填充两个记录之间的关系 :
<field name="company_id" ref="main_company"/>
company_id 字段是一个多对一(many2one) 从USER对象到 COMPANY 对象, main_company 是关系的 id.
eval 属性允许将一些 python 代码放进 xml 中: 这里 groups_id 字段是一个多对多(many2many)的关系. 对于这样一个字段, “[(6,0,[group_admin])]“ 的意思为 : 删除所有与当前用户相关的组,并使用 [group_admin] 作为新的关联组 (and group_admin 是另一个记录的 id ).
search 属性允许你在不指定 xml id 的情况下. 查找相关的记录. 你可以指定一个搜索条目来寻找想要查询的字段. 条目是一个 tuple 的 lists 用于预定义的搜索方法, 如果有多个结果, 通常选中(第一个):
只是 search 在演示数据的一个经典的例子:这里我们并不关心用哪一个 partner 来进行测试,所以我们给出一个空的 list . 注意 model 属性是必须的.
一些典型的 XML 元素描述如下.
记录标签
通过 record 标签来实现新数据的添加. 这里 : model 属性是必须的. Model 是插入数据的对象名. 它还有一个可选的属性: id. 如果给出该属性, 在同一个文件中, 这个名字对应的变量将在以后使用, 以便生成新产生资源 ID 的引用.
一个 record 标签可以包含多个 field 标签. 他们指定了记录的 fields 值. 如果不指定一个 field 默认值将会被使用.
例子
<record model="ir.actions.report.xml" id="l0">
<field name="model">account.invoice</field>
<field name="name">Invoices List</field>
<field name="report_name">account.invoice.list</field>
<field name="report_xsl">account/report/invoice.xsl</field>
<field name="report_xml">account/report/invoice.xml</field>
</record>
field tag
对应的属性如下:
name
o 必须的属性,用于指定字段名称
eval
o 用于指定添加值的 python 语句
ref
o 定义在此文件中的 id 的引用
function tag
model:
name:
eval
o 用于评价将被调用的方法的属性列表,包括 cr 和 uid
例子
<function
model="ir.ui.menu"
name="search"
eval="[[('name','=','Operations')]]"/>
getitem tag
采用标签最后一个子节点的子集.
type
- int 或 list
index
int or string
例子
节点返回的一个 ids 的列表的第一个元素:
<getitem index="0" type="list">
<function
model="ir.ui.menu"
name="search"
eval="[[('name','=','Operations')]]"/>
</getitem>