读书人

金蝶时期的那些札记

发布时间: 2012-08-10 12:19:33 作者: rapoo

金蝶时期的那些笔记

晚上睡不着,打开电脑翻到了一些当年在金蝶时写的笔记,还是让它们出来透透气吧,要不连我都忘记自己曾经写过这些东西了。金蝶是我第一个东家,也是我技术能力提升最快的地方,真心祝福金蝶能高飞。


加载

这里我把所有的jar包都拷贝到了我自己建的目录allJars

然后BOS加载

金蝶时期的那些札记

添加外部JAR

金蝶时期的那些札记

金蝶时期的那些札记

金蝶时期的那些札记

设置JVM参数

-DEAS_HOME=D:\kingdee\

Ok,jar包加载了,启动参数设置了后还需要修改几个地方

D:\kingdee\

增加客户端启动的元数据加载路径,这部非常关键

金蝶时期的那些札记

OK,现在可以启动试试了


OK,搞定(这只是万里长征的第一步)

金蝶时期的那些札记

1.2

W盘建立好后,在W盘创建dev目录,并建立两个文件server-user.liblist和client-user.liblist


这两个文件用于记录优先加载的目录是那些,因为我

然后我们设置元数据的优先加载方式

客户端,修改D:\kingdee\

服务端

修改D:\kingdee\

这个时候,基本都差不多了,我们尝试下看我们的单据是否能够被优先加载(这里有点文档思路写的有点跳跃,大家将就着看把,时间紧迫,顾不得字斟句酌了,J)

1.3 启动金蝶时期的那些札记

首先用administrator登陆

金蝶时期的那些札记

增加到

重新用用户登陆,可以看到我们的菜单项了

金蝶时期的那些札记


EAS是MVC架构的么?

2006年3月

EAS是MVC架构的么?逐一分析,先看看EAS是否具备M、V、C这三个元素

Modle--xxxControllerBean,在ControllerBean中除了定义了对实体的CRUD(addnew,getValue,update,delete)操作外,还包括实体相关的业务操作方法,如submit,audit,freeze等,应该算的上标准的Modle,下边是摘抄的一些对Model的定义

模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。
  业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

View-xxxEditUI,EditUI也应该算是标准的View,用于数据展示、数据采集、触犯用户事件等

视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。

Controller-???,EAS的控制器在哪里,我一直没想明白,控制器的主要作用是接受客户请求,然后将模型与视图匹配在一起,共同完成用户的请求。
但我没有在EAS的框架中找到类似的东东,大胆的想了一下,我觉得不光是EAS没有Controller,可能所有C/S架构的都不太可能会有这样的东东,C/S架构不同于B/S,B/S的View和Modle同处于服务器端,可以进行协作处理,选择什么样的模型,选择什么样的视图,你可以在服务端完成,而C/S架构不是这样架构的,所以EAS并不是标准的MVC体系架构


EAS学习-UI体系2006年3月

下边这个集成体系是一个典型单据编辑界面的集成体系

金蝶时期的那些札记

HouseForRentEditUI为自定义的单据编辑界面

不同的父类UI有着不同的功能,这个可以从单据上的Action可以看到

下图为CoreBillEditUI的功能列表

金蝶时期的那些札记

下图为EditUI的功能列表

金蝶时期的那些札记

下图为CoreUI的功能列表

金蝶时期的那些札记

另外,单据的状态有以下几种

public class OprtState
{

public OprtState()
{
}

public static String ADDNEW = "ADDNEW";
public static String VIEW = "VIEW";
public static String EDIT = "EDIT";
public static String COPYADDNEW = "COPYADDNEW";
public static String EXITING = "EXITING";

}

CoreUIObject

处理一些UI底层的功能,类似与JDK中的Component

比如:

金蝶时期的那些札记

列表界面体系

金蝶时期的那些札记

EAS框架(CoreUI,EditUI,CoreBillEditUI)实现了一些最基本的功能

AbstractXXXUI做了什么事情呢?

1.构造界面的代码

2.构造事件

3.构造事务

4.让实现更单纯化

一个单据的编辑界面主要的几个方法:

1.onLoad()

2.loadField()

3.Action....


DAO模式在EAS中的应用

2006年5月

看下DAO模式下的一个时序图

金蝶时期的那些札记

EAS中DAO接口(IORMappingDAO)的实现只有一个ORMappingDAO,它实现了对数据对象和数据库层间的增删改查的底层业务操作

数据对象的操作并没有封装在数据对象内,而是通过DAO对象来完成的,这样可以避免不同的数据对象都实现类似的数据访问操作.

关于数据对象,有不同的定义方式,有如下的把数据属性以类变量的形式出现的

public class Customer implements java.io.Serializable {  // member variables  int CustomerNumber;  String name;  String streetAddress;  String city;  ...  // getter and setter methods...  ...}

但EAS做法不是这样的,EAS把数据对象封装到数据Info中,数据Info实际上是封装了一个Map,通过这个Map来管理数据对象中所有类别的数据,当然获取数据和修改数据的方式还是通过setter和getter,只不过内部的实现是一个Map的数据修改和数据获取

DAO接口定义数据操作的方法,然后有具体的子类来根据不同的需要实现,可以是JDBC方式的DAO,也可以是通过O/R Mapping工具的DAO


EAS学习-EAS类的体系架构

2007年12月

一个实体会生成下边几个类

业务实现: com.kingdee.eas.fi.mipe.HouseForRent

业务接口: com.kingdee.eas.fi.mipe.IHouseForRent

值对象: com.kingdee.eas.fi.mipe.HouseForRentInfo

值对象集合: com.kingdee.eas.fi.mipe.HouseForRentCollection

控制器: com.kingdee.eas.fi.mipe.app.HouseForRentController

控制器Bean: com.kingdee.eas.fi.mipe.app.HouseForRentControllerBean

控制器Home: com.kingdee.eas.fi.mipe.app.HouseForRentControllerRemoteHome(已经作废)

控制器LocalHome:com.kingdee.eas.fi.mipe.app.HouseForRentControllerLocalHome(已经作废)

控制器Remote: com.kingdee.eas.fi.mipe.app.HouseForRentControllerRemote(已经作废)

控制器Local: com.kingdee.eas.fi.mipe.app.HouseForRentControllerLocal(已经作废)

其中,开发人员真正需要实现的类是com.kingdee.eas.fi.mipe.app.HouseForRentControllerBean

我们这里首先看下各个类的体系架构

1.业务实现: com.kingdee.eas.fi.mipe.HouseForRent

HouseForRent继承于IHouseForRent,为客户端和服务端所共有,相当于一个字典,记录着服务端那些方法可以被调用

金蝶时期的那些札记

2.业务接口: com.kingdee.eas.fi.mipe.IHouseForRent

见1

金蝶时期的那些札记

3.值对象: com.kingdee.eas.fi.mipe.HouseForRentInfo

实际上Info是EAS构造的一个类似于HashMap的东东,用于记录Key-Value,Info和数据库表的字段有相应的对应

比如:在HouseForRent实体中定义了一个number字段,在HouseForRentInfo中就会有

/**
* Object:房产项目(出租)'s 编码property
*/
public boolean getNumber()
{
return getString("number");
}
public void setNumber(String item)
{
setBoolean("number", item);
}

金蝶时期的那些札记

4.值对象集合: com.kingdee.eas.fi.mipe.HouseForRentCollection

Info的集合

金蝶时期的那些札记

5.控制器: com.kingdee.eas.fi.mipe.app.HouseForRentController

ControllerBean的接口

金蝶时期的那些札记

金蝶时期的那些札记

6.控制器Bean: com.kingdee.eas.fi.mipe.app.HouseForRentControllerBean

真正的业务实现是在这个里边的

金蝶时期的那些札记

7.控制器Home: com.kingdee.eas.fi.mipe.app.HouseForRentControllerRemoteHome(已经作废)

8.控制器LocalHome:com.kingdee.eas.fi.mipe.app.HouseForRentControllerLocalHome(已经作废)

9.控制器Remote: com.kingdee.eas.fi.mipe.app.HouseForRentControllerRemote(已经作废)

10.控制器Local: com.kingdee.eas.fi.mipe.app.HouseForRentControllerLocal(已经作废)

EAS典型的服务端SQL语句

2005年9月 Locale CHINESE = new Locale("L2");
MetaDataLoaderFactory.setClientMetaDataPath(UIConfig.getMetaDataDir());
LoginHelper.login("yaya", "", "eas", "wens1018", CHINESE); 步骤:1.设置元数据路径 2.调用登陆接口 性能测试脚本也是在此基础上写业务测试脚本的


eas的eclipse启动参数
-DEAS_HOME=D:\kingdee\eas
-DEAS_SERVER=tcp://localhost:11034
-Dlog4j.configuration=file:D:\kingdee\eas\client\deploy\client\log4j.properties -Dlog4j.configuration=file:D:\kingdee\eas\client\deploy\client\log4j.properties可有可无

转载请注明出处:http://blog.csdn.net/pan_tian/article/details/7773802

===EOF===

1楼fly_fish45646分钟前
我现在在金蝶实习呢,是个分公司,我之前一直都是对java比较喜欢,用起来也特别顺手。但是我们这主要是卖k3 wise,EAS卖的比较少,早就听领导说EAS都是基于java架构的,一直也没有机会做相关的项目。wise上面的开发我只是用vb开发了几个小插件,在数据库里面写一些存储过程、函数、触发器等。上周自己完成了一个开发的项目,可是感觉和我想做的开发还是不太一样。唉~等这边的实习结束了,还是想去开发web相关的~~~