BOS开发EditUI实战_第1页
BOS开发EditUI实战_第2页
BOS开发EditUI实战_第3页
BOS开发EditUI实战_第4页
BOS开发EditUI实战_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EditUI刷新单据在EditUI类里面刷新单据数据:/* * 重新刷新数据 * */ public void refreshSelf()  try  ObjectUuidPK pk = new ObjectUuidPK(editData.getId(); IObjectValue objValue = getValue(pk); setDataObject(objValue); loadFields(); getUIContext().put("ID", pk); 

2、;getUIContext().put("InitDataObject", objValue);  catch (Exception e)  handUIException(e);  eas bos editUI 刷新方法 帮助类/* * 刷新editUI 使用反射技术调用收保护方法 * param ui 单据editUi的对象 * param id 单据的id eidtData.getId() */public static void refreshEditUI(EditUI ui,BOSUuid id)try ObjectUuid

3、PK pk = new ObjectUuidPK(id);/使用反射技术访问受保护的方法 /* * 使用反射技术获取父类的方法 * 1、先获取自己的字节码对象: Class clazz=ui.getClass(); * 2、获取父类的字节码对象: =clazz.getSuperclass(); */Method m=null;Class clazz=ui.getClass();while(true)try m=clazz.getDeclaredMethod("getValue", new ClassIObjectPK.class); break; catch (NoSuch

4、MethodException e) clazz=clazz.getSuperclass();m.setAccessible(true);IObjectValue objValue=(IObjectValue) m.invoke(ui, new Objectpk);ui.setDataObject(objValue);ui.loadFields();ui.getUIContext().put("ID", pk);ui.getUIContext().put("InitDataObject", objValue); catch (Exception e) u

5、i.handUIException(e); 分录删除按钮删除多条记录的方法private void replaceKdtRangeRemoveMethod() throws Exception DetailPanel detailPanel = TrainClientUtil.getTableDetailPanel(kdtEntrys);if (detailPanel != null) KDWorkButton removeButton = detailPanel.getRemoveLinesButton();ActionListener listeners = removeButt

6、on.getActionListeners();if (listeners != null && listeners.length > 0) for (int j = 0; j < listeners.length; j+)removeButton.removeActionListener(listenersj);removeButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) if (kdtEntrys = null)return;if

7、 (kdtEntrys.getSelectManager().size() = 0| isTableColumnSelected(kdtEntrys)return;int selectRowsIndex = TrainHelper.getSelectedRows(kdtEntrys); Arrays.sort(selectRowsIndex); for(int i = selectRowsIndex.length - 1; i >= 0; i-) TrainUtils.removeRow(kdtEntrys, selectRowsIndexi); if (selectRowsIndex.

8、length > 0) int selectedColumnIndexs = TrainHelper.getSelectedColumns(kdtEntrys);Arrays.sort(selectRowsIndex);if (kdtEntrys.getRowCount() > 0) Arrays.sort(selectedColumnIndexs);int columnIndex = 0;if (selectedColumnIndexs.length > 0)columnIndex = selectedColumnIndexs0;kdtEntrys.getSelectMan

9、ager().select(selectRowsIndex0, columnIndex););通过BOSType找EditUI/* 112 */     IMetaDataLoader loader = MetaDataLoaderFactory.getRemoteMetaDataLoader();/* 113 */     EntityObjectInfo tempObj = loader.getEntity(new BOSObjectType(BOSTypeString);如何在代码中对由框架自动生成的单据分录

10、三个小按钮设置状态?对于由框架继承新增的编辑UI(EditUI),在运行期会自动增加三个按钮:新增行、插入行、删除行,如下图:对于上图的业务处理,只有在当“是否总计项”为选中时,三个按钮才应该是可用的,但这三个按钮是运行期程序产生的,所以对其处理就得在其相应的容器中来找并设置,具体代码如下:  KDPanel controlPanel = (KDPanel)this.kdtSumExpress.getParent().getParent().getComponent(0);  for(int i = 0; i < controlPanel.getC

11、omponentCount(); i+)   controlPanel.getComponent(i).setEnabled(chkisSumItem.isSelected();  其中kdtSumExpress为上图中的表格。再提及一点,controlPanel的parent为。单据多分录中如何对某个页签中分录行数据增加做前处理和后处理?对于单据单分录,如果我们想对某行数据在增加时或删除时做处理,直接用框架提供的事件即可,但对于多分录目前框架无法直接处理,需要我们自己在代码中来处理,具体例子如下:/* * output packag

12、e name */package jectmgr.client;./* * output class name */public class PrjEstimateEditUI extends AbstractPrjEstimateEditUI implements IDetailPanelListener  private static final Logger logger = CoreUIObject.getLogger(PrjEstimateEditUI.class); 

13、;. /*  * output class constructor  */ public PrjEstimateEditUI() throws Exception   super();  protected void initListener()   super.initListener();  Container pnlPlaceCirc = kdtPlaceCircs.getParent().getParent();  if (pnlPlaceCirc

14、 instanceof DetailPanel)    DetailPanel detailPanel = (DetailPanel) pnlPlaceCirc;   detailPanel.addAddListener(this);   detailPanel.addInsertListener(this);    cmbxMakeMethod.addItemListener(new ItemListener()    public

15、void itemStateChanged(ItemEvent e)     if (e.getStateChange() = ItemEvent.SELECTED)      boolean enabled = e.getItem() = RentCalcMethodEnum.pressAndEngineFixedRent;     txtNomMonthRate.setEnabled(enabled);    &

16、#160;    );  public void beforeEvent(DetailPanelEvent e) throws Exception   PrjEstimatePlaceCircInfo prjEstimatePlaceCirc = (PrjEstimatePlaceCircInfo) e.getObjectValue();  prjEstimatePlaceCirc.setCurrency(currency);  prjEstimatePlaceCirc.se

17、tCreator(SysContext.getSysContext().getCurrentUserInfo().getPerson();  prjEstimatePlaceCirc.setCreateTime(new Date();  public void afterEvent(DetailPanelEvent e) throws Exception   / TODO 自动生成方法存根 如何给单据分录上增加核算项目的F7(代码示例)。用BIM在单据上先增加核算项目的列,注意如果BIM中选择不到核算项目的业务单元,还需要先

18、手工在BIM中先引入一个,然后发布,在实现类中增加如下代码(须根据自己的实际修改控件名和自定义核算项目类别编码): public static void initHZPrmt(KDTable kdtEntry,CoreUIObject editUI) throws BOSException   final KDBizPromptBox kdtEntry_PromptBox = new KDBizPromptBox();  kdtEntry.checkParsed();  kdtEntry_PromptBox.setVisib

19、le(true);  kdtEntry_PromptBox.setEditable(true);  setHZ(kdtEntry_PromptBox, editUI);  kdtEntry_PromptBox.setDisplayFormat("$number$");  kdtEntry_PromptBox.setEditFormat("$number$");  kdtEntry_PromptBox.setCommitFormat("$numbe

20、r$");  KDTDefaultCellEditor kdtEntry_CellEditor = new KDTDefaultCellEditor(    kdtEntry_PromptBox);  kdtEntry.getColumn("cargo").setEditor(kdtEntry_CellEditor);  ObjectValueRender kdtEntry_OVR = new ObjectValueRender();  kdtE

21、ntry_OVR.setFormat(new BizDataFormat("$name$");  kdtEntry.getColumn("cargo").setRenderer(kdtEntry_OVR);  public static void setHZ(KDBizPromptBox bizPromptBox, CoreUIObject ui)throws BOSException   IGeneralAsstActTypeGroup iGeneralAsstGroup = GeneralA

22、sstActTypeGroupFactory    .getRemoteInstance();  GeneralAsstActTypeGroupCollection gc = iGeneralAsstGroup    .getGeneralAsstActTypeGroupCollection("select * where number='01'");  if (gc.size() > 0)    GLf

23、7Utils.assignSelector(bizPromptBox, gc.get(0), "", true, false,null, ui, true);   bizPromptBox.setQueryInfo("com.kingdee.eas.basedata.master.auxacct.app.F7GeneralAsstActTypeQuery");   如何让表头的字段在单据提交后还能进行修改?  一般情况下,单据提交后,是不允许修改的。但是也存在一些特殊的情况,需要在工作

24、流中,对单据中的某些字段进行修改,此时,一般是通过在自定义的扩展类中,重写onLoad()方法,然后在方法中调用控件的setEnabled()、setEditable()、setReadOnly()方法(这三个方法不一定需要全部调用,根据具体情况而定),如下代码:Overridepublic void onLoad() throws Exception super.onLoad();/单据未生成凭证之前,"收款类型"为可编辑、“往来户”也可编辑boolean hasFV = this.editD

25、ata.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.addHead

26、Row(0);  kdtEntrys.getHeadRow(0).getCell(1).setValue("物料编码");  kdtEntrys.getHeadRow(0).getCell(2).setValue("详细信息和数量");  kdtEntrys.getHeadRow(0).getCell(3).setValue("详细信息和数量");  kdtEntrys.getHeadMergeManager().mergeBlock(0, 2,

27、 0, 3);  关于bos 分录添加附件的相关知识点今天研究eas标准产品,发现人力资源模块的培训课程TrainCoursEditUI 和采购合同PurContractEdituI发现两个的分录一个可以添加分录、一个没有添加分录的选项。经过仔细研究后发现TrainCoursEditUI是直接基础EditUI的,而对于PurContractEdituI是有继承coreBillBase的。所以对于这个差异,问题应该是在coreBillBase的EditUI的代码方法。如果需要禁止分录添加附件的方法,可以覆盖方法showSubAttacheMent 其代码是

28、:Override    public KDMenuItem getAttachMenuItem(KDTable table)         return null;        Override    protected void showSubAttacheMent(AttachmentUIContextInfo info)         

29、0;   给表体(分录、条目)设置默认值(全)一,如果需要设置的默认值是个固定的值,解决方法:打开BIM(业务建模视图)->打开业务单元->在大纲视图(如果看不到这个视图可以:窗口->显示视图->其他->常规->大纲)中点开分录,选择要设置默认值的字段右击属性,在“默认值”中属性中设置值      二,如果需要在代码里面动态设置默认值,解决方法:1. 添加条目按钮(分录面板的三个按钮之一):/点击添加分录按钮后 设置默认值         

30、   kdtEntrys_detailPanel.addAddListener(new com.kingdee.eas.framework.client.multiDetail.IDetailPanelListener()                         public void beforeEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEvent event) throws

31、 Exception                                 IObjectValue vo = event.getObjectValue();                                /设置默认值    

32、0;                           vo.put("matid", "MT0001");                                vo.put("matmc","变形金刚"); 

33、;                                               public void afterEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEvent event) throws Exception        

34、                                );/添加条目按钮 的点击事件            this.kdtEntrys_detailPanel.getAddNewLineButton().addActionListener(new ActionListener()             &

35、#160;           public void actionPerformed(ActionEvent e)                                 / TODO Auto-generated method stub                    &

36、#160;           MsgBox.showInfo("添加分录按钮的点击事件!");                                                );2. 插入条目按钮(分录面板的三个按钮之一):/点击插入分录按钮后 设置默认值

37、60;               kdtEntrys_detailPanel.addInsertListener(new com.kingdee.eas.framework.client.multiDetail.IDetailPanelListener()                         public void beforeEvent(com.kingdee.eas.framework.c

38、lient.multiDetail.DetailPanelEvent event) throws Exception                                 IObjectValue vo = event.getObjectValue();                        

39、0;       /设置默认值                                vo.put("matid", "MT0002");                               

40、vo.put("matmc","生铁");                                                public void afterEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEvent event) throws Exception             

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论