openbravo erp评测 之 技术评测 -...

71
深圳微算技有限公司(www.weisuan.com)友情整 page:1 of 71 Openbravo ERP 评测 技术评测 技术评测 技术评测 技术评测 姊妹篇Openbravo ERP 评测之业评测

Upload: ngodiep

Post on 21-Mar-2018

285 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:1 of 71

Openbravo ERP 评测

技术评测技术评测技术评测技术评测

姊妹篇《Openbravo ERP 评测之业务评测》

Page 2: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:2 of 71

目录目录目录目录

1. 技术概况......................................................................................................................................5

1.1 OpenbravoERP 的发行......................................................................................................5

1.1.1 Openbravo ERP 版本的成长................................................................................5

1.1.2 版本类型:社区版和专业版...............................................................................5

1.1.3 许可证...................................................................................................................5

1.1.4 主要特征...............................................................................................................6

1.2. 开发环境.........................................................................................................................7

1.3. 执行环境.........................................................................................................................8

1.4. Openbravo 的运行环境..................................................................................................8

1.5. MVC 基础框架..................................................................................................................8

1.5.1. XmlEngine...........................................................................................................8

1.5.2. SQLC.....................................................................................................................9

1.5.3. HttpBaseServlet...............................................................................................9

1.5.4. Data Model Dictionary and WAD ...................................................................9

1.6. Openbravo 系统结构......................................................................................................9

2. 安装...........................................................................................................................................13

2.1.概述...............................................................................................................................13

2.2.Subversion 中的源代码..............................................................................................13

2.3. 系统支持的平台架构...................................................................................................14

2.4.安装程序.......................................................................................................................14

2.4.1.OB 安装包..........................................................................................................14

2.4.2. Bitrock 安装程序(windows) .....................................................................16

2.4.3. 安装(Centos)...................................................................................................24

2.5. 运行 Openbravo ERP....................................................................................................30

2.6.安装后配置...................................................................................................................32

2.6.1. 配置缺省日期和时间格式...............................................................................32

2.6.2. 配置缺省数字格式...........................................................................................32

2.7.已知问题.......................................................................................................................32

2.7.1.Windows 下 Tomcat 的热部署问题 ..................................................................32

2.7.2.Jasper 报表的问题..........................................................................................33

2.7.3. 运行 Jasper 报表时的链接错误 .....................................................................33

2.7.4 Jasper 报表环境变量........................................................................................33

2.7.5.Internet Explorer 6 的问题 ........................................................................34

3 系统使用到的技术......................................................................................................................34

3.1 OpenbravoERP 涉及的技术............................................................................................34

3.2 本地化.............................................................................................................................35

4. 数据备份与恢复.......................................................................................................................35

4.1 备份.................................................................................................................................35

4.2 恢复.................................................................................................................................35

5. 开发手册...................................................................................................................................36

5.1 开发概述..........................................................................................................................36

5.2 开发方法..........................................................................................................................36

Page 3: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:3 of 71

5.3 组织开发工作..................................................................................................................37

5.4 标识符命名标准..............................................................................................................37

5.4.1 数据库元素..........................................................................................................37

5.4.2 MVC 目录..............................................................................................................37

5.5 目录结构..........................................................................................................................37

5.5.1 主树结构..............................................................................................................38

5.6 风格指南..........................................................................................................................41

5.6.1 逻辑比较..............................................................................................................41

5.6.2 逗号分隔列表......................................................................................................41

5.6.3 圆括号中的空格..................................................................................................42

5.6.4 SELECT INTO 和 INSERT INTO ...........................................................................42

5.6.5 SQL 关键字..........................................................................................................42

5.7 编译程序..........................................................................................................................42

5.7.1 命令行编译任务..................................................................................................42

5.7.2 开发环境..............................................................................................................43

5.7.3 生产环境..............................................................................................................43

5.8 从源代码构建..................................................................................................................44

5.8.1 安装 Subversion.................................................................................................44

5.8.2 从 Subversion 中检出源代码 ............................................................................44

5.8.3 快速构建指南......................................................................................................44

5.9 Openbravo 数据模型......................................................................................................45

5.9.1 存储的数据库对象..............................................................................................45

5.9.2 实体-关系(ER)图................................................................................................45

5.9.3 创建存储过程......................................................................................................45

5.9.4 存储过程语法的建议..........................................................................................47

5.10 使用数据字典进行 Openbravo 的开发 ........................................................................51

5.10.1 扩展数据模型....................................................................................................51

5.10.2 在数据库中创建新的表....................................................................................51

5.10.3 在 Openbravo ERP 中注册新的表 ....................................................................52

5.11 通过 AD 开发举例.........................................................................................................55

6 库表结构及关联性.....................................................................................................................60

6.1 简介.................................................................................................................................60

6.2 一些主要表的功能.........................................................................................................61

6.3 表间关联.........................................................................................................................61

7 外围接口.....................................................................................................................................61

7.1 介绍.................................................................................................................................61

7.2 对象和方法 .....................................................................................................................62

7.2.1 对象 externalSales.............................................................................................62

7.2.2 对象 services ......................................................................................................64

7.2.3 方法 ExternalSales ............................................................................................65

7.2.4 方法 WebService ...............................................................................................67

7.3 启动 OB 的 Webservice 功能.......................................................................................70

Page 4: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:4 of 71

在这里我首先要真诚地感谢西班牙的 openbravo 公司,为全世界奉献了这么一套优秀的开源

软件——Openbravo ERP & POS,它的架构灵活、代码质量上乘、文档丰富、二次开发简单、

外围接口先进,同时还要感谢开源社区里的那些无私奉献者,是他们孜孜不倦的辛勤浇灌,

才成就了今天千千万万的优秀开源软件,这些开源软件目前正运用于各行各业,每天都为人

类产生万亿记的财富!最后我要感谢我司员工慧华,正是他天才般的头脑解决了许多难题!

——我开源,我自由!

Page 5: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:5 of 71

1. 技术概况技术概况技术概况技术概况

1.1 1.1 1.1 1.1 OpenbravoERPOpenbravoERPOpenbravoERPOpenbravoERP 的发行的发行的发行的发行

1.1.1 Openbravo ERP1.1.1 Openbravo ERP1.1.1 Openbravo ERP1.1.1 Openbravo ERP 版本的成长版本的成长版本的成长版本的成长

1)、阿发/贝塔版本(alpha/beta):在阿发版本阶段,我们每周发行一个阿发版本,当条件

成熟时发行一个贝塔版本。版本格式是:<主版本号>alpha-r<阿发版本号>和<主版本号

>beta,如 2.50alpha-r10,2.50beta。这个版本建议不要用于生产环境,等放出了正式版

之后再用也不迟。

2)、正式版本:当贝塔版本足够成熟和稳定后,就放出一个正式版本,如目前的正式版本是

2.50;

3)、维护版本:从 2.50 版本之后我们根据用户的反馈和 bug 修补情况,发行一系列的维护

版本,格式是:<主版本>MP<维护版本号>,如截止到2010年3月28日的维护版本是2.50MP13。

维护版本可以用于生产,维护版本号越大,说明越稳定,bug 越少。

最后我再来看看 OpenbravoERP 版本的生长路线:

2.50alpha-r1�2.50alpha-r2� … �2.50alpha-r11�2.50beta�2.50�2.50MP1� …

�2.50MP18。

1.11.11.11.1....2222 版本类型版本类型版本类型版本类型::::社区版和专业版社区版和专业版社区版和专业版社区版和专业版

与社区版(Community Edition)相比,专业版(需要每年缴纳订阅费,有的扩展模块还需

另外购买 license)可以获得如下额外服务:

1)、可以安装和升级包含在订阅费里的扩展模块,对于需要单独购买 license 的模块还需另

外付费;(当然对于免费的模块两类版本都可以安装和升级)

2)、可以打补丁、升级和获得购买期内的各种服务,如 bug 修补、问题解答等。

如果您公司的技术力量高超、且技术员对企业内部流程了如指掌,完全可以采用社区版,社

区版具备了大多数的 ERP 核心功能模块,但是不包含一些由第三方开发的商业性质的扩展模

块,当然可以自己开发或者购买这些模块,比如商业版的人力资源模块和 CRM 模块等。

1.1.31.1.31.1.31.1.3 许可证许可证许可证许可证

Openbravo ERP is licensed under the Openbravo Public License Version 1.1:

The contents of this file are subject to the Openbravo Public License Version 1.1

(the "License"), being the Mozilla Public License version 1.1 with a permitted

attribution clause; you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.openbravo.com/product/legal/license/.

Software distributed under the License is distributed on an "AS IS" basis, WITHOUT

WARRANTY OF ANY KIND, either express or implied. See the License for the specific

language governing rights and limitations under the License.

Page 6: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:6 of 71

The Original Code is Openbravo ERP. The Initial Developer of the Original Code is

Openbravo SLU. All portions are Copyright (C) 2001-2008 Openbravo SLU. All Rights

Reserved.

1.1.4 1.1.4 1.1.4 1.1.4 主要特征主要特征主要特征主要特征

在 sourceforge.net 网站上排名开源 ERP 类旁榜首,那应该是真金白银的——不光有华丽

的外表,更应该有稳定的内核。经过本人的一番长时间的实验测试,果然名不虚传。

1)、可以完全依赖开源软件构建稳定的生产 ERP 环境,当然硬件设备除外。除了购买

硬件费用和招一名熟悉开源软件和企业流程的技术员之外,再也不用为其他软件付费了。看

看这些开源软件组成的最佳组合:Linux + PostgreSQL (大象) + Apache-Tomcat(猫) +

Apache-Ant(蚂蚁) + SUN JDK + Openbravo ERP + Firefox + Eclipse。看到了吗?连同客户端

和开发工具全是开源的,而且这样的开源组合几乎是完美无缺的——稳定、快速、安全、灵

活!

2)、具有丰富的文档资料。这一点不像 Compiere 或者国内的恩信 ERP(不过恩信现在

不开源了),文档资料需要购买的,而 Openbravo ERP 则是完全开放的,你看看网站

http://wiki.openbravo.com/wiki/ERP/2.50,上面应有尽有,从安装、配置、使用到建立开发环

境、以及如何开发模块等等都有详细的资料可循,但是目前大部分都是英文的,中文资料比

较少,不过我宁愿看英文资料,中文如果翻译不好,看得云里雾里的。

3)、非常国际化。目前的版本经过简单本地化设置就可以适用于上百个国家,不过不同

的国家语言本地化的版本不一样,比如中国简体语言只汉化了 2.2x(2008 年 7 月之后就没

有人再去跟踪 OpenbravoERP 的新版本做汉化了),在低版本的基础上作高版本的汉化是非

常容易的,接下来我打算尽一份个人的努力做好新版本的汉化工作,中国的会计制度从 2008

年到现在几乎没什么变化,所以会计的本土化可以继续沿用 2.2x 版本的。

4)、多实例化。安装一套软件,能同时让很多企业的很多分支机构使用,互不干扰,而

且每一个实例(这里也可称为实体)都有一个管理员,实体管理员全权负责本实体的管理,

如创建角色、用户、定义菜单等等,这一点尤其适合做 SaaS 应用。换句话说,就是同一套

机器上跑的 Openbravo ERP 能同时让很多家企业使用,只要赋予不同的用户名和密码即可,

而且内部仍然是采用同一个数据库和一样的表。记得我以前想利用恩信 ERP 搭建同样多实

例化生产环境,结果耗费了我好几天,硬是没有结果。另外一点就是对于多分支机构多会计

单位的企业也能轻松应付。为什么有人总是说 Openbravo ERP 适合于中小企业使用呢?我都

不明白,难道仅仅是因为免费的原因?大企业有钱,所以不会使用免费的软件吗?但你也可

以采用订阅购买的方式付费啊,同样能获得满意的售后服务。

5)、适用的企业类型繁多。既可以用于制造型企业,也可以用于管理型机构,还可以用

于商业性企业;既可以是会计独立单位,也可以是非会计独立单位,既可以是跨地区跨过度

的大型企业,也可以使中小企业单位。

6)、最为完善的安全控制机制。OB 把安全分为操作安全和数据安全,操作安全规定一

个用户哪些功能元素(如菜单、窗口、表单等)可以操作,哪些不许操作;数据安全规定用

户允许访问哪些数据和对这些数据具有何种操纵权限(如浏览、修改、写入等)。

7)、后台任务管理。用 PL 或者 java 语言开发的程序可以由 Openbravo ERP 在后台定时

调度。设置一个后台调度任务的步骤是:在应用字典(Application Dictionary)中创建进程;

创建一个调度。

8)、模块化设计。我认为这是一大亮点。功能的增删通过安装和卸载模块来完成,当然

核心模块是必须的模块,不能卸载,其他的扩展模块都可以安装和卸载,但是对于社区版本

Page 7: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:7 of 71

的 Openbravo ERP,一些需要付费的商业扩展模块是没法安装的,如果你付费订阅了,那么

会有更多的扩展模块供您选择。Openbravo 公司维护了一个模块库,里面模块会经常更新,

所以建议常去看看。只要符合模块接口协议,我们就可以随时开发符合自己需要的模块从而

扩展 OB 功能。

9)、利用心跳机制实时下发更新代码。初始登陆会提醒引导你配置心跳机制,根据官方

资料介绍说,配置好了心跳机制就可以实时收到更新的代码和其他服务。

10)、纯 Web 应用。不同于传统的 web 应用那样在用户界面方面存在不足,而 OB 引入

了 AJAX 技术,从而开发出了类似于富客户端的友好的用户界面。

11)、采用 java——轻量级的 J2EE。OB 采用 J2EE,但不使用 EJB 容器,从版本 2.50

开始,OB 引入了新的基于 Hibernate 的数据访问层,从而为下一代新版本真正实现数据库

无关性做好准备。

12)、模型驱动开发。OB 采用一种模型驱动开发(MDD)方法,也就是说 OB 采用模型来

定义应用组件(比如窗口和流程等),然后在模型的基础上生成 java 代码。OB 的模型信息

(称为元数据)保存在 OB 应用字典(AD)里,而从这些元数据产生代码的过程称为应用开发

指南(WAD—Wizard for Application Development)。模型启动开发的目的是为了通过分离技术

实现和业务抽象来提高效率和重用。

13)、全功能 ERP 应用。具有销售管理、库存管理、采购管理、生产管理、财务管理、

客户关系、商业智能和项目管理模块。

1.21.21.21.2. . . . 开发环境开发环境开发环境开发环境

Openbravo 是遵循 MVC 模型构建的纯 WEB 的应用程序。其中大部份的代码是由 WAD 基于数据

模型字典生成的。当系统管理员为了适应用户的需求而改变配置后,WAD 都会重新编译应用

程序。

重新编译和执行的过程如上图所示:

模型:由可执行 SQL 语句组成的 xsql 文件。

Page 8: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:8 of 71

视图:HTML&XML 文件定义了表单的布局和数据的关系。

控制器:Java Servelt 定义了需要执行的动作并且管理模型和生成视图。

1.31.31.31.3. . . . 执行环境执行环境执行环境执行环境

应用程序必须安装在运行有 MVC 基础框架和一组第三方应用程序的服务器中才能运行。用户

只需要一个标准的 WEB 浏览器就可以了。

WAD 和 MVC-FF 主要由 Openbravo 自行开发。而数据模型字典是扩展了 Compiere 的数据模型

字典,包括了她的一些原始模块,但为了适应欧州和西班牙的标准和支付流程做了一些调整。

1.41.41.41.4. . . . OpenbravoOpenbravoOpenbravoOpenbravo 的运行环境的运行环境的运行环境的运行环境

Openbravo 需要有一组通用的第三方应用程序支持,如 Tomcat,Ant,Log4j 等。同时需要有

Oracle 10g 数据库(release 2 SE)或 PostgreSQL 数据库。

模型是基于标准的 SQL 语句的,所以 EJB 服务器不是必须的。我们使用 Apache Tomcat 作为

Servlet 容器,但你也可使用其他类似的产品代替。

Ant 是用于构建,Log4j 是为的程序的调试。

所有这些程序都可以安装在 Linux 和 Windows 的操作系统上。

MVC-FF 是 由 Openbravo 开 发 的 一 系 列 工 具 组 成 的 : XmlEngine,SQLC 和

HttpBaseSecureServlet。MVC-FF 是为了减少模型,视图和控制器组件之间的藕合。

1.51.51.51.5. . . . MVCMVCMVCMVC 基础框架基础框架基础框架基础框架

这些工具已经用于开发其他的一些 MVC 应用程序,它已被证明对于 Openbravo 的开发团队是

非常有效的。

1.51.51.51.5.1. .1. .1. .1. XmlEngineXmlEngineXmlEngineXmlEngine

XmlEngine 是一个可以通过 XML/HTML 格式的模板和包含被插入了动态数据的 XML 配置文件

来生成 XML/HTML 文档的工具。XmlEngine 是非常容易使用的,因为模板的设计与你所期望

的文档的设计是类似的。输入的数据决定了数据显示的位置。配置文件为模板中的数据显示

和数据源字段建立了映射。为了优化性能,模板被读取和存放在内存中。当某一个页面被请

求时,模板用应用程序提供的数据来生成文档。通过这个工具我们生成了编辑记录,显示记

Page 9: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:9 of 71

录的表单,创建报表和应用程序的打印表单。

1.51.51.51.5.2. .2. .2. .2. SQLCSQLCSQLCSQLC

SQLC(SQL 编译器)是用于避免重复编写一些与数据库交互的 JAVA 类的工具。它是以一个包

含有标准 SQL 语句和参数的 XML 文件为输入。SQLC 读取这个 XML 文件并且生成一个能够连

接数据库、执行其中语句、读取记录和生成返回 JAVA 数据类型的方法的 JAVA 类。

1.51.51.51.5....3. 3. 3. 3. HttpBaseServletHttpBaseServletHttpBaseServletHttpBaseServlet

系统中所有实现了 MVC 的控制器组件的 servlet 都是从 HttpBaseServlet 和

HttpBaseSecureServlet 派生的。这些 servlet 实现了一些通用的功能如:身份认证、授权、

数据库连接和错误处理的功能。从 HttpBaseSecureServlet 派生的 servlet 控制读取数据,

通过 SQLC 生成的类和数据库交互和用 XmlEngine 提供输出。

1.51.51.51.5.4. .4. .4. .4. Data Model Dictionary and WADData Model Dictionary and WADData Model Dictionary and WADData Model Dictionary and WAD

代码生成的自动化是通过数据模型字典和 WAD(应用字典向导)完成的。WAD 自动生成应用程

序的所有符合 MVC 架构的文件。这些文件由 XmlEngine,SQLC 和 HttpBaseSecureServlet 生

成。

自动生成的代码质量更好,因为所有的文件总是用相同的规则和风格编写的。应用领域的知

识存在于模型中而不是手写的代码中。同样,WAD 中增加了新的功能后,重新生成文件这些

功能将会被增加到这些文件中。

1.61.61.61.6. Openbravo. Openbravo. Openbravo. Openbravo 系统结构系统结构系统结构系统结构

图图图图 1.1 1.1 1.1 1.1 OpenbravoOpenbravoOpenbravoOpenbravo 运行时的逻辑视图运行时的逻辑视图运行时的逻辑视图运行时的逻辑视图

运行时结构

系统运行时主要分为 3 层:

表 现 层 : 主 要 由 org.openbravo.erpWindows 包 下 的 控 制 器 组 成 , 他 们 继 承 自

HttpBaseServlet。负责使用请求初始化数据,调用业务层,最终使用 xmlEngine 渲染显示

页面。

Page 10: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:10 of 71

业务层:负责提供业务中的数据结构,如资产等。Openbravo 的业务层和 SQL 耦合较为紧密,

通常会在业务对象类的静态方法中直接执行 SQL。处理业务也使用了存储过程,业务对象类

里边也会有响应的静态方法执行存储过程(通常会根据数据库类型进行判断)。业务对象可

以由编译引擎生成。

基础层:基础层提供一些基础的服务,如提供数据库连接等。

以在 OpenbravoERP 中编辑数据字典时的程序处理为例,运行时处理过程大概如下:

首先请求被发送每个程序对应的 Servlet,如 Table,Table 继承自一个模板类

HttpSecureAppServlet,依靠这个类执行一些必要的初始化工作。响应请求的主要方法为

doPost,doPost 方法根据名称为 Command 的参数执行不同的操作。如 SAVE_NEW_EDIT 表示

首先保存一条新增的记录,然后跳转至 EDIT 页面。

对于一个典型的保存请求(即 Command 参数的值以 SAVE 开头):

如图 1.2,在 doPost 方法中首先使用 getEditVariable 方法从请求中构造业务数据对象

TableData,然后调用其 insert/update 方法,这个方法将会调用其内部 JDBC statement

的 executeUpdate 方法。最终页面被重定向,Command 参数的值被重置为 EDIT。

图图图图 1111.2.2.2.2 一个典型的保存请求一个典型的保存请求一个典型的保存请求一个典型的保存请求

重定向之后的请求

如图 1.3,在 doPost 方法中将创建一个 TableSQLData 对象以保存条件,调用 TableData

对象的 selectEdit 方法(static 方法)获取数据,然后将使用 xmlEngie 获取视图模板,

向模板中注入参数和数据,之后打印模板。

Page 11: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:11 of 71

图图图图 1111.3.3.3.3 重定向之后的重定向之后的重定向之后的重定向之后的 EDITEDITEDITEDIT 请求请求请求请求

编译系统结构

得益于 Openbravo 较为完善的编译系统,他的一个主要的优点就是其开发速度快,能后迅

速的开发出一个应用程序。

主要开发过程如下:

在数据库中生成表

在 Openbravo 中定义表和字段

在 Openbravo 中定义 windows,tab

编译 window

这样一个具有前端显示和后台业务数据结构的程序就生成了。

编译过程

编译任务由 Ant 任务 compile.development 完成。主要有以下几个子任务构成。(参见

/src/build.xml)

Page 12: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:12 of 71

图图图图 1111....4444 主要主要主要主要 AntAntAntAnt 任务流程任务流程任务流程任务流程

generate.entities 任务

generate.entities 的任务主要是检查更新的数据字典,在 ModelProvider 中实例化

org.openbravo.base.model 包中的类型,以提供给系统的其他部分使用。

图图图图 1111....5555 任务中的类的主要关系任务中的类的主要关系任务中的类的主要关系任务中的类的主要关系

wad 任务

Wad 任务的主要工作使用 org.openbravo.wad 包中的 Wad 类来完成任务。Wad 根据传入的参

Page 13: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:13 of 71

数,读取数据库信息生成代码,如:

按钮控件配置

配置 web.xml。

和针对 windows 的每个标签页生成:

含有 sql 操作的 xsql。

控制器 Java 源文件。

配置参数和数据域的 xml 文件。

sqlc 任务

将含有 sql 操作的 xml 编译成 Java 源文件,对应业务层中的负责执行 SQL 的类。

translate 任务

根据一些信息,如程序所注册的模块,对数据进行必要的转换。完成之后所有运行时需要的

文件都已经生成,重启服务器就可以看到新开发的页面了。

2222. . . . 安装安装安装安装

2222.1.1.1.1....概述概述概述概述

在开始之前, 请 确认 你已经 准备好 Openbravo 的安装环境, 即:

PostgreSQL 或 Oracle 数据库

Sun Java 开发包 (JDK)

Apache Tomcat

Apache Ant

重要提示:

如果你正打算寻找 一个快速评估或测试 Openbravo ERP 功能的方法, 你可以考虑浏览

Openbravo ERP 在线演示 或是下载 Openbravo ERP 虚拟应用.

如果你正打算寻找 一种快速的方法升级你的Openbravo ERP现有版本 到最新版本, 请继续

阅读 Openbravo ERP 升级安装 文档.

Openbravo ERP 可以采用两种不同的安装方式:

一种是较快的采用命令行方式, 检出并 编译 Subversion 源代码.

一种是较慢的采用图形界面风格, 下载 Bitrock 安装包.

2222.2.2.2.2....SubversionSubversionSubversionSubversion 中的源代码中的源代码中的源代码中的源代码

为了从 Openbravo Subversion 仓库检出 Openbravo ERP 的源代码,你必须安装 Subversion

(SVN)版本控制客户端软件.

一旦 Subversion 客户端安装完成,转到你想存放最新代码的目录并键入下列命令:

svn co https://dev.openbravo.com/svn/openbravo/tags/r2.40 openbravo-240

转到 openbravo-240 目录和 Openbravo.properties 和 log4j.lcf 文件,可以使用(向 导)

在 config/setup-tool 目录的图形向导:

Linux: setup-properties-linux.bin

Windows: setup-properties-windows.exe

注意这些命令都可以在命令行执行,不必有图形界面,这时自动检测的。

Page 14: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:14 of 71

编译前,请检查 Openbravo.properties 和 log4j.lcf 文件(在 config 目录里)是否已经正

确配置好了。如果没有,手工做以下。

从*.xml 文件创建数据库并键入下列命令单步安装 Openbravo ERP:

ant install.source

最后, 把 openbravo.war 文件部署到 Apache Tomcat 相关目录下(通常是 webapps), 可以

使用下列命令:

ant deploy

如果使用 PostgreSQL 数据库,在使用 Openbravo ERP 前,有必要用下列命令清除数据库:

vacuumdb -f -z -h 主机名 -d 数据库名 -U 用户名

把主机名换成实际数据库主机名,数据库名换成数据库名(缺省为 openbravo), 以及用户

名换成数据库用户(缺省为 tad).

2222.3.3.3.3. . . . 系统支持的平台系统支持的平台系统支持的平台系统支持的平台架构架构架构架构

支持的硬件平台有(经官方测试过):

x86 * ,x86_64 * ,IA-64 ,Sparc,PowerPC,AIX

支持的操作系统(经官方测试过):

•Microsoft Windows 2000, XP*, Vista,Linux,Ubuntu *,rPath *,CentOS,Debian,

Gentoo,openSUSE,Red Hat,FreeBSD,Mac OS X,OpenSolaris,Solaris 10

没有列出的并不表示 OB就一定不支持,只是表明没有经过官方测试。

2222....4444....安装程序安装程序安装程序安装程序

2.4.12.4.12.4.12.4.1....OBOBOBOB 安装包安装包安装包安装包

http://nchc.dl.sourceforge.net/project/openbravo/02-openbravo-sources/2.50MP18/

OpenbravoERP-2.50MP18.tar.bz2 下载的 OB 包具有 47 兆,解压后达到 146 兆,解包后生成

的文件和目录树如下:

OpenbravoERP-2.50MP18

--|build.xml �ant 的编译规则文件(类似于 c 工程的 Makefile)

--|config/ �配置目录

--|CONTRIBUTORS

--|create.database.launch

--|eclipse.compile.complete.launch

--|eclipse.compile.launch

--|eclipse.install.source.launch

--|export.database.launch

--|legal/

--|lib/ �运行时库

--|log4j.lcf

--|modules/

--|README

--|referencedata/

Page 15: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:15 of 71

--|src/ �源码目录

--|src-core/ �源码目录

--|src-db/ �源码目录

--|src-gen/ �源码目录

--|src-test/ �源码目录

--|src-trl/ �源码目录

--|src-util/ �源码目录

--|src-wad/ �源码目录

--|update.database.launch

--|web/ �js 和图片目录

--|WebContent/

build.xml 文件中包含的目标有:

init: checks if exists the JAVA_HOME var.

compile.complete: refer to compile.complete target of src.

compile: refer to compile target of src.

compile.complete.development: refer to compile.complete.development target of src.

compile.development: refer to compile.development target of src.

compile.web: refer to compile.web: target of src.

compile.web.development: refer to compile.web.development: target of src.

eclipse.compile: refer to eclipse.compile target of src.

eclipse.compile.complete: refer to eclipse.compile.complete target of src.

compile.src: refer to compile.src target of src.

war: refer to build.war target of src.

core.docs: refer to doc target of src-core.

core.lib: refer to build target of src-core.

eclipse.wad.lib: refer to sqlc target of src-wad.

wad.docs: refer to doc target of src-wad.

wad.lib: refer to build target of src-wad.

eclipse.trl.lib: refer to sqlc target of src-trl.

trl.docs: refer to doc target of src-trl.

trl.lib: refer to build target of src-trl.

database.lib: refer to jar target of src-db.

clean: refer to clean target of src.

trl.clean: refer to trl.clean target of src.

translate: refer to translate target of src.

installWebService: refer to installWebService target of src.

uninstallWebService: refer to uninstallWebService target of src.

deploy.context: deploy the context into Tomcat using the manager

install.source: install the ERP from sources (from subversion).

eclipse.install.source: install the ERP from sources for eclipse (from Mercurial).

create.database: refer to create.database target of database.

update.database: refer to update.database target of database.

create.database.script: refer to create.database.script target of database.

Page 16: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:16 of 71

update.database.script: refer to update.database.script target of database.

export.database: exports database structure and data to xml files.

2222.4.4.4.4.2.2.2.2. Bitrock . Bitrock . Bitrock . Bitrock 安装程序安装程序安装程序安装程序((((windowswindowswindowswindows))))

下载最新 Openbravo ERP 安装程序.

Windows 系统, 双击它。

Linux 系统, 做下列操作:

chmod +x OpenbravoERP_2.40-linux-installer.bin

./OpenbravoERP_2.40-linux-installer.bin

安装助手会跳出来(向导):

阅读并接受 Openbravo 公共许可证,版本 1.1,然后再继续安装流程。

点击 Forward 按钮如果同意这份许可证的话。

Page 17: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:17 of 71

指定 Openbravo ERP 的安装目录。

点击 Forward 按钮后,选择附件目录。

选择安装类型:

完全安装包括数据库和应用程序。

分布式安装只选择要装得部件。

Page 18: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:18 of 71

完全安装有两个选项:

标准:创建数据库并安装应用程序。这是最快的安装方式,建议使用这种安装模式。

开发:创建数据库,编译应用然后产生安装文件。这个过程较慢,但建议开发员使用。

提供 Java 开发包(JDK)的安装目录'。

如果 JDK 正确安装的话, 安装程序可以自动识别目录结构。

Page 19: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:19 of 71

提供 Apache Ant 安装的完整路径。

如果 Apache Ant 正确安装的话,安装程序可以自 动辨识路径。

提供 Apache Tomcat 的安装路径。

如果 Apache Tomcat 正确安装的话,安装程序 可以自动辨认其路径结构。

Page 20: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:20 of 71

要使用哪种数据库。

当前,支持 Oracle 和 PostgreSQL 数据库。

提供数据库安装的全路径。

PostgresSQL 的 psql, vacuumdb 和 pg_restore 路径,对 Oracle 来说是 imp, sqlplus 的路

径。

Page 21: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:21 of 71

安装过程中要提供数据库参数以备连接之用。安装期间,数据库必须在运行状态,要验证数

据库密码。需要有下列参数:

数据库主机: 数据库服务运行机的 IP 地址或主机名。

数据库端口: 数据库服务的监听端口(缺省情况, 5432 对 PostgreSQL,1521 对 Oracle)。

点击 Forward 按钮,如果用 Oracle 数据库,要求输入 SID (Oracle 系统标识)和 TNS

(Transparent Network Substrate)。

下一个窗口,如果用 PostgreSQL 数据库的话。

对 postgres 管理员用户两次敲入密码。如果过用 Oracle 数据库,两次敲入 system 用 户密

码。实际上, Openbravo ERP 要管理员权限来创建数据库元素。

Page 22: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:22 of 71

如果用 PostgreSQL:

提供装载 Openbravo ERP 数据模型的数据库名。键入数据库用户名和密码,给 Openbravo ERP

的数据对象。

给出一个上下文命名。

这会被用来从 Tomcat 进入 Openbravo ERP:http://<ip_address>:<port>/<context_name>

Page 23: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:23 of 71

下一步, 选择想要的时间日期格式:

最后,选择是否要装例程数据(BigBazaar):

Page 24: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:24 of 71

两次点击 Forward,完成 Openbravo ERP 安装。

标准安装大概要 10-30 分钟,开发模式大概要 30-90,这有赖于安装 Openbravo ERP 的机器

性能了。

2222....4444.3.3.3.3. . . . 安装安装安装安装((((CentosCentosCentosCentos))))

安装遵循的步骤:Centos�数据库(PostgreSQL或者Oracle)�JDK�Apache Tomcat�Apache

Page 25: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:25 of 71

Ant�Openbravo ERP。

1)1)1)1)、、、、安装安装安装安装 CentosCentosCentosCentos

Centos5.5 完全是 rhel 5.5 的翻版,所以安装和使用方法与红帽一模一样,但是前者完全

是开放的,而且提供了在线软件安装源,如果您不想花费高额的订阅费,且您自己能解决全

部 的 问 题 , 那 么 就 使 用 centos 吧 , 这 是 一 个 完 全 免 费 的 大 餐 。 从 这 里

(http://ftp.stu.edu.tw/Linux/CentOS/5.3/isos/i386/CentOS-5.3-i386-bin-DVD.iso)

下载最新的 5.5 版本,然后就可以安装了,具体的安装过程可以参考相关文献。但要符合如

下一些条件:

至少 2GB 的交换区,关闭 SELinux 和防火墙,安装软件包:gnome desktop, vim, graphic

internet(如chnome或者firefox), development libraries, development tools, X Window,

unzip,单独创建一个分区(40GB)用于安装数据库,启动时自动挂载到/u01 下。

本例子中假设机器 ip 地址为 192.168.0.5,主机名是 ob,全名是 ob.moodisk.com。

2222)、)、)、)、安装安装安装安装 OracleOracleOracleOracle

详 细 方 法 参 考

http://www.oracle-base.com/articles/10g/OracleDB10gR2InstallationOnRHEL5.php

修改操作系统配置修改操作系统配置修改操作系统配置修改操作系统配置::::

# echo “192.168.0.5 ob.moodisk.com ob” >> /etc/hosts

设置内核参数设置内核参数设置内核参数设置内核参数::::

# cat <<EOF >>/etc/sysctl.conf

#kernel.shmall = 2097152

#kernel.shmmax = 2147483648

kernel.shmmni = 4096

# semaphores: semmsl, semmns, semopm, semmni

kernel.sem = 250 32000 100 128

#fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default=262144

net.core.rmem_max=262144

net.core.wmem_default=262144

net.core.wmem_max=262144

EOF

# sysctl –p

---使上面设置的内核参数马上起作用。

# cat <<EOF >> /etc/security/limits.conf

* soft nproc 2047

* hard nproc 16384

* soft nofile 1024

* hard nofile 65536

EOF

Page 26: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:26 of 71

# grep ‘pam_limits.so’ /etc/pam.d/login || echo “session required

pam_limits.so” >> /etc/pam.d/login

# grep ‘SELINUX=disabled’ /etc/selinux/config || echo “SELINUX=disabled” >>

/etc/selinux/config

加装如下软件包:

# From RedHat AS5 Disk 1

cd /media/cdrom/Server

rpm -Uvh setarch-2*

rpm -Uvh make-3*

rpm -Uvh glibc-2*

rpm -Uvh libaio-0*

cd /

eject

# From RedHat AS5 Disk 2

cd /media/cdrom/Server

rpm -Uvh compat-libstdc++-33-3*

rpm -Uvh compat-gcc-34-3*

rpm -Uvh compat-gcc-34-c++-3*

rpm -Uvh gcc-4*

rpm -Uvh libXp-1*

cd /

eject

# From RedHat AS5 Disk 3

cd /media/cdrom/Server

rpm -Uvh openmotif-2*

rpm -Uvh compat-db-4*

cd /

eject

创建用户和组创建用户和组创建用户和组创建用户和组:

# groupadd oinstall

# groupadd dba

# groupadd oper

# useradd -g oinstall -G dba oracle

# passwd oracle

创建安装目录创建安装目录创建安装目录创建安装目录:

# mkdir -p /u01/app/oracle/product/10.2.0/db_1

# chown -R oracle.oinstall /u01

Page 27: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:27 of 71

设置环境变量设置环境变量设置环境变量设置环境变量::::

以 root 登录执行命令 xhost +,并把/etc/redhat-release 文件中的版本信息 Red Hat

Enterprise Linux Server release 5 (Tikanga)改为 redhat-4,装完数据库后要改回来。

以 oracle 登录把下面的内容加到文件.bash_profile 的末尾:

# Oracle Settings

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME

ORACLE_SID=TSH1; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH

PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export

CLASSPATH

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

开始安装开始安装开始安装开始安装:

以 oracle 登录操作系统,执行命令:

$ export DISPLAY=ob:0.0

$ wget

http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip

--下载 oracle 10g 版本数据库,然后解压:

$ unzip 10201_database_linux32.zip

---在当前目录下产生一个子目录 db/Disk1

$ cd db/Disk1

$ ./runInstaller

修改文件/etc/oratab,使得每个实例都自动启动:

TSH1:/u01/app/oracle/product/10.2.0/db_1:Y

后续扫尾后续扫尾后续扫尾后续扫尾:

数据库的字符集如下:

•Select AL32UTF8 as the database's NLS_CHARACTERSET.

Page 28: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:28 of 71

•Select AL16UTF16 as the database's NLS_NCHAR_CHARACTERSET

确保打开的游标数目不少于 3000:

SELECT value FROM v$parameter WHERE name = 'open_cursors';

ALTER SYSTEM SET open_cursors = 3000 SCOPE=BOTH;

确保数据库进程数不少于 150:

SELECT value FROM v$parameter WHERE name = 'processes';

ALTER SYSTEM SET processes=150 SCOPE=SPFILE;

重启数据库或者操作系统。

3333)、)、)、)、安装安装安装安装 jdkjdkjdkjdk

OB 支持 Sun Java Development Kit 1.6 版本(也就是 JDK 6.0),不支持 OpenJDK,所以在

ubuntu 中也要手工安装 Sun JDK 1.6。

从 http://java.sun.com/javase/downloads/index.jsp 下载 JDK 1.6 到/tmp/下,然后执行

命令:

$ su –

# sh /tmp/jdk-6u20-linux-i586.bin

# mv /tmp/jdk1.6.0_20/ /usr/local/sun-jdk

# echo 'export JAVA_HOME=/usr/local/sun-jdk' > /etc/profile.d/sun-jdk.sh

# echo 'export PATH=$JAVA_HOME/bin/:$PATH' >> /etc/profile.d/sun-jdk.sh

# chmod +x /etc/profile.d/sun-jdk.sh

# exit

$ su -

# echo $JAVA_HOME 输出 /usr/local/sun-jdk

# java -version 输出 java version “1.6.0_20” \n Java(TM) SE Runtime Environment

(build 1.6.0_20-b07).

4444)、)、)、)、安装安装安装安装 Apache TomcatApache TomcatApache TomcatApache Tomcat

OB 建议安装 Apache Tomcat 6.0 版本作为应用容器,采用*.tar 安装包,而不要采用

Installer 安装工具。

$ cd /tmp/ && wget

http://labs.renren.com/apache-mirror/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-

6.0.26.tar.gz

$ su -

# cd /usr/local

# tar -zxvf /tmp/apache-tomcat-6.0.26.tar.gz

# mv apache-tomcat-6.0.26 tomcat

# echo 'export CATALINA_HOME=/usr/local/tomcat' > /etc/profile.d/tomcat.sh

# echo 'export CATALINA_BASE=/usr/local/tomcat' >> /etc/profile.d/tomcat.sh

# echo 'export CATALINA_OPTS="-server -Xms128M -Xmx1024M

-XX:MaxPermSize=256M"' >> /etc/profile.d/tomcat.sh

# chmod +x /etc/profile.d/tomcat.sh

# chown -R openbravo:openbravo /usr/local/tomcat

把安装包目录 install 下的脚本程序拷贝并覆盖到/etc/init.d/tomcat 文件或者从这里下

Page 29: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:29 of 71

载(http://openbravo.pastebin.com/8mrFtJ6H)该脚本

# chmod +x /etc/init.d/tomcat

为防止 tomcat 自动重载自己,从文件/usr/local/tomcat/conf/context.xml 中找到并屏蔽

下列一行:

<!-- <WatchedResource>WEB-INF/web.xml</WatchedResource> -->

修 改 Tomcat Manager 的 用 户 名 和 密 码 , 编 辑 文 件

/usr/local/tomcat/conf/tomcat-users.xml,修改成如下几行:

<tomcat-users>

<role rolename="manager"/>

<role rolename="admin"/>

<user username="admin" password="abc123" roles="admin,manager"/>

</tomcat-users>

5555)、)、)、)、安装安装安装安装 Apache AntApache AntApache AntApache Ant

Apache ant 是专门针对于 java 语言的编译工具,OB常用它来自动完成编译任务,推荐采用

1.7.0 或更高版本。

$ su –

# cd /tmp

# wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz

# cd /usr/local

# tar zxvf /tmp/apache-ant-1.7.1-bin.tar.gz

# mv apache-ant-1.7.1 ant

# echo 'export ANT_HOME=/usr/local/ant' > /etc/profile.d/ant.sh

# echo 'export PATH=$ANT_HOME/bin/:$PATH' >> /etc/profile.d/ant.sh

# echo 'export ANT_OPTS="-Xmx1024M -XX:MaxPermSize=128M"' >>

/etc/profile.d/ant.sh

# chmod +x /etc/profile.d/ant.sh

# exit

$ su -

# ant -version 应该输出 Apache Ant version 1.7.1 compiled on June 27 2008

6666)、)、)、)、问题处理问题处理问题处理问题处理

以上就是 OB 的环境搭建,在搭建环境的过程可能会出现一些问题:

(1)、X Server 问题:在 Debian/Ubuntu 上搭建环境时可能会报错:The tomcat user cannot

access the X Server,那么在运行 ant 的用户界面上执行命令 xhost +

(2)、Jasper 报表问题:在某些平台上为了能使 JasperReports 正常工作,您需要加入参数

“-Djava.awt.headless=true”到环境变量 CATALINA_OPTS,如:

CATALINA_OPTS ="-server -Xms384M -Xmx512M -Djava.awt.headless=true

7777)、)、)、)、安装安装安装安装 OBOBOBOB

# cd /tmp

# wget

http://nchc.dl.sourceforge.net/project/openbravo/02-openbravo-sources/2.50MP18/

OpenbravoERP-2.50MP18.tar.bz2

Page 30: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:30 of 71

# tar -zxf OpenbravoERP-2.50MP18.tar.bz2

# cd OpenbravoERP-2.50MP18

# ant setup

# cd /tmp/ OpenbravoERP-2.50MP18/config

# chmod u+x setup-properties-linux.bin

# ./setup-properties-linux.bin --mode text 或--mode xwindow

----这一开始引导我们配置位于当前目录下的 Openbravo.properties 和 log4j.lcf 两个文

件,这两个文件下面编译时会用到。如果事后没有发现这来年各个文件,建议手工生成。

下面开始编译:

# ant install.source; ----从*.xml 文件中读取信息并创建数据库表,同时安装

Openbravo ERP。

# ant deploy.context; ----如果在配置是选择是 deploy.mode,那么就要执行本命令,

如果都是默认的配置,那么本命令是可以不用执行的。

# ant diagnostic; -----检测 OB安装是否成功。

2222.5.5.5.5. . . . 运行运行运行运行 OpenbOpenbOpenbOpenbravo ERP ravo ERP ravo ERP ravo ERP

两种情况下, 都要重启 Tomcat 服务来完成安装过程。

这里, 你应该在 Apache Tomcat 的 webapps 目录中发现(Windows 的 C:\Apache Software

Foundation\Tomcat5.5\webapps\ 或 C:\Tomcat5.5\webapps\ 以 及 Linux 的

/var/lib/tomcat5.5/webapps/):

your_context_name.war 文件.

如果不是这样:

停止 Tomcat 服务。

把 your_context_name.war 文件从 lib 复制。

放到 Apache Tomcat 的 webapps 目录

再次启动 Tomcat 服务。

从浏览器登录 Openbravo ERP,敲入正确 URL, 例如, http://localhost:8180/openbravo/.

检查 your_context_name 目录是否已经在 Apache Tomcat 的 webapps 中 被创建。

在用户框内输入 Openbravo 并在密码输入 openbravo,然后点击登 录 Login 按钮。

Page 31: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:31 of 71

恭喜! 你已经成功安装了 Openbravo ERP。

重要提示: 注意首次登录是以系统管理员(System Administrator)的身份做的,这里你不

Page 32: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:32 of 71

会见到任何业务选项(只有 AccessTableNoView 的 显示消息),但有管理员选项。为了使用

业务伙伴,产品,销售和订单等等,把当前角色改为 BigBazaar Admin (或 Openbravo Admin),

点击左边的 Openbravo 连接 并选择角色信息窗口。如要设为缺省角色,点击

Set as default 的单选框。

2222.6.6.6.6....安装后配置安装后配置安装后配置安装后配置

安装 Openbravo ERP 之后,还有些参数要定制,这样 Openbravo ERP 就可以适用于你的国家

或地区了。

2222.6.1. .6.1. .6.1. .6.1. 配置缺省日期和时间格式配置缺省日期和时间格式配置缺省日期和时间格式配置缺省日期和时间格式

改变Openbravo ERP的时间日期格式,只要运行在config/setup-tool目录下的工具就行了.

一旦改变完成,重新编译部署 Openbravo ERP 就可以了:

ant compile.complete

ant war

ant deploy

2222....6.2. 6.2. 6.2. 6.2. 配置缺省数字格式配置缺省数字格式配置缺省数字格式配置缺省数字格式

修改 config 目录下的 Format.xml 文件可以改变缺省的数字格式。 对每个类别都修改

decimal="." grouping=","。做完之后必须重启 Tomcat 服务,然后报表会显示你所期望的

结果。

2222.7.7.7.7....已知问题已知问题已知问题已知问题

下面是一些安装 Openbravo ERP 过程中的已知问题。

2222.7.1.7.1.7.1.7.1....WindowsWindowsWindowsWindows 下下下下 TomcatTomcatTomcatTomcat 的热部署问题的热部署问题的热部署问题的热部署问题

Page 33: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:33 of 71

在 Windows 下 Tomcat 有个已知问题。 Openbravo ERP 可以支持 openbravo.war 在 Tomcat

的热 部署,但在 Windows 经常会有文件锁住的问题。Windows 不允许 Tomcat 卸除已部署的

包因为操作系统会锁住那些文件。Tomcat 有预防锁的 机制,在 Tomcat 5.5 和 6.0 里,这

个机制缺省是关闭的。只要在%CATALINA_BASE%\conf\context.xml 文件里编辑一下。找 到

<context>并添加下列两个属性就行了:

<context antiJARLocking="true" antiResourceLocking="true" />

2222.7.2.7.2.7.2.7.2....JasperJasperJasperJasper 报表的问题报表的问题报表的问题报表的问题

编译源代码时, 应用服务器要有互联网连接以便成功编译*.jrxml 文件。如果没有,Jasper

报表就不能正确工作。

Windows 下,防火墙会阻挡 Jasper 报表的编译,所以要暂时关闭他们。

这些.jrxml 文件头看上去如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"

"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

如果应用服务器没有互联网连接,那就会有些问题,尽管看起来编译好像是成功的。调用报

表时,就会得到如下的错误:

org.xml.sax.SAXParseException: Premature end of file.

如果修改所有的 jrxml 文件(到 58 行)并删除这一行(调用互联网连接的),

<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"

"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

便亦不会报错,但翻译会错,在应用程序里调用报表时,你会得到下列错误信息:

Language "null" not supported by this report compiler. Expecting "java" instead.

这样, 这个问题的最终解决方案就是替换这一行:

<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"

"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

换成

<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"

"/tmp/jasperreport.dtd">

所有 58 个 .jrxml 文件,以避免与前一个 URL 冲突,然后编译,然后应用可以正常运行。

2222.7.3. .7.3. .7.3. .7.3. 运行运行运行运行 JasperJasperJasperJasper 报表时的链接错误报表时的链接错误报表时的链接错误报表时的链接错误

在有些 Linux 的发行版中,使用 Java SDK 1.5.0_13 或 1.5.0_15 同时 Tomcat 以守护进程运

行[jsvc]会有些问题。当加载 Jasper 报表时,会有报错找不到类库。最简单的办 法就是修

改/etc/init.d/tomcat 脚本,加上 LD_LIBRARY_PATH 的导出,这里有 (libawt.so)库。

例如:

LD_LIBRARY_PATH=/usr/lib/jvm/java-1.5.0-sun-1.5.0.13/jre/lib/i386/

export LD_LIBRARY_PATH

在 Ubuntu 有一个捷径,对所有 1.5 的字版本使用(如 1.5.0_13 和 1.5.0_15)。它使用符号

链接自动指向正确的目录:

LD_LIBRARY_PATH=/usr/lib/jvm/java-1.5.0-sun/jre/lib/i386/

export LD_LIBRARY_PATH

2.7.4 2.7.4 2.7.4 2.7.4 JasperJasperJasperJasper 报表环境变量报表环境变量报表环境变量报表环境变量

Page 34: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:34 of 71

为了让 JasperReports 工作起来, 要对一些环境变量参数做点修改,如 CATALINA_OPTS 的参

数-Djava.awt.headless=true。CATALINA_OPTS 项 中应有类似 CATALINA_OPTS ="-server

-Xms384M -Xmx512M -Djava.awt.headless=true"的内容。

2222.7.5.7.5.7.5.7.5....Internet Explorer 6Internet Explorer 6Internet Explorer 6Internet Explorer 6 的问题的问题的问题的问题

主要问题是 IE6 不支持 PNG 格式的 alpha 通道。IE7 和 Mozilla Firefox 都支持。

解决方案一: 把 PNG 图像换成 GIF。

不可能把所有的 PNG 都换成,因为 PNG 每个像素都有 alpha 通道,但 GIF 不是。GIF 只支持

到 256 色,这还不是最大的问题。如果用 GIF,你要么 定义全透明,要么没有透明度。灰

度就没法实现了。

解决方案二:避免使用透明化

这就意味着叠加的图像就不行了。例如,图表和工具框,有正方形背景,按下去又会变化。

这很好实现,如果有透明叠加的话。但如果没有这种透明性,我们就要有 三种图标,对所

有的背景都有三种情况,有很多图标要修改。

问题不仅仅是要重新创作所有的图标,针对每一种背景,问题还在于要重新编写所有的 HTML

和 CSS 文件。

解决方案三:过滤器

显示透明的 PNG 也不是完全不可能,对 IE6,甚至对 IE5.5 也可以显示。有一种过滤器的机

制可以用来处理这种情况,可以用 JavaScript 来实 现。

http://www.twinhelix.com/css/iepngfix/demo/ 和

http://redvip.homelinux.net/varios/explorer-png.html 有一些相关的例子。

我们尝试了好几种过滤器的方法,但不彻底改变 css 和 html 文件就没有什么好的效果。

唯一的解决方法就是创建一个只含 gif 图像的界面, 代价就是丢失界面质量。可以看看 如

何让创建一个新的界面风格。

你可以选择安装 Mozilla Firefox 或更新到 IE7 (如果你是 WindowsXP 的忠实用户的话)。

3333 系统使用到的技术系统使用到的技术系统使用到的技术系统使用到的技术

3.1 3.1 3.1 3.1 OpenbravoERPOpenbravoERPOpenbravoERPOpenbravoERP 涉及的技术涉及的技术涉及的技术涉及的技术

1)、支持的操作系统:windows 2000, XP*, Vista;Ubuntu*, RedHat*, CentOS, Debian,

Gentoo, OpenSUSE, FreeBSD, Mac OS X, OpenSolaris, Solaris 10;

2)、支持的硬件结构:X86*, X86_64*, IA-64, Sparc, PowerPC, AIX;

3)、 支持的数据库:Oracle 10g R2 或者 11g,标准版和企业版都行(推荐使用 11g);

PostgreSQL 8.3.5 或者更高版本(带有 ossp-uuid 支持的);

4)、其他软件:Java 2 平台标准版 6.0 或者更高版本;Apache-Tomcat 6.0.x;Apache-Ant

1.7.0 或者更高版本(推荐使用版本 1.7.1);

5)、使用到的技术有:Java, PL/SQL, XML, HTML/CSS, PDF;

6)、支持的浏览器:Firefox 3.0 或者更高;IE 7.0

7)、开发工具 eclipse

注意:这些都是经过 openbravo 官方测试通过的,其他的环境也许页可以,但不能保证。

Page 35: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:35 of 71

3.23.23.23.2 本地化本地化本地化本地化

本地化主要涉及语言本地化和会计本地化。目前 OpenbravoERP 已经实现的本地化国家(含

语言和会计科目)有这些这些,但不同的国家实现了不同版本的本地化,比如中国只实现了

2.2x 版本(2008 年 7 月之后就再也没有更新了),后续的更新一般只涉及语言,而会计科目

不用改变。2.50 前的版本需要手工下载语言和会计科目文件(从这里下载),然后再安装语

言和导入会计科目,2.50 以及之后的版本直接作为扩展模块安装(点击这里安装扩展模块)。

4. 4. 4. 4. 数据备份与恢复数据备份与恢复数据备份与恢复数据备份与恢复

4.1 4.1 4.1 4.1 备份备份备份备份

1111)、)、)、)、备份数据库备份数据库备份数据库备份数据库

如果是 postgresql 数据库(假如用户名是 tad,数据库名是 openbravo):

pg_dump -U tad -h localhost -F c -b -v -f /tmp/tad_pgsql.dmp openbravo

如果是 oracle 数据库(假如用户名是 tad,SID 是 XE):

exp tad@XE file=/tmp/tad_ora.dmp log=/tmp/tad_ora.log owner=tad statistics=none

2222)、)、)、)、备份程序备份程序备份程序备份程序

# /etc/init.d/tomcat stop

# cd opt && tar –cjf /tmp/OpenbravoERP-2.5.tar.bz2 OpenbravoERP-2.50

# /etc/init.d/tomcat start

4.2 4.2 4.2 4.2 恢复恢复恢复恢复

1111)、)、)、)、恢复数据库恢复数据库恢复数据库恢复数据库

如果是 postgresql 数据库(假如用户名是 tad,数据库名是 openbravo):

$ psql -d postgres -U postgres

CREATE ROLE tad LOGIN PASSWORD 'tad' SUPERUSER CREATEDB CREATEROLE VALID UNTIL

'infinity';

UPDATE pg_authid SET rolcatupdate=true WHERE rolname='tad';

CREATE DATABASE openbravo WITH ENCODING='UTF8' OWNER=tad;

\q

$ pg_restore -i -U tad -d openbravo -h localhost -v -O /tmp/tad_pgsql.dmp

$ vacuumdb -U tad -h localhost -d openbravo -f -z –v

如果是 oracle 数据库(假如用户名是 tad,SID 是 XE):

$ sqlplus system@XE

create user tad identified by tad default tablespace users temporary tablespace

temp;

$ imp tad@XE file=/tmp/tad_ora.dmp log=/tmp/tad_ora.log fromuser=tad touser=tad

Page 36: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:36 of 71

2222)、)、)、)、恢复程序恢复程序恢复程序恢复程序

# /etc/init.d/tomcat stop

# cd /opt

# rm –rf Openbravo*

# tar –xjf /tmp/OpenbravoERP-2.50.tar.bz2

# /etc/init.d/tomcat start

5. 5. 5. 5. 开发手册开发手册开发手册开发手册

5.15.15.15.1 开发概述开发概述开发概述开发概述

以下列出了在 Openbravo 开发中使用的模型驱动开发方法的主要概念:

应用字典:集中存放了定义的窗口、页签和字段的表。

应用菜单:程序左边的主菜单。

Callout(类似于触发器):用户操作一个窗口时系统响应的动作。例如可以增加或减少可见

的字段,或者根据输入系统的信息填定订单。

表单:手工制作的可以输入、修改或删除的窗口。不同于标准窗口,表单允许复杂数据的输

入和在多个位置输入数据。

MVC(模型-视图-控制器):将应用程序的数据、用户界面和流程分离的一种架构。在

Openbravo 中 MVC 是这样实现的:

模型部份是用 Openbravo 的 SqlC 实现的。通过一个有标准 SQL 语句和参数的 XML 文件实现。

其中的参数是可选或必须的,可以很容易的生成 SQL 语句。

视图部份是用 Openbravo 开发的 XmlEngine 实现的。XmlEngine 是可以从一个 XML/HTML 格

式的模板生成 XML/HTML 文档的工具。

控制器是从 HttpBaseServlet 继承的子类。这些 Servlet 处理读取数据,使用 SQLC 生成的

类与数据库交互和使用 XmlEngine 提供输出。

报表:显示从表中检索出来的数据或以预定义的格式和可视化的交互方式进行查询。以 pdf

或 html 的方式显示请求的信息是一种简捷的方式。报表可以用户希 望的方式进行定制,通

常用于展示全局形势或总结。

标准窗口:可以输入、修改和删除数据的自动生成的窗口。窗口中的信息是由 Openbravo

按系统中的数据生成的。

窗口:应用程序用于管理数据的屏幕。可以进行插入、更新或删除数据的操作。Openbravo

中有两种窗口:标准窗口和表单。一个窗口可能会包含多个页 签。

5.25.25.25.2 开发方法开发方法开发方法开发方法

Openbravo 是构建 Openbravo ERP 的开发平台。正如架构总览中解释的开发可以理解为两层。

应用程序字典。它存储了应用程序的所有窗口、表、列、进程、报表和它们的关系。用户只

要可以很方便的通过定义一个窗口、数据元素和报表并在 应用程序字典中注册就可以增加

一个新的功能,而无需一行代码。大部份的 Openbravo 代码是从应用程序字典中自动生成的。

模型/视图/控制器。当工作在这个层级时是可以通过 Openbravo MVC 开发框架完成任何改变

的。无论如何一个工具或功能不能通过数据字典调整时,都可以在 MVC 这个层级实现。这通

Page 37: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:37 of 71

常意味着要开发一个新的 JAVA 类。

5.35.35.35.3 组织开发工作组织开发工作组织开发工作组织开发工作

在开始开发一个新的功能时必须清楚什么东西必须完成。下面几点对组织你的开发工作会有

所帮助:

应该提供哪些功能。必须清楚哪些功能要实现。

尽量简单。保持设计尽量简单并且能很好的与不同组件进行交互。

定义你的数据模型。需要添加哪些表、列、关系和索引来存储数据以实现想要的功能。

定义用户界面。用户如何使用新的功能。按工业标准的可用性指南组织可视化的元素。

定义报表。考虑哪些数据和你的用户有关和如何最好的呈现在报表中。

5.45.45.45.4 标识符命名标准标识符命名标准标识符命名标准标识符命名标准

数据字典命名制定一个清晰和固定的标准对于 ERP 系统是非常关键的。按照这个命名标准就

能保证 Openbravo ERP 的新版本不会因为与客户开发时使用的数据字典元素同名而产生冲

突。

当自定义开发时,在每一个新的数据字典元素前加上 CUS_的前缀。例如,当为一个名为 ACME

的公司进行客户定制时,在数据字典元素名前加 上 CUS_ACM 的前缀。

当开发一个垂直功能时,加上这个市场名前加上 VER_的前缀。例如,为房地产市场开发时

使用 VER_REA 的前缀。

5.4.15.4.15.4.15.4.1 数据库元素数据库元素数据库元素数据库元素

命名新的表时加上特定的开发时的前缀。例如你需要为 ACME 客户定制开发时需要增加一个

DOCUMENT 的表时你应该将该表命名为 CUS_ACM_DOCUMENT。这些表的字段可以按照字段命名

转换 (AD_CLIENT_ID,IsActive,Name,Descriptioin 等)。

当在已有的表中增加新的字段时需要加上特定的开发时的前缀。

其他的数据库对象(存储过程,触发器等)也要加上开发时的前缀。

数据字典的注册 IDs 是由序列按开发时的顺序生成的,因而不会出现重复的 IDs。数据字典

中的实体名都应加上一定的前缀。

5.4.2 5.4.2 5.4.2 5.4.2 MVCMVCMVCMVC 目录目录目录目录

命 名 目 录 时 加 上 特 定 的 前 缀 。 建 议 建 立 一 个 独 立 的 包 。

(org\openbravo\erpCommon\cus_myPackage)。

5.4.3 存储过程语法

作为存储过程参数的变量名前加上 p_的前缀

变量名前加 v_的前缀

游标名前加 c_的前缀

5.55.55.55.5 目录结构目录结构目录结构目录结构

Openbravo ERP 的目录结构从逻辑上区分了核心组件(XmlEngine,SQLC,HttpBaseServlet)和

WAD(应用程序字典向导)与 ERP 本身的 结构(表单,报表,call-outs,下拉列表,工作流,流程

等)。

Page 38: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:38 of 71

5.5.15.5.15.5.15.5.1 主树结构主树结构主树结构主树结构

AppsOpenbravo

|-attachment

|-build

|-config

|-database

|-docs

|-legal

|-lib

|-src

|-srcAD

|-srcClient

|-src-core

|-src-db

|-src-trl

|-src-trl

|-src-wad

|-web

|-WebContent

|-src-loc

build 编译好的类会被复制到这个目录中

AppsOpenbravo

|-build

|-classes

|-org

|-openbravo

|-authentication

|-basic

|-lam

|-base

|-secureApp

|-erpCommon

|-erpReports

|-erpWindows

|-javasqlc

|-src

|-srcAD

config 包含了各种配置和日志文件

AppsOpenbravo

|-config

|-Format.xml

|-log4j.lcf

|-Openbravo.properties

|-setup-properties-linux.bin

Page 39: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:39 of 71

|-...

database 包含模型数据(结构:表,约束,存储过程和触发器),示例数据(如产品,业务

伙伴等)和 XML 格式的源数据(窗口和 页签)。

AppsOpenbravo

|-database

|-lib

|-model

|-functions

|-sequences

|-tables

|-triggers

|-views

|-sampledata

|-sourcedata

docsOpenbravo 的 API 文档,由 Javadoc 生成。

legal 许可证文档。

lib 编译时需要的库。

AppsOpenbravo

|-lib

|-openbravo-core.jar

|-openbravo-trl.jar

|-openbravo-wad.jar

|-openbravo.war

|-...

openbravo-core.jar,openbravo-trl.jar 和 openbravo-wad.jar 是 执 行 ant

compile.complete 时必须的。编译的结果是一个名为 openbravo.war 的文件,需要将其复

制到应用服务器的 webapps 目录下。

srcOpenbravo ERP 的源代码:表单,报表,call-outs,combos,工作流,流程等。

AppsOpenbravo

|-src

|-org

|-openbravo

|-base

|-erpCommon

|-ad_actionButton

|-ad_background

|-ad_callouts

|-ad_combos

|-ad_forms

|-ad_help

|-ad_process

|-ad_reports

|-ad_tasks

|-ad_workflow

Page 40: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:40 of 71

|-businessUtility

|-info

|-reference

|-security

|-utility

|-ws

|-erpReports

前缀 ad_表示应用程序字典。字典名的结尾说明了它的意思。ad_reports 和 erpReport 的 区

别在于在应用程序中存取报表的方式不同。如果是通过菜单调用的报表应该放在

ad_reports,另一方面,有些窗口在工具栏上有一个打 印的按钮,通过这种方式调用的报

表应该放在 erpReports。

srcAD 保存了通过应用程序字典自动生成的代码。

srcClient 存放为自已应用程序开发的代码,不是给其他客户。

src-core 核心组件的源代码: XmlEngine (视图层), SQLC (模型层), HttpBaseServlet (控

制器)和连接池。

AppsOpenbravo

|-src-core

|-src

|-org

|-openbravo

|-base

|-HttpBaseServlet.java

|-HttpBaseUtils.java

|-data

|-Sqlc.java

|-database

|-ConnectionPool.java

|-xmlEngine

src-db 创建 dbmanager.jar 文件需要的源代码。

AppsOpenbravo

|-src-db

|-src

|-org

|-openbravo

|-ddlutils

src-trl 翻译器的源代码。

AppsOpenbravo

|-src-db

|-src

|-org

|-openbravo

|-translate

src-wadWAD 的源代码。

AppsOpenbravo

Page 41: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:41 of 71

|-src-db

|-src

|-org

|-openbravo

|-wad

webCSS,Javascript 的代码和图片及弹出窗口。

AppsOpenbravo

|-images

|-js

|-popups

|-skins

src-locMVC 结构中的视图层元素结构:HTML,XML,FO 和子报表。它们被放在不同的位置(每

一种一个目录)。

AppsOpenbravo

|-WebContent

|-src-loc

|-design

|-org

|-openbravo

|-base

|-erpCommon

|-erpReports

|-erpWindows

|-es_ES

|-xx_XX

|-...

5.65.65.65.6 风格指南风格指南风格指南风格指南

为了代码的统一和清晰,我们建议按下面的指南进行编码。这个指南应用于 Java,XML,HTML

和 PL/SQL。

5.6.15.6.15.6.15.6.1 逻辑比较逻辑比较逻辑比较逻辑比较

不要使用空格。

不正确::

WHERE a = b

WHERE a= b

正确::

WHERE a=b

5.6.25.6.25.6.25.6.2 逗号分隔列表逗号分隔列表逗号分隔列表逗号分隔列表

不正确:

SELECT a,b,c

Page 42: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:42 of 71

SELECT a ,b ,c

SELECT a , b , c

正确:

SELECT a, b, c

5.6.35.6.35.6.35.6.3 圆括号中的空格圆括号中的空格圆括号中的空格圆括号中的空格

在函数中使用时:

不正确:

SELECT max( c1 )

SELECT max (c1)

正确:

SELECT max(c1)

在比较操作时:

不正确:

if(i==0)

if( i==0)

正确:

if (i==0)

for (i=0; i<n; i++)

5.6.4 5.6.4 5.6.4 5.6.4 SELECT INTOSELECT INTOSELECT INTOSELECT INTO 和和和和 INSERT INTOINSERT INTOINSERT INTOINSERT INTO

如果超过 8 个字段:将其分为 4 个一组(为了易读性)。 一行 80 个字符。这是比较灵活的

规则。

5.6.5 5.6.5 5.6.5 5.6.5 SQLSQLSQLSQL 关键字关键字关键字关键字

SQL 的关键字要大写。

不正确:

select * from AD_FIELD

正确:

SELECT * FROM AD_FIELD (SELECT, UPDATE, 等)

5.75.75.75.7 编译程序编译程序编译程序编译程序

5.7.15.7.15.7.15.7.1 命令行编译任务命令行编译任务命令行编译任务命令行编译任务

ant core.lib 编译 MVC 框架的核心组件。它会生成 openbravo-core.jar 文件。

AppsOpenbravo

|-lib

|-openbravo-core.jar

ant wad.lib 编译。它不会生成窗口,只是生成 WAD 本身而已。它会生成 openbravo-wad.jar

文件。

AppsOpenbravo

|-lib

|-openbravo-wad.jar

Page 43: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:43 of 71

ant trl.lib 编译翻译器。它会生成 openbravo-trl.jar。

AppsOpenbravo

|-lib

|-openbravo-wad.jar

ant compile.complete 编译整个程序。它会生成 WAD 的窗口和编译应用程序的源代码。它

依赖于 core.lib,wad.lib 和 trl.lib。

ant compile.complete.development 编译整个应用程序并复制到 tomcat 的容器中。它会生

成 WAD 的窗口和编译应用程序源代码。它依赖于 core.lib,wad.lib 和 trl.lib。

ant compile -Dtab="xx,yy"生成指定的窗口(名称中包含 xx或 yy),编译修改过的源代码

并且更新 web.xml 中的 servlet-mapping。

ant compile.development -Dtab="xx,yy"生成指定的窗口(名称中包含 xx或 yy),编译修

改过的源代码并且更新 web.xml 中的 servlet-mapping。最 后会将所有生成的类复制到

tomcat 的容器中。

ant setup 调用设置数据库连接和应用程序路径的界面(是 build.xml 中的默认任务)。

ant war 在 lib 目录下生成一个 war 文件:

AppsOpenbravo

|-lib

|-openbravo.war

ant deploy 复制 war 文件到 tomcat 的 webapps 目录下。

ant installWebService 安装 Web Service 到应用服务器的目录。

ant install.source 会 执 行 ant core.lib,ant wad.lib,ant trl.lib,ant

compile.complete,ant installWebService 和 ant war 任务。这个任务只用于安装。

5.7.25.7.25.7.25.7.2 开发环境开发环境开发环境开发环境

在开发环境中内容中手工拷贝的。我们不会生成 war 文件因为这比较耗时。

第一次编译过程是这样的:

ant core.lib

ant wad.lib

ant trl.lib

ant compile.complete.development

然后编译整个应用程序:

ant compile.complete.development

编译特定的窗口:

ant compile.development -Dtab="window name"

编译手工代码:

ant compile.development -Dtab=xx

为了编译时避免执行翻译的任务(对于这个阶段将时间花在这上面是没有必要的),可以在

命令中添加一个参数:-Dtr=no。

ant compile.development -Dtab="window name" -Dtr=no

ant compile.development -Dtab=xx -Dtr=no

5.7.35.7.35.7.35.7.3 生产环境生产环境生产环境生产环境

在生产环境下应用程序会打包在 war 文件中。这可以让我们对每一个应用程序设置正确的权

限,但是我们必须将 war 文件发布到 tomcat 中,以使它 能运行起来。

Page 44: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:44 of 71

第一次编译的过程如下:

ant core.lib

ant wad.lib

ant trl.lib

编译整个应用程序:

ant compile.complete

ant war

ant deploy

编译指定的窗口:

ant compile -Dtab="window name"

ant war

ant deploy

编译手工代码:

ant compile -Dtab=xx

ant war

ant deploy

5.85.85.85.8 从源代码构建从源代码构建从源代码构建从源代码构建

这一节是如何从源代码构建的快速指南。

5.8.15.8.15.8.15.8.1 安装安装安装安装 SubversionSubversionSubversionSubversion

Subversion 是一个源码控制工具,可以让开发者控制文件的版本。

构建前必须先安装 Subverion。可以从这里下载:

http://subversion.tigris.org *

必须同时安装 OpenSSL。

5.8.25.8.25.8.25.8.2 从从从从 SubversionSubversionSubversionSubversion 中检出源代码中检出源代码中检出源代码中检出源代码

安装好 Subverion 后运行如下代码:

svn co https://openbravo.svn.sourceforge.net/svnroot/openbravo/trunk

AppsOpenbravo

将会创建 AppsOpenbravo 的目录,源代码保存的目录。

5.8.35.8.35.8.35.8.3 快速构建指南快速构建指南快速构建指南快速构建指南

从创建的 subversion 文件的目录运行如下命令:

ant -f build.xml.template setup

这个过程会配置安装参数。

build.xml 被创建

在 config 目录下创建 dbCon5.xml, XmlPool.xml, log4j.lcf 和 userconfig.xml

在 src 目录下创建 deploy.wsdd

使用 Oracle 数据库时所有这些文件都会被创建。如果使用 PostgreSQL 需要将 dbCon5.xml

和 XmlPool.xml 文 件名修改为 dbCon5_PostrgreSQL.xml 和 XmlPostgreSQL.xml。

当参数按上面的方式配置好后,再运行下面的命令。

ant install.source

Page 45: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:45 of 71

这个过程编译并生成应用程序的 jar 文件并在 lib 目录下生成 openbravo.war 文件。需要将

些文件复制到$CATALINA_HOME/webapps 目录以发布应用。

5.9 5.9 5.9 5.9 OpenbravoOpenbravoOpenbravoOpenbravo 数据模型数据模型数据模型数据模型

5.9.15.9.15.9.15.9.1 存储的数据库对象存储的数据库对象存储的数据库对象存储的数据库对象

某些情况不在 Openbravo 中的数据库对象(存储过程,函数和触发器)必须符合指定的规则才

能使用。应用程序中存储过程时只能通过对应的 AD_PInstance_ID 来调用。存储过程也必

须正确的管理 AD_PInstance,设置返回值、设置有用的输出信息。在创建存储过程这一节

会更 详细的介绍如何开发一个存储过程。

5.9.25.9.25.9.25.9.2 实体实体实体实体----关系关系关系关系(ER)(ER)(ER)(ER)图图图图

Openbravo 的实体-关系数据库图展示了 Openbravo 整个的数据模型。它包括了 Openbravo

ERP 的功能所使用的所有表和字段。

根据应用程序字典中的数据生成了文档。这些图按不同的主功能模块分成了几个章节。同一

个表可能在不同的章节中出现但具体的描述只出现一次。 这样做是为了强调某一个章节中

主要的表与其他章节中表的关系。例子中展现了所有的关系但没有代表性的表不会出现在章

节中。 (具体参考另一份文件“Openbravo_ER_2.40.pdf”)。

5.9.35.9.35.9.35.9.3 创建存储过程创建存储过程创建存储过程创建存储过程

AD_PInstance 和 AD_PInstance_Para 表

应用程序中调用存储过程都需要在表 AD_PInstance 中注册。表 AD_PInstance_Para 中存放

了报表和流程窗口中相应的存储过程 的参数的值。

表 AD_PInstance:

AD_PInstance_ID:表的标识符。

AD_Process_ID:与在应用程序字典中存放存储过程信息的表 AD_Process 相关联的外键。

Record_ID:如果在窗口中调用存储过程,这一列存放当前记录的 ID。

IsProcessing:存储过程在执行中时这一列为“Y”。有些存储过程会检查相关的存储过程是

否正在运行。

AD_User_ID:调用存储过程的用户 ID。

Result:存放存储过程运行的结果。

ErrorMsg:存放存储过程输出的信息。

表 AD_PInstance_Para:

Parametername:对应于数据库列名的参数名称。

P_String 和 P_String_TO:当字段是文本框或列表框时插入的值。

P_Number 和 P_Number_TO:当字段是数字框或外键时插入的值。

P_Date 和 P_Date_TO:当字段是日期型时插入的值。

Info 和 Info_TO:

当参数定义为一个范围内的值而不是指定的一个值时用_TO 的后缀。使用这个参数生成的弹

出窗口会有两个标签为 From 和 To 的字段。之后可以按其中 的值来过滤查询结果。

存储过程的输入参数

应用程序调用存储过程时仅传递一个参数到数据库,就是对应的 AD_PInstance_ID。

我们需要一个中介存储过程来从应用程序或一个不同的存储过程来调用另一个存储过程。因

Page 46: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:46 of 71

为从一个存储过程调用另一个存储过程时是不知道 AD_PInstance_ID 的。可以参考

C_Order_Post 和 C_Order_Post1 。主存储过程调用时需要有足够的参数,包括

AD_PInstance_ID。被调用的中介存储过程仅有一个关于 AD_PInstance 的参数。这个存储过

程仅有一个到主存储过程的调用,其中除了 AD_PInstance 其余参数都是空的。在主存储过

程中必须区分 AD_PInstance 是否为空来管理调用的结果和输出信息。

从 AD_PInstance 表中获取有用的信息

在存储过程的开始我们也许会想要从 AD_PInstance 和 AD_PInstance_Para 两个表中知道一

些必须的信息保存到变量中。如果没 有参数那么用 SELECT 就可以了。如果有多个参数那么

可能需要使用游标。参见 C_Debt_Payment_Create。

Record_ID 存放窗口中当前的活动记录的 ID(如当处理 Order 时的 C_Order_ID)。如果存储

过程中有 Update 或 Insert 子句,AD_User_ID 可以用于验证用户权限。

AD_Update_PInstance 存储过程

该存储过程用于更新 AD_PInstance 的状态。其他存储过程必须在开始和结束时调用该存储

过程。

参数:

p_PInstance_ID:将要被更新的 AD_PInstance_ID。

p_AD_User_ID:执行更新的 AD_User_ID。

p_IsProcessing:存储过程的状态。

p_Result:存储过程的结果。

p_Message:存储过程的输出信息。

在开始调用时设置 Processing='Y':

AD_UPDATE_PINSTANCE(p_PInstance,NULL,'Y',NULL,NULL);

在结整调用或引发例外时需要设置 Processing='N'和相应的执行结果和输出信息:

AD_UPDATE_PINSTANCE(p_PInstance_ID,v_User,'N',v_Result,v_Message);

存储过程执行的结果有 3种。按不同的结果会显示不同的包含输出信息的对话框。结果为 0

表示错误(红色对话框),1 表示成功(绿色对话框)和 2 表示警 告(黄色对话框)。如果

输出信息是 NULL 将作为成功来处理。

例外和错误管理

存储过程的错误信息只能依靠对应的 AD_PInstance 的结果来管理。所以所有的例外必须被

正确的处理。

当在存储过程中触发了 RAISE_APPLICATION_ERROR 的例外时,错误号被设置为-20000。同时

你可以加上对该问题的错 误描述。描述信息中可以使用存储在 AD_Message 表中的信息,只

要将它的值放在@之间。也可以将多个字符串连接在一起。

例外块中必须能够区分两种不同情况:存储过程是被应用程序直接调用还是被其他存储过程

调用的。通常这可以通过 AD_PInstance_ID 是否为 NULL 来区分。

如果是由其他存储过程调用时引发的例外是由存在于 AD_PInstance 中的父存储过程处理

的。但是这不适用于以上介绍的中介存储过程。 因为中介存储过程中没有处理例外的块,

所以还是由相应的 AD_PInstance_ID 的主存储过程来处理。在 RAISE 之前可以使用

DBMS_OUTPUT.PUT_LINE()用于调试。下面是被另外一个存储过程调用的存储过程中的例个块

的例子:

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('ERROR MA_Standard_Cost_Sequence, sequence_ID '||

p_Sequence_ID || ', date ' || p_CalcDate || ' at ' ||v_ResultStr);

Page 47: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:47 of 71

RAISE;

END Ma_Standard_Cost_Sequence;

如果存在 AD_PInstance 时例外必须要在 AD_PInstance 表中设置对应的信息。这条信息是由

@ERROR=SQLERRM 组成 的,SQLERRM 中是在 RAISE_APPLICATION_ERROR 或数据库抛出的的例

外中的错误信息。然后是调用 ROLLBACK,最后在 AD_PInstance 中更新错误信息并返回结果

为 0、显示错误信息的对话框。同时也可以使用 DBMS_OUTPUT.PUT_LINE()用于测试。

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(v_ResultStr) ;

v_ResultStr:= '@ERROR=' || SQLERRM;

DBMS_OUTPUT.PUT_LINE(v_ResultStr) ;

ROLLBACK;

AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ;

RETURN;

END MA_ProductionRun_Standard;

5.9.45.9.45.9.45.9.4 存储过程语法的建议存储过程语法的建议存储过程语法的建议存储过程语法的建议

Openbravo 支持 Oracle 和 PostgreSQL 数据库。

以下的一些建议可以使你的存储过程能同时在这两个数据库上运行或能够很容易的转换。这

里假设你已经为 Oracle 与了代码但同时想让这些代 码能在 PostgreSQL 上运行。

通用规则

以下一些内容能确保 PL代码能正确地在其他数据库后台运行。

JOIN 语句。用 LEFT JOIN 或 RIGHT JOIN 代替(+)

在 XSQL 中使用问号(?)作为参数据占位符。如果参数时数值型使用 TO_NUMBER(?),日期型

使用 TO_DATE(?)。

不要使用 GOTO 语句,因为 PostgreSQL 不支持 GOTO。

使用 COALESCE 代替 NVL

使用 CASE 代替 DECODE。如果 CASE 表达式为 NULL,如:

CASE WHEN variable IS NULL THEN X ELSE Y END

如果变量的值是几个字符串连接起来的要用括号括起来

用 NOW()代替 SYSDATE

PostgreSQL 区分""和 NULL,在检查空变量的时候要注意这一点

使用子查询时要加上别名。

SELECT * FROM (SELECT 'X' FROM DUAL) A

使用 SELECT 语句时总是使用 AS

SELECT field AS field_name FROM DUAL

PostgreSQL 中 UPATE,INSERT,和 DELETE 语句中不支持别名。

PostgreSQL8.1 不支持这样的 UPDATE 语句(但 8.2 已支持了)

UPDATE TABLE_NAME SET (A,B,C) = (SELECT X, Y, Z FROM ..

但下面的语句是可以的:

UPDATE TABLE_NAME SET A = (SELECT X FROM ..), B = (SELECT Y FROM .),C = (SELECT Z

FROM ..)

PostgreSQL 不支持在更新的字段中加上表名。

PostgreSQL 不支持 DELETE TABLE,可以使作 DELETE FROM

Page 48: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:48 of 71

PostgreSQL 不支持在 ORDER BY 或 GROUP BY 中使用参数,如‘1’。而没有引号的数字是可

以的。

PostgreSQL 不支持 CURRENT OF 语句。

PostgreSQL 不支持 COMMIT。它会在 BEGIN 和 END 块间自动显示的提交。抛出例外时会产生

ROLLBACK。

PostgreSQL 不支持 SAVEPOINT。可以用 BEGIN,END 和 ROLLBACK 完成同样的功能。

PostgreSQL 不支持 CONNECT。

PostgreSQL 和 Oracle 都不支持用变量来指定表的字段名称。如使用 v_IsProcessing 替代

IsProcessing。

PostgreSQL 不支持 EXECUTE IMMEDIATE...USING。可以使用 SELECT 和参数来完成相同的功

能。

PostgreSQL 在调用没有参数据函数时要加上括号。

DBMS.OUTPUT 应该在一行内,以使自动翻译可用。

在 PostgreSQL 中任何字符串与 NULL 连接都会产生一个 NULL 的字符串。建议用 COALESCE

或将变量初始化为‘’。

注意:在 Oracle 中 null||'a'结果是'a',而在 PostgreSQL 中结果是 NULL,所 以应使用

coalesce(null,)||'a'。但时如果变量是 Oracle 的 NVarchar 类型时会引发 ORA-12704:字

符集不匹配 的错误,这时可以这样做 coalesce(to_char(myNVarCharVariable),)||'a'。

将以下语法

COALESCE(variable_integer, '')

COALESCE(variable_integer, 0)

来代替,以保证可以在 PostgreSQL 中也可以运行。

PostgreSQL 执行 SELECT FOR UPDATE 是在表级而 Oracle 是在列级别。

PostgreSQL 不支持带有三个参数的 INSTR 命令,可以使用 SUBSTR。

在 Oracle 中 SUBSTR(text,0,Y)和 SUBSTR(text,1,Y)的结果是相同的,但是 PostgreSQL

中不 同。所以要使用 SUBSTR(text,1,Y)。

PostgreSQL 不支持这样<<LABEL>>的标签。

在日期比较中默认的日期是 1900.1.1 或 9999.12.31。

如要将日期类型转换为文本型时要使用 to_date 函数和相应的掩码。

如:

COALESCE(movementdate, TO_DATE('01-01-1900', 'DD-MM-YYYY'))

游标

有两种使用游标的方法:FETCH 子句和 FOR 循环。

Oracle 中 FETCH 游标的声明:

CURSOR Cur_SR IS

PostgreSQL 中:

DECLARE Cur_SR CURSOR FOR

FOR 循环中的游标格式:

TYPE RECORD IS REF CURSOR;

Cur_Name RECORD;

这在 Oracle 和 PostgreSQL 中都可以使用。

数组

在 Oracle 中数组是这样定义的:

Page 49: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:49 of 71

TYPE ArrayPesos IS VARRAY(10) OF INTEGER;

v_pesos ArrayPesos;

v_dc2 := v_dc2 + v_pesos(v_contador)*v_digito;

但在 PostgreSQL 中是这样定义的:

v_pesos integer[];

v_dc2 := v_dc2 + v_pesos[v_contador]*v_digito;

ROWNUM

为了限制 SELECT 语句返回的行数,需要创建游标来读取记录。代码如下:

--Initialize counter

v_counter := initial_value;

--Create the cursor

FOR CUR_ROWNUM IN (SELECT CLAUSE)

LOOP

-- Some sentences

--Increment the counter

v_counter := v_counter + 1;

--Validate condition

IF (v_counter = condition_value) THEN

EXIT;

END IF;

END LOOP;

%ROWCOUNT

SQL%ROWCOUNT 不能直接在 PostgreSQL 中使用,而需要定义一个变量。如:

GET DIAGNOSTICS rowcount := ROW_COUNT;

用上面定义的变量来替换 SQL%ROWCOUNT。

%ISOPEN,%NOTFOUND

PostgreSQL 不支持%ISOPEN 和%NOTFOUND,但可以在存储过程内部定义一个 boolean 变量,

然后当游标打开或关闭时手工去 更新这个变量的值。

当定义表时,如果列名是关键字要用用引号引起来。如:

CREATE TABLE AD_TRACE

(

"WHEN" TIMESTAMP NOT NULL,

NO NUMERIC DEFAULT 0 NOT NULL,

WHAT VARCHAR(2000) NOT NULL

);

列 WHEN 用引号引起来以避免转到 PostgreSQL 后出现问题。

同样在约束、解发器、存储过程、视图和函数中也要这样处理。

函数

可以使用 PERFORM 和 SELECT 调用函数。因为 PostgreSQL 不支持默认参数,可以定义一个带

有默认参数的重载函数。

另外如果要使自动翻译能正常工作,你应该遵循以下的建议:

AS 和 IS 的左边不能有空格

函数名不能用引号

Page 50: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:50 of 71

函数中,END 前不能有空格。

存储过程

在 PostgreSQL 中有两种方法调用存储过程:

变量名:=存储过程名(...)

使用 SELECT。这种方法用于存储过程返回多个参数时使用。

视图

PostgreSQL 不支持可更新视图。如果要通过视图更新要创建一系列的规则。

在PostgreSQL中没有USER_TABLES和USER_TAB_COLUMNS。应该根据PostgreSQL的 pg_class

或 pg_attribute 表来创建。

触发器

触发器的规则如下:

通常来说,父表中的触发器不应该修改子表中的列,因为子表中的触发器经常会参考父表中

的数据,否则会引起 mutating table 的错误。

触发器的名称不要用引号引起来,否则 PostgreSQL 会作为文本处理。

所有的触发器都要有 DECLARE 在合法的注释前。

PostgreSQL 不支持延迟计算值。如下面的语句在 Oracle 中可以运行但不能在 PostgreSQL

中运行:

IF INSERTING OR (UPDATING AND :OLD.FIELD = '') THEN

正确的方法是:

IF INSERTING THEN ...

IF UPDATING THEN

IF :OLD.NAME = '' THEN

PostgreSQL 中总会有返回值。按不同的操作类型分别返回 OLD(DELETE)或 NEW

(INSERT/UPDATE)。

如果使用自动翻译应注意:

最后一个 EXCEPTION 的左边不能有空格。自动翻译者用最后一个 EXCEPTION 来设置返回值。

最后一个 END 的左边不能有空格。缩排用于决定函数据结束。

序列数

PostgreSQL 中的 bigInts 类型是 18位的。将

sequence_name.NEXTVAL

nextval("sequence_name")

代替。 如果是使用自动转换,这个会自动的修改。

命令

下面列出了从 Oracle 转换到 PostgreSQL 时要修改的语句:

Oracle PostgreSQL

SQLCODE SQLSTATE

RAISE; RAISE EXCEPTION ;

RAISE_APPLICATION_ERROR RAISE ERROR ;

DBMS.OUTPUT RAISE NOTICE '%'

ROWNUM LIMIT

Page 51: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:51 of 71

MINUS EXCEPT

ISREFCURSOR REFCURSOR

EXECUTE IMMEDIATE EXECUTE

EXCEPTION NO_DATA_FOUND EXCEPTION DATA EXCEPTION

COMMIT

ROLLBACK RAISE EXCEPTION

5.105.105.105.10 使用数据字典进行使用数据字典进行使用数据字典进行使用数据字典进行 OpenbravoOpenbravoOpenbravoOpenbravo 的开发的开发的开发的开发

这一节介绍了如何使用应用程序字典(AD)来开发 Openbravo ERP。 我们将通过一个例子来

一步一步的展示开发过程。这个例子包括一个新的文档注册功能和一些新的数据库元素,如

窗口和报表。

5.10.15.10.15.10.15.10.1 扩展数据模型扩展数据模型扩展数据模型扩展数据模型

首先,使用数据库管理工具建立一个新的表。(如用于 PostgreSQL 的 pgAdmin III 或

phpPgAdmin 以 及用于 Oracle 的 Oracle SQL Developer 或 Toad)。 使用安装时的数据库连

接参数以正确的连接数据库实例。

5.10.25.10.25.10.25.10.2 在数据库中创建新的表在数据库中创建新的表在数据库中创建新的表在数据库中创建新的表

建立一个新的表 CUS_DOCUMENTS 包括这些字段 AD_Client_ID, AD_Org_ID, IsActive,

Created, CreatedBy, Updated 和 UpdatedBy ,因为这些字段是安全认证所必须的。

Column name Type Length

CUS_DOCUMENTS_ID NUMBER 10

AD_CLIENT_ID NUMBER 10

AD_ORG_ID NUMBER 10

ISACTIVE CHAR 1

CREATED DATE

CREATEDBY NUMBER 10

UPDATED DATE

UPDATEDBY NUMBER 10

NAME CHAR 60

LASTEDITED DATE

DOCSIZE NUMBER 15

Page 52: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:52 of 71

在这个表中,即使 NAME 和 LASTEDITED 可以组成关键字,但也请使用另外一个字段作为唯一

性的关键字如 CUS_DOCUMENT_ID。按 命名的规则,关键字时由表名加上"_ID"组成。

执行下面的 SQL 语句来建立 CUS_DOCUMENT:

Oracle

CREATE TABLE CUS_DOCUMENTS

(

CUS_DOCUMENTS_ID NUMBER(10) NOT NULL,

AD_CLIENT_ID NUMBER(10) NOT NULL,

AD_ORG_ID NUMBER(10) NOT NULL,

ISACTIVE CHAR(1 BYTE) DEFAULT 'Y' NOT NULL,

CREATED DATE DEFAULT SYSDATE NOT NULL,

CREATEDBY NUMBER(10) NOT NULL,

UPDATED DATE DEFAULT SYSDATE NOT NULL,

UPDATEDBY NUMBER(10) NOT NULL,

NAME NVARCHAR2(60) NOT NULL,

LASTEDITED DATE NOT NULL,

DOCSIZE NUMBER(15) NOT NULL,

CONSTRAINT "CUS_DOCUMENTS_KEY" PRIMARY KEY ("CUS_DOCUMENTS_ID")

);

PostgreSQL

CREATE TABLE cus_documents

(

cus_documents_id numeric(10) NOT NULL,

ad_client_id numeric(10) NOT NULL,

ad_org_id numeric(10) NOT NULL,

isactive char(1) NOT NULL DEFAULT 'Y'::bpchar,

created timestamp NOT NULL DEFAULT now(),

createdby numeric(10) NOT NULL,

updated timestamp NOT NULL DEFAULT now(),

updatedby numeric(10) NOT NULL,

name varchar(60) NOT NULL,

lastedited timestamp NOT NULL DEFAULT now(),

docsize numeric(10) NOT NULL,

CONSTRAINT cus_documents_key PRIMARY KEY (cus_documents_id)

);

5.10.35.10.35.10.35.10.3 在在在在 Openbravo ERPOpenbravo ERPOpenbravo ERPOpenbravo ERP 中注册新的表中注册新的表中注册新的表中注册新的表

下面的步骤介绍如何在 Openbravo ERP 的应用程序字典中注册新建的表。 首先,要以具有

System Administrator 角色的帐户登录系统。进入菜单 Application Dictionary > Tables

and Columns 建立一条 Name Cus_documents, Description Documents to be saved,

Help/Comments Window used to register documents, DB Table Name CUS_DOCUMENTS, Data

Access Level Client/Organization and Development Status Ready 的 新记录。

Page 53: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:53 of 71

窗口中的主要字段是:

Name 定义 Openbravo ERP 可以识别表的名称。

Description 简短的说明。

Help/Comments 帮助窗口中显示的内容。

DB Table name 数据库中的表名称。

按 Create columns from DB 按钮保存记录并且自动创建列实体。

Page 54: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:54 of 71

创建完成时,系统会提示有多少列被加到表中了。

Page 55: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:55 of 71

5.115.115.115.11 通过通过通过通过 ADADADAD 开发举例开发举例开发举例开发举例

通过 AD 开发的一般步骤:利用数据库操作工具在数据库中添加或者修改表�登录 OB 把系统

置为开发模式(具体方法参见前面的 AD配置)�AD||Table and Columns 的 grid 视图上双

击新添加或者修改过的表进入 Form 视图�Click the ‘Create columns from DB’ button�

在 OS命令符状态:进入工程开发目录输入命令 ant export.database�AD||Windows, Tabs

and Fields 在 grid 中找到需要修改的窗口(比如 Warehouse and Storgae Bins)并双击进

入 Form 视图�Click ‘Tab’�找到需要修改的 tab(比如 warehouse)并双击�点击下面

的’Create Fields’�AD||Synchronize Terminology�在命令行依次运行命令:ant

export.database, ant smartbuild。

1)、创建表

创建数据表必须包含以下 7 个字段,分别是 AD_Client_ID、 AD_Org_ID、 IsActive、

Created、 CreatedBy、 Updated 和 UpdatedBy。

Oracle

CREATE TABLE MXB_SEX(

MXB_SEXID NUMBER(10) NOT NULL,

AD_CLIENT_ID NUMBER(10) NOT NULL,

AD_ORG_ID NUMBER(10) NOT NULL,

ISACTIVE CHAR(1 BYTE) DEFAULT 'Y' NOT NULL,

CREATED DATE DEFAULT SYSDATE NOT NULL,

CREATEDBY NUMBER(10) NOT NULL,

UPDATED DATE DEFAULT SYSDATE NOT NULL,

UPDATEDBY NUMBER(10) NOT NULL,

MXB_SEXNAME NVARCHAR2(60) NOT NULL,

PRIMARY KEY ("MXB_SEXID")

);

2)、注册数据表

以 system administrator 角色登录到 openbravo 系统中。

选择 Application Dictionary 的 Tables and Columns 管理模块,新增数据。

Name:定义 Openbravo ERP 使用数据库对应数据表的名称。

Description:对应数据表简单的描述。

Page 56: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:56 of 71

Help/Comments:定义在帮助中的简要说明。

DB Table name:数据库中真实的数据表名称。

保存数据,点击 Create Columns from DB 按钮,自动创建字段描述。

一旦创建成功,将告诉你有多少行生成。

点击 Column 标签,显示已经被定义的字段。相关的信息,可以自己维护。

点击菜单树 Application Dictionary-||Synchronize Terminology

Page 57: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:57 of 71

应用元素将自动分给字段,

3)、创建新窗体

以 System Administrator 角色登录。

点击 Application Dictionary-||Windws,Tabs and Fields-||Window 功能模块。

增加 form 定义数据。

Name:定义在 Openbravo ERP 系统中窗体的名称。

Description:简要描述窗体。

Page 58: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:58 of 71

Help/Comments:定义帮助简要说明。

点击 Tab 标签,增加定义 Tab 标签的数据。

Table:对应的数据表。

Tab Level:Tab 等级,0为最高级。

保存数据,点击 Create Fields 按钮,自动创建字段。创建成功,显示创建的数量。

Page 59: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:59 of 71

点击 Field 的标签,显示 form 对应的全部数据。双击数据,可以进行修改。

点击 Field Sequence 的 Tab 标签,可以调整显示数据。

修改 Application Dictionary -|| Tables and Columns 管理模块。选择 Window 下拉框,

选择已经被定义的 form 的名称。最后保存数据。

Page 60: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:60 of 71

(9).编译一个新的窗体

进入 dos 环境,进入源码所在文件下输入 ant compile.development -Dtab="MXBSEX"

6 6 6 6 库表结构及关联性库表结构及关联性库表结构及关联性库表结构及关联性

6.1 6.1 6.1 6.1 简介简介简介简介

OB 默认安装使用数据库名 openbravo,用户 tad,截止到版本 2.50M18,共有 507 个表,全

部的数据库表都在 AD 中管理(对应 AD 中的 Tables and Columns),管理的结果最终是通过

AD 中的 Window, Tabs, and Fields 展示。

全部表的共性:

存在唯一主键<表名>_ID,如 M_Product_ID;

表名前缀意义:

A_: asset management

AD_: application dictionary

C_: core functionality

I_: import temporary tables and processes

M_: material management

FACT_: accounting tables

GL_: general legder

MA_: manufacturing

S_: service management

CUS_, PD_, US_, ZZ_: personal developments

全部表必须包含如下几个字段

Created: date of record creation

CreatedBy: id of the user that has created the record.

Updated: date of the last update of the record.

UpdatedBy: id of the user that has commit the last update.

Page 61: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:61 of 71

IsActive: logic delete of the record.

AD_Client_ID: id of the client owner of the record. AD_Client_ID = 0 is System client

for System Administrator use.

AD_Org_ID: id of the organization owner of the record. AD_Org_ID = = is Asterisk

organization that shares the record to all the organizations of the client

6.2 6.2 6.2 6.2 一些主要表的功能一些主要表的功能一些主要表的功能一些主要表的功能

6.3 6.3 6.3 6.3 表表表表间关联间关联间关联间关联

参考另一篇文档《Openbravo_ER_2.40.pdf》

7 7 7 7 外围接口外围接口外围接口外围接口

7777.1 .1 .1 .1 介绍介绍介绍介绍

Openbravo ERP's webservices provide the interface that allows Openbravo ERP's

integration with other systems (for example with a Virtual Shop and a POS Terminal) and

hereby share the management of products and orders obtaining this way a global

integrated and more complete solution.

Different classes of web service objects have been defined as part of this interface

(Products, Orders and Business Partner) as well as the web interface methods that will be

able to be invoked.

For the implementation of the security a user's validation is realized in every request that

the ERP receives from the webService, for what in every method we have to pass a user

with the necessary permissions and his ciphered password (such it is stored in database).

This user has to have permission to be able to execute the task of the ExternalPOS

(org.openbravo.erpCommon.ws.externalSales.ExternalSales) inside the ERP.

For Openbravo's integration with other systems we have developed an API named

"ExternalSales" that takes charge providing the mechanisms necessary for the integration

of Orders, Products and Business Partner.

Page 62: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:62 of 71

The technology used on that the implementation of the API is based is AXIS that is

WebServices's implementation developed by Apache of easy integration in Tomcat.

7.2 对象和方法对象和方法对象和方法对象和方法

7.2.1 对象对象对象对象 externalSales

----Package: org.openbravo.erpCommon.ws.externalSales

1)、)、)、)、Product definition Product definition is related with three object classes.

Product type

Field Type Description

id int ERP Product's identifier.

name Java.lang.String Product 's name.

number Java.lang.String Product number.

description Java.lang.String Product's description.

listPrice double Product's price without taxes and discounts.

purchasePrice double Product price for sale.

tax Tax Tax assigned to this product.

imageUrl Java.lang.String URL to download product's image.

ean Java.lang.String Product's barcode.

category Category Product's category

Category type

Field Type Description

id int ERP category's identifier.

name Java.lang.String Category's name.

description Java.lang.String Category's description.

Tax type

Field Type Description

id int Tax's identifier.

name Java.lang.String Tax's name

percentage double Values between -100 and 100.

Page 63: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:63 of 71

2)、)、)、)、Order definition Order type

Field Type Description

orderId OrderIdentifier Order's identifier for Virtual Shop and POS Terminal.

lines OrderLine [] OrderLine's array.

state int Order's state identifier.

bpartner BPartner Client that generates this order.

payments Payment [] Payments array

Order identifier type

Field Type Description

document_no String Order identifier for Virtual Shop and POS Terminal.

dateNew Java.util.Date Insert date.

Orderline type

Field Type Description

orderLineId int OrderLine identifier for ERP.

productId int Product identifier.

units double Number of product for this line.

price double Price in PriceList for this product.

taxId int Tax applied (Tax applied identifier).

Payment type

Field Type Description

amount double Amount satisfied with the payment.

paymentType String Way of payment.

3)、)、)、)、Business partner We will define the Business partner in BPartner type.

Business partner type

Field Type Description

id String Business Partner identifier for Virtual Shop.

name String Business Partner name.

country String Business Partner Country.

region String Business Partner region.

Page 64: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:64 of 71

city String Business Partner city.

postal String Business Partner postal code.

address1 String Business Partner address' first line.

address2 String Business Partner address' second line.

7.2.2 对象对象对象对象 services

-------Package: org.openbravo.erpCommon.ws.services

Business Partner Class Name: BusinessPartner

Field Type Description

id java.lang.String Business Partner identificator

clientId java.lang.String The Client Id where the Bussines Partner belong

name java.lang.String Name of the Business Partner

searchKey java.lang.String Search Key – a unique string that identify the Business

Partner

description java.lang.String Description of the Business Partner

customer java.lang.Boolean A flag that specifies if the Business Partner is a Customer

vendor java.lang.Boolean A flag that specifies if the Business Partner is a Vendor

locations Location[] A list of the available Locations of the Business Partner

contacts Contact[] A list of the available Contact of the Business Partner

Customer Class Name: Customer

An instance of BusinessPartner with the customer member set to true.

Contact Class Name: Contact

Field Type Description

id java.lang.String Contact identifier

clientId java.lang.String Client Id where the Contact belongs to

businessPartnerId java.lang.String Business Partner Id where the Contact belongs

to

firstname java.lang.String Contact's First Name

lastname java.lang.String Contact's Last Name

email java.lang.String Contact's Email

Page 65: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:65 of 71

phone java.lang.String Contact's Phone

phone2 java.lang.String Contact's Second phone

fax java.lang.String Contact's Fax

Location Class Name: Location

Field Type Description

id int Location identifier

clientId java.lang.String Client Id where the Location belongs to

businessPartnerId java.lang.String Business Partner Id where the Location belongs

to

address1 java.lang.String Location's Address 1

address2 java.lang.String Location's Address 2

city java.lang.String Location's City

postal java.lang.String Location's Postal Code

region java.lang.String Location's Region

country java.lang.String Location's Country

7.2.3 方法方法方法方法 ExternalSales

getProductsCatalog

Function name getProductsCatalog

entityId: java.lang.String Entity identifier for the Virtual Shop or the

POS Terminal on the ERP.

OrganizationId:

java.lang.String

Organization identifier for the Virtual Shop

or the POS Terminal on the ERP.

salesChannel:int Virtual Shop = 1 POS Terminal = 2

username:String ERP user.

Parameters

password:String ERP user's ciphered password

Return Product [] Products array.

PreConditions --

PostConditions The Virtual Shop or the Terminal POS can update his catalog of products

with the obtained one of the ERP.

Functionality

It has to return the list of products according to the channel of sale and

the consulted entity.

Every product includes, specific information, the information of the

category to which it belongs and the tax that partner has in the ERP. For

Page 66: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:66 of 71

more details on the Product Type see the paragraph "Product definition".

uploadOrders

Function name uploadOrders

entityId:String Entity identifier for the Virtual Shop or the POS

Terminal on the ERP.

OrganizationId: String Organization identifier for the Virtual Shop or the

POS Terminal on the ERP.

salesChannel:int Virtual Shop = 1 POS Terminal = 2

newOrders:Order[] an array of the Orders to be uploaded

username:String ERP user.

Parameters

password:String ERP user's ciphered password

Return Void

PreConditions The product's catalog has been synchronized previously.

PostConditions ERP store new order's information.

Functionality

Insert into ERP new order's generated in Virtual Shop or POS Terminal.

It has to complete the following process:

Validate that the client associated with the new Order exists (in case of

the Terminal POS the client will be dummy). If the client doesn't exist it

will be inserted.

Save the Order.

The order will be saved in the ERP with the specified values by the

WebService with the object Order, more certain values that will be

informed

About automatic form. Order values will be:

Entity. WebService's param.

Organization. WebService's param.

Doc. Num. Openbravo generated.

Business Partner. Order's client.

PriceList. Assigned by ERP and will be the Entity/Organization's default

priceList.

Currency. Assigned by ERP and will be the Entity/Organization's default

currency

Warehouse. Assigned by ERP and will be the Entity/Organization's

default warehouse

Order Date. Order.dateNew.

Payment type. Order.paymentType.

For every OrderLine:

Product. OrderLine.productId.

Unit. OrderLine.units.

Page 67: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:67 of 71

Tax. OrderLine.tax.

Price. OrderLine.price.

UOM. Assigned by ERP and will be the Product's default unit of measure

Others: There exist other values of the order that is preferable adapt to

the suggestions proposed by Openbravo ERP.

getOrders

Function

name getOrders

entityId: String Entity identifier for the Virtual Shop or the POS

Terminal on the ERP.

OrganizationId: String Organization identifier for the Virtual Shop or

the POS Terminal on the ERP.

username:String ERP user.

password:String ERP user's ciphered password

Parameters

orderIds:OrderIdentifier[] List of orders requested.

Return Order []

Functionality

It has to return an Order type array. With the information returned by this

service, the state of the orders will be updated in the Terminal POS and

the Virtual Shop.

7.2.4 方法方法方法方法 WebService

getCustomers

Function name getCustomers

clientId: int Client identifier from which the Customers will

be retrieved

username:

java.lang.String ERP user. Parameters

password:

java.lang.String ERP user's ciphered password

Return Customer [] Customer array.

PreConditions --

PostConditions --

Functionality Returns an array of Customer from the Client specified

getCustomer

Function name getCustomer

Page 68: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:68 of 71

clientId: java.lang.String Client identifier from which the Customers

will be retrieved

customerId:

java.lang.String Customer identifier that will be retrieved

username:

java.lang.String ERP user.

Parameters

password: java.lang.String ERP user's ciphered password

Return Customer Customer specified by the identifier

PreConditions --

PostConditions --

Functionality Returns the Customer specified

getCustomer

Function name getCustomer

clientId: int Client identifier from which the Customers

will be retrieved

name: java.lang.String Customer's name [optional]

searchKey: java.lang.String Customer's searchKey [optional]

username: java.lang.String ERP user.

Parameters

password: java.lang.String ERP user's ciphered password

Return Customer Customer specified by the name or

searchKey

PreConditions --

PostConditions --

Functionality Returns the Customer specified by the name or searchKey. You need to

choose the parameter to search for, name or searchKey

updateCustomer

Function name updateCustomer

customer: BusinessPartner A Customer object to update

username: java.lang.String ERP user. Parameters

password: java.lang.String ERP user's ciphered password

Return Boolean A success or failure of the update

execution

PreConditions --

PostConditions --

Page 69: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:69 of 71

Functionality Returns a Boolean on success or failure of the update process

getCustomerAddresses

Function name getCustomerAddresses

clientId: int The Client identifier

customerId: int The Customer identifier

username: java.lang.String ERP user. Parameters

password: java.lang.String ERP user's ciphered password

Return int [] An Array of available location identifiers

PreConditions --

PostConditions --

Functionality Returns an array int of the available location identifiers for the Customer

getCustomerLocation

Function name getCustomerLocation

clientId: int The Client identifier

customerId: int The Customer identifier

locationId: int The Customer location identifier

username: java.lang.String ERP user.

Parameters

password: java.lang.String ERP user's ciphered password

Return Location A Location object for the specified

identifier

PreConditions --

PostConditions --

Functionality A Location object for the specified identifier

updateAddress

Function name updateAddress

addr: Location A Location object to update

username: java.lang.String ERP user. Parameters

password: java.lang.String ERP user's ciphered password

Return Boolean A success or failure update execution

PreConditions --

PostConditions --

Functionality A Boolean success or failure update execution

Page 70: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:70 of 71

getCustomerContact

Function name getCustomerContact

clientId: String The Client identifier

customerId: String The Customer identifier

contactId: String The Customer contact identifier

username: java.lang.String ERP user.

Parameters

password: java.lang.String ERP user's ciphered password

Return Contact A Contact object for the specified

identifier

PreConditions --

PostConditions --

Functionality A Contact object for the specified identifier

updateContact

Function name updateContact

contact: Contact A Contact object to update

username: java.lang.String ERP user. Parameters

password: java.lang.String ERP user's ciphered password

Return Boolean A success or failure update execution

PreConditions --

--

Functionality A Boolean success or failure update execution

7.3 启动启动启动启动 OB 的的的的 Webservice 功能功能功能功能

# su - openbravo

# /etc/init.d/tomcat stop

$ cd /opt/OpenbravoERP

$ ant installWebService

$ exit

# /etc/init.d/tomcat start

在浏览器中打开 URL 地址:

http://192.168.0.3/openbravo/services/ExternalSales?wsdl

如果返回如下信息,表示开启成功:

----------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8" ?>

- <wsdl:definitions

Page 71: Openbravo ERP评测 之 技术评测 - veryopen.orgveryopen.org/wp-content/downloads/Openbravo_ERP_technic_val.pdf · 软件——Openbravo ERP & POS ... Openbravo ERP is licensed

深圳微算技术有限公司(www.weisuan.com)友情整理 page:71 of 71

targetNamespace="http://192.168.0.3/openbravo/services/ExternalSales"

xmlns:apachesoap="http://xml.apache.org/xml-soap"

xmlns:impl="http://192.168.0.3/openbravo/services/ExternalSales"

xmlns:intf="http://192.168.0.3/openbravo/services/ExternalSales"

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:tns1="/services/ExternalSales" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

- <!--

WSDL created by Apache Axis version: 1.4

Built on Apr 22, 2006 (06:55:48 PDT)

-->

- <wsdl:types>

- <schema targetNamespace="/services/ExternalSales"

xmlns="http://www.w3.org/2001/XMLSchema">

<import namespace="http://192.168.0.3/openbravo/services/ExternalSales" />

<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />

- <complexType name="Category">

- <sequence>

<element name="description" nillable="true" type="xsd:string" />

<element name="id" nillable="true" type="xsd:string" />

<element name="name" nillable="true" type="xsd:string" />

……

----------------------------------------------------------------------------------------------------------------------