当我们操作 OpenERP 的菜单时,通常是点击菜单(如销售 -> 客户),跳出对象选择画面,当 选择一条记录时,跳出对象编辑画面。
对象选择画面、对象编辑画面,在 OpenERP 里称为视图(View),选择画面是看板视图 (Kanban View)和列表视图(Tree View),编辑画面是表单视图(Form View)。OpenERP 里的对 象(Object),也叫 Model,相当于我们一般说的类(Class),对象总是对应到数据库里的数据表。 例如业务伙伴对象,其对象名是“res.partner”,对应表名是“res_partner”。表里的一条记录,也 就是对象的一个实例,叫资源(Resource)。
当点击菜单时,系统怎么知道应该跳出哪个画面,以及应该显示哪个对象的记录呢?把菜单和对 应的对象、视图关联起来的是 Action。当用户点击菜单时,触发 Action,Action 调用对象的 Search 方法,从数据库取得记录(资源),Action 又创建视图,显示取得的数据。 简单总结一下,OpenERP 的开发中,有如下一些重要概念:
对象或模型(Object or Model):是一个 Python 的 Class,也对应到数据库的一张数据表,负责 存取数据记录(Record),有 Search、Read、Write 等方法。OpenERP 在模块加载时,初始化 模块中的所有对象,放入对象池。因此,数据库操作时,通常是先从对象池中取得对象,再调用 对象的方法。下面分析一段典型的记录查找和读取代码。
这段代码来自文件 server\addons\base\res\ res_user.py,它先从对象池取得对象'ir.model.data', 该对象负责存取数据表 ir_model_data。而后调用该对象的方法_get_id 取得 admin 用户的 user_id,再读入 admin 对应的 user 记录的 id。
视图(View):负责显示数据,最常见的视图是列表视图和表单视图。此外,还有看板、日历、 甘特图、图形、流程图等几种视图,不同的视图以不同的方式展示数据。本章主要介绍列表和表 单,另外几种视图以后介绍。
菜单(Menu):这个很直观,不用介绍了。
动作(Action):用户操作系统时(如点击菜单、点击画面右边的工具条上的按钮等),系统的 响应动作。一个 Action 包含一个对象,包含若干个视图,通常每个 Action 都包含列表和表单两个 视图。当 Action 被触发时,相应的视图被调出,展示相应的对象的数据。Action 有多种类型,最 常见的是 Act_Window(窗口类型),窗口类型跳出一个窗口以显示数据。此外还有 Report(报 表)、Wizard(向导)等类型。本章主要介绍窗口类型。
上述概念间的关联关系,参见如下操作序列图:
例如,当打开一个财务凭证时(对象 account.invoice),客户端发生的动作链是: