BOS开发EditUI实战教学教材.docx
- 文档编号:16318948
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:13
- 大小:50.78KB
BOS开发EditUI实战教学教材.docx
《BOS开发EditUI实战教学教材.docx》由会员分享,可在线阅读,更多相关《BOS开发EditUI实战教学教材.docx(13页珍藏版)》请在冰点文库上搜索。
BOS开发EditUI实战教学教材
EditUI刷新单据
在EditUI类里面刷新单据数据:
/**
*重新刷新数据
*
*/
publicvoidrefreshSelf(){
try{
ObjectUuidPKpk=newObjectUuidPK(editData.getId());
IObjectValueobjValue=getValue(pk);
setDataObject(objValue);
loadFields();
getUIContext().put("ID",pk);
getUIContext().put("InitDataObject",objValue);
}catch(Exceptione){
handUIException(e);
}
}
easboseditUI刷新方法帮助类
/**
*刷新editUI使用反射技术调用收保护方法
*@paramui单据editUi的对象
*@paramid单据的ideidtData.getId()
*/
publicstaticvoidrefreshEditUI(EditUIui,BOSUuidid){
try{
ObjectUuidPKpk=newObjectUuidPK(id);
//使用反射技术访问受保护的方法
/**
*使用反射技术获取父类的方法
*1、先获取自己的字节码对象:
Classclazz=ui.getClass();
*2、获取父类的字节码对象:
=clazz.getSuperclass();
*/
Methodm=null;
Classclazz=ui.getClass();
while(true){
try{
m=clazz.getDeclaredMethod("getValue",newClass[]{IObjectPK.class});
break;
}catch(NoSuchMethodExceptione){
clazz=clazz.getSuperclass();
}
}
m.setAccessible(true);
IObjectValueobjValue=(IObjectValue)m.invoke(ui,newObject[]{pk});
ui.setDataObject(objValue);
ui.loadFields();
ui.getUIContext().put("ID",pk);
ui.getUIContext().put("InitDataObject",objValue);
}catch(Exceptione){
ui.handUIException(e);
}
}
分录删除按钮删除多条记录的方法
privatevoidreplaceKdtRangeRemoveMethod()throwsException{
DetailPaneldetailPanel=TrainClientUtil
.getTableDetailPanel(kdtEntrys);
if(detailPanel!
=null){
KDWorkButtonremoveButton=detailPanel.getRemoveLinesButton();
ActionListenerlisteners[]=removeButton.getActionListeners();
if(listeners!
=null&&listeners.length>0){
for(intj=0;j removeButton.removeActionListener(listeners[j]); } removeButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ if(kdtEntrys==null) return; if(kdtEntrys.getSelectManager().size()==0 ||isTableColumnSelected(kdtEntrys)) return; intselectRowsIndex[]=TrainHelper .getSelectedRows(kdtEntrys); Arrays.sort(selectRowsIndex); for(inti=selectRowsIndex.length-1;i>=0;i--){ TrainUtils.removeRow(kdtEntrys,selectRowsIndex[i]); } if(selectRowsIndex.length>0){ intselectedColumnIndexs[]=TrainHelper .getSelectedColumns(kdtEntrys); Arrays.sort(selectRowsIndex); if(kdtEntrys.getRowCount()>0){ Arrays.sort(selectedColumnIndexs); intcolumnIndex=0; if(selectedColumnIndexs.length>0) columnIndex=selectedColumnIndexs[0]; kdtEntrys.getSelectManager().select( selectRowsIndex[0],columnIndex); } } } }); } } 通过BOSType找EditUI /*112*/ IMetaDataLoaderloader=MetaDataLoaderFactory.getRemoteMetaDataLoader(); /*113*/ EntityObjectInfotempObj=loader.getEntity(newBOSObjectType(BOSTypeString)); 如何在代码中对由框架自动生成的单据分录三个小按钮设置状态? 对于由框架继承新增的编辑UI(EditUI),在运行期会自动增加三个按钮: 新增行、插入行、删除行,如下图: 对于上图的业务处理,只有在当“是否总计项”为选中时,三个按钮才应该是可用的,但这三个按钮是运行期程序产生的,所以对其处理就得在其相应的容器中来找并设置,具体代码如下: KDPanelcontrolPanel=(KDPanel)this.kdtSumExpress.getParent().getParent().getComponent(0); for(inti=0;i controlPanel.getComponent(i).setEnabled(chkisSumItem.isSelected()); } 其中kdtSumExpress为上图中的表格。 再提及一点,controlPanel的parent为com.kingdee.eas.framework.client.multiDetail.DetailPanel。 单据多分录中如何对某个页签中分录行数据增加做前处理和后处理? 对于单据单分录,如果我们想对某行数据在增加时或删除时做处理,直接用框架提供的事件即可,但对于多分录目前框架无法直接处理,需要我们自己在代码中来处理,具体例子如下: /** *outputpackagename */ packagecom.kingdee.eas.huar.projectmgr.client; ... /** *outputclassname */ publicclassPrjEstimateEditUIextendsAbstractPrjEstimateEditUI implementsIDetailPanelListener { privatestaticfinalLoggerlogger=CoreUIObject.getLogger(PrjEstimateEditUI.class); ... /** *outputclassconstructor */ publicPrjEstimateEditUI()throwsException{ super(); } protectedvoidinitListener(){ super.initListener(); ContainerpnlPlaceCirc=kdtPlaceCircs.getParent().getParent(); if(pnlPlaceCircinstanceofDetailPanel){ DetailPaneldetailPanel=(DetailPanel)pnlPlaceCirc; detailPanel.addAddListener(this); detailPanel.addInsertListener(this); } cmbxMakeMethod.addItemListener(newItemListener(){ publicvoiditemStateChanged(ItemEvente){ if(e.getStateChange()==ItemEvent.SELECTED){ booleanenabled=e.getItem()==RentCalcMethodEnum.pressAndEngineFixedRent; txtNomMonthRate.setEnabled(enabled); } } }); } publicvoidbeforeEvent(DetailPanelEvente)throwsException{ PrjEstimatePlaceCircInfoprjEstimatePlaceCirc=(PrjEstimatePlaceCircInfo)e.getObjectValue(); prjEstimatePlaceCirc.setCurrency(currency); prjEstimatePlaceCirc.setCreator(SysContext.getSysContext().getCurrentUserInfo().getPerson()); prjEstimatePlaceCirc.setCreateTime(newDate()); } publicvoidafterEvent(DetailPanelEvente)throwsException{ //TODO自动生成方法存根 } } 如何给单据分录上增加核算项目的F7(代码示例)。 用BIM在单据上先增加核算项目的列,注意如果BIM中选择不到核算项目的业务单元,还需要先手工在BIM中先引入一个,然后发布,在实现类中增加如下代码(须根据自己的实际修改控件名和自定义核算项目类别编码): publicstaticvoidinitHZPrmt(KDTablekdtEntry,CoreUIObjecteditUI)throwsBOSException{ finalKDBizPromptBoxkdtEntry_PromptBox=newKDBizPromptBox(); kdtEntry.checkParsed(); kdtEntry_PromptBox.setVisible(true); kdtEntry_PromptBox.setEditable(true); setHZ(kdtEntry_PromptBox,editUI); kdtEntry_PromptBox.setDisplayFormat("$number$"); kdtEntry_PromptBox.setEditFormat("$number$"); kdtEntry_PromptBox.setCommitFormat("$number$"); KDTDefaultCellEditorkdtEntry_CellEditor=newKDTDefaultCellEditor( kdtEntry_PromptBox); kdtEntry.getColumn("cargo").setEditor(kdtEntry_CellEditor); ObjectValueRenderkdtEntry__OVR=newObjectValueRender(); kdtEntry__OVR.setFormat(newBizDataFormat("$name$")); kdtEntry.getColumn("cargo").setRenderer(kdtEntry__OVR); } publicstaticvoidsetHZ(KDBizPromptBoxbizPromptBox,CoreUIObjectui)throwsBOSException{ IGeneralAsstActTypeGroupiGeneralAsstGroup=GeneralAsstActTypeGroupFactory .getRemoteInstance(); GeneralAsstActTypeGroupCollectiongc=iGeneralAsstGroup .getGeneralAsstActTypeGroupCollection("select*wherenumber='01'"); if(gc.size()>0){ GLf7Utils.assignSelector(bizPromptBox,gc.get(0),"",true,false,null,ui,true); bizPromptBox.setQueryInfo("com.kingdee.eas.basedata.master.auxacct.app.F7GeneralAsstActTypeQuery"); } } 如何让表头的字段在单据提交后还能进行修改? 一般情况下,单据提交后,是不允许修改的。 但是也存在一些特殊的情况,需要在工作流中,对单据中的某些字段进行修改,此时,一般是通过在自定义的UI扩展类中,重写onLoad()方法,然后在方法中调用控件的setEnabled()、setEditable()、setReadOnly()方法(这三个方法不一定需要全部调用,根据具体情况而定),如下代码: @Override public void onLoad() throws Exception { super.onLoad(); //单据未生成凭证之前,"收款类型"为可编辑、“往来户”也可编辑 boolean hasFV = this.editData.isFiVouchered(); if(! hasFV){ //收款类型 f7RecBillType.setEnabled(true); f7RecBillType.setEditable(true); f7RecBillType.setReadOnly(false); //往来户 prmtPayer.setEnabled(true); prmtPayer.setEditable(true); prmtPayer.setReadOnly(false); } } EAS分录表头合并 EAS开发中,有时需要对分录或序时簿界面表的表头做合并处理,方法如下: Java代码 kdtEntrys.addHeadRow(0); kdtEntrys.getHeadRow(0).getCell (1).setValue("物料编码"); 与此同时,上海市工商行政管理局也对大学生创业采取了政策倾斜: 凡高校毕业生从事个体经营的,自批准经营日起,1年内免交登记注册费、个体户管理费、集贸市场管理费、经济合同鉴证费、经济合同示范文本工本费等,但此项优惠不适用于建筑、娱乐和广告等行业。 kdtEntrys.getHeadRow(0).getCell (2).setValue("详细信息和数量"); kdtEntrys.getHeadRow(0).getCell(3).setValue("详细信息和数量"); 经常光顾□偶尔会去□不会去□kdtEntrys.getHeadMergeManager().mergeBlock(0, 2, 0, 3); “碧芝”最吸引人的是那些小巧的珠子、亮片等,都是平日里不常见的。 店长梁小姐介绍,店内的饰珠有威尼斯印第安的玻璃珠、秘鲁的陶珠、奥利的施华洛世奇水晶、法国的仿金片、日本的梦幻珠等,五彩缤纷,流光异彩。 按照饰珠的质地可分为玻璃、骨质、角质、陶制、水晶、仿金、木制等种类,其造型更是千姿百态: 珠型、圆柱型、动物造型、多边形、图腾形象等,美不胜收。 全部都是进口的,从几毛钱一个到几十元一个的珠子,做一个成品饰物大约需要几十元,当然,还要决定于你的心意。 “碧芝”提倡自己制作: 端个特制的盘子到柜台前,按自己的构思选取喜爱的饰珠和配件,再把它们串成成品。 这里的饰珠和配件的价格随质地而各有同,所用的线绳价格从几元到一二十元不等,如果让店员帮忙串制,还要收取10%~20%的手工费。 关于bos分录添加附件的相关知识点 、DIY手工艺市场现状分析今天研究eas标准产品,发现人力资源模块的培训课程TrainCoursEditUI和采购合同PurContractEdituI发现两个的分录一个可以添加分录、一个没有添加分录的选项。 经过仔细研究后发现TrainCoursEditUI是直接基础EditUI的,而对于PurContractEdituI是有继承coreBillBase的。 所以对于这个差异,问题应该是在coreBillBase的EditUI的代码方法。 如果需要禁止分录添加附件的方法,可以覆盖方法showSubAttacheMent其代码是: @Override publicKDMenuItemgetAttachMenuItem(KDTabletable){ returnnull; } @Override protectedvoidshowSubAttacheMent(AttachmentUIContextInfoinfo){ } 给表体(分录、条目)设置默认值(全) 一,如果需要设置的默认值是个固定的值,解决方法: 打开BIM(业务建模视图)->打开业务单元->在大纲视图(如果看不到这个视图可以: 窗口->显示视图->其他->常规->大纲)中点开分录,选择要设置默认值的字段右击属性,在“默认值”中属性中设置值 二,如果需要在代码里面动态设置默认值,解决方法: 1. 添加条目按钮(分录面板的三个按钮之一): //点击添加分录按钮后设置默认值 kdtEntrys_detailPanel.addAddListener(newcom.kingdee.eas.framework.client.multiDetail.IDetailPanelListener(){ publicvoidbeforeEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEventevent)throwsException{ IObjectValuevo=event.getObjectValue(); //设置默认值 vo.put("matid","MT0001"); vo.put("matmc","变形金刚"); } publicvoidafterEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEventevent)throwsException{ } }); //添加条目按钮的点击事件 this.kdtEntrys_detailPanel.getAddNewLineButton().addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub MsgBox.showInfo("添加分录按钮的点击事件! "); } }); 2. 插入条目按钮(分录面板的三个按钮之一): //点击插入分录按钮后设置默认值 kdtEntrys_detailPanel.addInsertListener(newcom.kingdee.eas.framework.client.multiDetail.IDetailPanelListener(){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BOS 开发 EditUI 实战 教学 教材