String pk_c_b = mgscb[i].getPk_c_b(); for(int j = 0 ; j < tbs.size() ; j++){ }
((MgsClassbVO[])
MgsTeacherbVO tbvo = tbs.get(j); if(tbvo.getPk_c_b().equals(pk_c_b)){ }
lbvos.add(tbvo); tbs.remove(tbvo);
aggVOs[k].getChildren(MgsClassbVO.class))[i].setPk_t_b(lbvos.toArray(new MgsTeacherbVO[0]));
}
} }
return aggVOs;
在这里面需要先查询出主子VO,再遍历子VO找到其主键,将其加到一个StringBuffer数组当中,再这些根据条件查询出孙的VO,最后在组装一次主子孙全VO,这样只是对数据库执行查询操作3次,而且条件也比较精确,而上一种方法需要遍历整个主子aggVO,没遍历一次就执行一次查询,这样对数据库就会产生频繁的操作,影响性能(没有很大的数据量测试过,只是根据需要对数据库的相互次数得到的结论,不完全保证正确)。
选中的代码就是根据子VO再去查出孙VO,并且组合出一个完整的主子孙VO的代码。
2. 新增保存动作:
和上面一样,使用代理类,调新增,后台代码如下:
这里的新增需要用到GCInsertBPTemplate 类来进行主子孙的保存. nc.util.mmf.framework.gc.GCBillTransferTool
前台代码需要新增:
在保存按钮里面,注入主子孙管理的model,再保存方法里面再调用如图红线标注的方法
保存数据以后,界面依然是卡片界面,如果此时不做特殊处理,那么返回到列表界面的时候,当前选中的数据就是增加前选中的数据,所以我们需要在返回按钮当中做特殊的处理。重写返回按钮,强制发一个事件即可。
nc.ui.xgh_study.maingrand.action.UEReturnActionEx
同样修改,删除和新增类似这里不一一说明。
3. 第一次打开界面问题
主子孙界面第一次在打开界面时,可能孙表模板被隐藏,第二次打开才能显示,这里的解决办法是: 列表界面: 重写这个类,
nc.ui.pubapp.uif2app.components.grand.ListGrandPanelComposite
将readListCacheInfo()方法重写
卡片界面类似
如果孙表的数据不能显示,在数据初始化的时候代码如下:
4. 卡片界面保存问题 需要重写这个类
nc.ui.pubapp.uif2app.components.grand.CardGrandPanelComposite
在初始化界面的时候调用如下方法:
/**
* 重写下初始化方法 平台代码没有考虑多页签的问题 需要给每个子页签都添加上伪列 *
* @param mainBillForm
* void TODO(参数说明) */
private void constructPreColumBillItem(BillForm mainBillForm) { String[] bodyTableCodes =
mainBillForm.getBillCardPanel().getBillData() .getBodyTableCodes();
for (int i = 0; i < bodyTableCodes.length; i++) { BillModel billModel =
mainBillForm.getBillCardPanel().getBillModel( bodyTableCodes[i]);
if (billModel.getBodyColByKey(\) > 0) continue; // 添加伪列操作
BillItem[] bodyItems = billModel.getBodyItems(); BillItem newItem = new BillItem(); BillItem[] newItems = Arrays
.copyOf(bodyItems, bodyItems.length + 1); newItem.setKey(\); newItem.setShow(false);
newItem.setNull(false);
newItem.setShowOrder(bodyItems.length + 1); newItems[bodyItems.length] = newItem; billModel.setBodyItems(newItems);
mainBillForm.getBillCardPanel().getBodyPanel(bodyTableCodes[i]) .setTableModel(billModel); } }
在保存按钮的doAction方法中需要修改为如下代码,这样自己手动增加伪列,否则在保存的时候就会显示错误数据。
5. 在主子孙单据中,由于是将一个主子表和一个孙表糅合在一起,所以在操作列表界面或者是卡片界面时都是通过
nc.ui.pubapp.uif2app.components.grand.ListGrandPanelComposite 需要重写的方法:
private void tabChangeProcess() {
// 获得当前选中行
int currentRow = ((BillListView)
.getBodyTable().getSelectedRow();
.getBillListPanel().getChildListPanel().getTableCode();
this.mainPanel).getBillListPanel()
String currentbodyTabCode = ((BillListView) this.getMainPanel()) // 根据当前子页签获取孙表view
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库STUDIO生成主子孙单据开发说明(4)在线全文阅读。
相关推荐: