diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml
index c1807d29a2c..9f280ed6564 100644
--- a/bin/addons/base/ir/ir.xml
+++ b/bin/addons/base/ir/ir.xml
@@ -609,13 +609,21 @@
form
@@ -628,9 +636,10 @@
+
-
+
@@ -961,7 +970,7 @@
-
+
diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py
index a4b6923c672..f1a50143ef3 100644
--- a/bin/addons/base/ir/ir_ui_view.py
+++ b/bin/addons/base/ir/ir_ui_view.py
@@ -66,10 +66,12 @@ class view(osv.osv):
'arch': fields.text('View Architecture', required=True),
'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade'),
'field_parent': fields.char('Child Field',size=64),
+ 'xml_id': fields.function(osv.osv.get_xml_id, type='char', size=128, string="XML ID",
+ method=True),
}
_defaults = {
- 'arch': lambda *a: '\n\n\t\n',
- 'priority': lambda *a: 16
+ 'arch': '\n\n\t\n',
+ 'priority': 16
}
_order = "priority"
_constraints = [
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index e3514df8ae0..e9d60d93c84 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -3923,5 +3923,26 @@ class orm(orm_template):
return False
return True
+ def get_xml_id(self, cr, uid, ids, *args, **kwargs):
+ """Find out the XML ID of any database record, if there
+ is one. This method works as a possible implementation
+ for a function field, to be able to add it to any
+ model object easily, referencing it as 'osv.osv.get_xml_id'.
+
+ get_xml_id(cr, uid, ids) -> { 'id': 'module.xml_id' }
+
+ :return: the fully qualified XML ID of the given object,
+ defaulting to an empty string when there's none.
+ """
+ result = dict.fromkeys(ids, '')
+ model_data_obj = self.pool.get('ir.model.data')
+ data_ids = model_data_obj.search(cr,uid,
+ [('model','=',self._name),('res_id','in',ids)])
+ data_results = model_data_obj.read(cr,uid,data_ids,
+ ['name','module','res_id'])
+ for record in data_results:
+ result[record['res_id']] = '%(module)s.%(name)s' % record
+ return result
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: