}
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(Data Access Object):
为什么使用DAO:通过这种模式将底层数据访问操作与高层业务逻辑分离开。 底层数据访问操作包括那些:如创建、更新或者删除数据 下图IORMappingDAO为EAS定义的DAO 接口
看下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月
private void freezeCustomerOtherInfo(Context ctx, String customerId) throws BOSException {
Connection conn;
String updateCompanySql; Statement statement; conn = null;
updateCompanySql = ""; String updateSaleSql = ""; statement = null; try {
conn = super.getConnection(ctx); statement = conn.createStatement();
updateCompanySql = "update T_BD_CustomerCompanyInfo set FIsTicketFreezed = 1,FFreezeOrgUnitID = '" + ContextUtil.getCurrentOrgUnit(ctx).getId().toString() + "' where FCustomerId = '" + customerId + "'"; statement.addBatch(updateCompanySql);
String updateSaleSql = "update T_BD_CustomerSaleInfo set FIsFreezeOrder = 1,FIsFreezeDelivery = 1,FConsignFreezeOrgUnitID = '" + ContextUtil.getCurrentOrgUnit (ctx).getId().toString() + "',FOrderFreezeOrgUnitID = '" + ContextUtil.getCurrentOrgUnit(ctx).getId().toString() + "'" + " where FCustomerId = '" + customerId + "'";
statement.addBatch(updateSaleSql); statement.executeBatch(); }
catch(SQLException exc) { throw new BOSException("Sql execute exception : " + updateCompanySql, exc); }
SQLUtils.cleanup(statement); SQLUtils.cleanup(conn);
break MISSING_BLOCK_LABEL_222; Exception exception;