Odoo是什么

关于odoo的问题集锦

Odoo 是什么?

当我介绍客户使用 odoo 作为开发平台时,经常会有人问 Odoo 是什么?

当我介绍客户使用odoo系统作为业务管理平台时,有时会被问到Odoo是什么?

简单点,可以这么说: Odoo是一套完整的系统,是一个开源框架,针对 ERP 的需求发展而来,适合定制出符合客户各种需求的ERP系统、电子商务系统、CMS、或者是网站。

由于 Odoo 的底层结构很强大,所有模块都可以根据需要进行安装和御载,所以客户能够像搭积木一样建构自己期望的系统。即使完全不安装与ERP相关的模块,仅利用 Odoo 自身的底层框架,也能构建出适合各种用途的系统,纯 B/S 架构。而这一切都是免费的,并且不受限于源代码,也不受于用户数。

Odoo 是一系列开源商业应用程序套装,此套装可以满足公司的绝大部分应用需求,例如,基本的进销存管理、采购、销售、MRP生产制造、质量管理、HR、休假管理、用车管理、IM通讯、CRM客户关系管理、电子商务、网站,财务会计、资产管理、WMS仓库管理、POS连锁、项目管理、条码、PLM等等。


下图为 Odoo 中可供安装的一部分模块,另外Odoo社区还有大量可用的开源模块,有的免费,有点需要支付一点费用,这也是 Odoo 的巨大魅力之一。

odoo模块列表


与传统 ERP 相比,Odoo管理系统有什么不同?

传统的ERP多为商业软件,相当封闭,用户购买之后如要定制适合自身的需求,会受到非常多的限制,官方系统升级后,用户如要升级则需要再次花钱,如果不升 级,按一般系统发展规律,5-7年将不再适应公司发展要求,又要重新寻找合适的系统。传统 ERP 按模块、按用户销售,对于发展迅速的客户,会受到很大的制约。

Odoo 是一套开源管理系统,由比利时一家公司开发,整个社区活跃的贡献者大约有3000人。Odoo 从8.0开始不再局限于 ERP 范畴,增加对电子商务、互联网方面的支持。Odoo 强大之处在于其灵活的系统架构,可在不修改核心代码的情况下修改系统的功能或增加自己需要的功能模块,因此可以随时下载官方最新代码替换系统中的官方代 码,而不影响或者很少影响自己增加或修改的模块。传统ERP系统很少能做到这一点。

Odoo 活跃的社区在不断修正各类错误,贡献各种用途的模块,这也是传统 ERP 所不具备的。传统ERP购买之后,用户自行开发也只能从零开始,重复造轮子。Odoo 用户只需要在官方和社区都找不到解决方案的情况下才需要自行开发或请人开发。


Odoo版本选择

ODOO有两个版本 - 企业版和社区版。两个版本之间的区别是什么?我们应该选择哪个版本?

从最表面来看,社区版是开源的(代码公开),可以简单、自由获得;而企业版是闭源的,需要付费购买。

从Odoo的出发点来说,Odoo社区版的意义在于将大量开发者和用户带到Odoo,生态得到发展,从而起到了推广的作用,而企业版的意义在于盈利,盈利后使得公司有能力在社区产品开发上投入更多资金。Odoo的企业版建立在社区版的基础上,两个版本的发展是相辅相成的。

Odoo为了取得内部平衡,将80%的工作量放在社区版以吸引用户,20%的工作量放在企业版中以改善收入流ODOO会将难以盈利的解决方案放在社区版,而成熟可盈利的解决方案/功能模块发布在企业版。事实上,以源代码方式安装过企业版的就会发现,企业版也是基于社区版的,它们共用同一个系统架构。用一个等式描述他们的关系:

                                    企业版 = 社区版架构 + 社区版应用 + 企业版应用&功能模块

作为用户来说,如果你对企业版的某个行业解决方案感兴趣,则应该选择企业版,如果你希望基于自己的业务模式自定义解决方案则可以选择社区版。

Odoo安装

Odoo的安装方式有多种,同时Odoo也可以运行在多种OS上,官方的建议是以Debian Linux作为Odoo的运行基础平台,同时有很多人想通过Windows安装来了解/开发Odoo. 所以这里我们主要讨论Ubuntu和Windows下的安装。


Windows环境下odoo安装

1.  通过安装包安装

通过Odoo官方提供的nightly服务器下载安装包,直接执行下载的文件,odoo就安装到了系统.

2.  源代码安装

a. 首先是获取代码,可以从GitHub或者Gitee来获得。

b. 然后检查系统是否已安装Python 3.7或以上版本,添加python 3路径到PATH环境变量。

c.  接着是安装PostgreSQL 10.0或者更高版本(如果你的系统没有安装),添加PostgreSQL的可执行文件路径(也就是bin目录)到PATH环境变量,创建postgres用户与密码,用于Odoo连接PostgreSQL。

d.  下载&安装Visual Studio依赖,选择C++编译工具安装;

e.  通过pip安装odoo其它python依赖,进入源码的根目录,可以发现requirements.txt文件,执行命令:

C:\> pip install setuptools wheel   
C:\> pip install -r requirements.txt

f.  一切就绪后,通过命令行运行odoo:

C:\>cd CommunityPath/                                                                                            
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb


Ubuntu环境下安装odoo

1. 通过安装包安装

首先,我们需要保证OS系统安装有PostgreSQL, 如果你的系统没有安装,则可以执行下面的命令安装:

            sudo apt install postgresql -y

接着,是下载安装包&安装odoo:

# wget -O - https://nightly.odoo.com/odoo.key | apt-key add -                                            
#echo"deb http://nightly.odoo.com/14.0/nightly/deb/ ./" >> /etc/apt/sources.list.d/odoo.list
# apt-get update && apt-get install odoo                                                                              

在安装的过程中如果遇到报错,需要检查是否因为依赖缺失,找到解决的办法。


2. 源代码安装

a. 首先是获取代码,先从GitHub或者Gitee找到你需要的代码库,然后在您的系统命令行执行git clone命令下载代码(如果系统还没有git则安装pip  install git)。

b. 然后检查系统是否已安装Python 3.7或以上版本;

c.  接着是安装PostgreSQL 10.0或者更高版本(如果你的系统没有安装),创建postgres用户与密码,用于Odoo连接PostgreSQL。

sudo apt install postgresql postgresql-client$ sudo -u postgres createuser -s $USER$ createdb $USER

d. 安装开发工具&本地依赖

$ sudo apt install python3-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev libfreetype6-dev \
    liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev libpq-dev

e.  通过pip安装odoo其它python依赖,进入源码的根目录,执行命令:

C:\> pip3 install setuptools wheel   
C:\> pip3 install -r requirements.txt

f.  一切就绪后,通过命令行运行odoo:

C:\>cd CommunityPath/                                                                                            
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb

关于Odoo安装的更多信息 ,可以通过Odoo官方在线文档获得更多信息。


Odoo环境配置

参考环境配置


Odoo 开发

odoo是基于一个模块化,可扩展和直观的快速开发应用程序(RAD)的框架,业务逻辑主要通过Python来编码,11.0版本之前使用python2,11.0版本开始支持Python3,视图层则通过JS和XML来实现,ORM层类似但并非django的ORM框架,内置的web服务器使用的跟Flask框架一样的Werkzeug。

前端使用自己开发的Qweb框架,不需要写HTML代码,只需要根据Odoo定义好的xml结构编写布局文件即可。这套框架和优势是,一旦学会了规则,实现业务高效简洁。缺点是,集成度高,且有学习门楷。

根据统计Odoo整个系统用到的开发语言比列如下:   



由于Odoo的代码结构基本组成单元是一个个的模块,所以我们的开发也是基于模块来进行, 一个应用模块的目录组织结构一般如下:
    data/ : 演示和数据xml
    models/ : 模型定义
    controller/:包含控制器(HTTP 路由)
    views/ : 包含视图和模板
    static/ : 包含网页资源,分为css/, js/, img/, lib/, ...

Odoo的架构模式(MVC)

  • Model - ORM - PostgreSQL

    • odoo有自己的orm引擎,专门与PostgreSQL进行数据通信

  • View - XML、JavaScript

    • odoo的web页面模板引擎主要使用XML进行编写,JavaScript进行页面的渲染

  • Controller - 控制器

    • Odoo可以自由编写控制方法,实现不同的功能


数据库

  • PostgreSQL 数据库服务器,一个强大的开源关系数据库,其性能足以支持大规模应用


Odoo前端框架 

  • 之前用的是backbone, 到odoo14换成了OWL。OWL是一个小型(~<20kb gzipped)UI 框架,旨在成为Odoo网络客户端的基础,它是一个现代框架,用 Typescript 编写,以简单且一致的方式从React和Vue中汲取了经验,同时,OWL使用Odoo强大的模板引擎“Qweb”来处理前端HTML片段和页面。

  • Owl与React JS一样使用组件作为构建块。简单来说,组件是 JavaScript 类和函数,用于描述 UI(或 UI 的一部分)应该如何显示在屏幕上。它有助于形成一个构建块的结构化视图(树视图)。OWL比传统的组件系统更快,并引入了一些新特性,包括钩子、反应性、子组件的自动实例化等,它使用ES6语法。