`
xiaolin0199
  • 浏览: 573170 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OpenERP对象访问

 
阅读更多

 

    OpenERP的所有资源(Resource)都是对象,如 menus, actions, reports, invoices, partners 等等。换言之,在OpenERP中,一个菜单项,一个弹出窗口,其实都是一条数据库记录。OpenERP运行时,从数据库读出“菜单项”记录,根据该记录 的信息,在屏幕上显示菜单项及其子菜单项。

 

     因此,理论上,可以不写代码,而是直接修改OpenERP的数据库而编写功能菜单、查询窗口、动作按钮等实现业 务功能开发

 

     实际开发中,通常是编写XML文件,导入菜单、窗口、动作等编程元素,实现功能开发。XML文件比直接修改数据库或编写SQL语句更容易使用 一些。
   

OpenERP通过自身实现的对象关系映射(ORM,object relational mapping of a database)访问数据库。

 

OpenERP的对象名是层次结构的,就是说可以使用"."访问树状对象,如:
· account.invoice : 表示财务凭证对象。
· account.invoice.line : 表示财务凭证对象中的一个明细行对象。

    通常,对象名中,第一级是模块名,如: account, stock, sale 等。比之直接用SQL访问数据库,OpenERP的对象的优势有:

        1)直接使用对象的方法增、删、改数据库记录。因为OpenERP在基类对象中实现了常 规的增、删、改方法,因而,普通对象中不需要写任何方法和代码就具备增、删、改数据库记录的功能。

        2)对于复杂对象,只需操作一个对象即可访问多张数据 表。如partner对象,它的信息实际上存储在多张数据表中(partner address, categories, events 等等),但只要通过"."操作即可访问所有关联表(如,partner.address.city),简化了数据库访问。


    注意,在其他编程语言或开发平台(如Java or JavaEE)中,一个对象(Object)通常和数据库中一条记录(Record)相对应。但是,OpenERP的对象其实是一个Class,它和一个 数据表(Table)对应,而不是和一个记录(Record)对应。在OpenERP中,数据库记录(Record)通常叫资源(Resource)。因 为Object操作的是数据表,OpenERP的对象的方法(Method)中,几乎每个方法都带有参数ids,该参数是资源(Resource or Record)的ID(在OpenERP中ID是主键)列表,通过该ids就可以操作具体的Record了。

 

 

访问OpenERP对象

OpenERP提供了三种方式执行对象的方法(Method),每种方式都是先取得对象,然后调用对象的方法。三种方式是,1)直接使用对象,2)通过netservice使用对象,3)通过xmlrpc使用对象。

1)直接使用对象

这种方式最简单,这种方式只能在OpenERP Server端使用,编写OpenERP的模块时候,通常使用这种方式。这个方式的内部实现原理是,OpenERP加载模块(不是安装,是启动时加载已安装模块)时,会将创建模块中的对象实例,对象实例以对象名为关键字,存储在对象池(pool)中。此方式是,从pool中取得对象,而后调用对象的方法。
这个方式的一般调用形式是:
    obj=self.pool.get('name_of_the_object')
    obj.name_of_the_method(parameters_for_that_method)
第一行代码从对象池中取得对象实例,第二行代码调用对象的方法。

 2)通过netservice使用对象

这个方式和直接使用对象的方式是类似的,只是不以对象的方式呈现,而是以“服务”(Service)的方式呈现。这种方式也只能在OpenERP Server端使用,即调用程序和OpenERP Server程序在同一个Python虚拟机上运行。这个方式的内部实现原理是,类似对象池,OpenERP有一个全局变量的服务池:SERVICES,该变量位于bin\netsvc.py。有一些对象,它在创建时(__init__方法中)将自己提供的服务登记在服务池中,并暴露自己的服务方法(即该服务可供调用的method)。和对象池不同的是,服务可以有选择性的暴露自己的方法。OpenERP的工作流(Workflow)、报表(Report)都以服务的形式暴露自己的方法,关于OpenERP可供使用的服务有哪些,将在以后介绍。这个方式调用形式如下:
    service = netsvc.LocalService("object_proxy")
    result = service.execute(user_id, object_name, method_name, parameters)
第一行指定服务名取得服务,"object_proxy"是osv.osv对象初始化时注册的一个服务,这个服务可用于调用OpenERP的几乎所有对象(准确的说是所有从osv.osv派生的对象)。"object_proxy"服务用于调用对象的方法。第二行是其调用格式,execute是该服务暴露的一个服务方法,该方法的参数说明如下:
user_id: 用户id,以用户名、密码登录后取得的id。
object_name: 对象名,欲访问的对象的名称,如"res.patner"等。
method_name: 方法名,欲调用的方法的名称,如"create"等。
parameters: 方法的参数。

 

3)通过xmlrpc使用对象。

这个方式相当灵活,它以HTTP协议远程访问对象,因此,能在本机、局域网、广域网范围调用OpenERP的对象的方法。该方式的调用形式是:
sock = xmlrpclib.ServerProxy('http://server_address:port_number/xmlrpc/object')
result = sock.execute(user_id, password, object_name, method_name, parameters)
参数说明如下:
server_address: 运行OpenERP Server的机器的IP或域名。
port_number: OpenERP Server的xmlrpc调用端口,缺省情况是8069。
execute的参数和Netservice方式相同,只是多了个password参数,该参数即用户的登录密码。

XML-RPC方式参考例子。这个例子以xmlrpc方式调用OpenERP的对象res.partner,在数据库中插入一条业务伙伴及其联系地址记录。因为含有中文,测试时注意代码文件保存成utf-8格式:

   例子:

# -*- encoding: utf-8 -*-
import xmlrpclib  #导入xmlrpc库,这个库是python的标准库。
username ='admin' #用户登录名
pwd = '123' #用户的登录密码,测试时请换成自己的密码
dbname = 'case1' #数据库帐套名,测试时请换成自己的帐套名
# 第一步,取得uid
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
#replace localhost with the address of the server
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')

# 调用res.partner对象的create方法在数据库中插入一个业务伙伴
partner = {
    'name': 'shine-it',
    'lang': 'zh_CN',
}
partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)

# 下面再创建业务伙伴的联系地址记录
address = {
    'partner_id': partner_id,
    'type' : 'default',
    'street': '浦东大道400号',
    'zip': '200000',
    'city': '上海市',
    'phone': '021-88888888',
}
address_id = sock.execute(dbname, uid, pwd, 'res.partner.address', 'create', address)

 

分享到:
评论

相关推荐

    openerp.zip_openERP

    2. 数据模型:OpenERP通过定义对象来构建数据模型,每个对象代表一类实体,如客户、产品等。对象包含字段,字段定义了对象的数据结构。 3. 视图:视图是用户界面的表现形式,包括树状视图、列表视图、表单视图等,...

    OpenERP 文档

    - **OpenERP Web**: OpenERP 的前端用户界面,支持通过浏览器访问。 - **模块**: OpenERP 中的最小功能单位,每个模块实现特定的功能。 **1.2 创建一个 OpenERP Web 模块** - **一个基本模块**: - 模块的基本结构...

    openerp部署训练文档

    以上就是Openerp部署训练文档的主要内容,涵盖了OpenERP的安装、模块构建、视图构建、对象间关系、继承、域和功能字段、高级视图、基于组的访问控制机制、向导对象、工作流、安全性、国际化、报告、仪表板、网络服务...

    (已压缩)OpenERP应用和开发基础(1-12).pdf

    数据访问功能开发允许创建和修改业务对象,如产品、客户和订单。工作流开发则涉及到业务流程自动化,报表开发则帮助生成各种业务报告。 #### 1.5 选择OpenERP的原因 OpenERP因其开源特性、丰富的模块化设计、易于...

    OpenERP_OSCG简介

    OpenERP提供了高度的定制能力,用户可以通过简单的操作实现用户界面、业务流程和业务对象的定制。这种灵活性使得企业能够更轻松地适应不断变化的市场环境和技术趋势。 #### 三、OpenERP与企业信息化 随着信息技术...

    OpenERP进销存实例.pptx

    - **权限组(res_groups)**:定义不同用户角色及其访问权限,包括菜单、对象访问和记录规则。 - **权限控制**:包括字段访问权限和工作流审批权限,精细控制用户操作。 - **菜单权限**:设置用户可访问的菜单,...

    OpenERP_Technical_Memento_v0.6.3 PDF 电子书

    - **对象关系映射(ORM)支持**:集成的ORM支持使得数据库操作更加简单高效。 - **模板化的MVC接口**:模型-视图-控制器(MVC)设计模式的使用让应用程序更加灵活和易于维护。 - **报告生成系统**:自动化的报告生成...

    openerp源码编译缺少的模块包win64、python2.7

    1. **pywin32-218.win-amd64-py2.7.exe**:这是一个Python扩展模块,提供了对Windows API的访问,对于在Windows系统上编写系统级别的Python脚本或应用非常有用,对于OpenERP这样的服务器软件来说可能是必需的。...

    Python-OdooOdoo原来的OpenERP帮助增长您业务的开源APP

    Odoo(原OpenERP)是一个全面的企业级开源应用程序套件,它利用Python编程语言的强大功能,为企业提供了一系列功能丰富的模块,旨在优化和自动化各种业务流程。这个强大的平台涵盖了从财务管理、销售、采购、项目...

    erp架构简述

    - ORM层负责将数据对象映射到数据库中,简化了数据库访问过程。 - ORM机制使得开发人员可以更加关注业务逻辑而无需关心底层数据库的具体实现。 - **基础模块分布(BMD)** - BMD是一个基础模块,对于系统来说是...

    开源Tryton ERP Win 客户端 版本:tryton-64bit-6.0.15.exe

    Python Tryton 源于 TinyERP 项目(后来的 OpenERP,然后是 ODOO),并从 2008 年开始开发。 Tryton 可以在所有主要平台(Windows、Linux、BSD、OS X)上运行。 Tryton 提供的网络技术和我们的软件组件可以通过现代...

    开源Tryton ERP Win 客户端 版本: tryton-64bit-6.4.1.exe

    Python Tryton 源于 TinyERP 项目(后来的 OpenERP,然后是 ODOO),并从 2008 年开始开发。 Tryton 可以在所有主要平台(Windows、Linux、BSD、OS X)上运行。 Tryton 提供的网络技术和我们的软件组件可以通过现代...

    开源Tryton ERP Win 客户端 版本: tryton-64bit-6.2.exe

    Python Tryton 源于 TinyERP 项目(后来的 OpenERP,然后是 ODOO),并从 2008 年开始开发。 Tryton 可以在所有主要平台(Windows、Linux、BSD、OS X)上运行。 Tryton 提供的网络技术和我们的软件组件可以通过现代...

    开源Tryton ERP Win 客户端 版本: tryton-64bit-6.4.exe

    Python Tryton 源于 TinyERP 项目(后来的 OpenERP,然后是 ODOO),并从 2008 年开始开发。 Tryton 可以在所有主要平台(Windows、Linux、BSD、OS X)上运行。 Tryton 提供的网络技术和我们的软件组件可以通过现代...

    Odoo_10_Development_Essentials

    此外,对于如何使用Odoo提供的各种业务对象(如记录集、模型、视图)执行操作也是必要的知识。 知识点七:性能优化和测试 在开发Odoo应用时,性能优化和测试是不可忽视的方面。开发者应该了解如何优化数据库查询,...

    Odoo-Talend-Component:Talend Open Studio 的输入和输出组件(数据集成)

    tOpenERPInput 用于读取对象 tOpenERPOutput 用于对象创建、更新和对象删除 包括一个示例 Talend Job(版本 5.3)。 只需创建一个新的 Talend-Job 并使用 File/Import。 有关使用组件属性的更多信息和说明,请访问...

    Odoo90模块开发全流程.docx

    - **`security/ir.model.access.csv`**:定义访问权限。 - **`templates.xml`**:视图定义文件。 #### 三、模块创建流程 1. **使用Odoo CLI创建模块**: - 使用`odoo.py scaffold <module_name> ...

    openobject-features

    ### OpenERP对象特性详解 #### 一、企业经营管理 ##### 销售管理 **关键点:** - **销售流程优化**:通过自动化工具简化销售流程,提高效率。 - **客户关系管理**:维护完整的客户数据库,包括联系信息、交易...

    Python库 | ERPpeek-1.0.tar.gz

    ERPpeek是一个基于Python的开源工具,专为Odoo(原OpenERP)企业资源规划系统提供了一个强大的命令行接口。这个库允许开发者、管理员和分析师直接通过命令行与Odoo数据库进行交互,执行各种操作,如数据导入导出、...

    Odoo.11.Development.Cookbook.2nd.Edition pdf

    3. Odoo数据库和对象模型:Odoo使用自己的对象关系映射(ORM)系统,该系统通过模型定义了数据结构,理解如何使用Odoo的对象模型对于进行有效开发是至关重要的。 4. Odoo的业务逻辑编程:Odoo框架内部使用Python...

Global site tag (gtag.js) - Google Analytics