发布时间 : 星期一 文章NC-鎬荤粨 - 鐧惧害鏂囧簱更新完毕开始阅读74f7aecfaa00b52acfc7ca45
上一封 下一封 开发
1.1关于参照
1.1.1系统参照
当要传入带条件的SQL语句时就必须修改系统的参照,如:参照“存货管理档案”,
只参照参数“产品对应的顶级存货分类”所定义的存货分类及其下属分类的存货档案。如该参数为空,则参照所有存货档案。
在UI中的setDefaultData类中添加对参照传入条件的修改,如: // 参照查询条件重写
// 获得要修改的表格项目,此处为要修改表头的产品编码
UIRefPane pane = (UIRefPane) getBillCardPanel().getHeadItem(
HpCostcardVO.PK_INVMANDOC).getComponent();
// 获得该参照的父类,以便修改getClassWherePart方法
AbstractRefGridTreeModel model = (AbstractRefGridTreeModel) pane.getRefModel();
// 获得该项目的PK值
if (SysInitBO_Client.getPkValue(this._getCorp().getPk_corp(), \) != null) {
// 通过
P值查询需要的内容K
String sPkValue = SysInitBO_Client.getPkValue(this._getCorp().getPk_corp(), \); String sWhere = model.getClassWherePart(); if (!sPkValue.equals(\)) { // 查询出大类的编码
SuperVO vo = HYPubBO_Client.queryByPrimaryKey(InvclVO.class,sPkValue);
}
}
sWhere = sWhere + \
+ vo.getAttributeValue(\).toString()+ \;
// 将新的WHERE条件传入setClassWherePart方法
model.setClassWherePart(sWhere);
1.1.2自定义参照
当系统提供的参照不能满足需求的时候就需要进行自定义参照. 自定义参照一般分为详情见自定义参照文件夹下。
2. 查询问题
2.1 查询模版中的自定义项
如果在查询模版中添加了一些自定义项,但是该单据的主表或者子表中都没有该项对应的字段时,就需要修改查询模版的查询方法.
在MyDelegator.java中修改queryByCondition()方法,涉及到多表,所以要加条
件“dr”改为“表名+dr”如下:
public SuperVO[] queryByCondition(Class voClass, String strWhere)
throws Exception {
strWhere = strWhere.replace(\, \); strWhere = strWhere + \ +ClientEnvironment.getInstance().getCorporation().getPk_corp()
+ \;SuperVO[] queryVos = nc.ui.hp.pub.ServiceFactory.getIHPPubService()
.queryCostgather(strWhere);
// return super.queryByCondition(voClass, strWhere);
return queryVos; }
如果在条件中需要加入其他的条件,比如加入本公司,需要在MyEventHandler.java中重载onBoQuery()方法
protected void onBoQuery() throws Exception { }
StringBuffer strWhere = new StringBuffer(); if (askForQueryCondition(strWhere) == false)
return;// 用户放弃了查询
// SuperVO[] queryVos = queryHeadVOs(strWhere.toString()); getBufferData().clear(); // 增加数据到Buffer // addDataToBuffer(queryVos);
strWhere.append(\ + strWhere + \
+ getUI()._getCorp().getPk_corp() + \);
doBodyQuery(strWhere.toString()); updateBuffer();
getUI().getBillCardPanel().setEnabled(true);
同时将查询模版中的所有项目都改为:表名+项目名。 如:将pk_costcard修改为hp_costcard. pk_costcard。
2.2 保存后刷新自定义项
如果添加页面上有自定义的项目,保存时不保存到数据库,那么保存完成后默认是不加载这些项的,想要加载就必须重载AbstractMyDelegator()方法
/**
* 根据条件进行数据查询(重写) 张建辉
*/
public SuperVO[] queryHeadAllData(Class headClass, String strBillType,
String strWhere) throws Exception {
BilltypeVO billVo = PfUIDataCache.getBillType(strBillType); if (billVo.getWherestring() != null }
&& billVo.getWherestring().length() != 0) {
if (strWhere != null)
strWhere = strWhere + \ + billVo.getWherestring() + \;
else
strWhere = billVo.getWherestring();
SuperVO[] vo = HYPubBO_Client.queryByCondition(headClass, strWhere); // 此处的vo对象是系统按照表查询出来的vo, 需要将此vo进行处理, // Getcostcardother是处理此vo的方法
vo = nc.ui.hp.pub.ServiceFactory.getIHPPubService()
.Getcostcardother(vo);
return vo; }
并在MyEventHandler.java中重载onBoSave()方法,在里面的最后加上下面一句话
super.onBoRefresh();
Getcostcardother(vo)代码参考CostCardDAO.java。
注:UI中不允许直接引用BS段的类,需要建立接口从而进行引用。
3. 保存问题
3.1 保存时报单据类型错误