BOS開發(fā)EditUI實(shí)戰(zhàn)_第1頁
BOS開發(fā)EditUI實(shí)戰(zhàn)_第2頁
BOS開發(fā)EditUI實(shí)戰(zhàn)_第3頁
BOS開發(fā)EditUI實(shí)戰(zhàn)_第4頁
BOS開發(fā)EditUI實(shí)戰(zhàn)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、EditUI刷新單據(jù)在EditUI類里面刷新單據(jù)數(shù)據(jù):/* * 重新刷新數(shù)據(jù) * */ 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 使用反射技術(shù)調(diào)用收保護(hù)方法 * param ui 單據(jù)editUi的對象 * param id 單據(jù)的id eidtData.getId() */public static void refreshEditUI(EditUI ui,BOSUuid id)try ObjectUuid

3、PK pk = new ObjectUuidPK(id);/使用反射技術(shù)訪問受保護(hù)的方法 /* * 使用反射技術(shù)獲取父類的方法 * 1、先獲取自己的字節(jié)碼對象: Class clazz=ui.getClass(); * 2、獲取父類的字節(jié)碼對象: =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);如何在代碼中對由框架自動(dòng)生成的單據(jù)分錄

10、三個(gè)小按鈕設(shè)置狀態(tài)?對于由框架繼承新增的編輯UI(EditUI),在運(yùn)行期會(huì)自動(dòng)增加三個(gè)按鈕:新增行、插入行、刪除行,如下圖:對于上圖的業(yè)務(wù)處理,只有在當(dāng)“是否總計(jì)項(xiàng)”為選中時(shí),三個(gè)按鈕才應(yīng)該是可用的,但這三個(gè)按鈕是運(yùn)行期程序產(chǎn)生的,所以對其處理就得在其相應(yīng)的容器中來找并設(shè)置,具體代碼如下:  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為上圖中的表格。再提及一點(diǎn),controlPanel的parent為。單據(jù)多分錄中如何對某個(gè)頁簽中分錄行數(shù)據(jù)增加做前處理和后處理?對于單據(jù)單分錄,如果我們想對某行數(shù)據(jù)在增加時(shí)或刪除時(shí)做處理,直接用框架提供的事件即可,但對于多分錄目前框架無法直接處理,需要我們自己在代碼中來處理,具體例子如下:/* * 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 自動(dòng)生成方法存根 如何給單據(jù)分錄上增加核算項(xiàng)目的F7(代碼示例)。用BIM在單據(jù)上先增加核算項(xiàng)目的列,注意如果BIM中選擇不到核算項(xiàng)目的業(yè)務(wù)單元,還需要先

18、手工在BIM中先引入一個(gè),然后發(fā)布,在實(shí)現(xiàn)類中增加如下代碼(須根據(jù)自己的實(shí)際修改控件名和自定義核算項(xiàng)目類別編碼): 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");   如何讓表頭的字段在單據(jù)提交后還能進(jìn)行修改?  一般情況下,單據(jù)提交后,是不允許修改的。但是也存在一些特殊的情況,需要在工作

24、流中,對單據(jù)中的某些字段進(jìn)行修改,此時(shí),一般是通過在自定義的擴(kuò)展類中,重寫onLoad()方法,然后在方法中調(diào)用控件的setEnabled()、setEditable()、setReadOnly()方法(這三個(gè)方法不一定需要全部調(diào)用,根據(jù)具體情況而定),如下代碼:Overridepublic void onLoad() throws Exception super.onLoad();/單據(jù)未生成憑證之前,"收款類型"為可編輯、“往來戶”也可編輯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 開發(fā)中,有時(shí)需要對分錄或序時(shí)簿界面表的表頭做合并處理,方法如下:Java代碼  kdtEntrys.addHead

26、Row(0);  kdtEntrys.getHeadRow(0).getCell(1).setValue("物料編碼");  kdtEntrys.getHeadRow(0).getCell(2).setValue("詳細(xì)信息和數(shù)量");  kdtEntrys.getHeadRow(0).getCell(3).setValue("詳細(xì)信息和數(shù)量");  kdtEntrys.getHeadMergeManager().mergeBlock(0, 2,

27、 0, 3);  關(guān)于bos 分錄添加附件的相關(guān)知識(shí)點(diǎn)今天研究eas標(biāo)準(zhǔn)產(chǎn)品,發(fā)現(xiàn)人力資源模塊的培訓(xùn)課程TrainCoursEditUI 和采購合同PurContractEdituI發(fā)現(xiàn)兩個(gè)的分錄一個(gè)可以添加分錄、一個(gè)沒有添加分錄的選項(xiàng)。經(jīng)過仔細(xì)研究后發(fā)現(xiàn)TrainCoursEditUI是直接基礎(chǔ)EditUI的,而對于PurContractEdituI是有繼承coreBillBase的。所以對于這個(gè)差異,問題應(yīng)該是在coreBillBase的EditUI的代碼方法。如果需要禁止分錄添加附件的方法,可以覆蓋方法showSubAttacheMent 其代碼是

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

29、0;   給表體(分錄、條目)設(shè)置默認(rèn)值(全)一,如果需要設(shè)置的默認(rèn)值是個(gè)固定的值,解決方法:打開BIM(業(yè)務(wù)建模視圖)->打開業(yè)務(wù)單元->在大綱視圖(如果看不到這個(gè)視圖可以:窗口->顯示視圖->其他->常規(guī)->大綱)中點(diǎn)開分錄,選擇要設(shè)置默認(rèn)值的字段右擊屬性,在“默認(rèn)值”中屬性中設(shè)置值      二,如果需要在代碼里面動(dòng)態(tài)設(shè)置默認(rèn)值,解決方法:1. 添加條目按鈕(分錄面板的三個(gè)按鈕之一):/點(diǎn)擊添加分錄按鈕后 設(shè)置默認(rèn)值         

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();                                /設(shè)置默認(rèn)值    

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

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

34、                                );/添加條目按鈕 的點(diǎn)擊事件            this.kdtEntrys_detailPanel.getAddNewLineButton().addActionListener(new ActionListener()             &

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

36、#160;           MsgBox.showInfo("添加分錄按鈕的點(diǎn)擊事件!");                                                );2. 插入條目按鈕(分錄面板的三個(gè)按鈕之一):/點(diǎn)擊插入分錄按鈕后 設(shè)置默認(rèn)值

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;       /設(shè)置默認(rèn)值                                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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論