壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9645|回复: 4

Compiere Web 架构分析

[复制链接]
发表于 2005/5/5 13:35:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我写的Compiere Web 架构分析,还未完成,希望大家补充
Compiere源码研究(V252a)
程东辉
2005-03-16
WEB功能部分
登陆
登陆调用顺序
1用户调用服务器HTTP://LOCALHOST:1080/INDEX.HTMLHTTP://LOCALHOST:1080/WSTART
2        如果调用的是HTTP://LOCALHOST:1080/INDEX.HTML index.html页面是一个框架结构,其组成方式如下图所示

                     
            
              






在window.html中有JS代码
<script language="JavaScript1.2">
document.write('<p>Starting ... <a href="/compiere/WLogin" target="window">Login</a></p>');
location = "/compiere/WLogin";
</script>
通过上述JS代码,将请求定向到服务器的/compiere/Wlogin路径下。
3        如果调用的是HTTP://LOCALHOST:1080/WSTART,则在Wstart的doPost中直接调用以下代码生成登陆页面WebUtil.createLoginPage (request, response, this, null, null);查看WebUtil.createLoginPage代码,发现其实该函数仅仅简单的将请求又重新定向到Index.html页面。
4        登录顺序图如下图所示

登陆验证过程
登陆验证主要使用Wlogin.java来进行,Wlogin,.java还提供两个登陆页面的生成功能。验证步骤如下:
1 init
        在Init函数中,首先将Serverlet相关的设置写入System.properties中,并将全局相关的设置也写入System.properties中。
2 doGet执行序列
&#61692;        处理用户请求。处理序列如下
&#61692;        设置超时时间为15×60
&#61692;        从COOKIE中得到相关设置
&#61692;        建立会话对象WebSessionCtx
&#61692;        设置使用语言
&#61692;        调用以下代码连接数据库
        if (!DB.isConnected())
                {
                        String msg = Msg.getMsg(wsc.ctx, "WLoginNoDB");
                        if (msg.equals("WLoginNoDB"))
                                msg = "No Database Connection";
                        doc = WebDoc.createWindow (msg);
                }
&#61692;        处理代码验证过程
1)        从Request中得到Principal(如果用户不自己在JBOSS中定义JAAS,则Principal永远为NULL).
2)        从Request中得到用户输入的用户名和密码,如果usERPrincipal == null && (usr == null || pwd == null)条件成立,则说明用户初次登陆,创建第一个登陆界面
doc = createFirstPage (cProp, request, "");
3)        如果上一步判断条件不符合,则判断用户密码输入是否正确,如果密码输入不正确,则重建第一个登录界面doc = createFirstPage (cProp, request, "");
4)        如果以上条件都不满足,则说明用户已经通过了用户名和密码的设置,则创建第二个登陆界面createSecondPage,并根据第一个登陆页面中是否保存登陆信息到COOKIE中来确定清空COOKIE中的内容或重写COOKE中的内容。
5)        第二个登陆页面提交到/Wmenu路径,生成功能树。
几个重要的对象
&#61692;        WebEnv
WebEnv提供了Compiere的Web功能的一些基本静态常数和静态方法。
public static boolean initWeb (ServletConfig config)在每个Serverlet被请求时调用,将该Serverlet的设置数据写入System.properties中。

&#61692;        WebUtil
提供整个系统使用的静态变量和静态函数。
&#61692;        WebSessionCtx
每一个用户会话在Session中建立一个WebSessionCtx对象,名称为WebSessionCtx,该对象中保存了针对会话Session的全局设置,主要有以下信息
会话所使用的语言、长短日期的格式、各种数字的格式。另注意:WebSessionCtx中的变量ctx非常重要,该Ctx在登陆系统的过程中传递给了多个对象进行处理,并填充了各种信息,其传递的过程如下:
wsc.setLanguage(request);--->Env.setContext(ctx,Env.LANGUAGE,lang.getAD_Language());设置会话所用语言。
Login login = new Login(wsc.ctx);传递给Login对象
roles = login.getRoles(usr, pwd); 处理传入的ctx对象,将用户名称,用户编码,当前客户名称等信息写入ctx中。
&#61692;        WebDoc
&#61692;        Login


左侧菜单生成
窗口调用机制
web窗口是如何生成的?
PROCESS调用机制
报表调用机制
WORKFLOW调用机制
Compiere支持三种类型的工作流:
&#61692;        单据处理工作流
当处理单据时被启动。在需要审批的情形下,您可扩展这些工作流类型。示例:特价审批(当订单超过某特定金额时)。
&#61692;        单据值工作流
当任意实体对象满足用户事先定义的条件时,工作流被自动启动。示例:信用审批(针对新的业务伙伴)。
&#61692;        User Customer一般工作流
提供完成一项任务的导向图及逐步的指导。示例:设置向导、月终处理。用户从菜单中启动它们。
工作流是如何启动的?
在报表/程序定义功能中,对程序的定义即可以是类、函数(存储过程)或一个已定义的工作流。然后在表/列的定义中,针对引用是按钮的列可以设置其处理过程为已定义的任何程序,通过前面步骤的定义,用户在点击按钮的过程中,将触发启动处理流程,而处理流程可能是一段程序或建立一个活动的工作流。
        工作流中比较重要的类
org.compiere.process. StateEngine
该类中基于OMG标准定义了几个工作流状态,还有状态之间的相互转换。
org.compiere.process.DocAction
接口,定义了单据处理工作流的几种状态常数和动作常数


JAVA CLIENT功能部分
未归类
在Column定义和Process Param定义中,都有Reference选项,选择为Table_Direct的意思时直接从数据库表中取值,但是究竟是取那一个表呢?原来是直接将ColumnName的后3为去掉后得到表名,并从AD_TABLE和AD_COLUMN中提取信息。但是ColumnName的值必须以_ID结尾,因为在程序中HardCode了。
发表于 2005/5/8 10:01:29 | 显示全部楼层

写的不错!

写的不错!我也正在对web作一些研究,现在也把一些内容写出来供大家讨论:
WWindow:  这个类继承了HttpServlet类,成为了整个web应用框架的控制器(Controller)。主要职责:
1.        接受来自用户的所有请求,同时把用户请求翻译成系统识别的事件,传递给具体的业务逻辑层进行处理,得到处理的结果。
2.        根据用户的输入和上下文选择合适的视图显示。
MWindow: 这个类实现了Serializable接口,是web window的模型(Model),主要职责:
1.        提供给controller操作途径。
2.        提供给view具体的显示内容。
View:  compiere中的具体业务操作界面是通过动态生成出来的,生成过程是:后台应用逻辑生成需要的结果,同时把结果以MWindow的形式返回到WWindow中,WWindow通过运用ECS把MWindow中的具体数据解析成标准的html文本格式。同时把一些公用的功能和显示方式(javascript和css)也加载了进来。这样生成了一个标准的html文本,返回给浏览器。形成用户界面View。
对于它采用的Apache ECS,我认为有好有坏:可以把html代码程序化,但是缺点是需要熟悉ECS的API,而且写一个页面很费劲。;)
发表于 2009/7/16 17:18:28 | 显示全部楼层
很不错学习
发表于 2009/7/21 17:21:18 | 显示全部楼层
请问源码下载地址?
发表于 2010/3/15 08:58:31 | 显示全部楼层
不错,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 06:13 , Processed in 0.014635 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表