This is the documentation for older versions of Odoo (formerly OpenERP).

See the new Odoo user documentation.

See the new Odoo technical documentation.

开发模块

简介

这里有OpenRPM项目中额通讯组织信息。其中包括了使用不同工具的描述,不同参与者的角色,以及对改进管理的不同过程。

整个组织都是通过launchpad: http://launchpad.net 上的项目来管理的。OpenERP在OpenERP的项目的组织方式是像这样的:

项目名称(Project name)

URL

描述(Description)

openobject

https://launchpad.net/openobject

主超项目(super-project,群组),主要管理bug、特征以及常见问题及回答(FAQ)

openobject-bi

https://launchpad.net/openobject-bin

business intelligence project

openobject-server

https://launchpad.net/openobject-server

the openobject server

openobject-client

https://launchpad.net/openobject-client

the openobject application client (gtk)

openobject-client-web

https://launchpad.net/openobject-client-web

the openobject web client (previously called eTiny)

openobject-addons

https://launchpad.net/openobject-addons

the project for all modules about openobject

openerp

https://launchpad.net/openerp

packaging around openobject (a selection of modules to build applications)

获取源码

请参考Bazaar章节中 怎么获取最新的代码

如果你不知道Bazaar版本控制系统,请阅读 Bazaar文档 (documentation on Bazaar <bazaar-link>)

编码指南

Development Guidelines

模块

模块中的文件组织

模块的结构应该如下:

/module_name/
/module_name/__init__.py
/module_name/__terp__.py
/module_name/module.py
/module_name/module_view.xml
/module_name/module_wizard.xml
/module_name/module_report.xml
/module_name/module_data.xml
/module_name/module_demo.xml
/module_name/module_security.xml
/module_name/wizard/
/module_name/wizard/__init__.py
/module_name/wizard/wizard_name.py
/module_name/wizard/wizard_name_view.xml
/module_name/wizard/wizard_name_workflow.xml
/module_name/report/
/module_name/report/__init__.py
/module_name/report/report_name.sxw
/module_name/report/report_name.rml
/module_name/report/report_name.py
Naming Objects and fields
权限

每个你的模块定义的对象中必须至少定义一个安全规则,使其可以被访问。

Development

编码指南

遵从Python PEP 8: http://www.python.org/dev/peps/pep-0008/

报表

一般风格
  • 在每个地方使用Helvetica字体

  • 留白(单位 毫米)

    • 顶部 top: 14

    • 下部 bottom: 16

    • 左侧 left: 介于12到13之间,以便于打孔时避免打孔到文本区域

    • 右侧 right: 介于12 和 13之间

    注解

    在页首和页面本体之间的分割线可以与左两边的留白有一些重叠:左侧最多9毫米,右侧最多12毫米。

  • 标题中使用 Helvetica-Bold 字体,大小为 14.5

  • 把上下文信息context放到每篇报告:例如,对于会计平衡:上下文是财务年度和期间

  • 对同一个单元格,如果名称中包含有多个单词,单词的首个字母使用字母,例如:Date Ordered (订购日期)

  • 内容和单元格的名称应该有相同的识别号

  • 对于报表,我们能够定义两种数组

    • 一般信息数组,如参考、日期、...,使用:

      • 单元格名称使用 Bold-Helvetica 字体,大小 size=8

      • 目录用 *Helvetica*字体,大小 size="8"

    • 详细信息数组,使用:

      • 单元格名称,用 Helvetica-Bold 字体,大小为 size 9

      • 目录用 Helvetica 字体,大小 size 8

Headers and footers for internal reports:
  • 内部报表 = 所有财务报表和其他内部使用的报表(不是发送给客户的)

  • 表头的高度应该稍小一些

  • 内部报告(报表),去掉公司页首和页脚(在内部报告(报表)中使用简化的页首页脚,只包括公司名称、报表标题、打印日期和页数页面

  • 表头 header:

    • 公司名: 在每一页的(表头)中间

    • 报表名称:居中打印在表头之后

    • 打印日期:不是在报表的中间,而是在表头的左侧

    • 页码:打印在在每一页的右侧。页码应该包括当前页码和总页数。例如:3/15

  • 页尾

    • 为避免浪费纸张,我们已经取消了页脚

table line separator:
  • 表格的每行之间使用浅灰色的线条分隔开来是比较好的方法

  • 只在包含一般信息的数组的列之间的使用浅色的分隔线条

table breaking
  • 表头至少包含两个数据行(不要在页面的底部单独使用表头)

  • 当一个较大的表格被分隔,表头应该在每页重复

how to differentiate parents and children ?
  • 当存在多于一个曾阶时。使用这些风格:

  • 第一阶和第二阶使用: 大小 fontSize="8.0" 字体 fontName="Helvetica-Bold"

  • 第三阶,使用: 字体 fontName="Helvetica" 大小 fontSize="8.0" 并每阶增加缩进 13 (pixels)

  • 当元素是父元素时, 在小计下方划线

模块

命名惯例

模块名称都用小写字母,每个单词之间使用下划线分隔。应该使用最相关的单词,最好包含其依赖的模块的名称。

示例:

  • account_invoice_layout

信息需求

每个模块必须至少包含:

  • 名称

  • 描述

模块描述

关联性

每个模块必须包含:

  • 在其他模块中被依赖的模块的列表: ['account','sale']

    • 只列出最高级别的依赖,不需要设为['account','base','product','sale']

  • A version requirement string where base is the OpenERP version as a Python expression

    • account>=1.0 && base=4.4

模块内容

每个模块必须包含模块定义的每个对象的演示数据

如果你在模块中实现了工作流,则需要创建演示数据,并且能购用这些数据通过工作流中定义的各个分支。你可以使用模块记录器来帮你建立这些演示数据。

User Interface Guidelines

Views

Objects with States
  • The state field, if any, must be at the bottom left corner of the view

  • Buttons to make the state change at the right of this state field

搜索条件

搜索准则:搜索所有列表视图所有可用列

Action Names

Wizards

术语

默认语言

每个开发项目的默认的语言必须是 英语(美国)。

除了连接字符,菜单和字段第一个字母使用大写字母:

  • 会计科目表

字段命名惯例

  • Avoid generic terms in fields and use if possible explicit terms, some example:

    • Name -> Sale Order Name

    • Parent -> Bill of Material Parent

    • Rate -> Currency Rate Conversion

    • Amount -> Quantity Sold

Here are some rules to respect:

  • many2one字段应使用正则表达式: '.*_id'

  • one2many字段应使用正则表达式: '.*_ids'

  • one2many关系表应使用正则表达式: '.*_rel'

  • many2many 字段应使用正则表达式: '.*_ids'

  • 使用下划线分隔单词

  • 避免使用大写

  • 如果字段有几个单词组成时,使用最重要的单词开头

    • This is good: sale_price, partner_address_id

    • This is bad: is_sellable

Object Naming Conventions

  • All objects must start by the name of the module they are defined in.

  • 如果对象由多个单词组成,使用点分隔单词

Some terms

  • 所有资源树被称为 XXX's Structure(XXX结构) ,除非已经定义了专有名词

    • 好的定义: 位置结构(Location' Structure), 会计科目(表)(Chart of Accounts), 分类结构(Categories' Structure)

    • 不好的: 种类树视图, 物料清单树视图

Module Recorder

Review quality

  • You can check your module quality using "base_module_quality" module available on stable addons