openERP笔记,自定义开发模块
##目标
- OpenERP模块基本结构
- 使用模块添加额外的字段(Date Required和Rush Order)
- 扩展视图, 让OpenERP能够显示新的字段
- 修改用于OpenERP工作流的可用状态
##创建第一个OpenERP模块
不修改OE源码情况下写自己的模块扩展OE是OpenERP框架一个很好的特性. 我们所做的所有修改都放在我们自己的目录, 自己的文件中.
每个OE模块能够被OE框架正确认识并安装, 一旦成功安装了我们的模块, OE框架将会用该模块的功能扩展OE.
##指定一个目录保存我们的OE模块
两种方式:
- 在OE的addons目录下保存我们的模块;
- 创建一个独立的目录保存我们的模块, 这种方式的有点是能够将OE标准模块与我们的模块分开.
对于第二种方式, 需要修改OE的配置文件:
[options]
admin_passwd = admin
db_user = jeff
db_password = greater
addons_path = /home/openerp/server/addons,/home/mymodules
这样, home目录下的mymodules目录中保存我们定制的OE模块.
##模块目录内容
在OE的addos目录下(addons_path中设定)创建一个目录silkworm保存我们的silkworm模块. 在silkworm目录下创建两个文件:
- __init__.py
- __openerp__.py
__init__.py文件的目的是指定该模块中想要包含的Python文件(不用管文件的扩展名).
import silkworm
__openerp__.py文件是OE模块的清单文件, 向OE框架说明该模块的一些属性. 这个文件有时也被称为模块描述文件, 用Python中的字典(dictionary)描述.
{
'name': 'Screen Printing',
'version': '1.0',
'description': """
This module adds functionality for
screen printing companies
""",
'author': 'Greg Moss',
'depends': ['base','sale'],
'data': ['silkworm_view.xml'],
'demo': [],
'installable': True,
'auto_install': False,
}
在安装OpenERP模块时, __openerp__.py文件给出框架配置该模块所需的各种信息.
- name: 显示在OpenERP模块列表中;
- version: 模块版本号;
- description: 安装模块时显示;
- author: 作者;
- depends: 前面几项(name, version等)是用于文档的说明性的元素, depends告诉框架这个模块是建构在哪些其他模块基础上的. 至少要依赖于base, 本例中因为扩展了sales order系统, 所以也要依赖于sale模块;
- data: 指定模块的xml视图文件. 如果希望改变OE的forms或UI, 创建一个视图文件. 其他类型的数据文件也可以在这里指定, 例如包含初始化数据或访问权限的数据. 本例中只有一个文件silkworm_view.xml文件;
- demo: OE提供了一种方便的方式来包含定制模块的说明数据, 本例中留空, 但是如果希望在模块安装时可以添加一些说明数据, 用这项指定;
- installable: 使用此项可以临时禁止一个模块的安装;
- auto_install: 如果此项为True, OE将会在该模块的所有依赖项安装好之后自动安装这个模块, 大部分情况下不会指定自动安装.
##silkworm.py中扩展OpenERP模型
为了向我们的sales order添加Date Required和Rush Order字段, 首先创建silkworm.py文件, 然后添加下面的代码到silkworm.py文件中:
from openerp.osv import osv, fields
class silkworm_sale_order(osv.Model):
_inherit = 'sale.order'
_columns = {
'x_daterequired': fields.date('Date Required', required=True),
'x_rush': fields.boolean('Rush Order'),
}
###继承sales order
代码中, 创建了一个silkworm_sale_order类, 派生自osv.Model, Python的OO继承.
_inherit_ = ‘sale.order’, 这一句指出这个类继承了sale.order, OpenERP的继承.
_columns字典列出了我们向sales order模块添加的两个自定义字段.
###将自定义字段添加到sales order视图中
__openerp__.py文件中的’data’指定了视图xml文件, silkworm_view.xml.
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="sale_view_order_form" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="client_order_ref" position="after">
<field name="x_daterequired"/>
<field name="x_rush"/>
</field>
</field>
</record>
</data>
</openerp>
OE中的视图定义使用XML语法. OE视图文件用openerp标记包裹, 下一级是data标记. 为了在自定义的OE模块中修改或添加视图, 添加record标记.
<record id="sale_view_order_form" model="ir.ui.view">
每一个record必须有一个id属性, 另外这里我们指定了这个record的model属性为ir.ui.view.
<field name="model">sale.order</field>
接下来, 应该指定这个record对应的model, 本例中为sale.order, 因为我们为sale.order添加了字段. 如果我们为purchase order添加了字段, 那这里就应该是purchase.order.
在OE的开发模式下, 鼠标移动到字段上可以查看该字段所属的模型; 在开发模式下的Manage Views中, 也可以发现想要使用的view的名字. 这些功能可以方便OpenERP的模块开发.
<field name="inherit_id" ref="sale.view_order_form"/>
类似于我们的模型派生自sale.model, 我们的视图也应该从sale.view_order_form视图派生而来, 这样我们可以增加一些自定义的字段. 开发模式下使用”Manage Views”查看这些信息.
<field name="arch" type="xml">
arch项是所有视图改变都需要的, 不需要知道为什么, 用吧.
接下来就到了给新增的自定义字段指定显示位置了.
<field name="client_order_ref" position="after">
添加字段到form上时, 应该明确地确定这个字段应该放在什么位置. 例如上面的那行代码, 告诉OpenERP框架首先找到client_order_ref字段, 然后在它的后面(position=”after”)显示增加的两个字段.
client_order_ref字段怎么找到的? 只需要激活OE的开发者模式(OE的关于对话框中激活), 打开相应的view, 然后将鼠标悬停在字段的label上即可在tooltip上显示出来.
<field name="x_daterequired"/>
<field name="x_rush"/>
上面这两句向form中添加我们新增的字段显示.
##安装模块
这个例子很简单, 仅仅把两个字段添加到了sales order form中, 这个模块目录中有四个文件:
- __init__.py
- __openerp__.py
- silkworm.py
- silkworm_view.xml
###参数设定
OpenERP addons_path设定
首先./openerp-server -s, 在$HOME/下生成.openerp-serverrc文件, 修改其中的addons_path选项, 增加addons目录. 这里要注意, 多个路径之间用逗号分隔并且不能有空格.
###安装
需要该用户启用了技术特性(设置->用户->编辑->访问权限->勾选”技术特性”).
首先”设置->更新模块列表”, 然后输入过滤关键字找到模块安装. 安装后打开一个sale order(销售订单), 可以看到在”客户关联单号(client_order_ref)”后增加了两个新的字段
openERP笔记,自定义开发模块的更多相关文章
- openERP笔记 自定义模块开发
##需求描述 输入和查询课程,把信息储存到课程对象里 课程包含以下信息:名称,价格,天数,开始日期,教师,学员 每个课程可以有多个学员,要记录学员的姓名.电话.电子邮件 课程可以添加教材和作业等文档附 ...
- OpenERP 使用与开发笔记(一)
一直关注OpenERP,但一直未真正使用.最近一些数据想规范管理,免得使和EXCEL与WORD等到处找,所以想到OpenERP的自定义功能比较好,就再次找来相关资料重新拾掇起来.在这过程中,发现了许多 ...
- OPENERP 中自定义模块 找不到的问题
问题的前提是你写的模块本身没有问题,我自己碰到的情况是在本机运行可以,但是上传到服务器上以后却无论怎么重启服务都找不到模块. 问题的根源在上传的文件权限设置不对: 假设自定义模块为rainsoft_p ...
- python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- 创建和注册自定义 HTTP 模块
本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...
- Python标准库笔记(11) — Operator模块
Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...
- Python标准库笔记(10) — itertools模块
itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...
- 演练:创建和注册自定义 HTTP 模块
本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
随机推荐
- MySQL技术内幕读书笔记(六)——索引与算法之全文索引
全文索引 概述 通过索引字段的前缀进行查找,B+树索引是支持的,利用B+树索引就可以进行快速查询. SELECT * FROM blog WHERE content like 'xxx%'; ...
- SpringBoot中自定义properties文件配置参数并带有输入提示
1. 创建配置类 在项目中创建一个参数映射类如下 @ConfigurationProperties(prefix = "user.info") public class MyPro ...
- jQuery(三) javascript跨域问题(JSONP解决)
加油~ --WH 一.什么是javascript跨域问题? 域:服务器域名,唯一标识(协议,域名,端口)必须保证一致,说明域相同 跨域:在一个服务器上,去访问另一个服务器上,并且得到另一个服务器返回回 ...
- 双网卡双线路DNS解析分析
在企业网络维护过程中我们经常会遇到这样或那样的奇怪问题,而很多问题需要有深厚的理论知识才能解决.而随着网络的飞速发展越来越多的中小企业开始尝试通过多条线路来保证网络的畅通,一方面双网卡下的双线接入可以 ...
- 通过JS页面唤醒app(安卓+ios)
var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appVersion; ret ...
- 浏览器神器--vimium
自从学会了正确的坐姿,坐在电脑一整天腰也不酸了.背也不痛了,精神倍棒吃嘛嘛香 zuomeng.png 但奈何使用鼠标久了,手腕.肩膀依旧疼痛.偶尔逛知乎,看到有人推荐chrome浏览器的vimiu ...
- r里面如何实现两列数据合并为一列
library(dplyr) unite(mtcars, "vs_am", vs, am) Merging Data Adding Columns To merge two dat ...
- 软件工程---gjb438b 质量规范体系
GJB438B 软件设计说明模板 https://mp.weixin.qq.com/s?__biz=MjM5Mzc2NjczMQ%3D%3D&idx=3&mid=2651866777& ...
- Postman-REST-Client_v0.8.1之chrome插件下载
一.前言 安装chrome浏览器postman-rest-client插件,实现基于资源RestFul的http协议的GET.POST.DELETE.PUT等方式请求调用,具体安装使用步骤如下所示 二 ...
- 【OCP、OCM、高可用等】小麦苗课堂网络班招生简章(从入门到专家)--课程大纲
[OCP.OCM.高可用等]小麦苗课堂网络班招生简章(从入门到专家)--课程大纲 小麦苗信息 我的个人信息 网名:小麦苗 QQ:646634621 QQ群:618766405 我的博客:http:// ...