今天完成样板工程GUI的基本功能,能够实现采购申请单的增删改查,现在来总结下这周完成的。。。
1.首先,整个的一个开发流程是,先依次建立好元数据,包括实体、关系、数据表、查询、视图、枚举。最好一开始就配置好其中的关联关系,否则后面运行时报错就麻烦了,又要发布,刷新java代码,可能还要重启服务器,总之就是一旦前面元数据的配置有问题,调试起来就特别麻烦。
配置元数据最初有个易出错的问题,那就是多重性和判断聚合(composition)还是关联(association),两个有关系的对象如果独立开来不能存在,或者说没有存在的意义,则为聚合关系;否则为关联关系。
2.配置好元数据之后就可以跳到java代码页面来编辑代码了,开发修改java代码的主要是修改3个java文件的代码:*EditUI.java、*ListUI.java、*ControllerBean.java。下面介绍下在*EditUI.java和*ListUI.java文件中几个重要的方法:
*EditUI.java:
1.
createNewData:创建一个新业务对象,在新增的时候被调用;可以在这里为业务对象赋默认值。
@Override
protected IObjectValue createNewData() {
ZxPurReqBillInfo objectValue = new ZxPurReqBillInfo();
UserInfo currentUserInfo = SysContext.getSysContext().getCurrentUserInfo();
// 填写制单人、最后修改人信息
objectValue.setCreator(currentUserInfo);
objectValue.setLastUpdateUser(currentUserInfo);
try {
Timestamp currentDate = SCMClientUtils.getServerDate();
objectValue.setCreateTime(currentDate);
objectValue.setReqTime(currentDate);
objectValue.setLastUpdateTime(currentDate);
} catch (Exception e) {
handleException(e);
}
// 设置单据状态为保存
objectValue.setBillState(ZxPurStateEnum.SAVE);
return objectValue;
}
2.
getBizInterface:获取列表对应实体的业务接口,以便调用业务方法。
@Override
protected ICoreBase getBizInterface() throws Exception {
return ZxPurReqBillFactory.getRemoteInstance();
}
3.
onLoad:界面初始化事件。可以在此:
1、获取UI的上下文和初始化数据
2、设置控件风格
3、设置界面组件的状态
@Override
public void onLoad() throws Exception {
String cuId = SysContext.getSysContext().getCurrentCtrlUnit().getId().toString();
FDCClientUtils.setPersonF7(prmtReqPerson, this, cuId, true);
super.onLoad();
initEntriesTable();
// 处理编码规则
setAutoNumberByOrg();
if (this.getOprtState().equals(OprtState.ADDNEW)) {
// 初始化新增界面时默认新增一行分录
this.addLine(this.kdtEntrys);
}
}
4.
loadFields:将业务数据加载到控件。
@Override
public void loadFields() {
super.loadFields();
// 填写分录的物料名称、规格型号
for (int i = 0; i < this.kdtEntrys.getRowCount(); i++) {
MaterialInfo materialInfo = (MaterialInfo) this.kdtEntrys.getRow(i).getCell(
ENTRIES_MATERIAL).getValue();
if (materialInfo != null) {
// 由物料带出物料名称和规格型号
this.kdtEntrys.getRow(i).getCell(ENTRIES_MATERIAL_NAME).setValue(
materialInfo.getName());
this.kdtEntrys.getRow(i).getCell(ENTRIES_MATERIAL_MODEL).setValue(
materialInfo.getModel());
}
}
}
5.
storeFields:从控件中获得最新的业务数据
@Override
public void storeFields() { // TODO Auto-generated method stub super.storeFields(); }
6.
createNewDetailData:增加分录
@Override
protected IObjectValue createNewDetailData(KDTable table) {
ZxPurReqBillEntryInfo info = new ZxPurReqBillEntryInfo();
info.setEntryState(ZxPurStateEnum.SAVE);
return info;
}
*ListUI.java:
1.
getKeyFieldName:选择一个主键属性字段
@Override
protected String getKeyFieldName() {
// TODO Auto-generated method stub
return "id";
}
2.
getEditUIName:设置编辑页面
@Override
protected String getEditUIName() {
// TODO Auto-generated method stub
return ZxPurReqBillEditUI.class.getName();
}
3.
getEditUIModal:修改编辑页面打开方式为NEWWIN
@Override
protected String getEditUIModal() {
return UIFactoryName.NEWWIN;
}
4.
getMergeColumnKeys:分录合并
@Override
public String[] getMergeColumnKeys() {
String[] columns = new String[] { "number", "purchaseOrg.name", "supplier.name",
"reqDept.name", "reqPerson.name", "description" };
return columns;
}