-
OB
开发手册中文版
Contents
[
hide
]
1
简介
?
1
简介
?
1.1
开发概述
?
1.2
开发方法
?
1.3
组织开发工作
?
1.4
标识符命名标准
?
1.4.1
数据库元素
?
1.4.2
MVC
目录
?
1.4.3
存储过程语法
?
1.5
目录结构
?
1.6
风格指南
?
1.6.1
逻辑比较
?
1.6.2
逗号分隔列表
?
1.6.3
圆括号中的空格
?
1.6.4 SELECT
INTO
和
INSERT INTO
?
1.6.5 SQL
关键字
?
1.7
编译程序
?
1.7.1
命令行编译任务
?
1.7.2
开发环境
?
1.7.3
生产环境
?
1.8
从源代码构建
?
1.8.1
安装
Subversion
?
1.8.2
从
Subversion
中检出源代码
?
1.8.3
快速构建指南
?
1.9
集成开发环境
?
2
Openbravo
数据模型
?
2.1
存储的数据库对象
?
2.2
实体
-
关系
(ER)
< br>图
?
2.3
创建存储过程
?
2.3.1 AD_PInsta
nce
和
AD_PInstance_Para
表
?
2.3.2
存储过程的输入参数
?
2.3.2.1
从
AD_PInstance
表中获取有用的信息
p>
?
2.3.2.2
AD_Update_PInstance
存储过程
?
2.3.2.3
例外和错误管理
?
2.4
存储过程语法的建议
?
2.4.1
通用规则
?
2.4.1.1
游标
?
2.4.1.2
数组
?
2.4.1.3
ROWNUM
?
2.4.1.4
%ROWCOUNT
?
2.4.1.5
%ISOPEN,%NOTFOUND
?
2.4.2
表
?
2.4.3
函数
?
2.4.4
存储过程
?
?
?
?
?
?
?
?
?
2.4.5
视图
?
2.4.6
触发器
?
2.4.7
序列数
?
2.4.8
命令
?
2.4.9
支持
PostgreSQL8.3
3
修饰名称和描述内容的指南
?
3.1
说明内容的修辞指南
?
3.2
命名的修辞指南
4
使用数据字典进行
Openbra
vo
的开发
?
4.1
扩展数据模型
?
4.1.1
在数据库中创建新的表
?
4.2
在
Openbravo
ERP
中注册新的表
?
4.3
创建新窗口
?
4.4
编译新窗口
?
4.5
在
Openbravo
中增加新窗口的菜单
?
4.6
更新数据库的
XML
文件
?
4.7
用户消息
5
使用
MVC
开发
Openbravo
?
5.1
基本工具
?
5.2
创建新的手工窗口
(
表单和报表
)
p>
?
5.3
创建
callout
?
5.4
用
JasperReport
创建报表
?
5.4.1
使用
JasperRep
ort
的报表模板
?
5.4.1.1
报表模板
?
5.4.1.2
子报表的用法
?
5.4.1.2.1
使用
jasper
文件
?
5.4.1.2.2
使用
jrxml
文件
?
5.4.1.3
报表中的
JA
V
A
?
5.4.1.4
应用程序字典中的报表
?
5.5
使用
JasperReport
导出表格
6
国际化
7
安全
8
升级方法
9
协同开发
10
附录
Contents
[
hide
]
1
简介
?
1
简介
?
1.1
开发概述
?
1.2
开发方法
?
1.3
组织开发工作
?
1.4
标识符命名标准
?
1.4.1
数据库元素
?
1.4.2
MVC
目录
?
1.4.3
存储过程语法
?
1.5
目录结构
?
1.6
风格指南
?
1.6.1
逻辑比较
?
1.6.2
逗号分隔列表
?
1.6.3
圆括号中的空格
?
1.6.4 SELECT
INTO
和
INSERT INTO
?
1.6.5 SQL
关键字
?
1.7
编译程序
?
1.7.1
命令行编译任务
?
1.7.2
开发环境
?
1.7.3
生产环境
?
1.8
从源代码构建
?
1.8.1
安装
Subversion
?
1.8.2
从
Subversion
中检出源代码
?
1.8.3
快速构建指南
?
1.9
集成开发环境
?
2
Openbravo
数据模型
?
2.1
存储的数据库对象
?
2.2
实体
-
关系
(ER)
< br>图
?
2.3
创建存储过程
?
2.3.1 AD_PInsta
nce
和
AD_PInstance_Para
表
?
2.3.2
存储过程的输入参数
?
2.3.2.1
从
AD_PInstance
表中获取有用的信息
p>
?
2.3.2.2
AD_Update_PInstance
存储过程
?
2.3.2.3
例外和错误管理
?
2.4
存储过程语法的建议
?
2.4.1
通用规则
?
2.4.1.1
游标
?
2.4.1.2
数组
?
2.4.1.3
ROWNUM
?
2.4.1.4
%ROWCOUNT
?
2.4.1.5
%ISOPEN,%NOTFOUND
?
2.4.2
表
?
2.4.3
函数
?
2.4.4
存储过程
?
2.4.5
视图
?
2.4.6
触发器
?
2.4.7
序列数
?
2.4.8
命令
?
2.4.9
支持
PostgreSQL8.3
?
3
修饰名称和描述内容的指南
?
3.1
说明内容的修辞指南
?
3.2
命名的修辞指南
?
4
使用
数据字典进行
Openbravo
的开发
?
4.1
扩展数据模型
?
?
?
?
?
?
?
4.1.1
在数据库中创建新的表
?
4.2
在
Openbravo
ERP
中注册新的表
?
4.3
创建新窗口
?
4.4
编译新窗口
?
4.5
在
Openbravo
中增加新窗口的菜单
?
4.6
更新数据库的
XML
文件
?
4.7
用户消息
5
使用
MVC
开发
Openbravo
?
5.1
基本工具
?
5.2
创建新的手工窗口
(
表单和报表
)
p>
?
5.3
创建
callout
?
5.4
用
JasperReport
创建报表
?
5.4.1
使用
JasperRep
ort
的报表模板
?
5.4.1.1
报表模板
?
5.4.1.2
子报表的用法
?
5.4.1.2.1
使用
jasper
文件
?
5.4.1.2.2
使用
jrxml
文件
?
5.4.1.3
报表中的
JA
V
A
?
5.4.1.4
应用程序字典中的报表
?
5.5
使用
JasperReport
导出表格
6
国际化
7
安全
8
升级方法
9
协同开发
10
附录
简介
Openbravo
是一款面向中小
企业的纯
WEB
方式的可扩展的
ERP
软件。她包括了基本的
CRM
(客户关
系管理)、
BI
(商业智能)和一系列如采购、库存、项目、生
产销售和财务管理等
功能。适用于物流、服务和生产制造等多个行业。
< br>
Openbravo
可以定
制以支持特定行业的功能和业务流程。
Opnebravo
的许可证允许合作伙伴和开发者选择是否将自已的工作以开源许
可证还是以私有
许可证的方式发布。我们鼓励合作伙伴和开发者以开源的方式与别人共享
开发成果,也为
Openbravo
提供新的内容。本手册的目
的是给大家为客户定制新的功能提供指导。
开发概述
?
应用字典:集中存放了定义的窗口、页签和字段的表。
?
应用菜单:程序左边的主菜单。
?
Callout
< br>(类似于触发器):用户操作一个窗口时系统响应的动作。例如可以增加或减
少可
见的字段,或者根据输入系统的信息填定订单。
?
表单:手工制作的可以输入、修改
或删除的窗口。不同于标准窗口,表单允许复杂数
以下列出了在
Openbravo
开发中使用的模型驱动开发方法的主要概念:
据的输入和在多个位置输入数据。
?
MVC
(
模型
-
视图
-
控制器):将应用程序的数据、用户界面和流程分离的一种架构。
在
Openbravo
中
MVC
是这
样实现的:
?
模型
部份
是用
Openbravo
的
SqlC<
/p>
实现的。通过一个有标准
SQL
语句和参
数的
XML
文件实现。其中的参数是可选或必须的,可以很容易
的生成
SQL
语句。
?
视图<
/p>
部份是用
Openbravo
开发的
p>
XmlEngine
实现的。
XmlEng
ine
是可以从一个
XML/HTML
格式的模板生成
XML/HTML
文档的工具。
?
控制器
是从
HttpBaseServlet
继承的子类。这些
Servlet
处理读取数据,使
用
SQLC
生成的类与数据库交互和使用
XmlEngine
提供输出。
?
报表:显示从表中检索出来的数据
或以预定义的格式和可视化的交互方式进行查询。
以
pdf
p>
或
html
的方式显示请求的信息是一种简
捷的方式。报表可以用户希望的方式进
行定制,通常用于展示全局形势或总结。
?
标准窗口:可以输入、修改和删除数据的自动生成的窗口。窗口中的信息是由
Openbravo
按系统中的数据生成的。
?
窗口:
应用程序用于管理数据的屏幕。可以进行插入、更新或删除数据的操作。
Openbra
vo
中有两种窗口:标准窗口和表单。一个窗口可能会包含多个页签。
< br>
开发方法
Openbravo
是构建
Openbravo ERP
的开发平台。正如
架构总览
中解释的开发可以
理解为两
层。
应用程序字典。它存储了应用程序的所有窗口、表、列、进程、报表和它们的关系。用户只
< br>要可以很方便的通过定义一个窗口、数据元素和报表并在应用程序字典中注册就可以增加一
个新的功能,而无需一行代码。大部份的
Openbravo
< br>代码是从应用程序字典中自动生成的。
模型
/
视图
/
控制器。当工作在这个层级时是可以通过
Openbravo MVC
开发框架完成任何改变
的。无论如何一个工具或功能不能通过数据字典
调整时,都可以在
MVC
这个层级实现。这
通常意味着要开发一个新的
JA
V
A
类。
组织开发工作
在开始开发一个新的功
能时必须清楚什么东西必须完成。下面几点对组织你的开发工作会有
所帮助:
?
应该提供哪些功能。必须清楚哪些功能要实现。
?
尽量简
单。保持设计尽量简单并且能很好的与不同组件进行交互。
?
定义你的数据模型。需要添加哪些
表、列、关系和索引来存储数据以实现想要的功
能。
?
定义用
户界面。用户如何使用新的功能。按工业标准的可用性指南组织可视化的元
素。
?
定义报表。考虑哪些数据和你的用户有关和如何最好的呈现在报表中。
标识符命名标准
数据字典命名制定一
个清晰和固定的标准对于
ERP
系统是非常关键的。按照这个命
名标准
就能保证
Openbravo ERP
< br>的新版本不会因为与客户开发时使用的数据字典元素同名而产生冲
突。
当自定义开发时,在每一个新的数据字典元素
前加上
CUS_
的前缀。例如,当为一个名为
< br>ACME
的公司进行客户定制时,在数据字典元素名前加上
CUS_ACM
的前缀。
当开发一个垂直功能时,加上这个市场名前加上
VER_
的前缀。例如,为房地产市场开发时
使用
VER_R
EA
的前缀。
数据库元素
命名新的表时加上特定的开发时的前缀。例如你需要为
ACME
客户定制开发时需要增加一
个
DOCUMENT
的表时你应该将该表命名为
CUS_ACM_DO
CUMENT
。这些表的字段可以
按照字段命名转换
(
AD_CLIENT_ID,IsActiv
e,Name,Descriptioin
等)。
当在已有的表中增加新的字段时需要加上特定的开发时的前缀。
其他的数据库对象(存储过程,触发器等)也要加上开发时的
前缀。
数据字典的注册
IDs
是由序列按开发时的顺序生成的,因而不会出现重复的
IDs
。数据字典
中的实体名都应加上一定的前缀。
MVC
目录
命名目录时加上特定的前缀。建议建立一个独立的包。
(
org
openbravoerpCommoncus_myPackage
)。
存储过程语法
?
作为存储过程参数的变量名前加上
p_
的前缀
?
变量名前加
v_
的前缀
?
游标名前加
c_
的前缀
目录结构
Openbravo ERP
的目录结构从逻辑上区分了核心组
件
(XmlEngine,SQLC,HttpBaseServlet)
和
WAD(
应用程序字典向导
)
与
ERP
本身的结构
(
表单
,
报表
,call-outs,
下拉列表
,
工作流
,
流程等
)
。
主树结构
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
包含了各种配置和日志文件
p>
AppsOpenbravo
|-config
|-
|-
|-ties
|-
|-...
database
包含模型数据(结构:表,约束,存储过程和触发器),示例
数据(如产品,业务
伙伴等)和
XML
格式的源数据(窗口和页签)。
AppsOpenbravo
|-database
|-lib
|-model
|-functions
|-sequences
|-tables
|-triggers
|-views
|-sampledata
|-sourcedata
docs
Openbravo
p>
的
API
文档,由
Javadoc
生成。
legal
许可证文档。
lib
编译时需要的库。
AppsOpenbravo
|-lib
|-
|-
|-
|-
|-...
,
和
是执行
ant te
时必须
的。编译的结果是一个名为
的文
件,需要将其复制到应用服务器的
webapps
目录下。
p>
src
Openbravo
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
|-businessUtility
|-info
|-reference
|-security
|-utility
|-ws
|-erpReports
前缀
ad_
表示应用程序字典。字典名的结尾说明了它的意
思。
ad_reports
和
erpR
eport
的区
别在于在应用程序中存取报表的方式不同。如果
是通过菜单调用的报表应该放在
ad_reports
,另一方
面,有些窗口在工具栏上有一个打印的按钮,通过这种方式调用的报表
应该放在
erpReports
。
srcAD
保存了通过应用程序字典
自动生成的代码。
srcClie
nt
存放为自已应用程序开发的代码,不是给其他客户。
src-
core
核心组件的源代码
:
XmlEngine
(
视图层
),
SQLC
(
模型层
),
HttpBaseServlet
(
控制器
< br>)
和
连接池。
AppsOpenbravo
|-src-core
|-src
|-org
|-openbravo
|-base
|-
|-
|-data
|-
|-database
|-
|-xmlEngine
src-db
创建
文件需要的源代码。
AppsOpenbravo
|-src-db
|-src
|-org
|-openbravo
|-ddlutils
src-
trl
翻译器的源代码。
AppsOpenbravo
|-src-db
|-src
|-org
|-openbravo
|-translate
src-
wad
WAD
的源代码。
AppsOpenbravo
|-src-db
|-src
|-org
|-openbravo
|-wad
web
CSS
,
Javas
cript
的代码和图片及弹出窗口。
AppsOpenbravo
|-images
|-js
|-popups
|-skins
src-loc
MVC
结构中的视图层元素结构:
HTML
< br>,
XML
,
FO
和子报表。它们被放在不同的位
置(每一种一个目录)。
AppsOpenbravo
|-WebContent
|-src-loc
|-design
|-org
|-openbravo
|-base
|-erpCommon
|-erpReports
|-erpWindows
|-es_ES
|-xx_XX
|-...
风格指南
为了代码的统一和清晰,我们建议按下面的指南进行编码。这个指南应用于
Java,XML,HTML
和
PL/SQL
< br>。
逻辑比较
不要使用空格。
?
不正确
:
:
WHERE a = b
WHERE a= b
?
正确
:
:
WHERE a=b
逗号分隔列表
?
不正确
:
SELECT a,b,c
SELECT a ,b ,c
SELECT a , b , c
?
正确
:
SELECT a, b, c
圆括号中的空格
在函数中使用时:
?
不正确
:
SELECT max( c1 )
SELECT max (c1)
?
正确
:
SELECT max(c1)
在比较操作时
:
?
不正确
:
if(i==0)
if(
i==0)
?
正确
:
if (i==0)
for
(i=0; i
SELECT
INTO
和
INSERT INTO
如果超过
8
个字段:将其分为
4
个一组(为了易读性)。
一行
80
个字符。这是比较灵活的
规则。
SQL
关键字
SQL
的关键字要大写。
?
不正确
:
select * from AD_FIELD
?
正确
:
SELECT * FROM AD_FIELD (SELECT, UPDATE,
等
)
编译程序
命令行编译任务
ant
编译
MVC
框架的核心组件。它会生成
文件。
AppsOpenbravo
|-lib
|-
ant
编译。它
不会生成窗口,只是生成
WAD
本身而已。它会生成
文件。
AppsOpenbravo
|-lib
|-
ant
编译翻译
器。它会生成
。
AppsOpenbravo
|-lib
|-
ant te
编译整个程序。它会生成
WAD
的窗口和编译应用程序
的源代码。它依
赖于
,
和
。
ant pment
编译整个应用程序并复制到
tomcat
的容器中。它会生成
WAD
的窗口和编译应用程序源代码。它依赖于
,
和
。
ant compile -Dtab=
生成指定的窗口(名称
中包含
xx
或
yy
),编译修改过的源代码
并且更新
中的
servlet-
mapping
。
ant pment
-Dtab=
生
成指定的窗口(名称中包含
xx
或
yy
),编译修改
过的源代码并且更新
p>
中的
servlet-mapping
。最
后会将所有生成的类复制到
tomcat
的
容器中。
ant setup
调用设置数据库连接和应用程序路径的界面(是
中的默认任务)。
ant
war
在
lib
目录下生成一个
war
文件:
AppsOpenbravo
|-lib
|-
ant deploy
复制
war
文件到
tomcat<
/p>
的
webapps
目录下。
ant
installWebService
安装
Web
Service
到应用服务器的目录。
ant
会执行
ant ,ant ,ant ,ant te,ant
installWebService
和
ant war
任务。这个任务只用于安装。
开发环境
在开发环境中内容中手工拷贝的。我们不会生成
war
文件因为这比较耗时。
第一次编译过程是这样的:
ant
ant
ant
ant pment
然后编译整个应用程序:
ant pment
编译特定的窗口:
ant pment
-Dtab=
编译手工代码:
ant pment -Dtab=xx
为了编译时避免执行
翻译的任务(对于这个阶段将时间花在这上面是没有必要的),可以在
命令中添加一个参
数:
-Dtr=no
。
ant pment
-Dtab=
ant pment -Dtab=xx -Dtr=no
生产环境
在生产环境下应用程序会打包在
war
文件中。这可以让我们对
每一个应用程序设置正确的权
限,但是我们必须将
war
文件发布到
tomcat
中,以使它能运行起
来。
第一次编译的过程如下:
ant
ant
ant
编译整个应用程序:
ant te
ant war
ant deploy
编译指定的窗口
:
ant compile -Dtab=
ant war
ant deploy
编译手工代码
:
ant compile -Dtab=xx
ant war
ant deploy
从源代码构建
这一节是如何从源代码构建的快速指南。你可以在
Build Openbravo from
Sources
看到完整的
步骤。
安装
Subversion
Subv
ersion
是一个源码控制工具,可以让开发者控制文件的版本。
构建前必须先安装
Subve
rion
。可以从这里下载:
*
必须
同时安装
OpenSSL
。
现在的源代码还不支持
Postgr
eSQL
只支持
Oracle
。
Openbravo 2.3
将会支持
PostgreSQL
。
从
Subversion
中检出源代码
安装好
Subverion
后运行如下代码
:
svn co
/svnroot/openbravo/trunk AppsOpenbravo
将会创建
AppsOpenbravo
的目录,源代码保存的目录。
快速构建指南
从创建的
subversion
文件的目录运行如下命令:
ant -f te setup
这个过程会配置安装参数。
?
被创建
?
在
p>
config
目录下创建
< br>,
,
和
?
在
src
目录下创建
使用
Oracle
< br>数据库时所有这些文件都会被创建。如果使用
PostgreSQL
需要将
和
文件名修改为
dbCon5_
和
。
当参数按上面的方式配置好后,再运行下面的命令。
ant
这个过程编译并生成应用程序的
jar
文件并在
lib
目录下生成
文件。需要将些
文件复制到
$$CATALINA_
HOME/webapps
目录以发布应用。
集成开发环境
一些快速入门以
Eclipse
来开发
Openbravo ERP,
可以参考以下链接
:
Openbravo
数据模型
存储的数据库对象
某些情况不在
Openbravo
中的数据库对象
p>
(
存储过程
,
函数
和触发器
)
必须符合指定的规则才能
使
用。应用程序中存储过程时只能通过对应的
AD_PInst
ance_ID
来调用。存储过程也必须正
确的管理
AD_PInstance
,设置返回值、设置有用的输出信息。在创建存
储过程这一节会更
详细的介绍如何开发一个存储过程。
实体
-
关系
(ER)
图
Openbravo
的实体
-
关系
p>
数据库图
展示了
Openbravo
整个的数据模型。它包括了
Openbravo
ERP
的功能所使用的所有表和字段。
根据应用程序字典中的数据生成了文档。这些图按不同的主功
能模块分成了几个章节。同一
个表可能在不同的章节中出现但具体的描述只出现一次。这
样做是为了强调某一个章节中主
要的表与其他章节中表的关系。例子中展现了所有的关系
但没有代表性的表不会出现在章节
中。
创建存储过程
AD_PInstan
ce
和
AD_PInstance_Para
< br>表
应用程序中调用存储过程都需要在表
AD_PInstance
中注册。表
AD_PIns
tance_Para
中存放了
报表和流程窗口中相应的存储过
程的参数的值。
表
AD_PInstance:
?
AD_PInstance_ID
:
表的标识符。
?
AD_Process_ID:<
/p>
与在应用程序字典中存放存储过程信息的表
AD_Process
相关联的外
键。
?
Rec
ord_ID:
如果在窗口中调用存储过程,这一列存放当前记录的
ID
。
?
IsProcessing:
p>
存储过程在执行中时这一列为
“Y”
。有些
存储过程会检查相关的存储过程
是否正在运行。
?
AD_
User_ID:
调用存储过程的用户
ID
。
?
Result:
存放存储过程运行的结果。
?
ErrorMsg:
存放存储过程输出的信息。
表
AD_PInstance_Para:
?
?
?
?
?
p>
Parametername:
对应于数据库列名的参数名称。
p>
P_String
和
P_String_TO:
当字段是文本框或列表框时插
入的值。
P_Number
和
P_Number_TO:
当字段是数字框
或外键时插入的值。
P_Date
和
P_Date_TO:
当字段是日期
型时插入的值。
Info
和
Info_TO:
当参数定义为一个范围内的值而不是指定的一个值时用
_TO
的后缀。使用这个参数生成的弹
-
-
-
-
-
-
-
-
-
上一篇:史上最难猜的成语谜语
下一篇:最新成语(含答案)