BOS开发EditUI实战.docx

上传人:b****5 文档编号:4515994 上传时间:2022-12-01 格式:DOCX 页数:11 大小:50.92KB
下载 相关 举报
BOS开发EditUI实战.docx_第1页
第1页 / 共11页
BOS开发EditUI实战.docx_第2页
第2页 / 共11页
BOS开发EditUI实战.docx_第3页
第3页 / 共11页
BOS开发EditUI实战.docx_第4页
第4页 / 共11页
BOS开发EditUI实战.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

BOS开发EditUI实战.docx

《BOS开发EditUI实战.docx》由会员分享,可在线阅读,更多相关《BOS开发EditUI实战.docx(11页珍藏版)》请在冰豆网上搜索。

BOS开发EditUI实战.docx

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

getComponentCount();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("物料编码");  

kdtEntrys.getHeadRow(0)。

getCell

(2).setValue(”详细信息和数量”);  

kdtEntrys.getHeadRow(0)。

getCell(3)。

setValue(”详细信息和数量");  

kdtEntrys。

getHeadMergeManager()。

mergeBlock(0, 2, 0, 3);  

关于bos分录添加附件的相关知识点

今天研究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(){

            publicvoidbeforeEvent(com。

kingdee.eas。

framework。

client.multiDetail。

DetailPanelEventevent)throwsException{

                IObjectValuevo=event。

getObjectValue();

                //设置默认值

                vo.put("matid”,"MT0002”);

                vo。

put("matmc","生铁”);

            }

            publicvoidafterEvent(com.kingdee.eas.framework。

client.multiDetail。

D

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1