Odoo 8.0深入浅出开发教程(二) Odoo简介

时间:2021-12-09 07:11:58

1 ERP简介

1.1 Odoo历史

Odoo8的前身是“Tiny ERP”,最初是由比利时的Fabien Pinckaers 创建的。

Odoo 8.0深入浅出开发教程(二) Odoo简介

Figure 1: Fabien Pinckaers

到2009年的时候,发布第5版,公司获得风投,盈利增长迅速,软件更名为OpenERP。OpenERP这个名字最为人们熟知,当时软件已经包含几百个模块了,从财务管理、 采购/销售管理、库存管理到人力资源管理、销售点管理、项目管理等等都有。当时可能某些模块的功能已经开始超过传统意义上的ERP(Enterprise Resource Planning,企业资源规划)的定义了(不过最新的ERPⅡ定义则更广泛,下面会有详细的讨论。)。

而在2014年9月,软件发布第8版,在之前版本逐渐优化的web client这一块的基础上,进行了大范围的功能加强。比如有了Website builder模块,可以方便公司快速架构出自己的网站;e-commerce模块方便公司快速搭建销售平台;还有business intelligence这个模块,可以辅助生成高质量的说明演示用的图形等等等等。这使得OpenERP这个名字已经不能很好地说明这个软件的雄心壮志了,于是软件更名为 Odoo 这个名字了,目前最新的版本是Odoo8【预计2015年7月份出Odoo9】。

可以看得出来目前该软件的开发方向就是基于web client/server模型,将公司内部所涉及到的所有的信息流都整合起来,其不仅包括具体实施层面,也包括分析决策层面。可以预见不久的将来Odoo开发将快速为公司构建出这样一个生态圈:

Odoo 8.0深入浅出开发教程(二) Odoo简介

1.2 ERPⅡ或商业智能化

随着信息时代的到来,商业也不可避免地走向信息化,智能化。最新的ERPⅡ的概念包含的内容如下所示:

Odoo 8.0深入浅出开发教程(二) Odoo简介

Figure 3: ERPⅡ模型
  • Business Intelligence 商业智能,其主要关注于分析数据,并将数据变成知识这一过程。
  • e-Commerce 电子商务,关注于对外战略。
  • Enterprise asset management 企业资产管理,有效可持续地管理公司的资产生命周期,用强有力的分析工具来提高资产使用率和削减成本。
  • Procurement(SRM) 采购,最大化的节约成本和支持终端对终端的采购,还有物流过程。
  • Production(PLM) 生产,帮助管理和优化生产能力和物料资源。是MRP的升级版。1 这里谈论的PLM不仅要解决物料需求问题,而且要解决生产的时间问题,从而达到优化生产能力的目的。
  • Distribution(SCM) 配送,控制仓库流程,使其能够对补给需求或更改做出快速的反应。
  • Accounting 会计,自动化财务管理,同时要确保管理的便捷和对绩效做出实时反映。
  • Human Resource 人资,维护一个完整的雇员数据库,更好地使用所有雇员。
  • Corporate performance and governance 公司表现监管,对公司的各个部门更高的控制,目标让他们能够流水线作业。
  • Customer services(CRM) 客服,获取和维护和客户的关系,充分利用客户的体验来进行知识管理评估。(其和BI模块结合很紧密)
  • Sales 销售,具体的定单确认,下单,货运和开发票等。

1.2.1 什么是商业智能

商业智能(Business intelligence)的概念经由Howard Dresner(1989年)的通俗化而被人们广泛了解。其将商业智能定义为:一类由数据仓库(Data warehouses)、查询报表、数据分析、数据挖掘、数据备份和恢复等部分组成的、以帮助企业决策为目的技术及其应用。

目前商业智能被理解为将企业中的现有数据转化为知识,帮助企业做出 明智的 的业务经营决策的工具。这里所谈的数据包括来自企业业务系统的订单、库存、交易账目、客户和供应商资料及来自企业所处行业和竞争对手的数据,以及来自企业所处的其他外部环境中的各种数据。而商业智能能够辅助的业务经营决策既可以是作业层的,也可以是管理层和策略层的决策。

商业智能(BI)的架构示意图如下2

Odoo 8.0深入浅出开发教程(二) Odoo简介

Figure 4: 商业智能技术框架

典型的BI系统包括:

ETL过程
ETL过程是指对于数据的抽取(Extraction)、转换(Transformation)和装载(Load)。该部分从各业务系统中抽取、转换、装载数据到数据仓库。此部分通常提供一些配置手段,使得用户能够比较方便的从各种数据源取得数据,并设置规则,将数据变换成需要的形式。odoo带有ETL模块。
数据仓库
用于存放ETL抽取回来的数据,此部分通常是经过数据仓库优化的关系数据库。用于数据仓库的关系数据库特别适于处理大数据量及多维数据集。odoo的BI模块直接以PostgreSQL数据库作为数据仓库。
OLAP
通常是实现了MDX(多维数据查询,Multi-Dimensional eXpress)语言的多维数据集(Cube)查询器。MDX有些类似于SQL,但比SQL更简单,是数据分析语言的事实标准。OpenERP的BI模块支持MDX语言。
报表工具
用于展现MDX的查询结果,通常提供方便手段访问和格式化数据,提供丰富的数据呈现方式。odoo的BI模块以pyChart作为报表工具,报表开发方法和odoo中的Graph视图类似。

2 Odoo框架简介

下面一副图很好地说明了Odoo技术框架:

Odoo 8.0深入浅出开发教程(二) Odoo简介

Figure 5: Odoo技术框架
  • PostgreSQL数据库
  • Object Relation Mapping 也就是大家熟知的SQL ORM包装层。Odoo除了使用的基本的psycopg2 作为接口之外,ORM层是Odoo自己写的。
  • Base Module Distribution 官方基本模块
  • Report Engine 负责生成各种报表。目前支持的报表格式有 PDF,OpenOffice,HTML 三种。
  • Workflow Engine 工作流引擎。支持任意复杂度的工作流。
  • WebService 提供网络调用接口。目前支持 Net-RPC、XML-RPC 两种。Odoo和flask一样使用Werkzeug作为WSGI层的包装,jinja2作为模板工具。然后剩下的框架部分是Odoo自己写的。

2.1 python模块分析

Odoo这个框架使用了很多模块,从这些模块的使用我们可以大致看出Odoo的工作原理。其中最主要的模块有:

  • psycopg2 PostgreSQL数据库接口,其ORM层Odoo是自己写的,python中有类似的模块SQLAlchemy或者peewee等。
  • Werkzeug和jinja2作为Odoo网络服务器框架的基础,同样flask也基于这两个模块。
  • babel为网页提供国际化方案,MarkupSafe可处理Markdown标记语言,lxml用于分析网页,mock和unittest2用于单元测试加强,pyserial用于串口通信,pyusb用于处理usb,requests用于处理网络协议,xlwt用来支持excel表格,pillow用于图像处理。这些模块都较好,目前也处于活跃开发中,已支持python3。
  • pyPDF模块用来处理PDF的,以后推荐使用pypdf2模块。pychart这个模块也快被废弃了,关于后台运算和绘图这一块推荐使用目前流行的ipython系(numpy和matplotlib等)来解决。

还有其他一些琐碎的模块十几个,这个以后再慢慢了解。

2.2 python2还是python3

Odoo框架严格意义上来说只支持python2.7,其他python版本都不支持,也因为这种局限性,也带来对其他一些python模块的版本号的选择性。

我做过试着编译Odoo的python3版本(经过2to3脚本处理之后),其依赖的python模块目前绝大部分都已经支持python3了,就是Odoo框架自身,要移植到python3问题还很大,最大的阻碍就是他自己写SQL ORM那一部分。

同时我们还要考虑官方自带的模块更新也是基于python2.7的,所以很长一段时间之内,都还是安心使用python2.7版本的Odoo框架,直到官方发布支持python3的版本或者我们写出了一个比他更好的框架。

python2.7和python3版本之间的差异在不断缩小,但还是有很多小细节上的差异,这块需要额外的留心。