一、本节内容
根据元数据,使用向导生成单表档案。
大致的开发流程是这样:
二、使用代码生成向导生成代码
前提是元数据已经创建、保存、发布,因为不管是单表档案还是多表档案,最基础的地方永远是元数据。
单表档案只有增删改,无需修改。
全部显示绿色就是代码生成完毕了。
三、代码结构介绍
- 公共类
- 前台类
为什么会有两个按钮动作类?因为一个是编辑态一个是非编辑态。 - 后台类
四、定制化
自动生成的代码已经能够正常操作了,不过在基础上我们还需要根据业务进行一些定制化。
怎么弄呢?
SendtypeAddlineAction和SendtypeAddlineActiona都是按钮动作类,只不过前者是非编辑态的按钮动作,后者是编辑态的按钮动作。对表单进行操作就看他俩了。
- 设置默认数据
在SendtypeAddlineAction/SendtypeAddlineActiona的setDefaultData方法中,可以设置每一列的默认数据,例如创建人、创建时间。
package nc.ui.train.bd.sendtype.action;
import nc.ui.pubapp.uif2app.actions.batch.BatchAddLineAction;
import nc.vo.pubapp.AppContext;
import nc.vo.train.sendtype.SendTypeVO;
/**
batch addLine or insLine action autogen
*/
public class SendtypeAddLineActiona extends BatchAddLineAction {
private static final long serialVersionUID = 1L;
@Override
protected void setDefaultData(Object obj) {
super.setDefaultData(obj);
SendTypeVO singleDocVO = (SendTypeVO) obj;
singleDocVO.setPk_group(this.getModel().getContext().getPk_group());
singleDocVO.setPk_org(this.getModel().getContext().getPk_org());
singleDocVO.setAttributeValue("creator", this.getModel().getContext().getPk_loginUser());
singleDocVO.setAttributeValue("creationtime", AppContext.getInstance().getServerTime());
}
}
- 保存数据
在Sendtype_config.xml中可以搜索到保存事件的注册信息(搜saveaction),可以看到保存动作类是BatchSaveAction,可以正常执行保存功能,可是如果我想要保存的时候设置默认信息怎么办?例如创建人、创建时间。
答案来了,
可以在按钮配置类SendtypeAddlineAction所在包下新增一个类,名字叫SendtypeSaveLineAction,继承BatchSaveAction类,重写doAction方法↓
package nc.ui.train.bd.sendtype.action;
import java.awt.event.ActionEvent;
import nc.ui.uif2.UIState;
import nc.ui.pubapp.uif2app.actions.batch.BatchSaveAction;
import nc.vo.pubapp.AppContext;
import nc.vo.train.sendtype.SendTypeVO;
public class SendTypeSaveLineAction extends BatchSaveAction{
@Override
public void doAction(ActionEvent e) throws Exception {
//停止编辑,否则正在编辑的行可能获取不到
((nc.ui.pubapp.uif2app.view.ShowUpableBatchBillTable)getEditor()).getBillCardPanel().stopEditing();
//获取正在进行保存操作的参数VO
Object[] objs = getModel().getCurrentSaveObject().getUpdObjs();
//循环表体,对修改人和修改时间字段赋值
if (null != objs && objs.length > 0) {
for (int i = 0; i < objs.length; i++) {
SendTypeVO baseDocVO = (SendTypeVO) objs[i];
//如果元数据设置了动态属性(推荐),可以用这种方式
/*baseDocVO.setAttributeValue("modifier", this.getModel().getContext().getPk_loginUser());
baseDocVO.setAttributeValue("modifiedtime", AppContext.getInstance().getServerTime());*/
baseDocVO.setModifier(this.getModel().getContext().getPk_loginUser());
baseDocVO.setModifiedtime(AppContext.getInstance().getBusiDate());
}
}
//继续接下来的代码
super.doAction(e);
}
}
接着Sendtype_config.xml中将保存注册信息修改一下↓
<!--======= 动作:[newActions] [保存] ===========-->
<!-- <bean id="batchSaveAction" class="nc.ui.pubapp.uif2app.actions.batch.BatchSaveAction"> -->
<bean id="batchSaveAction" class="nc.ui.train.bd.sendtype.action.SendTypeSaveLineAction">
<property name="model"><ref bean="batchModel"/></property>
<property name="editor"><ref bean="batchBillTable"/></property>
<property name="validationService"><ref bean="batchBillTableValidateService" /></property>
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
这样,就能在保存的时候也设置默认信息了。
至此,单表档案就完成了。