首页 NC技术开发总结

NC技术开发总结

举报
开通vip

NC技术开发总结NC技术开发总结 一(得到选中的表体行数,列数等内容(总行数和当前选中的行数) ...................................... 2 二(设置初始化界面时的默认值 ................................................................................................... 3 三(表单默认执行方法以及常用的操作 .............................................

NC技术开发总结
NC技术开发总结 一(得到选中的表体行数,列数等 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 (总行数和当前选中的行数) ...................................... 2 二(设置初始化界面时的默认值 ................................................................................................... 3 三(表单默认执行方法以及常用的操作 ....................................................................................... 3 四(在报表中显示合计行 ............................................................................................................... 4 五(在UI类中设置小数位数......................................................................................................... 5 六(将表体数据清空 ....................................................................................................................... 5 七(设置字段是否可编辑的状态 ................................................................................................... 5 八(在UI类中编写方法打印查询条件 ......................................................................................... 6 九(弹出提示框 ............................................................................................................................... 6 十(在报表中得到查询面板的值 ................................................................................................... 6 十一.比较时间的开始与结束时间 .................................................................................................. 7 十二.设置编辑公式 .......................................................................................................................... 7 十三.清空缓冲数数据getBufferData().clear(); ..................................................................... 7 十四. 在UI类中设置查询对话框的默认值 .................................................................................. 7 十五. 管理型界面单据各个类的继承关系 .................................................................................... 8 十六.是否显示行号,合计行,数组按钮,隐藏列 ...................................................................... 8 十七. 根据单据的不同状态来控制按钮的可用性。 .................................................................... 9 十八. UI工厂开发单据模式下如何自定义按钮, ...................................................................... 10 十九.需要设置动作脚本的六个按钮 ............................................................................................ 11 二十. 单据界面设置某些字段的显示与隐藏 .............................................................................. 11 二十一. 单据开发的一般步骤: .................................................................................................. 11 二十二. 界面数据访问 .................................................................................................................. 12 二十三.导出与导入数据库 ............................................................................................................ 12 二十四.list map set的操作 ............................................................................................................ 12 二十五. 改变焦点自动显示表头金额的值 .................................................................................. 13 二十六.设置行选中的状态 ............................................................................................................ 13 二十七,初始进入时默认显示卡片界面或列表界面 ................................................................. 14 二十八,在MyEventHandler类中,在onBoSave()中验证必输项 .............................................. 14 二十九.多页签得到某一页签到的行数 ........................................................................................ 15 三十,判断日期的前后 ................................................................................................................. 15 三十一.验证表头的必输项不能为空 ............................................................................................ 16 三十二,执行表体编辑公式 ......................................................................................................... 16 三十三,ECLIPSE中代码不显示行号 ........................................................................................ 17 三十四,在ECLIPSE中添加反编译 ........................................................................................... 17 三十五,编辑后事件的处理 ......................................................................................................... 17 三十六,编辑前事件的处理 ............................................................................................................ 17 三十七。编辑事件设某一个字段不能编辑 ................................................................................. 18 三十八.在保存的时候,验证表体不能为空/ .................................................................................. 18 三十九.删除表体某一行触发的事件 ............................................................................................ 18 四十,UI类中初始化设置 ........................................................................................................... 18 四十一,YES OR NO 对话框 ...................................................................................................... 19 四十二.得到选中的行数与得到选中行数的行号的数组,数组以0开头 ................................ 19 四十三.对VO的操作,聚合VO,得到表体,表体某一个页签的VO ................................... 19 四十四.添加一个自定义的按钮 .................................................................................................... 20 四十五.取得某一个页签下的记录的行数 .................................................................................... 21 四十六. 修改的时候,清空批号想要保存到数据库必须设置行的状态 .................................. 21 四十七.执行表头的公式 ................................................................................................................ 21 四十八.根据不同的条件,过滤不同的参照记录 ........................................................................ 21 四十九,获取表体当前操作页签 ................................................................................................. 22 五十,输入开始和结束日期,从开始到结束日期每天都列出来 ............................................. 22 五十一,在列表状态下,根据单据的状态,确定按钮是否可用 ............................................. 23 五十二,不管在是列表还是卡片面下取得表头或表体的值 ..................................................... 23 五十三,UFDouble型的数据变成两位小数的字符型,或零位小数 .......................................... 24 五十四,系统按钮的操作 ................................................................................................................ 24 五十五,SQL查询时将字符转换成小数型 ................................................................................ 24 五十六,删除单页签表体删除行,以及增行 ............................................................................. 24 五十七,多页签表体删除行,增行 ............................................................................................. 25 五十八,得到月份,年份 ............................................................................................................. 25 五十九,如何得到多页签到指定的子VO .................................................................................. 25 六十:删除表体行............................................................................................................................ 25 六十一.传过一个主键的数组,如何组装成‘主键’,‘主键’的形式 ................................ 25 六十二.导出TXT文本 .................................................................................................................. 26 六十三,删除表体的记录行 ......................................................................................................... 29 六十四.确定某一列在模板上位置 ................................................................................................ 29 六十五.单据添加复选,判断选中的记录行 ................................................................................ 29 六十六,判断按钮的状态是否可用 ................................................................................................ 30 一(得到选中的表体行数,列数等内容(总行数和当前选中的行数) //得到选中的列数 selCol=getBillCardPanelWrapper().getBillCardPanel().getBillTable().ge tSelectedColumn(); //得到当前选中列的索引 colIndex=getBillCardPanel().getBillTable().convertColumnIndexToModel( selCol); //得到选中的行号从0开始 iSelRow= getBillCardPanel().getBillTable().getSelectedRow(); /得到当前选中的行 i = getReportBase().getBillTable().getSelectedRow(); //得到表体一共有多少行/ this.getBillCardPanel().getRowCount(); //判断是否选中行 if(getSetInBalPriceUI().getBillCardPanel().getBillTable().getSelected Row() == -1) { getSetInBalPriceUI().showErrorMessage("请选择表体数据行~"); return; } //判断选中的某一行的某一列是否为空 if (getSetInBalPriceUI().getBillCardPanel().getBodyValueAt(selectRow, "sys_shipper_id") == null) { getSetInBalPriceUI().showErrorMessage("请录入发货单位~"); //得到某一行某一列指定的值 sys_shipper_id= getSetInBalPriceUI().getBillCardPanel().getBodyValueAt(selectRow, "sys_shipper_id").toString(); //得到当前选中行的指定的某一列 (String)getReportBase().getBodyValueAt(i,"sendunitID"); this.getBillCardPanel().setBodyValueAt(值,行,列); this.getBillCardWrapper().getBillCardPanel(); //获取表体第i行字段值 getBillCardPanel().getBodyValueAt(i."字段") 二(设置初始化界面时的默认值 /** * 初始化卡片界面时加载的默认属性在UI中 */ public void setDefaultData() throws Exception { //单据类型 87 getBillCardPanel().setHeadItem("pk_billtype", IBillType.CY_DYAPPLYPLAN); //制单日期默认值 getBillCardPanel().setTailItem("doperatordate", _getDate()); } 三(表单默认执行方法以及常用的操作 //自定义按钮处理事件,在自定义按钮的时候会定义一个值,根据传过来的值判断处理哪个事件执行哪个方法,在MyEventHandler类 protected void onBoElse(int intBtn) throws Exception {} * 表单编辑 protected void onBoEdit() throws Exception {} *表单删除 protected void onBoDelete() throws Exception {} * 表单保存 protected void onBoSave() throws Exception {} * 表单取消 protected void onBoCancel() throws Exception {} * 表单编辑后事件UI类中 public void afterEdit(BillEditEvent evt) { super.afterEdit(evt); String colStr = evt.getKey(); int rowCount = evt.getRow(); } * 表单编辑前事件UI类中 public boolean beforeEdit(BillEditEvent evt) { String colStr = evt.getKey(); If(colStr.equals(“字段名”)){return false;}//设置某一个字段不可编辑 // TODO 自动生成方法存根 return super.beforeEdit(arg0); } * 表单标签改变事件UI public void afterTabChanged(BillTabbedPaneTabChangeEvent arg0) { String TabName = arg0.getBtvo().getTabcode(); System.out.println(TabName); if (TabName.equals("fk_cm_contract1") || TabName.equals("fk_cm_contract2")) { //设置标签fk_cm_consub可编辑 this.getBillCardPanel().getBillModel("fk_cm_consub").setEnabled(true); //设置当选中fk_cm_contract1这个标签时,子表的第一个标签到选中显示 this.getBillCardPanel().getBodyTabbedPane().getModel().setSelectedIndex(0); //设置标签fk_cm_consub不可编辑 this.getBillCardPanel().getBillModel("fk_cm_conisub").setEnabled(false); } * UI类中行改变事件 public void bodyRowChange(BillEditEvent ev) { // TODO 自动生成方法存根 super.bodyRowChange(ev); int a = ev.getRow();//得到当前选中的行 int a = this.getBillCardPanel().getBillTable().getSelectedRow(); String b = this.getBillCardPanel().getBodyValueAt(行号, "字段值"); } 四(在报表中显示合计行 protected void onQuery() throws Exception { String pk_corp = this.getCorpPrimaryKey(); //设置表头面板显示表头查询条件和打印时表头显示信息 createConditionAndHeadPrintInfo(); //显示查询结果 CircularlyAccessibleValueObject[]results= getQueryResult(port); ReportBaseVO tvo = new ReportBaseVO(); tvo.setAttributeValue("port","合计"); //添加合计 if(results != null && results.length>0){ CircularlyAccessibleValueObject[]nvos=new CircularlyAccessibleValueObject[results.length+1]; UFDouble totalnum = new UFDouble(0); for(int i=0;i 0){ getSetInBalPriceUI().showErrorMessage("【起始日期】不能超过【结束日期】~"); return; } 十二.设置编辑公式 // 表体显示公式 String[]bodyForm=newString[] {"sys_shipper_id->getColValue(zk_sys_organ,sys_organ_id,sys_organ_id,sys_shipper_id )" }; for (int i = 0; i < assayInfo.length; i++) { super.onBoLineAdd();//增行 //为表体某一行赋值 getSetInBalPriceUI().getBillCardPanel().setBodyValueAt((String)assayInfo[i].getAttr ibuteValue("laiyangdanwei"), i, "sys_shipper_id"); //执行表体公式 getSetInBalPriceUI().getBillCardPanel().getBillModel().execFormulas(i, bodyForm);// } 十三.清空缓冲数数据getBufferData().clear(); 十四. 在UI类中设置查询对话框的默认值 格式:2009-01 protected QueryDLG createQueryDLG() { ZBReportBaseDLG dlg = new ZBReportBaseDLG(); dlg.setTempletID(getUIControl()._getPk_corp(), getUIControl() ._getModuleCode(), getUIControl()._getOperator(), null); dlg.setValueRef("sdate", getQueryYearMonth()); dlg.setValueRef("edate", getQueryYearMonth()); // 设置默认的选择当前年 QueryConditionVO[] qryvos = dlg.getConditionDatas(); for (int i = 0; i < qryvos.length; i++) { if (qryvos[i].getFieldCode().equals("sdate")) { qryvos[i].setValue(this.getClientEnvironment().getDate().toString().substring( 0,7));} if (qryvos[i].getFieldCode().equals("edate")) { qryvos[i].setValue(this.getClientEnvironment().getDate().toString().substring( 0,7));}} return dlg; } 十五. 管理型界面单据各个类的继承关系 前台界面类:ClientUI extends BIllManageUI 1. 重写父类方法protected BusinessDelegator createBusinessDelegator() 返回前台界面业务委托类的具体实现。 2. 重写父类方法protected ManageEventHandler createEventHandler() 返回前台事件处理(按钮处理器)类的具体实现。 3. 重写父类方法protected AbstractManageController createController() 返回前台控制类的具体实现。 4. 重写父类方法protected void initPrivateButton() 添加私有按钮 addPrivateButton((new DeleteAllbutnVO()).getButtonVO()) 5. 重写父类方法protected void initSelfData() 6. 重写父类方法public void setDefaultData() throws Exception 设置默认数据 事件处理类:TestEventHandler extends ManageEventHandler 重写父类各种单据按钮事件,完成具体的事件动作实现。如: 1. 重写查询类 protected void onBoQuery() throws Exception { super.onBoQuery(); } 2. 重写其他按钮动作事件处理,比如(导入等) protected void onBoElse(int intBtn) throws Exception { super.onBoQuery(); } 十六.是否显示行号,合计行,数组按钮,隐藏列 1. 列表状态下是否显示行号 public boolean isShowListRowNo() { return false; } 2. 卡片状态下是否显示行号 public boolean isShowCardRowNo() { return false; } 3. 卡片状态下是否显示合计 public boolean isShowCardTotal() { return false; } 4. 列表状态下是否显示合计 public boolean isShowListTotal() { return false; } 5. 返回卡片状态下按钮数组 public int[] getCardButtonAry() { , IBillButton., return new int[] { IBillButton.AddQuery IBillButton., IBillButton., IBillButton., SaveEditDel IBillButton.Line, IBillButton.Cancel, IBillButton.Print, IBillButton.Return, }; } 6. 返回列表状态下按钮数组 public int[] getListButtonAry() { return new int[] { IBillButton.Add, IBillButton.Query, IBillButton.Save, IBillButton.Edit, IBillButton.Del, IBillButton.Card, IBillButton.Cancel, IBillButton.Print, ISHTestButton.DeleteAllButton, }; } 7. 返回卡片状态表体隐藏列 public String[] getCardBodyHideCol() { return null; } 8. 返回列表状态表头隐藏列 public String[] getListHeadHideCol() { return null; } 十七. 根据单据的不同状态来控制按钮的可用性。 在UI工厂中,系统预置的按钮事件是在onButtonClicked()方法中处理,自定义的按钮在onBoElse()方法中处理。 protected void onBoElse(int intBtn){ switch(intBtn){ case ITestButton.DeleteAll:{ onDeleteAll(); break; } } 十八. UI工厂开发单据模式下如何自定义按钮, 1. 建立一个自定义按钮的接口:ITestButton 定义按钮的ID值,自定义按钮的ID必须大于100 public interface ITestButton{ int DeleteAll = 101; } 2. 创建一个按钮的VO类 public class DeleteAllVO{ public nc.vo.trade.button.ButtonVO getButtonVO(){ ButtonVO btnVo = new ButtonVO(); btnVo.setBtnNo(ITestButton.DeleteAll); btnVo.setBtnName("删除全部"); btnVo.setHintStr("删除本单据全部数据"); btnVo.setOperateStatus(new int[] {IBillOperate.OP_ADD}); btnVo.setBusinessStatus(new int[] {IBillStatus.FREE}); return btnVo; } 3. 在控制类中将自定义按钮添加到界面上 public int[] getCardButtonAry(){ return new int[]{ IBillButton.ADD, ITestButton.DeleteAll }; } 4. 在UI类里面实例化自定义按钮并实例化 protected void initPrivateButton(){ ButtonVO deleteAll = (new DeleteAllVO).getButtonVO(); addPrivateButton(deleteAll); } 5. 在控制类中响应按钮事件并实现自定义按钮的事件处理 protected void onBoElse(int intBtn){ switch(intBtn){ case ITestButton.DeleteAll:{ onDeleteAll(); break; } } protected void onDeleteAll(){ //具体实现 } 十九.需要设置动作脚本的六个按钮 动作脚本 保存(WRITE)修改(EDIT)作废(DELETE)提交(SAVE)审批(APPROVE)弃审(UNAPPROVE) 二十. 单据界面设置某些字段的显示与隐藏 (1)在单据模板上可以设置每一个字段的显示与隐藏 (2)在单据UI类的initSelfData()方法中设置 protected void initSelfData() { //设置字段的不可编辑和隐藏 getBillListPanel().hideBodyTableCol("字段"); getBillCardPanel().getBodyItem("字段").setEdit(false); 二十一. 单据开发的一般步骤: 1. 数据建模,生成数据库表 2. 利用平台工具或手工生成VO 3. 平台注册 系统类型注册(可选) 功能注册 单据类型 VO对照注册 单据动作注册 单据动作组注册 单据动作执行脚本(注册完将生成的代码拷贝到开发环境) 4. 导入数据字典 5. 生成单据模板、查询模板 6. 模板注册(功能节点默认模板设置) 7. 建立界面类、控制类、事件处理类等代码框架进行开发 定制界面控制类 1) 创建控制类,实现ICardController接口 2) 重载getBillType(),返回单据类型。 3) 重载getBillVoName()方法,关联VO类,控制单据数据的获取。 4) 重载getBusinessActionType()方法,设置单据是否走流程平台。 public int getBusinessActionType() { return IBusinessActionType.BD; } //IBusinessActionType为接口常量,BD表示单据不走流程平台。 二十二. 界面数据访问 一、卡片界面 1. 表头数据 得到表头item值:getBillCaedPanel().getHeadItem("pk_corp").getValue(); 2. 表体数据 得到列表行数:int rowCornt = getBillCardPanel().getBillModel().getRowCount(); 得到选中的行:int curRow = getBillCardPanel().getBillTable().getSelectedRow(); 得到表体某行某列值:getBillCardPanel().getBodyValueAt(curRow,"colName"); 二、列表界面 1. 表头数据 得到行数:getBillListPanel().getHeadBillModel().getRowCount(); 取得数据: getBillListPanel().getHeadBillModel().getValueAt(row,"colName"); 2. 表体数据 取得数据:getBillListPanel().getBodyBillModel().getValueAt(row,"colName"); 二十三.导出与导入数据库 导出数据库 Exp 用户名/密码@QID_ 数据库IP地址 file=c:\文件名.dmp full =y (ower= 用户名) 导入数据库 Imp用户名/密码@QID_ 数据库IP地址 fromuser=用户名 touser=用户file==c:\文件名.dmp 二十四.list map set的操作 //遍历list Iterator it = list型变量.iterator(); While(it.hasNext()){ Map map = it.next() } List list = new ArrayList(); i.add(“add”); for(Iterator it = i.iterator();it.hasNext();){ String str = (String) it.next();} //Set里面没有重复值,无序 //List按索引,Map按键值对 Set set = new HashSet(); Set.add(“java”); //Map中 If(map!=null && !map.isEmpty()){ Set keys = map.keySet(); For(Iterator it = key.iterator;it.hasNext();){ String key = (String) it.next();//这样就取出了KEY的值 }} 或 For(iterator it = map.entrySet().iterator();it.hasnext();){ Map.Entry entry = (Map.Entry)it.next(); ;//这是KEY的值 Object key = entry.getkey() Object value = entry.getValue();//这是VALUE的值} 二十五. 改变焦点自动显示表头金额的值 /** * 改变焦点自动显示表头金额的值 */ public void afterEdit(BillEditEvent a) { super.afterEdit(a); String str = a.getKey().trim(); UFDouble dprice = new UFDouble(0); String subjectcode1 = "";//一级科目编码 //编辑表体"金额"后,自动计算表头的“金额” if (str.equals("dprice")) { int rowCount = this.getBillCardPanel().getRowCount();// 获取总行数 for (int i = 0; i < rowCount; i++){ subjectcode1 = this.getBillCardPanel().getBodyValueAt(i, "subjectcode1").toString().trim(); if(subjectcode1.equals("1122"))dprice = dprice.add(new UFDouble(this.getBillCardPanel().getBodyValueAt(i, "dprice").toString())); } } this.getBillCardPanel().setHeadItem("dprice",dprice); } } 二十六.设置行选中的状态 public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == true) {return; } //将所有行状态置为未选中 int iCount = getBillListPanel().getHeadTable().getRowCount(); for (int i = 0; i < iCount; i++) {getBillListPanel().getHeadBillModel().setRowState(i,BillModel.NORMAL); } //得到被选中的行 int[] iaSelectedRow = getBillListPanel().getHeadTable().getSelectedRows(); if (iaSelectedRow != null) {iCount = iaSelectedRow.length; //选中的行表示为打,号 for (int i = 0; i < iCount; i++) {getBillListPanel().getHeadBillModel().setRowState(iaSelectedRow[i], BillModel.SELECTED);}} if (getBillListPanel().getHeadTable().getSelectedRowCount() == 0) { getBufferData().setCurrentRow(-1); return; } if (getBillListPanel().getHeadTable().getSelectedRowCount() > 1) { getBufferData().setCurrentRow(iaSelectedRow[0]);//显示第一行表体数据 } else { //显示当前选中行的表体数据; int row = getBillListPanel().getHeadTable().getSelectedRow(); int[] indexs = getBillListPanel().getHeadBillModel().getSortIndex(); if (indexs != null) { row = indexs[getBillListPanel().getHeadTable().getSelectedRow()]; } getBufferData().setCurrentRow(row); }} 二十七,初始进入时默认显示卡片界面或列表界面 // 初始化自己UI单据模版数据 protected void initSelfData() { setCurrentPanel("CARDPANEL");// 初始进入时默认显示卡片界面 setMonUIComboBox(this.getBillCardPanel(),"cdodepartment_id");// 初始化"制单部门"下拉菜单 setCurrentPanel("LISTPANEL");//查询后显示列表界面 } 二十八,在MyEventHandler类中,在onBoSave()中验证必输项 if (checkIsNull_Body()) { return; } private boolean checkIsNull_Body() { // 获取表体行数 // int rowCount = // getContractMonthMngUI().getBillCardPanel().getRowCount(); // 获取表体行数 int rowCount = getContractMonthMngUI().getBillCardPanel().getBillModel( "fk_cm_mconsub").getRowCount(); if (rowCount <= 0) { getContractMonthMngUI().showErrorMessage("表体无数据"); return true; } BillModel bm = getContractMonthMngUI().getBillCardPanel().getBillModel( "fk_cm_mconsub"); for (int i = 0; i < rowCount; i++) { if (bm.getValueAt(i, "csclient_id") == null) { getContractMonthMngUI().showErrorMessage( "小合同子表表体第" + (i + 1) + "行,收货单位不能为空"); return true; }} return false; } 二十九.多页签得到某一页签到的行数 // 获取表体行数 int rowCount = getContractMonthMngUI().getBillCardPanel().getBillModel( "fk_cm_mconsub").getRowCount(); 三十,判断日期的前后 private boolean checkDate() { // TODO 自动生成方法存根 UFDate begindate = new UFDate(getContractMonthMngUI() .getBillCardPanel().getHeadItem("cdatebegin").getValue()); UFDate enddate = new UFDate(getContractMonthMngUI().getBillCardPanel() .getHeadItem("cdateend").getValue()); if (begindate.after(enddate)) { getContractMonthMngUI().showErrorMessage("有效期(截止期)必须大于有效期(起始期)"); return true; } if (begindate.getYear() != enddate.getYear()) { getContractMonthMngUI().showErrorMessage("起始有效期与截至有效期不能跨年份"); return true; } return false; } 三十一.验证表头的必输项不能为空 首先写一个方法: // 获取表头数据 public String getHeadInfo(String info) { return getContractMonthMngUI().getBillCardPanel().getHeadItem(info) .getValue(); } //在onbosave()方法中调用方法 if (checkIsNull_Head()) { return; } private boolean checkIsNull_Head() { if (getHeadInfo("vcompanycode") == null) { getContractMonthMngUI().showErrorMessage("出卖人不能为空"); return true; } else if (getHeadInfo("csigndate").trim().length() == 0) { getContractMonthMngUI().showErrorMessage("签订时间不能为空"); return true; } return false;} 三十二,执行表体编辑公式 在UI类的public void afterEdit(BillEditEvent a) { super.afterEdit(a); String str = a.getKey().trim(); if(str.equals("chexing"))//点击车型 { String[] bodyform={"ccartype_id->getColValue(fk_ba_cartype,ccartype_id ,ccartype_id, ccartype_id);", "chexing->getColValue(fk_ba_cartype,vtype ,ccartype_id, ccartype_id);", "dstanweight->getColValue(fk_ba_cartype,dmark_load ,ccartype_id, ccartype_id);"}; for(int i= 1 ;i < this.getBillCardPanel().getRowCount();i++){ //执行表体编辑公式 this.getBillCardPanel().execBodyFormulas( i, bodyform); } } MyEventHandler中自定义按钮的方法中写 也可以在 三十三,ECLIPSE中代码不显示行号 window => preferences => general => editors => text editors => 右边show line numbers 打上勾确定即可 三十四,在ECLIPSE中添加反编译 添加反编译 Window => Preferences => java => JadClipse => 右边path to decompiler: (路径为:elcipse工具所在文件夹下的jad\jad.exe) 例如 D:\btv\tools\eclipse\jad\jad.exe (eclipse工具在)D:\btv\tools文件夹下 三十五,编辑后事件的处理 public void afterEdit(BillEditEvent evt) { super.afterEdit(evt); String colStr = evt.getKey(); int rowCount = evt.getRow();} 三十六,编辑前事件的处理 public boolean beforeEdit(BillEditEvent et) { String head = this.getBillCardPanel().getHeadItem("conveytype").getValue();//运输方式 if(ITargetPrimaryID.SEA_CONVEY.equals(head) && et.getKey().equals("ldgnum")){ return false; } if(ITargetPrimaryID.SEA_CONVEY.equals(head) && et.getKey().equals("checknum")){ return false; } if(ITargetPrimaryID.SEA_CONVEY.equals(head) && et.getKey().equals("footnum")){ return false; } return true; } 三十七。编辑事件设某一个字段不能编辑 public void onBoEdit() throws Exception{ super.onBoEdit(); getMonApplyPlanMngUI().getBillCardPanel().getHeadItem("vapplymonth").setEnabled(false); getMonApplyPlanMngUI().getBillCardPanel().initPanelByPos(0); } 三十八.在保存的时候,验证表体不能为空/ public void onBoSave() throws Exception { if(getMonApplyPlanMngUI().getBillCardPanel().getHeadItem("vapplymonth").getValue()==null||getMonApplyPlanMngUI().getBillCardPanel().getHea dItem("vapplymonth").getValue().equals("")){ getMonApplyPlanMngUI().showWarningMessage("表头[请车月份]不能为空~"); return; } // 保存时更新最后修改人 getMonApplyPlanMngUI().getBillCardPanel().setTailItem("vrevisorid",_getOperator()); // 保存时更新最后修改时间 getMonApplyPlanMngUI().getBillCardPanel().setTailItem("drevisedate",_getDate()); super.onBoSave(); } 三十九.删除表体某一行触发的事件 protected void onBoLineDel() throws Exception {} 四十,UI类中初始化设置 /** * 初始化设置 */ protected void init() { //设置是否显示小数列的千分位 getReportBase().setShowThMark(true); //设置是否显示合计列 getReportBase().setTatolRowShow(false); //设置不显示零 getReportBase().getBodyPanel().getRendererVO().setShowZeroLikeNull(true); //设置是否显示行号 getReportBase().setRowNOShow(true); //设置是否隐藏条件面板 getConditionPanel().setVisible(true); } 四十一,YES OR NO 对话框 int ok = getGatheringMngUI().showYesNoCancelMessage("是否确认余额查询操作,");// 是:4// 否:8// 取消:2 if (ok == 4) { IGatheringMng item = (IGatheringMng) NCLocator.getInstance() .lookup(IGatheringMng.class.getName()); if(getBillManageUI().isListPanelSelected()) getBillManageUI().setCurrentPanel("CARDPANEL"); getBufferData().updateView(); 四十二.得到选中的行数与得到选中行数的行号的数组,数组以0开头 int[] iaSelectedRow = getBalanceMngUI().getBillListPanel().getHeadTable().getSelectedRows() ; int row = getBalanceMngUI().getBillListPanel().getHeadTable() .getSelectedRowCount(); 四十三.对VO的操作,聚合VO,得到表体,表体某一个页签的VO //结算调整单管理,聚合vo MultiBillVO multiBillVO= (MultiBillVO)getBufferData().getCurrentVO(); //结算调整单管理,表头vo FkSbmBalchVO fkSbmBalchVO = (FkSbmBalchVO)multiBillVO.getParentVO(); //结算调整单管理,表体明细页签vo FkSbmBalchbVO[] fkSbmBalchbVOs = (FkSbmBalchbVO[])multiBillVO.getTableVO("fk_sbm_balchb"); //结算调整单管理,表体汇总页签vo FkSbmBalchb2VO[] fkSbmBalchb2VOs = (FkSbmBalchb2VO[])multiBillVO.getTableVO("fk_sbm_balchb2"); 四十四.添加一个自定义的按钮 1( 在nc.ui.fk.pub.button.PubPrivateButton 接口里面定义一个 //自定义按钮:表体批号清空 int btnClear = 241; 2( 在nc.ui.fk.pub.button.PubPrivateButtonVO中定义 /** * 批号清空 * @return */ // getBtnClearVO名字自己随便取 public ButtonVO getBtnClearVO(){ ButtonVO btnCancelAssignVO = new ButtonVO(); btnCancelAssignVO.setBtnNo(PubPrivateButton.btnClear); btnCancelAssignVO.setBtnCode("批号清空"); btnCancelAssignVO.setBtnName("批号清空"); btnCancelAssignVO.setHintStr("批号清空"); btnCancelAssignVO.setBtnChinaName("批号清空"); btnCancelAssignVO.setOperateStatus(new int[]{IBillOperate.OP_ADD,IBillOperate.OP_EDIT}); btnCancelAssignVO.setExtendStatus(new int[]{nc.vo.trade.pub.IBillStatus.ALL} ); return btnCancelAssignVO; } 3( 在想要加入该按钮的包下的nc.ui.fk.cy.mapm.MonApplyPlanMngUICtrl中 getCardButtonAry()或getListButtonAry()方法中加入按钮PubPrivateButton.btnClear 4( 在UI类中初始化该按钮 /** * LMJ 20090921批号清空*/ @Override protected void initPrivateButton() { ButtonVO clear = (new PubPrivateButtonVO()).getBtnClearVO(); addPrivateButton(clear);} 5( 在EV类里面实现按钮的方法 protected void onBoElse(int intBtn) throws Exception { if (intBtn == PubPrivateButton.btnClear) //批号清空 { onClearPihao(); } } 6( 在EV类中实现onClearPihao() /** * 清空表体的所有批号*/ public void onClearPihao(){ int rowCount = getMonApplyPlanMngUI().getBillCardPanel().getRowCount(); for (int i = 0; igetColValue(fk_bd_clientinfo,vaccountcode,cclientinfo _id,cbalcompany_id)" //账号}; getBillCardPanel().execHeadFormulas(headform); } 四十八.根据不同的条件,过滤不同的参照记录 if (str.equals("chezhong")) { UIRefPane nRefPanel = (UIRefPane) getBillCardPanel().getBodyItem("fk_cm_consub", "fazhan1").getComponent(); nRefPanel.setIsCustomDefined(true); FaZhanRefModel model = new FaZhanRefModel(); int iRow=0; iRow=getBillCardPanel().getBillTable("fk_cm_consub").getSelectedRow()model.setTemp_pk(getBillCardPanel().getBillModel("fk_cm_consub").getValueAt(iRow, "chezhong").toString()); nRefPanel.setRefModel(model); 参照类:FaZhanRefModel public String getWherePart() { String strWherePart = super.getWherePart(); String strSql = " ctargetfile_id = '1001AA1000000002Q91J' and dr = 0 and (isclose is null or isclose='N') "; if (this.getTemp_pk() != null && !(this.getTemp_pk().equals("汽车") || this.getTemp_pk().equals("翻车"))) { strSql = strSql + " and vnote = '" + getTemp_pk().trim() + "'"; } if(strWherePart == null || "".equals(strWherePart.trim())) strWherePart = strSql; else strWherePart = strWherePart + strSql; return strWherePart; } //自已有一个变量getTemp_pk //设置参照默认选中第一个元素 if((getBillCardPanel().getBillModel("fk_cm_consub").getValueAt(iRow, "chezhong").toString()).equals("路车")) { Vector aa = (Vector)(nRefPanel.getRefModel().getRefData().firstElement()); String pk = (String)aa.get(aa.size()-1); this.getBillCardPanel().setBodyValueAt(pk, iRow, "fazhan"); this.getBillCardPanel().getBillModel().execLoadFormula(); 四十九,获取表体当前操作页签 //获取表体当前操作页签,0为汇总页签,1为明细页签 int flag = getBalanceMngUI().getBillCardPanel().getBodyTabbedPane().getModel().g etSelectedIndex(); 五十,输入开始和结束日期,从开始到结束日期每天都列出来 UFDate doperatordate1 = new UFDate(startdate); UFDate doperatordate2 = new UFDate(); UFDouble tl_xcoal = new UFDouble(0); //铁路合计_西露天矿 UFDouble tl_lcoal = new UFDouble(0); //铁路合计_老虎台矿 while (rs.next()) { countrow = countrow + 1; doperatordate2 = new UFDate(rs.getString("doperatordate")); //制单日期 int countday = UFDate.getDaysBetween(doperatordate1, doperatordate2); //统计相差天数 if(countrow == 1) {for(int i = 0; i < countday; i++) {FkCstatetVO vo = new FkCstatetVO(); vo.setDayobject(doperatordate1.getDateAfter(i).toString()); protected void initSelfData() { getBillCardPanel().getBodyPanel().getRendererVO().setShowZeroLike Nullfalse);// 数值为0时显示} 五十一,在列表状态下,根据单据的状态,确定按钮是否可用 public void updateButtons() { if (this.getBillOperate() != IBillOperate.OP_ADD && this.getBillOperate() != IBillOperate.OP_EDIT) { this.getButtonManager().getButton(PubPrivateButton.btnInvoice) .setEnabled(true); } int[] selectRows = this.getBillListPanel().getHeadTable().getSelectedRows(); if(selectRows.length > 0) {int i = 0; for (i = 0; i < selectRows.length; i++) {String vuserdef20 = this.getBillListPanel().getHeadBillModel().getBodyValueRowVO(selectRo ws[i], FkSbmBalVO.class.getName()).getAttributeValue("vuserdef20") == null ? "0" : this.getBillListPanel().getHeadBillModel().getBodyValueRowVO(selectRo ws[i], FkSbmBalVO.class.getName()).getAttributeValue("vuserdef20").toString(); if(vuserdef20.equals("1")) {break;} } if(i >= selectRows.length) { this.getButtonManager().getButton(PubPrivateButton.btnSoTax).setEnabled(true); //导出金税 this.getButtonManager().getButton(PubPrivateButton.btnSoTax2).setEnabled(true); //合并导出金税 }else { this.getButtonManager().getButton(PubPrivateButton.btnSoTax).setEnabled(false); //导出金税 this.getButtonManager().getButton(PubPrivateButton.btnSoTax2).setEnabled(false); //合并导出金税 }} super.updateButtons(); } 五十二,不管在是列表还是卡片面下取得表头或表体的值 //得到表头的金额 UFDouble headmoney =((FkSbmGatherVO)this.getBufferData().getCurrentVO().getParentVO()).getDprice(); //结算单位 String cbalance_id = ((FkSbmGatherVO)this.getBufferData().getCurrentVO().getParentVO()).getCbalance_id(); 五十三,UFDouble型的数据变成两位小数的字符型,或零位小数 money_tax.setScale(-2, UFDouble.ROUND_HALF_UP).toString() money_tax.setScale(0, UFDouble.ROUND_HALF_UP).toString() 五十四,系统按钮的操作 public void onbutton(buttonobject b){} public void onbutton(buttonobject b){ super.onbutton(b); if("21".equals(b.gettag()) || "22".equals(b.gettag()) || "23".equals(b.gettag()) || "24".equals(b.gettag())){ setcolumnvalue2(); } } 五十五,SQL查询时将字符转换成小数型 Select sum(cast(fk_sbm_balb2.vuserdef2 as decimal(19,2))) vuserdef2 五十六,删除单页签表体删除行,以及增行 // 删除表体所有行 int row = getCarriageMngUI().getBillCardPanel().getRowCount(); if (row > 0) { int r[] = new int[row]; for (int i = 0; i < row; i++) { r[i] = i; } getCarriageMngUI().getBillCardPanel().getBillModel().delLine(r); } getCarriageMngUI().getBillCardPanel().addLine(); 五十七,多页签表体删除行,增行 BillModel sbmb2=this.getBillCardPanel().getBillModel("fk_sbm_balb2"); //汇总页签 int row[] = new int[1]; if(rowCount2 > 0){ for (int i = 0; i < rowCount2; i++){ row[0] = i; sbmb2.delLine(row); //删行操作 i = i-1; rowCount2 = rowCount2 - 1; }} 五十八,得到月份,年份 UFDate da=new UFDate(); da=new UFDate(str); int month=da.getMonth(); int lmonth=this.getBillUI().getEnvironment().getDate().getMonth(); 五十九,如何得到多页签到指定的子VO MultiBillVO millbillv = (MultiBillVO)this.getBufferData().getCurrentVO(); FkCySendbsub1VO[] svo = (FkCySendbsub1VO[])millbillv.getTableVO("fk_cy_sendbsub1"); 六十:删除表体行 int allRow = getBillCardPanel().getBillTable().getRowCount();//获取当前表体总行数 for (int row = 0; row <= allRow; row++) { super.onButtonClicked(getButtonManager().getButton(IBillButton.DelLine));//执行删除行操作,清空表体行 } 六十一.传过一个主键的数组,如何组装成‘主键’,‘主键’的形式 方法一: public void updateIsBalance(String lastid[],String cbusitype_id) String frimaryid="'"; for(int i=0;i 0) {//如果表体有记录行进行删除 int row[] = new int[rowCount]; for(int i = 0;i 0) { int i = 0; for (i = 0; i < selectRows.length; i++) { String vuserdef20 = this.getBillListPanel().getHeadBillModel().getBodyValueRowVO(selectRo ws[i], FkSbmBalVO.class.getName()).getAttributeValue("vuserdef20") == null ? "0" : this.getBillListPanel().getHeadBillModel().getBodyValueRowVO(selectRo ws[i], FkSbmBalVO.class.getName()).getAttributeValue("vuserdef20").toString( ); if(vuserdef20.equals("1")) { break; } } if(i >= selectRows.length) {this.getButtonManager().getButton(PubPrivateButton.btnSoTax).set Enabled(true); //导出金税 this.getButtonManager().getButton(PubPrivateButton.btnSoTax2).set Enabled(true); //合并导出金税 }else { this.getButtonManager().getButton(IBillButton.Edit).setEnabled(false);//导入金税后不能在修改 this.getButtonManager().getButton(PubPrivateButton.btnSoTax).setEnabled(false); //导出金税 this.getButtonManager().getButton(PubPrivateButton.btnSoTax2).setEnabled(false); //合并导出金税 }
本文档为【NC技术开发总结】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:120KB
软件:Word
页数:53
分类:企业经营
上传时间:2018-01-07
浏览量:132