用友nc65 uap开发参照多选三种显示情况总结

来源:互联网 发布:python拷贝文件 编辑:程序博客网 时间:2024/05/17 03:20
用友nc65 uap开发参照多选三种显示情况总结
总结参照多选后显示在面板上的3中情况。
注意点:1参照属性面板不能存放数组类型,
2.参照字段由元数据产生,可能不能显示出来,此时需要到单据模版初始化节点将需要参照多选的字段删除重新在手动添加,然后配置参照。
3.需要对billForm  billListView这两种不同状态显示视图类进行重写。refEnum主要是获取的显示的字符,在现实的时候把预留字段中的pk值拿出来通过转化得到refEnum给pkhouse,保存时把预留字段的pk值赋给pkhouse

一:场景合同推收费清单时,先把多房产推到收费清单保存到数据库中,打开收费清单节点时显示多房产参照。
1.1  多房产推到收费清单保存到数据库代码:
思路:用String houseTemp字符把房产主键用“,”隔开放在一起,然后用substring截取后放入vo
//设置保证金对应多套房产SplitPact[] splitVos = (SplitPact[]) vo.getChildren(SplitPact.class);if (splitVos != null && splitVos.length > 0) {String houseTemp = "";String strTemp1 = "";for (int i = 0; i<splitVos.length; i++) {if(!strTemp1.equals((String)splitVos[i].getPk_house()))houseTemp = houseTemp+(String)splitVos[i].getPk_house()+","; strTemp1 = (String)splitVos[i].getPk_house();}houseTemp = houseTemp.substring(0, houseTemp.length()-1);// 房产bill.setAttributeValue("pk_allhouses", houseTemp);}
1.2:打开收费清单节点时显示多房产参照代码:针对查询模板显示时做的处理
重写nc.ui.fdc_pr.h303201525.ace.view.ShowUpableBillListView类
大概思路是:打开节点时调用此方法,先获得面板上所有的行和vo。取得我们需要的房产字段,然后通过“,”分割,放入string[]pkhous中,关键代码:
String[] resultpks = pkhous.split(",");            UIRefPane refPene =(UIRefPane) getBillListPanel().getHeadItem("pk_allhouses").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pkhous, refPene.getRefShowName());            getBillListPanel().getHeadBillModel().setValueAt(refEnum, i, "pk_allhouses");
类详细代码如下:

package nc.ui.fdc_pr.h303201525.ace.view;import java.util.List;import nc.ui.pub.beans.UIRefPane;import nc.ui.pub.beans.constenum.DefaultConstEnum;import nc.ui.pub.bill.BillListData;import nc.ui.pub.bill.BillListPanel;import nc.ui.pubapp.uif2app.view.ShowUpableBillListView;import nc.ui.uif2.AppEvent;import nc.ui.uif2.model.BillManageModel;import nc.vo.fdc_pr.h303201525.AggBill;import nc.vo.fdc_pr.h303201525.Bill;import nc.vo.pub.CircularlyAccessibleValueObject;public class BillNewListView extends ShowUpableBillListView{/** *  */private static final long serialVersionUID = 1L;@Overridepublic void initUI() {super.initUI();flag = false;}@Overridepublic void handleEvent(AppEvent event) {super.handleEvent(event);showMultHoseOrCust(event);}boolean flag = false;public void showMultHoseOrCust(AppEvent event) {//刷新的时候也要执行,就没有用了//if(flag){//return;//}List dlist = getModel().getData();if(dlist==null||dlist.size()==0)return;int rows=getBillListPanel().getHeadTable().getRowCount();for (int i = 0; i < rows; i++){CircularlyAccessibleValueObject hvo = getBillListPanel().getHeadBillModel().getBodyValueRowVO(i, Bill.class.getName());String pk_head=hvo.getAttributeValue("pk_head")+"";if(pk_head==null||pk_head.trim().length()<5)continue;String pkhous="";String build="";for(int h=0;h<dlist.size();h++){Object billvo = dlist.get(h);if(billvo==null){continue;}if(billvo instanceof AggBill){AggBill aggvo = (AggBill)billvo;String pkhead = aggvo.getParentVO().getPrimaryKey();if(pk_head.trim().equals(pkhead.trim())){pkhous = aggvo.getParentVO().getPk_allhouses();build = aggvo.getParentVO().getBuild();break;}}}if(pkhous==null||pkhous.trim().length()<5)continue;String[] resultpks = pkhous.split(",");            UIRefPane refPene =(UIRefPane) getBillListPanel().getHeadItem("pk_allhouses").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pkhous, refPene.getRefShowName());            getBillListPanel().getHeadBillModel().setValueAt(refEnum, i, "pk_allhouses");}flag = true;}}
二:合同中的租金标准页签,点击房产参照,多选房产(如何是房产多选已经介绍过)后显示在面板上。
1.1多选后通过编辑后事件处理显示,思路:String[] pkhous 获得选中的参照pk,由于此时是数组,需要用“,”转非数组显示,此时的refEnum显示的是房产名称而非pk值,不利用保存数据库。所以需要用reserve2保存pk值,并在getvalue时做处理。

else if ("pk_house".equals(key)) {UIRefPane refPanel= (UIRefPane) e.getBillCardPanel().getBodyItem(key).getComponent();String[] pkhous = refPanel.getRefPKs();StringBuffer result = new StringBuffer();if (pkhous!=null) {for (String pk : pkhous){result.append(pk + ",");}}//多房产显示问题   DefaultConstEnum refEnum = new DefaultConstEnum(result.toString().substring(0, result.toString().length()-1), refPanel.getRefShowName());e.getBillCardPanel().setBodyValueAt(refEnum, e.getRow(), "pk_house", "id_standardpact");e.getBillCardPanel().setBodyValueAt(result.toString().substring(0, result.toString().length()-1), e.getRow(), "reserve2", "id_standardpact");}
2.2因为pk_house为字符名称,保存到数据库肯定不合理,此时我们需要重写nc.ui.pubapp.uif2app.view.ShowUpableBillForm 类中的setValue和getValue方法
当放入面板值时调用setValue方法把vo类中的值进行处理转换,使得显示正确名称
当从界面取值时调用getValue方法把reserve2的值赋给pk_house
/** * 值放入到面板上 */@Overridepublic void setValue(Object object) {super.setValue(object);String date=getBillCardPanel().getHeadItem("dpactstart").getValue();String brenewal=getBillCardPanel().getHeadItem("brenewal").getValue();if (date!=null && brenewal!=null && brenewal.equals("true")) {getBillCardPanel().getHeadItem("dpactstart").setEdit(false);}//在设置值的时候进行转化,主要是租金标准int rowcount=getBillCardPanel().getBillModel("id_standardpact").getRowCount();for(int i=0;i<rowcount;i++){String pks =(String) getBillCardPanel().getBillModel("id_standardpact").getValueAt(i, "reserve2");String[] resultpks = null;if (pks!=null) {resultpks = pks.split(",");}            UIRefPane refPene =(UIRefPane) getBillCardPanel().getBodyItem("id_standardpact", "pk_house").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pks, refPene.getRefShowName());            getBillCardPanel().getBillModel("id_standardpact").setValueAt(refEnum, i, "pk_house");}}/** * 从界面上取值 */@Overridepublic Object getValue() {Object getPanlVO = super.getValue();if(getPanlVO instanceof AggRentPact){//将房产主键放置到pk_house里面;AggRentPact pact =(AggRentPact)getPanlVO; ISuperVO[] bodyvos = pact.getChildren(new StandardPact().getMetaData());ISuperVO[] splitPact = pact.getChildren(new SplitPact().getMetaData());if(bodyvos!=null&&bodyvos.length>0){for(ISuperVO vo : bodyvos){if(vo instanceof StandardPact){StandardPact spactvo = (StandardPact)vo;spactvo.setPk_house(spactvo.getReserve2());}}}if (splitPact!=null && splitPact.length>0) {for (ISuperVO s : splitPact) {SplitPact vo=(SplitPact) s;vo.setPk_house(vo.getReserve1());}}}return getPanlVO;}
3.业务拆分时,拆分的数据已经在aggvo里了,此时我们需要处理显示:
//业务拆分页签多房产显示处理int rowcount2=busiModel.getRowCount();for(int i=0;i<rowcount2;i++){String pks =(String)busiModel.getValueAt(i, "pk_house");String[] resultpks = null;if (pks!=null) {resultpks = pks.split(",");}            UIRefPane refPene =(UIRefPane) p.getBodyItem("id_splitpact", "pk_house").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pks, refPene.getRefShowName());            p.getBillModel("id_splitpact").setValueAt(pks, i, "reserve1");            p.getBillModel("id_splitpact").setValueAt(refEnum, i, "pk_house");}
重写nc.ui.pubapp.uif2app.view.ShowUpableBillForm 类  针对提交,审批,取消审批等操作时做的处理
package nc.ui.fdc_pr.h303113510.ace.view;import nc.ui.pub.beans.UIRefPane;import nc.vo.fdc_pr.h303113510.AggRentPact;import nc.vo.fdc_pr.h303113510.SplitPact;import nc.vo.fdc_pr.h303113510.StandardPact;import nc.ui.pub.beans.constenum.DefaultConstEnum;import nc.vo.pub.ISuperVO;/** *  * @author: zenglong * @ClassName: MyShowUpableBillForm  * @Description:合同续约时开始日期不可编辑以及多房产显示问题处理 * @date: 2016年12月21日 */public class MyShowUpableBillForm extendsnc.ui.pubapp.uif2app.view.ShowUpableBillForm {private static final long serialVersionUID = 8111660983732584919L;@Overridepublic void initUI() {super.initUI();UIRefPane refPene = (UIRefPane) getBillCardPanel().getBodyItem("id_standardpact","pk_house").getComponent();        refPene.setMultiSelectedEnabled(true);}/** * 值放入到面板上 */@Overridepublic void setValue(Object object) {super.setValue(object);String date=getBillCardPanel().getHeadItem("dpactstart").getValue();String brenewal=getBillCardPanel().getHeadItem("brenewal").getValue();if (date!=null && brenewal!=null && brenewal.equals("true")) {getBillCardPanel().getHeadItem("dpactstart").setEdit(false);}//BillItem[] bodyItems =getBillCardPanel().getBillModel("id_standardpact").getBodyItems();//for (BillItem item : bodyItems) {//item.setEnabled(false);//}//getBillCardPanel().getBillModel("id_standardpact").setEnabledAllItems(false);//getBillCardPanel().getBillTable("id_standardpact").get//在设置值的时候进行转化,主要是租金标准int rowcount=getBillCardPanel().getBillModel("id_standardpact").getRowCount();for(int i=0;i<rowcount;i++){String pks =(String) getBillCardPanel().getBillModel("id_standardpact").getValueAt(i, "reserve2");String[] resultpks = null;if (pks!=null) {resultpks = pks.split(",");}            UIRefPane refPene =(UIRefPane) getBillCardPanel().getBodyItem("id_standardpact", "pk_house").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pks, refPene.getRefShowName());            getBillCardPanel().getBillModel("id_standardpact").setValueAt(refEnum, i, "pk_house");}//业务拆分多房产处理int rowcount2=getBillCardPanel().getBillModel("id_splitpact").getRowCount();for(int i=0;i<rowcount2;i++){String pks =(String)getBillCardPanel().getBillModel("id_splitpact").getValueAt(i, "pk_house");String[] resultpks = null;if (pks!=null) {resultpks = pks.split(",");}            UIRefPane refPene =(UIRefPane) getBillCardPanel().getBodyItem("id_splitpact", "pk_house").getComponent();            refPene.setPKs(resultpks);            DefaultConstEnum refEnum = new DefaultConstEnum(pks, refPene.getRefShowName());            getBillCardPanel().getBillModel("id_splitpact").setValueAt(refEnum, i, "reserve1");            getBillCardPanel().getBillModel("id_splitpact").setValueAt(pks, i, "pk_house");}}/** * 从界面上取值 */@Overridepublic Object getValue() {Object getPanlVO = super.getValue();if(getPanlVO instanceof AggRentPact){//将房产主键放置到pk_house里面;AggRentPact pact =(AggRentPact)getPanlVO; ISuperVO[] bodyvos = pact.getChildren(new StandardPact().getMetaData());ISuperVO[] splitPact = pact.getChildren(new SplitPact().getMetaData());if(bodyvos!=null&&bodyvos.length>0){for(ISuperVO vo : bodyvos){if(vo instanceof StandardPact){StandardPact spactvo = (StandardPact)vo;spactvo.setPk_house(spactvo.getReserve2());}}}if (splitPact!=null && splitPact.length>0) {for (ISuperVO s : splitPact) {SplitPact vo=(SplitPact) s;vo.setPk_house(vo.getReserve1());}}}return getPanlVO;}}

由于时间和能力有限,表达和技术不到位的地方尽情谅解。





0 0
原创粉丝点击