星期二, 三月 13, 2007

JBoss Seam 安全一点通

介绍
Seam框架内嵌了安全控制功能,能达到对业务方法和页面层面的控制。Seam安全机制是建立在JAAS的基础之上的,能够完美支持验证和授权。
Seam的安全机制在应用时分为两种模式:
--简单模式,支持验证服务和简单的基于角色的安全检测功能。
--高级模式,除了具备简单模式的功能外,还增加了使用JBoss Rules进行的基于规则的安全检测功能。
其中简单模式可以应用于大部分对安全没有特殊要求的场合,例如,需要通过角色来限定登陆用户访问的页面和执行的动作。
而高级模式主要应用于需要根据上下文状态或复杂的业务规则来进行安全检测的场合。
当使用高级模式的时候,Seam框架需要以下工具的支持(简单模式不需要):
drools-compiler-3.0.5.jar
drools-core-3.0.5.jar
commons-jci-core-1.0-406301.jar
commons-jci-janino-2.4.3.jar
commons-lang-2.1.jar
janino-2.4.3.jar
stringtemplate-2.3b6.jar
antlr-2.7.6.jar
antlr-3.0ea8.jar

为了使用基于Web的安全检测,jboss-seam-ui.jar必须被包含到WAR包中,并且要如下配置faces-config.xml:
《application》
《view-handler》org.jboss.seam.ui.facelet.SeamFaceletViewHandler《/view-handler》
《/application》

实现登陆验证
× 在components.xml中配置验证方法:
《components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-1.2.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-1.2.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-1.2.xsd"
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-1.2.xsd"》

《security:identity authenticate-method="#{authenticator.authenticate}"/》

《/components》
表达式#{authenticator.authenticate} 指定了authenticator验证器中的验证方法,当调用authenticator验证器的login时是就会执行验证方法。

× 实现验证逻辑
@Name("authenticator")
public class Authenticator {
@In EntityManager entityManager;

public boolean authenticate() {
try
{
User user = (User) entityManager.createQuery(
"from User where username = :username and password = :password")
.setParameter("username", Identity.instance().getUsername())
.setParameter("password", Identity.instance().getPassword())
.getSingleResult();

if (user.getRoles() != null)
{
for (UserRole mr : user.getRoles())
Identity.instance().addRole(mr.getName());
}

return true;
}
catch (NoResultException ex)
{
FacesMessages.instance().add("Invalid username/password");
return false;
}

}

}
注解@Name("authenticator")把本类注册为Seam框架中的验证器,Identity.instance().getUsername()用来获取用户名称,Identity.instance().getPassword()用来获取用户输入的密码,Identity.instance().addRole()用于为经过验证的用户添加角色。

× 实现登陆页面
《div》
《h:outputLabel for="name" value="Username"/》
《h:inputText id="name" value="#{identity.username}"/》
《/div》

《div》
《h:outputLabel for="password" value="Password"/》
《h:inputSecret id="password" value="#{identity.password}"/》
《/div》

《div》
《h:commandButton value="Login" action="#{identity.login}"/》
《/div》
identity.login()方法用于验证用户,如果需要退出系统则调用 #{identity.logout}。

× 异常处理
当登陆验证失败或者用户权限不足时系统会抛出异常,为了不向用户暴露错误信息需要对pages.xml做以下异常重定向配置:
《pages》

...

《exception class="org.jboss.seam.security.NotLoggedInException"》
《redirect view-id="/login.xhtml"》
《message》You must be logged in to perform this action《/message》
《/redirect》
《/exception》

《exception class="org.jboss.seam.security.AuthorizationException"》
《end-conversation/》
《redirect view-id="/security_error.xhtml"》
《message》You do not have the necessary security privileges to perform this action.《/message》
《/redirect》
《/exception》

《/pages》

× 登陆后重定向
考虑以下场景,当用户访问受保护的资源时,系统会跳转到登陆页面要求用户登陆,当用户通过验证后,需要返回到登陆页面以前的受保护页面。
配置pages.xml实现未登录用户访问受保护页面时跳转到登陆页面:
《pages login-view-id="/login.xhtml"》

《page view-id="/members/*" login-required="true"/》

...

《/pages》

配置components.xml实现登陆后跳转:
《event type="org.jboss.seam.notLoggedIn"》
《action expression="#{redirect.captureCurrentView}"/》
《/event》

《event type="org.jboss.seam.postAuthenticate"》
《action expression="#{redirect.returnToCapturedView}"/》
《/event》

使用容器JAAS配置
如果需要使用容器提供的JAAS控制而不是Seam内置的SeamLoginModule,那么需要在components.xml配置文件中指定jaasConfigName属性,例如:
jaas-config-name="other"/>

授权
Seam为实现对Components(组件)、component method(组件方法) 和 pages(页面)的访问控制内置了很多的安全特性。提示:如果要使用高级模式请按照上面的配置启用高级模式。

核心概念
Seam框架提供的各种授权机制都是建立于一个前提概念之上的,那就是“系统中的每一个用户都会被授予角色和(或者)权限”,正是通过判断用户所具有的角色和(或者)权限能否满足被使用资源的声明,授权才准确地得以实行。其中,角色代表了一个组或者是类别的概念,被授予角色的用户可能会拥有访问多个资源的多个权限,角色代表一个权限集。而权限是单一的,是作用于单个资源上的一个动作。虽然仅仅使用权限也可以实现授权,但角色的引入大大的方便了授权的实现和管理。在表示方法上,角色仅仅通过一个名词来表示,例如,”管理员“,”编辑“,”拟稿人“,”仓库管理员“等等,而权限需要一个名词动词对来表达,例如,“客户:新增”,“客户:删除”,“产品:查询”等等。

组件的安全控制
在Seam中,注解@Restrict被用于声明安全检测。
Seam可以提供在类或者方法级别的安全检测,如果同时声明了类和方法级别的安全检测,那么方法级别优先而类级别被忽略。如果在一个组件类上应用了@Restrict,相当于对类中的每个方法都应用@Restrict。如果方法执行时发生了安全检测失败,作为约定,Identity.checkRestriction()会抛出一个异常。

一个空@Restrict注解代表了对一个由组件类名称和方法名称组合而成的权限进行隐式检测,例如:
@Name("account")
public class AccountAction {
@Restrict public void delete() {
...
}
}
即是代表了对权限“account:delete”进行检测相当于@Restrict("#{s:hasPermission('account','delete',null)}")显式检测。
再看另一个例子:
@Restrict @Name("account")
public class AccountAction {
public void insert() {
...
}
@Restrict("#{s:hasRole('admin')}")
public void delete() {
...
}
}
组件”account“在类级别启用了隐式安全检测,因此如果”account“内部的方法没有覆盖@Restrict声明的话都必须执行隐式权限检测,比如方法”insert“需要执行相当于@Restrict("#{s:hasPermission('account','insert',null)}")的权限检测,而方法”delete“因为声明了方法级别的@Restrict所以它将执行显式的@Restrict("#{s:hasRole('admin')}")角色检测。
注意s:hasPermission()和s:hasRole()都是表达式函数,对它们的调用会委派到Identity的对应方法。这些表达式函数可以在任意的表达式中使用,非常方便。
因为是表达式,@Restrict注解可以引用Seam上下文中任意的对象,这在需要对特定的对象实例进行安全检测时是非常方便的,例如:
@Name("account")
public class AccountAction {
@In Account selectedAccount;
@Restrict("#{s:hasPermission('account','modify',selectedAccount)}")
public void modify() {
selectedAccount.modify();
}
}
在执行modify方法时会去Seam的上下文中查找”selectedAccount“对象,并传递其引用到Identity的hasPermission(),这样就可以判断用户是否拥有对”selectAccount“修改(modify)的权限。

代码安全检测
有时候需要在代码中直接执行权限的限制而不是使用@Restrict注解,这时候直接调用Identity.checkRestriction()方法对安全表达式进行评估即可,例如:
public void deleteCustomer() {
Identity.instance().checkRestriction("#{s:hasPermission('customer','delete',selectedCustomer)}");
}
如果安全表达式评估结果为假,那么会执行以下任意一种动作:
--如果用户没有登陆则抛出NotLoggedInException异常。
--如果用户已经登陆则抛出AuthorizationException异常。
同理,也可以在代码中直接使用Identity.hasPermission()和Identity.hasRole()方法:
if (!Identity.instance().hasRole("admin"))
throw new AuthorizationException("Must be admin to perform this action");

if (!Identity.instance().hasPermission("customer", "create", null))
throw new AuthorizationException("You may not create new customers");

参考文档

星期一, 三月 12, 2007

JBoss Seam Develop tips

1. 分离测试和业务代码,新建一个源代码目录“test”,修改build.xml:
--在Property声明部分增加“test.java.dir" Property:
《!--src.java.dir was generated by seam gen--》
《property name="src.java.dir" value="src" /》
《!--test.java.dir added by developer manually--》
《property name="test.java.dir" value="test" /》
--修改target ”compile“的”javac“,添加test.java.dir到源代码目录:
《!--javac was generated by seam gen--》
《javac classpathref="build.classpath" destdir="${jar.dir}"
debug="${javac.debug}" deprecation="${javac.deprecation}" nowarn="on"》
《src path="${src.java.dir}" /》
《!--test.java.dir added by developer manually--》
《src path="${test.java.dir}" /》
《/javac》
--修改target “test“,把test.java.dir中的testng测试用例定义文件copy到测试classpath,增加以下语句:
《copy todir="${test.dir}" flatten="true"》
《fileset dir="${test.java.dir}"》
《include name="**/*Test.xml" /》
《/fileset》
《/copy》
--添加target “test_clean",并修改target ”test“,把”test_clean“加入”depends“属性:
《target name="test_clean"》
《delete》
《fileset dir="${test.dir}"》
《include name="**/*Test.xml" /》
《/fileset》
《/delete》
《/target》
《target name="test" depends="test_clean,jar,war,ear" description="Run the tests"》

2.测试驱动开发,Jboss Seam采用TestNG作为测试框架,同时支持Unit Testing(单元测试)和Intergration Testing(集成测试),其中前者主要用于分离地测试各层中特定的逻辑组件,
而后者负责测试除了页面以外的整个应用系统覆盖了各层的功能实现。
--随Jboss Seam 1.1.0.GA分发的Hibernate的JPA实现包hibernate-all.jar无法正常工作,需要更换最新的实现。
--Jboss Seam 1.1.0.GA文档中的”19.1. Unit testing Seam components“ 示例代码无法正常工作,建议参考example中的booking示例的BookingUnitTest.java,单元测试类直接继承于SeamTest。
--为了便于测试,简化测试代码的复杂度和提高测试执行效率,把有关EnityManager的管理代码抽取到一个共同的测试基类中,并且使用TestNG框架的方法级别和类级别的前置和后置代码功能,为每个测试类的每个线程保持一个EntityManager,每个方法绑定到一个Transaction,在执行方法的测试代码前自动打开事务,在方法执行完毕之后回滚事务,通过这种方法可以隔离各个测试方法不受外界影响也避免了频繁创建EntityManager带来的系统消耗。代码如下:
package com.psims.test;

import javax.ejb.CreateException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import org.jboss.seam.mock.SeamTest;
import org.testng.annotations.Configuration;

import com.psims.base.BaseConstants;

public class BaseTest extends SeamTest {
private static EntityManagerFactory emf;

private ThreadLocal entityManagerLocal = new ThreadLocal();

public EntityManager getEntityManager() {
EntityManager em = this.entityManagerLocal.get();
if (em == null || !em.isOpen()) {
em = getEntityManagerFactory().createEntityManager();
this.entityManagerLocal.set(em);
}
return em;
}

public EntityManagerFactory getEntityManagerFactory() {
if (emf == null || !emf.isOpen()) {
emf = Persistence
.createEntityManagerFactory(BaseConstants.PERSISTENT_UNIT);
}
return emf;
}

@Configuration(beforeTestMethod = true)
public void beginTransaction() {

EntityManager em = getEntityManager();
em.getTransaction().begin();
}

@Configuration(afterTestMethod = true)
public void closeTransaction() {
EntityTransaction et = getEntityManager().getTransaction();
if (et != null && et.isActive()) {
et.rollback();
}
}

@Configuration(beforeTestClass = true)
public void createEntityManager() {
this.getEntityManager();
}

@Configuration(afterTestClass = true)
public void closeEntityManager() {
EntityManager em = getEntityManager();
EntityTransaction et = em.getTransaction();
if (et != null && et.isActive()) {
et.rollback();
}
em.close();
this.entityManagerLocal.remove();
if (emf != null && emf.isOpen()) {
emf.close();
}
}
}
3.在ManyToMany映射时,如果是双向关联需要在被控方设置”mappedBy“属性。和inverse雷同。
4.难道Session Context范围的Component可以自动初始化,在使用@In注入的时候,不需要(create = true)?
5.把Entity Bean直接使用@Name声明为Seam Component使用时,如果在使用集群的时候,效率会有问题,尽量
把Entity Bean作为Session Bean的一个属性来使用。
6.使用Jsf组件调用后台服务的时候,可以传递参数
action="#{hotelBooking.selectHotel(hot)}"
可以实现选择DataTable中的一行,这样就可以避免在后台服务组件中声明@DataModelSelection属性。
7.可以在不提交任何jsf Form的情况下调用Action并传递request parameter,而且他没有使用
任何的javascript,可以通过右键,“在新窗口中打开”的方式执行。
8.由于默认一个Conversation的生存范围仅仅持续一个Request,若需要跨多个Request,必须使用@Begin
和 @End 来限定。
9.在实现service层时,把实现查询功能的seesionbean的生存范围设置为Session而不是Conversation,
可以避免频繁的创建和销毁Component实例。
10.区分哪些状态信息适合于生存在哪个上下文中是合理正确使用Seam框架的基础。
11.EnityQuery 对象实现了对Enity的分页查询功能,继承者直接Override public String getEjbql() 方法,
并返回实际的ql语句即可,在使用Ejb继承EnityQuery时,还需要Override public setEntityManager(EntityManager em)方法,
以@PersistenceContext形式注入EntityManager。
12.Query是EntityQuery的抽象基类,它在内部封装了大部分通用的查询逻辑,其中getEjbql()方法负责返回ql查询语句的模板,如:
select e from Person e where lower(e.lastName) like lower( #{examplePerson.lastName} + '%' ) and
e.age = #{examplePerson.age} and e.gender = #{examplePerson.gender}
而parseEjbql()方法负责解析ql语句的格式,把需要设置的表达式查询参数和约束参数分解出来,其中queryParameters中
保存了形如:
#{examplePerson.age}
#{examplePerson.gender}
的表达式EL查询参数名称,
parsedEjbql保存使用符号参数替换EL查询参数后的ql语句了形如
select e from Person e where lower(e.lastName) like lower( :p1 + '%' ) and e.age = :p2 and e.gender = :p3
parsedRestrictions保存了约束语句,restrictionParameters保存了约束参数。
13.在实体Bean中不要直接使用HashCodeBuilder.reflectionHashCode and EqualsBuilder.reflectionEquals,
它们会引发[LazyInitializationException]异常,估计是由于动态代理的原因。
14.场景:Service由SFSB实现,DAO由SLSB实现,Service使用@In注入DAO实现,DAO使用@PersistenceContext由注入EntityManager.
现象:在页面上执行CUD操作时,无法完成操作,页面和后台均无无错误信息,或者提示session is null or closed
原因:使用@PersistenceContext注入的EntityManager的事务为标准类型,即边界为最外层SB的方法,而Seam中的Transaction
需要使用type=Extended类型的EntityManager
方案:使用@PersistenceContext(type = EXTENDED),需要使用SFSB 或使用@In(create = true) 注入在components.xml中定义好的 core:managed-persistence-context.
15.Seam Managed Transactions
Transaction management for extended persistence contexts. A transaction spans the restore view, apply request values, process validations,update model values and invoke application phases. It is committed when invoke application is complete, or renderResponse() or responseComplete() is called. A second transaction spans the render response phase.
场景:SB拥有声明性事务管理,默认容器会自动在SB中的个方法开始调用的时候开启新的事务,在方法结束的时候提交事务.
(或者如果是SB调用SB,延用已存在的事务)
现象:在使用ORM的lazy fecthing的时候会抛出LazyInitializationExceptions异常.
原因:当在View中访问惰性加载的属性时,已经超出了Transaction的边界,所以需要使用open session in view模式来将整个
request生命周期纳入Transaction中,在View 执行Render操作之后commit,这个会有一个问题,当事务失败的时候,view已经
被渲染完毕,使view表现了与persistence不一致的状态.
方案:首先使用Extended persistence context,并将scope拓展为conversation,而不是request.
其次采用为每个request启用两阶段Transaction,第一阶段始于JSF的"restore view" Phase,终于"invoke application" Phase,第二个阶段覆盖"render response" Phase.
16.扩展的持久上下文extended persistence context, The entity retrieved in the query remain in the managed state as long as the bean exists, so any subsequent method calls to the stateful bean can update them without needing to make any explicit call to the EntityManager.
17.测试的时候使用setField(hb, "facesMessages", new FacesMessages());
setField(hb, "log", new LogImpl(HotelBookingAction.class));
setField(hb, "events", new Events() { @Override public void raiseEvent(String type, Object... params) { assert "bookingConfirmed".equals(type); } } );

(译)在Rails的地盘耍横(基于Seam Eclipse Tools的5分钟快速开发演示)

原文:Beating Rails in its own game (5-minute movie on Seam Eclipse Tools)
By Michael Yuan

你能在5分钟写出一个完整的包含8个关联表格的CRUD Web应用吗?并且需要支持以下功能:
× 1对1,1对多,多对多关联(能够完成遍历和查询功能)
× 联合主键
× 查询任意列
× 分页查询
× 根据数据库定义自动获取必要的条件字段
× 基于AJAX的输入校验
× 提供完整的日期控件
× 具备即时可用的访问权限控制架构(仅仅需要提供java登陆验证代码即可工作)
× 完全使用基于CSS 和XHTML技术的页面布局

那么,你能使用java来完成这些吗?
使用最新发布的Red Hat Developer Studio开发环境和JBoss Seam框架,你可以仅仅点击几下鼠标就能完成上面所有的要求。
这儿有一个5分钟的flash来演示如何去做:
Seam开发演示

对于喜欢使用命令行工具而不习惯Elipse里的窗口工具的开发者来说可以使用具有相同功能的Ant脚本,具体请参考Seam Gen文档
这个演示仅仅是Ram Venkataraman, James Williams, Max Rydahl Andersen, and Max Katz 一起为 EclipseCon 2007准备的4小时的教程中的一小部分。完整的教程涉及了JBoss Eclipse tools for server management, Seam Gen, database browsing, database query analyzer, Facelets visual editing, business process editor, rules editor等等很多内容。等我们EclipseCon 2007归来之后,将来可能会把整个教程都发布到JBoss网站上,敬请期待。

星期三, 一月 31, 2007

开源共思

“开源”,出自自由软件社区,意指软件开发人员或软件公司在发布其软件产品的同时公开其产品的源代码,以帮助产品用户更好地理解和使用软件。根据不同的授权协议(GPL、LGPL、APL...),用户拥有不同的使用权限,比如修改、引用、甚至商业化等等。最著名的开软件莫过于Linux、Apache、Postgresql,在它们的带动下开源社区人丁兴旺,高手辈出,新软件好软件层出不穷。现在可以毫不夸张的说,无论个人用户还是企业用户,都能在开源世界找到适合自己的解决方案,当然有时候开源软件的易用性不如微软或苹果的软件出色,但在功能上决不逊色于任何专有软件,所以适当的培养自己的动手能力会有助于你更好地享用开源大餐。那么我们能从轰轰烈烈的开源运动得到些什么启发吗?我个人认为是肯定的。每一个优秀的开源项目背后都会有一个出色的社区,就是通过这个社区分布于世界各地的程序员才得以交流协作,打造出优秀的开源软件。开源社区并不是一个简简单单的自发组织的、虚拟的网络社区,它根植于]理乍得·马修·斯托曼 (Richard Matthew Stallman, RMS,生于1953年)式的黑客文化和信奉民主、自由的社区精神。在这种类共产主义信仰的驱动下,每一个社区成员都处于积极奋进的状态,相互之间能够紧密协作,创造力源源不断地注入社区,反过来激励更多的成员投入到创作之中。我想,我们最需要关注的就应该是整个开源社区的背后蕴藏着的那些东西。现在但凡有个把人的公司都会大谈团队精神是如何如何的重要,但能真正形成一个良好的、自组织模式的团队的公司还不多。那么为什么开源社区能比公司团队以一种更有效的方式组织在一起,我想,主要是因为“开源”这个神奇的词汇,开源社区的成员都是“开源”的拥护者,而且不仅仅是软件开源,更重要的是他们之间的思想也是开源的,相互之间能够真正的坦诚相待。而公司团队由于个人之间存在的利益冲突,往往不能做到就事论事,进而影响了团队的凝聚力。简单的就是美的,有时候思想简单一些可以促进我们自己成长和周围环境的和谐。如果我们的思想也能够开源的话,那么你我之间就更近了一层。借用一下“开源”的意念,让我们共同倡导“共思”(Open Thinking)。 

星期四, 一月 25, 2007

Behavioral differences


Method
Parameter format
Lookup failure behavior
Usage example


ClassLoader.
getResourceAsStream()
"/"-separated names; no leading "/" (all names are absolute)
Silent (returns null)

this.getClass().getClassLoader()
.getResourceAsStream
("some/pkg/resource.properties")


Class.
getResourceAsStream()
"/"-separated names; leading "/" indicates absolute names; all other names are relative to the class's package
Silent (returns null)

this.getClass()
.getResourceAsStream
("resource.properties")


ResourceBundle.
getBundle()
"."-separated names; all names are absolute; .properties suffix is implied

Throws unchecked
java.util.MissingResourceException
ResourceBundle.getBundle
("some.pkg.resource")

星期四, 一月 11, 2007

Compiere 实施步骤

1.产品漫游—以熟悉 Compiere 应用程序

2.实施方法 —参考

3.测试—可参照Compiere 的示例实体"Garden World"

准备

您可能需要准备账户、业务伙伴和产品的导入。尽管您可以在之后进行所有记录的导
入,但若设置账户导入则会节约您的时间。在初始化阶段,提供对 CSV(逗号分隔
值)导入的支持,其中 CSV 文件含有预定义的属性列表。这是 导入 工具完整版的子
集,您可以在稍后使用。

账户&CoA(会计科目)

关于会计科目设置的详细资料请参考 这里 。

初始化实施

您需要以系统管理员身份以进行初始化实体的设置。

此程序将创建用户、角色,及单据类型、业务伙伴、产品等的"标准"实体。在运行
后,您可以创建及打印第一张发票。

设置程序将创建两个用户: "实体级别"角色的用户,具有维护规则和进行事务处理的
权限。 "组织级别"角色的用户,具有进行事务处理的权限。

精化实施
完成初始化实施后,您已经可以开始 Compiere 的运行了。但是你可以去"初始化实体
设置"工作流程以检查、更新。

Compiere 实施方法

Compiere 被设计为支持快速上线。主要优势在于 Compiere 独特的技术特性 - "上线
后的结构更改"(请参考" 信息结构 "),让您能在上线以后进行任何更改。这使得没
有必要存在非常细致的分析和配置阶段,因为" 如果您忘记了某些东西或设置错误了
什么"那么重新实施不是一个好做法。在许多 ERP 项目实施过程中发现必须进行某个
主要变更,又或者发现了某些遗漏,结果导致上线之前不得不重新实施,造成资金、
人力、设备和时间的浪费。

因此,这里为快速和方便实施提供了一些指引。其中的大多数,实际上不仅应用于
Compiere 这一 ERP 的实施 - Compiere 不过使它更容易罢了。

技巧 1 :尽量使用固定期限的实施合同,并坚持它。这可获得预定义交付(实施服
务)的公开价格。

成功案例(Use Cases)

用例(Use Case)是一个业务过程,比如订单输入、收款、发货等。基本而言,它是
您在业务开展中所做事情的清单。创建3种类别:

(1)紧迫 - 运营您的业务所必需的基本业务流程。

(2)便利 - 使业务流程更快、更容易、更有效。

(3)支持 - 帮助做出正确的决策、报表、分析...

有意思的是,在许多实施中,优先级似乎恰好被弄反了,这很令人吃惊。优先级(3)
提供了更高的信息级别,所以常常是战略决策的催化剂,因而它们是重要的,但优先
级(1)确保了您能够得以制定战略决策。软件供应商的售前活动通常完全聚焦于优先
级(3)上,并且咨询公司也因此而繁荣 - 不过,请考虑优先级(3)中有多少是必须
等到上线以后方能做出决策的。

这样说来,原型阶段应持续多长时间呢?这依赖于您的风险级别,至少优先级(1)的
所有用例应当准确工作。在此基础上,您的感觉更好,主意自然妙,轻松确定下一步
将完成的优先级(2)和(3)用例。

优先级(1)的用例工作正常时,您肯定无法进入负面的媒体报道标题了。

原型(Prototype)

每个产品都有它自己的方式去完成目标。如果您强制让 SAP 的行为像 Oracle
Applications 那样,或者像您现存的实施那样 - 那么无疑就增大了失败的风
险。Oracle、SAP、PeopleSoft 等商业应用系统实施的公开失败案例中,全都归入此
类。通常,失败与产品无关,而是实施者及客户所持的不现实期待和呆板态度所导
致。

因此,您如果要获得成功则需要一个操练场,以了解实现目标的最佳方式以及备选方
式。如果您暂行规定此阶段,那么您的上线系统其实变成了您的原型。Compiere 不会
介意这一点,并将精确地工作,然而您不过在系统中放入了一些测试数据而已。

技巧 2 :所有的上线系统都包含一些"杂音"数据,因此不必尝试拥有一个100%干净的
系统。如果在 Compiere 中无法删除这些"杂音"数据,那么可以隐藏它们(以满足一
致性的要求)。

尽早引入全部用户

变更有时不会受到热烈的欢迎。许多项目集中于"超级用户"或"用户代表团",限制了
给正常运营带来的打扰。适度则没问题,但请尽早引用所有的用户。

原型阶段的结束通常是进行总体导入的好时机。此时人们可尽情使用或肆虐系统,而
不会产生什么负面后果。您也可趁机获得非直接的确认,即覆盖了优先级(1)中的全
部问题。

因此,请将您以及超级用户们的 Compiere 解决方案展示出来,甚至开一个 Party,
让所有人都看看并试用您的杰作 - Compiere 系统原型。

迭代式开发

请习惯于循环:

设置较短时间内可完成的、较小的目标
让它工作
为下一次迭代总结经验
" 大爆炸 "方式 - 一切都同时开始工作 - 则使目标难以达到。

某些方面您可能第一次不能正确处理,所以小步骤产生的成功经过不断累积(即使遇
到"事故"也可快速恢复),就可完成最终目标。

上线以后

既然业务运营已处于上线状态中,您就有了时间和知识可以开始调查,Compiere 在业
务的策略方面能够怎样帮您。这使您得以更好地利用 Compiere,因为您已经对系统有
了更多的理解。

技巧 3 :为两个项目做出预算,一个是上线实施项目,另一个是上线6个月以后的项
目,用以完全发挥 Compiere 的功能。

对于6个月后的项目,如果不考虑计划的详细程度,需要决定的是:早实施还是晚实
施。用户不会再有变得惊慌的理由,"会议室驾驶仓"(或"Compiere 见面会")可以为
他们提供良好的培训基础。

Compiere 最大的优势这时就表现出来了:

已改变的优先级,新的业务和市场开发,或者新的视角要求改变 Compiere 的设置。
不久之后,您的用户将变得适应,并将更进一步地控制系统。

Compiere 允许从绝大多数情形下轻松恢复,因为它被设计为" 自恢复 "。

一切听起来不错。当然,使用软件支持服务,可以将问题的后果最小化。

切换上线

需要决定一个问题:是否并行运行。众所周知,并行运行意味着双倍的工作。因此,
在您的"Compiere 见面会"中,要与您的用户商量,看看他们是否对系统切换感到适
应。

技巧 4 :"用户认为无需并行运行"是一个重要指标,如不考虑(项目经理做出)是否
并行的决定。

真实系统

不要等到"一切"问题都解决。那样可能永远也解决不完。因此,在您删除了原型(的
确如此!)以后,开始使用新的实施和真实数据。

在这个阶段中(记住,您挑选出了所有的紧迫问题),主要的挑战是从已有系统将数
据迁移至Compiere中,并做必要的定制工作。

一个重要部分是小型但正式的"会议室驾驶仓"(您可在此模拟驾驶仓尝试 Compiere
飞车,无需系安全带)。在备份以后,您给予用户了解和尝试系统的机会。不要只计
划一次"会议室驾驶仓",完全可计划三次或更多,这依赖于实施的复杂性。这些
"Compiere 见面会"不应过长,用来帮助传播消息和减轻转换带来的心理压力 。

"会议室驾驶仓"也是对您的备份与恢复过程的检验。

获取经验的另一途径是升级和打安装补丁。Compiere 使得它们很容易,通过这些设置
可以获得经验。

背景

上面推荐的实施方法正变得越来越流行。基于 快速原型法 的方法论已经出现了较长
时间。 XP (极度编程 )是快速 、安全交付新技术的方法论(软件开发流程)。只
需用实施任务替代编码的部分,它就非常适用于应用软件实施项目。要了解关于 XP
的更多信息,请检查 Google 。

Rational 的重量级流程 Rational Unified Process(RUP)近来已从强烈反对 XP 转
为拥抱它。现在,Rational 为 RUP 提供一个 XP 插件。

Compiere 的会计科目

Compiere 需要用到一套账户用于系统操作,即便其中某些可能永远不会用于过账
(例:如果您没有外币事务处理,则像已实现盈利这样的账户将不会被用到 )。当创
建实体时,Compiere 需要创建一套默认的账户(会计科目) 。

AccountingXX.xls / AccountingXX.csv
文件 AccountingCN.xls、AccountingHK.xls 和 AccountingTW.xls分别对应于中国大
陆、香港和台湾的基本会计科目(包含于 QuickIT 实施工具包 的会计科目模板中
)。

文件 AccountingXX.xls 是导入和维护您的会计科目表的基础。

文件名中的 XX 代表国家或地区代码 - 因此文件 AccountingUS.xls 是美国风格会计
科目的良好基础。

您初始化新的实体(初始化实体设置)时,文件结构要求保持不变。在此阶段,仅必
填科目被导入/创建(在 Account_Default 中包含了值 - 第 H 列)。

在初始化设置以后,您使用它导入您的科目层次,或用于报表。为此,您可更改导入
格式以满足您的需求。

请注意,文件名只是一个建议。会计科目的早期结构对应于文件
NaturalAccount.xls/csv。文件 AccountingXX.xls/csv 的结构是一个超集。

如果您修改了文件,则 必须导出 .xls 文件为 .csv (逗号分隔值)格式,因为
Compiere 只能读取 .csv 文件。导出的结果文件应当位于 %COMPIERE_HOME% 的
"data/import"子目录下。

术语

会计科目 (CoA) = 自然账户的列表 - 它随 Accounting*.xls/csv 文件提供
账户 、 组合 或 有效组合 = 会计分段组合的值;分段在会计模式中定义
如:01-1600-HQ-应付账户(此处是公司和自然账户)
自然账户 = 账户分段 - 在您账户结构中的元素;这是您在 AccountingXX 文件中导
入的内容
如:1600 - 应付账户
细节 - 创建您自己的会计科目

您需要有不同的账户对应于每个默认账户。例如,即使您不想或不需要区分货币盈余
和货币亏损,Compiere 仍然需要这两个账户。您可合并科目,比如通过总账日记账分
录。
Compiere 需要最小集合的账户。这些账户由"Default Account"列的内部列名标识 -
例:B_ASSET_ACCT
您可更改、添加或删除某些行,只要存在一行对应于每个默认账户即可。
如果您不喜欢提供的示例会计科目(CoA),可采取如下步骤 :

更改行(值/关键字、名称、描述),以符合您的会计科目
删除所有的行,但含有默认账户的那些行除外
在您的会计科目中添加其它账户

各列的解释,可参考 Accounting*.xls 文件中的注释。注意,列名仅作为说明之用,
可以修改。

A - 账户_值

自然账户必须填写的主键(完全用户自定义),可以是数字或字母-数字,长度不超过
20个字符。请注意,每行必须唯一。

B - 账户_名称

自然账户必须填写的名称(完全用户自定义),长度不超过60个字符。

C - 账户_描述

自然账户可选的描述(完全用户自定义),长度不超过255个字符。

D - 账户_类型

必须填写的账户类型(如资产、负债、所有者权益、费用、资产、备注)。请注意,
首字母必须是 A、L、O、E、R 或 M。例如:"L - 负债"代表中文的负债账户类型。

E - 账户_符号

可选的账户符号标识(当前未实现,计划用于财务报表)。可选项包括自然(默
认)、借项和贷项。请注意,首字母必须是 N、D、C 或为空。例如:"D - 借项"代表
中文的借项账户符号标识。

F - 账户_单据控制

可选的账户单据标识(换言之,该账户仅能通过分类账过账,无人工日记账分录。为
简化科目对账,推荐这样做)。请注意,首字母必须是 Y、N 或为空。例如:"Y - 是
"代表中文的"是"账户单据标识。

G - 账户_汇总

必须填写的汇总账户标识(换言之,您不能过账到汇总账户,它们仅用于报表)。请
注意,首字母必须是 Y、N 或为空。例如:"Y - 是"代表中文的"是"汇总账户标识。

H - 账户_默认

可选的默认账户分配,这是账户的默认分配列名称。这是实际的列名称,请勿修改其
内容。您需要让所有默认账户至少存在单独的一行与之对应,且需要让所有的默认账
户被列出。

例如:B_INTRANSIT_ACCT 表示该账户是默认的银行在途账户。您可能不会用到它,或
希望为每家银行使用不同的在途账户,但是您仍然需要包含此行。

I - 账户_父

可选的父账户账(列 A )。它需要精确匹配。用于在您导入会计科目表时建立账户层
次。请注意,该列在初始化实体设置的过程中会被忽略。

J/K - 资产负债表_值,资产负债表_名称

可选的资产负债表行值/主键与名称。用于创建财务报表行集合。导入格式已经预定
义。

L/M - 美国1120资产负债表_值,美国1120资产负债表_名称

可选的资产负债表行值/主键与名称。用于创建财务报表行集合。导入格式已经预定
义。在这里,它以美国税代码的 Form 1120 为基础,不同于标准的美国资产负债表结
构。

N/O - 损益表_值,损益表_名称

可选的损益表行值/主键与名称。用于创建财务报表行集合。导入格式已经预定义。

P/Q - 美国1120损益表_值,美国1120损益表_名称

可选的损益表行值/主键与名称。用于创建财务报表行集合。导入格式已经预定义。在
这里,它以美国税代码的 Form 1120 为基础,不同于标准的美国损益表结构。

R/S - 现金流_值,现金流_名称

可选的现金流有行值/主键与名称。用于创建财务报表行集合。导入格式已经预定义。

compiere resource list

<div class="layout">
<div class="layoutregion">
<div id="g_body"><p>[请大家一起编辑本页面] </p><p> </p><p>资源搜索工
具:</p><ul><li>Google:<a href="http://my.donews.com/pastoral/">比特酋长
</a>为Compiere定制的Google custom
serach engine:<a
href="http://www.google.com/coop/cse?cx=015651053727539904439%3Ad58dvnv279e">Compiere
CSE</a>。你可以把它添加到你的Google PersonalHomepage,你也可以为其添加站
点;</li><li>eMule:也许应该上去搜索一下;</li></ul>
<p> </p>
<hr><h2><font size="4"><b>
Compiere相关项目网站</b></font>:<br>
</h2><dl><dl><dt><a
href="http://compilo.sourceforge.net/index.html">Compilo
- Compiere developer documentation.</a> </dt><dt><a
href="http://sourceforge.net/project/showfiles.php?group_id=111366">SF.net:
CompiereUtil</a>     <a
href="http://www.compierefans.org/blog/index.php">Compiere Util Project
HomePage</a> </dt><dt><a
href="http://sourceforge.net/projects/comxe">SF.net: Compiere on Oracle
XE</a> </dt><dt><a
href="http://sourceforge.net/projects/compiere-portal">SF.net: Compiere
Portal</a> </dt><dt><a
href="http://sourceforge.net/projects/cmpcs/">SourceForge.net:
Kompiere Libero (Manufacturing)</a> </dt><dt><a
href="http://www.compierefans.org/blog/index.php"><br></a> </dt><dt><a
href="http://compiere-mfgscm.sourceforge.net/">Compiere MFG &amp; SCM</a>
</dt></dl></dl>
<blockquote dir="ltr" style="margin-right:0px">
<p><a
href="http://www.openbravo.com/index.php?option=com_content&task=view&amp;id=130&Itemid=244">openbravo
ERP&amp;CRM</a>   
<a href="http://www.adempiere.com/">ADempiere</a></p></blockquote>
<h2>博客与论坛</h2>
<dl><dl><dt><a href="http://bbs.kuke.info/forumdisplay.php?f=18">上海酷克
Compiere论坛</a> </dt><dt><a
href="http://petershen.bokee.com/index.html">pshen的博客</a> </dt><dt><a
href="http://www.oslabs.org/">OSLabs - Home</a> </dt><dt><a
href="http://www.ohloh.net/opensource/software/compiere">Compiere ERP
+ CRM Business Solution
- Ohloh Metrics Report</a> </dt><dt><a href="http://red1.org/">red1 open
source empire</a>
</dt><dt><a
href="http://www.compiere.org/documentation/dbLogical/index.htm">Compiere
AD ER-Studio Intranet Documentation</a> </dt><dt><a
href="http://www.compiere.org/technology/build.html">Compiere Technology -
Building Compiere from Source</a>
</dt><dt><a href="http://www.compierefans.org/">Compiere Fans-zh</a>
</dt><dt><a href="http://www.smileblog.com/">Compiere Blog-zh</a>
</dt><dt><a href="http://groups.google.com/group/Compiere-China">Google
Groups Compiere-China</a> </dt><dt><a
href="http://www.workrun.com/21/0.htm">Compiere
ERP&amp;CRM</a> </dt><dt><a
href="http://www.knowledgesuccess.com/compiere/">knowledgesuccess</a>
</dt></dl></dl>
<h2><font size="4"><b>咨询与服务公司</b></font><br></h2>
<blockquote dir="ltr" style="margin-right:0px">
<dl><dt><a
href="http://entpiere.interpack.org/portal/entpiere/index.htm">首页 - 恩普
派</a>
</dt><dt><a href="http://www.astidian.co.za/comp.htm">Astidian Systems</a>
</dt><dt><a href="http://www.e-evolution.com/kompiere/">e-Evolution</a>
</dt><dt><a href="http://www.mycompiere.com/support/">myCompiere.com
Support</a> <br>Compiere-China     [  <a
href="http://www.compiere-china.com/support/setup_server.htm">Compiere-China
安装</a>   <a
href="http://www.compiere-china.com/download/dl_software.htm">Compiere
Download</a>  ]<br><a href="http://www.eousoft.com/">益用软件</a>
</dt></dl><dt><a
href="http://www.zoapcon.com/www2/Web/product/technique/systemstruct.htm">ZOAP
源科顾问有限公司</a> </dt>
<dt><a href="http://www.huahu.com.cn/">RMS ERP&amp;CRM 企业解决方案 DNN BPM
Suite 工作业务流程规划 门店管理</a> </dt>
<dt><a href="http://www.desoo.com/">Desoo 戴速: Compiere ERP &amp; CRM 企业
解决方案</a> </dt>
<dt><a href="http://www.adaxa.com.au/">ADAXA</a>       [<a
href="http://www.adaxa.com.au/index.php?option=com_content&task=section&amp;id=3&Itemid=27">Compiere
&quot;How-To"</a><a
href="http://www.adaxa.com.au/index.php?option=com_remository&amp;Itemid=53&func=selectcat&amp;cat=1">]  </a>
</dt>
<dt><a href="http://www.zhichi.cn/sa8.htm">compiere系统优势|北京智驰科技有
限公司</a> </dt>
<dt><a href="http://www.yugasoft.com/compiere.htm">上海优格软件有限公司
</a> </dt>
<dt><a href="http://www.janus-software.com/compiere_dl.html">Janus
Software</a> </dt></blockquote><wbr></div>

星期二, 一月 09, 2007

Compiere 安装在SUSE10下的成功实例

开源的ERP当然要用开源的操作系统啦,要不然,就本末倒置了。本文介绍了一个在
SUSE10下成功部署Compiere的实例,可作为参考。


安装前的准备
操作系统:Open SUSE Linux 10.0(内核2.6.9)
JAVA:SUSE10.0默认安装的是JRE1.4.2,不过Compiere网站上要求的是1.5.0,所以也
下载了一个SUN JDK1.5.0
Oracle:XE 10.0.2(后来证明XE完全可以使用)
Compiere:最新253b压缩包
别的没太多好说的,只有Oracle的XE版本,后来证明完全可用,并且安装相对简单
(只有一个rpm包),而且尺寸也小(所有的东西装完以后,我的SUSE分区只剩下
170M了
如果你准备用XE,从SUSE裸系统开始装这一大套东西只需要2G就可以了,但是如果用
标准版甚至企业版,那么准备4G空间吧!

安装过程
其实很简单,完全按照www.compiere.com上面的安装向导来就行了,注意一定要认真
仔细的一步一步操作
我试验了一下用SUSE自带的JRE1.4.2来跑RUN_setup.sh,结果不出所料报告了java方
法错误,看来必须用1.5.0
新建了一个用户comp,并且在~/.bashrc强制了PATH和相关的JAVA环境变量指向1.5.0
新建用户是个好习惯,一来在这个状况下可以单独为其设定1.5.0版本的JAVA为缺省
值,不会影响到其他用户继续使用1.4.2,二来,为一个服务建立一个特定的用户也符
合UNIX的安全习惯。
别忘了给comp加入到dba组中,并且在bashrc里面加上引用Oracle环境初始化脚本的
行。具体的做法在安装Oracle XE的rpm包后的设置过程中都有提示。
用root把compiere包解开到/opt,并且更换所有者为comp,给sh脚本赋予可执行权限
重新用comp用户登录桌面,语言一定要选择英语(后面会告诉你为什么),打开一个
终端检查JAVA环境变量和虚拟机版本,检查Oracle连通性(按照compiere主页的安装
步骤来)
一切就绪以后,就可以执行安装脚本RUN_setup.sh了,其实这个脚本是一个配置工
具,执行它会出现一个窗口,里面要求填入一些值,Test通过以后就可以保存并进行
下一步操作了。这里只要注意3点:A数据库名字叫做"XE"(如果你用XE版本的
话);B对于我的comp用户来说,不能使用<1024的端口,因此你要把缺省的端口改一
下,比如10080/10443等(注意Oracle默认占用8080端口,不要冲突了);C数据库用
户compiere不需要你手工建,安装程序会自己建的!
SAVE了以后就可以继续安装过程了,一般来说就不会再出什么问题了。别忘了设好
COMPIERE_HOME变量
最后都弄好以后,运行RUN_Env.sh不报错就算成功了
最后启动服务RUN_Server2.sh,实际上就是启动了内建的JBoss
最后打开浏览器就可以使用客户端了。根据我的经验,除了comp以外其他的没有设置
JAVA1.5.0为缺省jvm的用户一样可以使用WebStart客户端,因为在SUN JDK1.5.0安装
的时候自动把所有的WebStart连接绑定到了1.5版本的javaws上去了,因此无论谁在浏
览器中点击了WebStart的连接,默认启动的都是1.5的javaws
心得体会
一定要注意java的版本
1.5的java在SUSE10上面中文字体有问题,所以我强调第一次要用英文环境运行安装程
序,不然出来的中文字体都是方块。解决这个问题花了我一些时间,主要是1.5版本的
字体配置文件是按照特定顺序读取的,首先读取跟当前操作系统名称和版本对应的那
个文件,然后读取相似性越来越小的配置文件。一开始我没搞清楚这个顺序走了弯
路。
解决方法就是,把原来1.4.2的字体配置文件copy过来,并且命名为
fontconfig.SUSE.properties 这样优先级就是最高的了。如果设置好了java字体,那
么就可以用中文环境运行安装程序和客户端了
安装界面中还有DB2,sqlserver等数据库,IBM的虚拟机,以及其他类型的aplication
server可选,不过有些带<>箭头,估计还是测试阶段,过两天我会试一下win2K+IBM
JDK1.5+DB2的组合
登录界面有中文选项,但是进去以后还是英文界面,原来中文包是要收费的,靠
web界面的应用基本上没怎么做好,看来这方面要等很久了
Oracle XE版本挺好用的,作为试验和学习足够了,就是数据库名"XE"我迷惑了很久才
知道了,看了Oracle网站上的文档才知道的。

Compiere 贸易行业ERP的首选

周从所知,compiere目前在生产这块,也不是很成熟,但相当开放,可以满足几乎所
有生产企业的二次开发需要。

优化的贸易优势Compiere让您对货物在销售、采购、盘点、定价等方面的管理得
心应手。优化的客户关系,有利于增加新客户、保留老客户,最大化每个客户的生命
周期价值。优化的供应商关系,让您占据更有利的议价地位。

  标准化的Compiere贸易业解决方案,用您所需。
  集成的财务管理
Compiere让财务管理变得轻松。销售、采购、库存等相关的事务处理,自动过
账。您还在使用手工方式填写会计分录、追踪历史账目、定期重复统计
吗?Compiere贸易业解决方案集成的财务管理特性,允许您轻松记账、查账、分析,
简单而统一。
  集成的呼叫中心
Compiere让您的企业能够借助先进的CTI (计算机电话集成)技术,以优良的电话
服务水平赢得更多客户的依赖。业务单据、付款往来、销售机会、服务请求,瞬时识
别与追踪,Compiere贸易业解决方案让您的企业实时响应任何客户的需求。
  集成的电子邮件
Compiere完全满足Internet时代与业务伙伴快速沟通的需求。无论是供应商、客
户,还是企业内部的员工,简单、直接的沟通方式尤为重要。扁平式的管理,需要扁
平式的沟通。Compiere贸易业解决方案让您放心。
  可变更业务流程
Compiere灵活的业务流程允许您的企业快速响应变化的环境。一体化的业务功能
与业务流程,既可单独使用,也可组合使用。即时启用新的业务流程,需要灵活可靠
的一体化企业应用套件,Compiere贸易业解决方案让您能够做到。
  可变更业务功能
Compiere提供安全的用户界面与数据库访问控制。得益于Compiere独特的AD (应
用字典)技术,您不但能对现有的窗口、报表进行字段与布局的更改,而且可以创建包
含任意字段的全新窗口与报表。这一切却无需编写程序或脚本。随需而变,如此简
单!
  按需定制与扩展
Compiere丰富的业务功能仍然无法满足您特殊的业务需求?开放、强大、灵活的
技术架构,加上我们在Compiere项目实施及维护与支持服务方面超过3年的专业经验保
证,Compiere贸易业解决方案随时可以按需定制,按需扩展。
  投资Compiere贸易业解决方案依据企业的业务特征,我们提供贴身的定制、实施
与支持服务。Compiere贸易业解决方案,获取更高利润近在咫尺。

Compiere 的E2IT实施方法赢得6000人企业的赞许

敏捷型ERP项目:打破IT预算常规

如果您需要一个不是很庞大也不是很复杂的 ERP 系统管理公司运作,那么您要应该考
虑"敏捷型"ERP 系统。一位 CIO讲述了轻量级软件是如何为中小企业带来高效益的。
ERP 看起来已经是很古老的概念,它的全称是企业资源计划。如今,新一代的概念如
ERM(企业关系管理)和 SFA(销售自动化)开始受到企业的关注。
没有人再对 ERP 概念产生争议,因为它已经具有相当成熟的定义,并被长期应用于企
业管理当中。新的 ERP 模型正在由庞杂的分析型过渡到快捷的实现型。这种模型对应
了可以被快速高效实施的 ERP 系统。对于敏捷型 ERP 来说,重要的是,它被设计为
效率优先的原则。
敏捷型 ERP 也并非新事物。几年前,康比尔公司的总经理兰迪.纳尔逊在休斯敦进行
一项专业的研究。在做这项研究之前,纳尔逊被聘为 CIO 负责一个 ERP 合同的项目
实施。
"当 ERP 实施为商家带来顾客之时,在1999年我更加迫切地希望从事敏捷实施的研
究。"他解释道。"例如,SAP 推出了敏捷系统被称为 ASAP 或者加速的 SAP。后来发
现大多快速 ERP 产品线都缺乏较多的定制功能。换句话说,快速上线唯一的办法就是
企业需要改变业务流程去适应这套系统。"
敏捷型 ERP 也因此被重新定义,其最大的区别就在于是否预先配置。这种做法可以减
少上百万的开支,并且产生了难以置信的高效率。这为几乎要摇摇欲坠的经济景气状
况带来了翻天覆地的改变。这种敏捷型 ERP 方案为企业节省了在传统 ERP 套装软件
上巨额的投资预算。特别是为了生存而奋斗的中小型公司,能否快捷实施 ERP 对企业
的信息化管理成败至关重要。
敏捷型 ERP 的一个典型代表是支持 E2IT 实施快车道的 Compiere ERP & CRM。这套
完全开放源代码的企业 ERP 系统集成了 CRM 功能,支持敏捷型的实施,能够立即上
线,并在上线后随时根据业务需求的变化而调整。Compiere 的 E2IT 实施快车道包括
评估(Evaluation)、培训(eLearning)、实施(Implementation)、上线
(Transition)这4个顺序相连的步骤。E2IT 实施方法适用于包括 Compiere 系统在
内的所有敏捷型 ERP 系统。
一个敏捷型 ERP 实施的案例
生存问题并非是上线敏捷型 ERP 的原始驱动力。去年英国的马托尔零售店 CIO 詹姆
斯.麦克鲁夫为公司构建了电子库存追踪系统,随之公司新增了120名雇员。没有人向
麦克鲁夫兜售敏捷型 ERP 系统。前任 CIO 达尔夫.爱尔兰在位时,公司有
5,000,000英镑的 IT 预算并增加了4名 IT 专家。但自从麦克鲁夫加入马托尔零售店
以后,情况发生了变化,巨额的IT 预算已经无用武之地,敏捷型 ERP 被作为考虑的
重点。
他很快就体会到敏捷型 ERP 是一种直接、简单且高效的做法。敏捷型 ERP 系统是为
雇员数量少于5000名(收入在2亿美元到5亿美元)的中小企业提供的企业级应用。同
样的功能"财富"500强的企业却花了几年时间才完成。"敏捷型 ERP 是想体验快速增长
的唯一解决方案。"麦克鲁夫说道。
"大多数企业对业务流程并没有规范的定义,或者没有高效的定义。"纳尔逊补充道,"
因此,敏捷型 ERP 的市场目标非常明确。"
敏捷型 ERP 之优点
决定采用敏捷型 ERP 通常是 CIO 们。确定要上线实施通常是需要说服高级主管们
的。
"一旦 CEO 理解敏捷型 ERP 的优势并在实施中的困难阶段给予支持,那么进展就会非
常迅速,毕竟 CEO 确信做了正确的投资。"麦克鲁夫说道。
马托尔零售店的规模决定了麦克鲁夫选择敏捷的 ERP 系统。"为一个拥有6000名雇员
的企业上线敏捷型 ERP 是很具有挑战性的。"麦克鲁夫说道。"首先,这意味着需要替
换掉很多系统,然后需要培训员工如何使用新技术。总而言之,需要做到快速上线
ERP。经过评估,我们确定使用支持快速部署和动态精化实施的 Compiere 解决方
案。Compiere 的免费特性还不是最重要的原因,重要的是 Compiere 支持上线后的任
何调整。"
快速上线 Compiere 已在马托尔获得了成功。整个实施历时3个月。"以 Compiere
ERP & CRM 为基础,我们采用了标准的 E2IT 实施方法,最小化定制工作并且做了充
分的扩展测试。"麦克鲁夫补充道。"这比采用类似的传统 ERP 系统节约了10%的成
本,一些工作被集中到同一个人,公司的业务流程与之前相比具备更高的效率。"
实施的速度也比在线的 ERP 系统要快,在线 ERP 是另一种对中小企业很有吸引力的
解决方案。"整个后台应用采用租赁的方式,直接通过 Citrix 终端技术进行访问。"
纳尔逊说道。"如何减轻雇员和主管们的超量工作压力呢?提供完整的应用将生产、管
理、配送、产品计划等子系统集中到同一数据库当中。"
总之,毫无疑问在线 ERP 的方式对中小企业很有吸引力。就像位于波士顿的 IT 研究
与顾问公司 Aberdeen 组织的副董事长大卫?埃斯库罗所讲,"这种方案可以避免建立
硬件和网络等基础设施的投入。"
接下来,就像 Alschuler 一样,需要放弃已有系统的部分控制流程。这也正如纳尔逊
所说:消除"无价值的冗余工作",这对企业是有益的。"敏捷型 ERP 取代了人工对需
求的检测和对成本、开支的监控,"纳尔逊说道。"许多雇员被更换了岗位并重新安排
到新的工作当中,少数人会不幸地被解雇。"
成功实施的因素:敏捷型 ERP 并非适合所有的企业
"最适合会发生快速变动的动态产业。"纳尔逊说。"上榜名单最多的是技术产业,其次
是零售、服务行业、电信以及近期的能源和电子工业(由于其正在发生的变动和不稳
定的管理环境)。"
纳尔逊认为运输、铁路和化工业也比较适合敏捷型 ERP。
最后一个备受关注的问题,就是如何选择最好的敏捷型 ERP 供应商。必须注意的是,
敏捷型 ERP 最好支持 E2IT 实施方法。
麦克鲁夫建议评估多个敏捷型 ERP 供应商。"如果你想有好的交易,就应当多评估。
可能有更廉价的供应商,同样提供一些高效且高质量的服务。"他说道。"不要略过评
测阶段。花时间确定有没有问题并且雇员是否能够适应这种技术是非常值得的。"
埃斯库勒推荐寻找具有相关行业经验的专业系统集成商。
麦克鲁夫庆幸自己当时选择了开放的敏捷型 ERP 系统 Compiere。就像任何主流技
术,谨慎的计划都是必不可少的。麦克鲁夫提醒 CIO一定要细致地做好方方面面的工
作,敏捷型 ERP 定会不负众望。

Compiere 安装在Debian下Oracle安装及配置

1 安装准备
1.1 系统的准备
本文是在Debian linux下Oracle10g的安装笔记。我假设您已经成功的安装并配置了
Debian Linux。
1.2 依赖包的安装
在开始Oracle的安装之前,请您确保您至少已经安装了以下软件包。
make gcc g++ libc6-dev
注意:我不确 定,您是否只需要安装以上软件包,但我可以确定的是,您必须安装
以上软件包。^_^。软件包的安装: apt-get install make gcc g++ libc6-dev
1.3 创建用户和组
oracle安装需要两个unix用户组和一个运行时的oracle用户。
以root登录:
[root@james]# groupadd dba
[root@james]# groupadd oinstall
[root@james]# useradd -g oinstall -G dba -m oracle
[root@james]# passwd oracle
1.4 创建目录
有很多文档,建议您将oracle安装到一个独立的分区上面。比如:/opt。请您根据
您的需要选择合适自己的安装目录。在本文档中,我们假设 oracle的安装目录为
/usr/local/ora10。
确保有至少3.5G的可用空间。
[root@james]# mkdir -p /usr/local/ora10/product/10.1.0
[root@james]# mkdir /var/opt/oracle
[root@james]# chown oracle.dba /var/opt/oracle
[root@james]# chown -R oracle.dba /usr/local/ora10
[root@james]# chmod 755 /var/opt/oracle
您生成了oracle的运行时路径,并且授写权限给oracle用户,执行权限给dba组。
1.5 设置内核参数
1.5.1 修改sysctl.conf
添加如下的行到/etc/sysctl.conf中:
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
注:shmmax是一个很重要参数,根据您的机器的内存来设定。如果您设置不合适的
话,在创建数据库到约76%的时候就会挂掉。祝您好运。^_^
1.5.2 修改limits.conf
添加下面的行到/etc/security/limits.conf以修改你的资源限制:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
1.5.3 让修改生效
修改了以上文件后,您必须让其生效,您重启系统,或者用以下的方式改变内核运
行参数:
[root@james]# echo 250 32000 100 128 > /proc/sys/kernel/sem
[root@james]# echo 536870912 > /proc/sys/kernel/shmmax
[root@james]# echo 4096 > /proc/sys/kernel/shmmni
[root@james]# echo 2097152 > /proc/sys/kernel/shmall
[root@james]# echo 65536 > /proc/sys/fs/file-max
[root@james]# echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
1.6 设置Oracle用户环境
以oracle用户登录:
%su – oracle
修改~/.bash_profile文件,去掉下列三行的注释符,使.bashrc文件生效:
#if [ -f ~/.bashrc ]; then
# . ~/.bashrc
#fi
添加下列行到~/.bashrc:
# oracle 10g
export ORACLE_BASE=/usr/local/ora10
export ORACLE_HOME=/usr/local/ora10/product/10.1.0
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
export ORACLE_OWNER=oracle
export ORACLE_SID=compiere
export ORACLE_TERM=xterm
# Edit paths
export LD_LIBRARY_PATH=/usr/local/ora10/product/10.1.0/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/ora10/product/10.1.0/bin:$PATH
# Set DISPLAY
export DISPLAY="127.0.0.1:0.0"
我是将上面的内容保存到另一个文件中,.bash_oracle,然后在.bashrc中使用
source .bash_oracle进行调用 的。您可以根据您的好恶进行设置。您需要注意的
是,ORACLE_BASE和ORACLE_HOME的设置一定得和您在前面创建的目录相符。
ORACLE_SID是默认数据库的名称,在本文档中,我们假设默认的数据库名叫
compiere,如果您想用其他的名字,请您作相应的修改。
在有些文档中,还建议您需要设置一些其他的内核参数。但是我在安装的时候,没
有设置。我的内核是2.6.8。
差别忘记,您还得把. bash_profile文件中的umask=022这一行前的注释符去掉。
1.7 设置DISPLAY
我想您肯定是不想以Oracle用户登录,启动X窗口来进行安装的啦。如果您想直接以
oracle用户启动X,进行安装,您可以忽略这一步。
我们假设我们以一个普通用户james来启动gnome。那么,如果您要以oracle用户的
身份来进行安装,则您必须首先启用X的TCP/IP连接。
Debian下默认关闭了TCP/IP连接,所以首先要打开X的TCP/IP连接。
在/etc/X11/xinit/xserverrc文件中,您将会看到下面这一行:
exec /usr/bin/X11/X -dpi 100 -nolisten tcp
去掉其中的nolisten,然后重启就OK了。
作为普通用户,打开TCP/IP连接后可能连不上X服务器。需要在用户
的.bashrc(/home/james/)中添加下面这一行:
alias startx='startx -- -deferglyphs 16'
然后,您切换到root用户下,添加127.0.0.1的X连接权限:
shell$sudo su -
shell#xhost +127.0.0.1
然后,您就可以继续下一步啦。
请注意:如果您重启系统后,必须 再次执行
xhost +127.0.0.1
2 执行安装
2.1 交换分区的调整
差点忘了,为了安装Oracle 10g,oracle推荐至少512M内存和至少400M交换空间。内
存,好象不够关系也不大,但是交换分区 呢,您还是大方一点吧。如果您的交换分区
不够400M,那么您还是先看看这一步吧。
重设交换分区可以使用如下操作:
shell# dd if=/dev/zero of=tmp_swap bs=1k count=900000
shell# chmod 600 tmp_swap
shell# mkswap tmp_swap
shell# swapon tmp_swap
完成安装以后,可以释放这个空间:
shell# swapoff tmp_swap
shell# rm tmp_swap
count值是根据您需要调整的交换分区大小而定。
2.1 运行Installer
终于可以安装了。我们假设下载的安装文件位于/home/oracle下,名称为
ship.db.cpio.gz
shell#su - oracle
shell>gunzip ship.db.cpio.gz # 目录下会生成ship.db.cpio文件
shell>cpio -idmv < ship.db.cpio # 执行完以后,会生成Disk1目录
shell>cd Disk1
shell>./runInstaller -ignoreSysPrereqs # 因为我们是在debian下,所以必须忽
略系统检测
接下的一般选择默认设置就可以了。
注意:
A.安装过程中,会提示让您以root用户执行相应的脚本,请您必须选以root身份执
行完脚本,然后继续安装。
B.创建数据时请选择编码需要选"Unicode standard UTF-8 AL32UTF8"。如果您不设
定 UTF 8的编码格式,则您在后面汉化Compiere的时候将会出错。
3 数据库设置
数据库要正常启动,包括两个方面:启动数据库实例,启动侦听。
您可以手动的启动数据库实例,但是我们推荐您用dbstart命令来启动数据库实例。
以dbstart启动数据库实例需要做如下两步操作:
A、需要修改/etc/oratab,将想自动启动的数据库(compiere)所在行的"N"修改为
"Y"。
B、cp $ORACLE_BASE/admin/compiere/pfile/initcompiere.oraXXX
$ORACLE_HOME/dbs/initcompiere.ora
其中XXX为一长串字符串,随机产生。
然后执行dbstart就可以自动启动了。然后使用lsnrctl启动侦听。
4 常见问题
暂无

compiere 常见144个问答

問: Compiere 基於什麼技術平臺開發?
答: Compiere 基於 Java 平臺開發而成,使用的應用伺服器和資料庫伺服器分別為 JBoss 和 Oracle。因此,Compiere 的伺服器端與用戶端均具備跨平臺的優勢。
問: Compiere 支援哪些資料庫,是否資料庫無關?
答: 目前,Compiere 只支援 Oracle 資料庫。Compiere 使用的嵌入式事務處理,主要在 DB/2 和 Oracle 這樣的資料庫中才支援。Compiere 2.5.2e 尚不支援 PostgreSQL、MySQL 等資料庫系統。
問題是:真的有此需要嗎?Compiere 免費,Oracle Standard Edition One 永久授權適用於 Oracle 9iR2 和 Oracle 10g,授權費用為 $149 每用戶或 $4,995 每處理器(至多2處理器)。
Compiere 未來版本將支援更多的資料庫和應用伺服器。
問: Compiere 可以執行於哪些作業系統?
答: Compiere 可執行於任何啟用 Java 的作業平臺,包括 Windows、Unix、Linux 和 Mac 等。
問: Compiere 使用了哪些軟體發展工具?
答: 在原型開發階段,使用了 Visual J++ 與 SQL Server。
隨後的正式版本遷移至 Sun Java 1.4 和 Oracle 9i 資料庫上來,且基於 J2EE 開發,用到了 Rational、Embarcadero 的工具和 JBuilder 整合開發環境。現整合開發環境已經由 JBuilder 遷移至 Open Source 的 Eclipse。
問: Compiere 支援的 Oracle 資料庫版本有何要求?
答: Compiere 2.5.2e 及以後版本,要求使用 Oracle 10g。
問: Compiere 安裝步驟有詳細的說明嗎?
答: 有。詳細的安裝指南,請參見這裏。
問: Compiere 的客制與擴展有教程說明嗎?
答: Compiere 的客制與擴展,包括一般客制、增加額外的資料欄位、增加額外的業務邏輯、新功能、介面、新報表等。一般性的指導請參見這裏,更多的實施客制請參見這裏,更多的開發客制請參見這裏。
問: Compiere 的原始碼編譯,在你們公司內部由什麼工具完成?
答: 我們內部使用的 Compiere 原始碼編譯工具是 Eclipse(參考站點),但您也可使用其他任何 Java IDE(例如免費開發工具 Sun NetBeans 和商業開發工具 Borland JBuilder)。
問: Compiere 是否提供 Java 編程文檔?
答: Compiere 原始碼中有豐富的文檔說明(英文)。
我們為金牌合作夥伴提供完整的 Java API 應用編程介面的中文文檔。
問: Compiere 是否提供資料庫建模的文檔?
答: 您可下載資料庫模型檔(ER Studio 6 格式),或使用您喜歡的資料庫建模工具將 Compiere 資料庫反向工程,得到 Compiere 資料庫模型。
我們為金牌合作夥伴提供完整的資料庫 E-R 模型的中文文檔。
問: Compiere 使用的應用伺服器 JBoss 的版本是多少?
答: 目前最新的穩定版 Compiere 2.5.2e,Compiere Server 所使用的 JBoss 為 JBoss (MX MicroKernel) [3.2.3 (build: CVSTag=JBoss_3 _2_3 date=200311301445)] 版。
問: Compiere 的語言包對伺服器端和用戶端的作業系統語言有何要求?
答: Compiere 的語言包(如簡體中文、繁體中文、日文等亞洲語種)要求 Oracle 資料庫的字元集為 Unicode,請參考 Compiere 安裝指南中關於 Oracle 安裝的指導說明。無論 Compiere 伺服器端所執行的作業系統是何語言版本,均可將 Compiere 語言包正常安裝匯入。
Compiere 用戶端所執行的作業系統語言不必與相應的語言包相對應。例如,Compiere 伺服器端(執行於 Windows 2000 Server 英文版)上安裝了簡體中文語言包,而 Compiere 用戶端執行于繁體中文的 Windows XP Professional 上,那麼只要在繁體中文 Windows XP Professional 的語言顯示設置中選擇了「簡體中文」,即可正常使用簡體中文介面(可以輸入繁體中文的資料)。
如果在 Compiere 伺服器端同時安裝簡體中文和繁體中文語言包,則無論簡體中文、繁體中文還是英文的用戶端作業系統(Windows 2000/XP/Linux 等),都可看到自己所選擇的用戶介面語言。
問: Compiere Server 能否執行為 NT Service?
答: 可以。Compiere 2.5.0d 及更高版本均直接支援以 NT Service 方式執行 Compiere Server(JBoss應用伺服器)。
安裝 - 在 %Compiere_Home\utils\windows 目錄下,執行 Windows_Service_Install.bat 腳本即可將 Compiere Server 安裝為 NT Service。安裝完成後,您可以在 Windows NT/2000 的 Services MMC(「服務」管理控制臺)中看到 Compiere 服務。
卸載 - 如果要卸載 NT Service,只需執行 Windows_Service_Uninstall.bat 腳本即可。
注意,只有 Compiere 2.5.0d 及更高版本中存在 utils\windows 目錄。如果您使用的是較低版本,請將 Compiere 2.5.0d 或更高版本中的 utils\windows 目錄複製到您的相應目錄下,同樣可使用此方法將 Compiere Server 執行為 NT Service。
問: Compiere Server 能否執行為 Linux Daemon
答: 可以。請參考 Linux Daemon 編寫文檔。
問: Compiere 原始碼中各工程的編譯(Build)順序是什麼?
答: Compiere 原始碼中各工程的編譯(Build)順序如下:
Looks、data、db、jboss、tools、dbport、print、base、ServerApps、server、interfaces、serverRoot、extend、client、install、webStore、doc。
問: 中文語言包安裝以後,為什麼主功能表的根節點「Menu」仍然是英文?
答: 該節點不是翻譯項,因此它不屬於語言包。
如果您需要將根節點的「Menu」字樣更改為中文,請執行功能表命令總體規則→系統規則→樹與節點圖片,更改「Menu」的名稱為「功能表」或「菜單」( 繁體或簡體,與使用的語言包相對應)即可。
問: Compiere 的 Web 用戶端默認超時時間能否修改,以免自動註銷?
答: 可以。請查找 serverApps\src\main\servlet\org\compiere\www 目錄下的 WEnv.java 文件,並定位至:
/** 超時 - 15 分鐘 */
public static final int TIMEOUT = 15*60;
修改上面的代碼,再重新編譯原始碼。然後重新執行 RUN_setup 腳本(需停止 Compiere Server),再啟動 Compiere Server 即可工作。
問: Compiere 的原始碼如何下載?
答: 您可在源碼與工具下載頁面找到原始碼本地下載的鏈結。
或者,您可使用如下的 CVS 下載命令:
下載 Compiere Source 2.5.2c 版本
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/compiere co -r release_252c compiere-all
下載 Compiere Source 最新版
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/compiere co compiere-all
下載 Compiere Source 指定日期戳下的版本
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/compiere co -D 2003-11-30 compiere-all
更多的 CVS 幫助,請參看 CVS 手冊和 CVS 常見問題解答。
問: Compiere 的功能覆蓋已經非常多,但如果我們需要擴展 Compiere,應該如何做呢?
答:
如果您需要客制 Compiere,無論是現有功能還是全新的功能,通常不需要編寫 Java 程式。詳細的步驟請見實施培訓課程 (詳情請參閱合作夥伴權益)。
如果需要增加新的業務邏輯規則,則只需通過 Process/Callout 技術編寫原始碼並重新編譯即可完成。您可以使用 Open Source 的整合開發環境 Eclipse,或 Borland JBuilder 這樣的商業開發工具。
問: Compiere 能夠跨 Internet 部署嗎?
答:
Compiere 的用戶端有 Web 和 Application(應用程式)兩種。雖然 Web 版本對 Internet 存取沒有問題,但截止 2.5.2e 版本 Web 用戶端仍然處於 Beta 測試階段,因此我們推薦用戶使用全功能的應用程式用戶端。
Compiere 應用程式用戶端支援跨 Internet 部署,讓您的用戶在任何地點、任何時間都可登入 Compiere 系統。
問: 聽說執行於 JVM(Java 虛擬機)上的應用程式速度較慢,不知 Compiere 用戶端應用程式是否較慢?
答:
Compiere 的 用戶端應用程式使用了快取記憶體(Cache)技術,大大加速了視窗的開啟速度。用戶在首次開啟某視窗時,稍慢一些,但再次開啟該視窗的速度則大大加快。另外,用戶通常會在工作時將自己最常用的視窗一直保持開啟狀態,以提高工作效率。隨著電腦速度的不斷提高, 以 Intel P4 2.0 GHz CPU、256 MB 記憶體的桌面 PC 為例,其執行 Compiere 用戶端應用程式的速度與 Microsoft Office 的回應速度基本無異。
問: Compiere 解決方案是否支援負載均衡(Load Balancing)?
答:
Compiere 系統可以支援負載均衡。應用伺服器 JBoss 可配置為支援 Cluster,Oracle 伺服器也可配置為 Cluster。但在實際使用中較少用到。事實上,一台 Pentium 4 2.4GHz CPU、1 GB 記憶體、7200 RPM IDE 硬碟的 PC 上同時安裝應用伺服器和資料庫伺服器,一般可以支援50個以上的併發用戶數。
如果需要支援上百個甚至數百個的併發用戶數,則需要對 Oracle 和 JBoss 的性能調優。
問: Compiere 是否提供調試追蹤資訊?
答:
Compiere 提供 Trace Log,並有不同的 Level 可供選擇。
問: 原始碼確實是完整的嗎?
答:
是的,原始碼確實完整、無隱瞞。與其他聲稱 Open Source 的 ERP 或 CRM 相比,Compiere 未將任何重要業務邏輯或系統邏輯封裝於二進位元件之中,提供 100% 的原始碼。
您可以編譯從 CVS 上所下載的特定版本的原始碼(請參閱源碼與工具),所得到的 Compiere 部署檔與直接下載的 Compiere 安裝包除 jar 檔簽名不同外,其他完全相同。
問: Compiere 可以脫離 JBoss 執行嗎?
答:
Compiere 2.5.2x 將支援應用伺服器無關的特性,屆時您可以部署其他應用伺服器。
目前,會計、請求、計畫、預警等相關功能需要 JBoss 伺服器(即 RUN_Server2 腳本執行)。工作流引擎也在 JBoss 伺服器上實現。因此,您應當在使用 Compiere 系統時保持 RUN_Server2 處於執行狀態。
問: 在 Linux 下如何設置 JAVA_HOME 環境變數?
答:
您需要編輯路徑變數。您也應當在系統變數清單中看到它。只需附加下述指定的行至您的路徑變數:%JAVA_HOME%/bin。
以 Redhat Linux 為例,要設置 JAVA_HOME 及路徑變數,請執行:
編輯用戶主目錄(即 /home/username )下的 .cshrc 和/或 .bashrc;
檢查 JAVA_HOME 及 PATH 變數是否被正確導出。在該檔中,應當有類似這樣的行:
- export JAVA_HOME *您的 Java SDK 安裝目錄* (即 /usr/j2sdk1.4.2_04)
- export PATH *您的 Java SDK 安裝所對應的 bin 目錄* (即 /usr/j2sdk1.4.4_04/bin:${PATH}
問: 252e 版本的主要更新是什麼?未來何時推出 QuickIT 實施工具包?
答:
請參見 Compiere 版本發佈說明。
我們會在 Compiere 每個新的穩定版本面世的同時,發佈對應版本的 QuickIT 實施工具包。
問: 我知道 Compiere 使用開放原始碼的應用伺服器 JBoss,不知能否部署於 WebLogic/WebSphere 平臺?
答:
Compiere 捆綁了免費、高性能的 JBoss 應用伺服器。截止 Compiere 2.5.2e,WebLogic/WebSphere 應用伺服器尚不在支援之列。
問: Compiere 資料庫邏輯模型是否存在可線上查看的版本?
答:
您可下載 Compiere 的資料庫 E-R 模型。該模型使用 E/R Studio 6 維護。
問: Compiere 支援將銷售訂單轉換為生產訂單嗎?
答:
從 Compiere 2.5.2e 開始,已經提供了從銷售訂單生成生產訂單的功能。
問: Compiere 支援 從生產訂單創建領料單嗎?
答:
從 Compiere 2.5.2e 開始,已經提供了從生產訂單(生產計畫)創建領料單的功能。
問: 在安裝 Oracle 時設置的 System 帳戶口令忘記了,但 RUN_setup 對話方塊中需要填寫,怎麼辦呢?
答:
如果您的確忘記了 Oracle 安裝過程中曾設置的 System 帳戶口令,可使用以下步驟創建新的 Oracle 實例,而無需重新安裝 Oracle:
1. 從開始功能表程式中,啟動 Configuration and Migration Tools --> Database Configuration Assistant(資料庫配置助手);
2. Database Configuration Assistant 嚮導的步驟:創建資料庫 --> General Purpose --> TNS & SID --> 專用或共用 --> 字元集選擇為 Unicode --> 完成;
3. 注意記住輸入的 System 帳戶口令,這在 RUN_setup(「Compiere 伺服器設置」)對話方塊中需要用到。
問: Compiere 應用字典的首碼是什麼含義?
答:
下面的對照表供您參考:
AD_ 應用字典
A_ 資產管理
C_ 實體功能
GL_ 總帳
I_ 匯入
K_ 知識庫
M_ 物料管理
PA_ 績效分析
R_ 請求
RV_ 報表查看器
S_ 服務管理
T_ 臨時
W_ 網上商店
X_ 生成的模型

問: 如何知道 Compiere 應用伺服器(JBoss)是否啟動成功?
答:
JBoss 啟動成功後,您在命令提示視窗中應當看到類似下面的一行:
16:14:40,093 INFO [Server] JBoss (MX MicroKernel) [3.2.3 (build: CVSTag=JBoss_3
_2_3 date=200311301445)] Started in 48s:390ms
問: Compiere Application 能否跨 Internet 部署?
答:
可以。可使用 VPN(虛擬專用網)、Citrix 或 Windows 終端技術部署應用程式用戶端。
問: 當首次登入 Compiere 用戶端應用程式時,需要填寫 Oracle 資料庫用戶名與密碼。這是否不安全?
答:
您不必擔心這個問題。用戶端配置連接參數時,並不需要輸入 Oracle 用戶名與密碼:
安裝好 Compiere 伺服器端後,您應當執行 utils\RUN_Server2 腳本啟動應用伺服器。
您在用戶端設置連接參數時,只需要輸入應用伺服器名稱。如果您在 RUN_setup 過程中修改了默認的1099埠號,則還應當輸入埠號。
點擊測試應用伺服器方塊之後,Oracle 用戶名和密碼會被自動填充。應用伺服器與資料庫伺服器兩個方塊均出現綠色的勾狀。
現在,您可以登入 Compiere 用戶端了。
問: 我使用附件功能時,確定或取消時會彈出一個錯誤消息,提示某字體目錄下的檔不存在。如何解決?
答:
您可下載附件字體補丁,並釋放到消息提示的路徑下,即可解決。
問: Compiere 應用伺服器監控功能如何登入?
答:
通過 http://servername:port/monitor 的 http 驗證登入時,使用 Compiere 的系統管理員帳號與密碼(如默認情形下的 System/System)。登入之後,您會看到這樣的畫面。
問: 中文案例資料庫是否適用於 Oracle 9iR2?
答:
Compiere 2.5.2e 及更高版本,中文案例資料庫支援的資料庫包括 Oracle 10g,詳見安裝說明。
問: Compiere 如果實現資料庫無關,是否意味著會完全丟棄 Oracle 存儲過程?
答:
當前的 Compiere 的確用到了 Oracle 的存儲過程。在資料庫無關的過程中,這些業務邏輯會全部轉移到中間件(應用伺服器)上,使得可以部署于支援 ANSI SQL 92 的絕大部分資料庫。
問: Oracle 資料庫在商業場合使用需要購買授權,它的價格是否較高?
答:
使用 Oracle Standard Edition One 授權方案,10用戶永久授權只需約¥12,500,每處理器永久授權(不限用戶數)只需約¥41,500。
建議30用戶以上的情形購買每處理器的授權方案。Oracle Standard Edition One 授權方案適用於所有作業系統平臺上的 Oracle 9i R2 和 Oracle 10g 版本。
問: Compiere 伺服器端可以部署於哪些作業系統?
答:
以 Compiere 2.5.2e 為例,伺服器端(應用伺服器和 Oracle 資料庫)可以部署的平臺包括但不限於:
Windows - Windows NT/2000/XP/2003。
Linux - Fedora Core 3.0/4.0、RHEL 3.0/4.0 AS/ES/WS、SUSE Linux Professional 9
Unix - Solaris (X86/SPARC)
對於專用於部署 Compiere 伺服器的電腦選用何種作業系統,綜合考慮授權費用、維護成本和可靠性,我們推薦:
Windows 平臺 - Windows Server 2003, Web Edition
Linux 平臺 - Redhat Enterprise Linux 3 AS
問: Compiere 的 AD(應用字典)技術有何價值?
答:
簡單來說,AD(應用字典)技術可用於兩個方面:
非編程客制:無需編寫程式,直接在 Compiere 系統實體中客制全新功能,並與現有功能整合
代碼擴展:借助於統一的 AD 技術框架,快速創建新的業務邏輯,無需消耗用戶介面的開發時間
事實上,90% 以上的業務功能客制都可以通過非編程客制完成。有關使用 AD 技術的詳盡範例和技巧,請參考 Compiere 實施顧問培訓課程。有關使用 AD 架構擴展複雜應用的文檔,請參考 Compiere 開發人員參考大全。
問: Compiere 是否提供提醒功能?
答:
是的。您可以定義需要在何種情形下被提醒,Compiere 會在條件滿足時自動發送包含詳細資訊的電子郵件,已定義好的用戶則收到提醒。有關提醒設定,請見 Compiere 中文用戶指南。
問: 我們需要使用 Compiere 完成我們的所有管理,其中就包括客戶訂購,我們的客戶包括某行業的全部企業,數量在萬家乃至十萬家以上。請問 Compiere 能否同時支援如此眾多的用戶?
答:
如果必須讓數萬客戶通過 Internet 線上登入、查詢和提交業務往來的單據(如報價單、銷售訂單、發貨單),則不推薦使用 Compiere,請評估 SAP、Oracle E-Business Suite 或 Siebel 等解決方案。
Compiere 對超過1000個併發用戶的支援,需要特別的優化,因此我們不推薦用戶在這種高容量業務需求下使用 Compiere。
問: Compiere 什麼時候支援資料庫無關和應用伺服器獨立?
答:
從 Compiere 2.5.2x 版開始,將逐步引入對資料庫無關和應用伺服器獨立的支援。
問: Compiere 是否支援 Java SDK 1.5?
答:
截至 Compiere 2.5.2e,我們建議使用 Java SDK 1.4.2_08。
問: 我們需要客制新的 Master/Detail 型別的視窗,能否提供範例代碼?
答: 金牌合作夥伴可以獲得這樣的範例代碼及技術開發支援,在合作夥伴專區線上提問即可。
問: 我公司有較多分支機搆,除少量報表外不允許功能上的客制。Compiere 能夠做到嗎?
答: 可以。Compiere 的角色授權可以防止業務功能上的隨意客制。
問: 總部及閘店之間發生採購關係,門店產生採購訂單,總部則產生了銷售訂單;還有其他反向單據如發貨單/收貨單、應收/應付的處理。Compiere 的會計模組能夠自動過帳處理嗎?
答: 可以,Compiere 支援(自動)反向單據。會計分錄自動過帳時,借項和貸項(Dr/Cr)是相反的。
問: 分公司、辦事處的能否獨立核算,生成各分支機搆在某段時間內的收支報表?
答: 可以。Compiere 報表完全支援這樣的統計分析。
問: Compiere 今後將支援哪些資料庫?
答: Compiere 今後將陸續支援 Sybase ASE、Microsoft SQL Server、IBM DB2、Cloudscape(開放原始碼)等資料庫。