EASBOS開(kāi)發(fā)技術(shù)寶典_第1頁(yè)
EASBOS開(kāi)發(fā)技術(shù)寶典_第2頁(yè)
EASBOS開(kāi)發(fā)技術(shù)寶典_第3頁(yè)
EASBOS開(kāi)發(fā)技術(shù)寶典_第4頁(yè)
EASBOS開(kāi)發(fā)技術(shù)寶典_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1. 界面展現(xiàn)l EditUI控制提交后是否自動(dòng)新增覆蓋EditUI的protected boolean isSubmitLoad()。返回true,代表提交后自動(dòng)新增;返回false,代表提交后仍顯示提交單據(jù),不自動(dòng)新增。l 自定義ListUI的默認(rèn)查詢條件覆蓋ListUI的protected FilterInfo getDefaultFilterForQuery()。自己定義一個(gè)FilterInfo返回。l 點(diǎn)物料F7彈出樹(shù)型物料SelectorInvClientUtils.getMaterialF7ForFilterUI(prmtF7Material, this);相關(guān)類:com.kin

2、gdee.eas.scm.im.inv.client. InvClientUtils相關(guān)代碼: public static KDBizPromptBox getMaterialF7ForFilterUI(KDBizPromptBox kDBizPromptBoxMaterial, Object owner) kDBizPromptBoxMaterial.setEditable(true); kDBizPromptBoxMaterial.setDisplayFormat($number$); kDBizPromptBoxMaterial.setEditFormat($number$); kDBi

3、zPromptBoxMaterial.setCommitFormat($number$;$helpCode$); GeneralKDPromptSelectorAdaptor selectorLisenterMaterial = null; MaterialGroupInfo info = new MaterialGroupInfo(); selectorLisenterMaterial=new GeneralKDPromptSelectorAdaptor(kDBizPromptBoxMaterial, new F7MaterialTreeListUI(), owner, info.getBO

4、SType().toString(), com.kingdee.eas.basedata.master.material.app.F7MaterialQuery, materialGroup.id); selectorLisenterMaterial.setIsMultiSelect(false); selectorLisenterMaterial.setQueryProperty(helpCode, or); kDBizPromptBoxMaterial.setSelector(selectorLisenterMaterial); kDBizPromptBoxMaterial.addSele

5、ctorListener(selectorLisenterMaterial); kDBizPromptBoxMaterial.setQueryInfo(com.kingdee.eas.basedata.master.material.app.F7MaterialBaseInfoQuery); return kDBizPromptBoxMaterial;或者:F7ContextManager F7Manager = new F7ContextManager(this, OrgType.getEnum(Sale);F7Manager.registerBizMaterialF7(prmtMateri

6、al, null, com.kingdee.eas.basedata.master.material.app.F7MaterialQuery, currentStorageUnit, true);F7Manager.registerBizCustomerF7(prmtCustomer, null, com.kingdee.eas.basedata.master.cssp.app.F7CustomerQuery,currentSaleUnit);l 監(jiān)聽(tīng)不到UI組件的Enter事件監(jiān)聽(tīng)前加下面代碼:CtrlSwingUtilities.removeManagingFocusBackwardTra

7、versalKeys(prmtFlock,KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0);l KDTable里顯示百分之幾的列kdtEntrys.getColumn(Percent).getStyleAttributes().setNumberFormat(0%);0代表整數(shù),如果是小數(shù),可以改成0.00%。如果該Cell的編輯值為0.56,則顯示值會(huì)自動(dòng)變?yōu)?6%l 打開(kāi)ListUI時(shí)先彈出過(guò)濾框覆蓋ListUI的方法initDefaultFilter(),返回true。代碼如下: protected boolean initDefaultFilter

8、() return true;l 手工打開(kāi)UI IUIFactory uiFactory = UIFactory.createUIFactory(UIFactoryName.MODEL); UIContext uiContext = new UIContext(); uiContext.put(UIContext.OWNER, this); uiContext.put(UIContext.ID, id); IUIWindow uiWindow = uiFactory.create(uiName, uiContext, null, OprtState.VIEW); uiWindow.show()

9、;2. 框架功能l 修改標(biāo)準(zhǔn)產(chǎn)品實(shí)體(entity)和功能( facade)對(duì)應(yīng)代碼的方法(不影響升級(jí))一、業(yè)務(wù)場(chǎng)景現(xiàn)在客戶化開(kāi)發(fā)的很大一部份需求都源自對(duì)標(biāo)準(zhǔn)產(chǎn)品的修改,比如在銷售出庫(kù)單提交時(shí)要做一些額外的操作等。如果直接修改標(biāo)準(zhǔn)產(chǎn)品的源代碼,則會(huì)存在升級(jí)上的隱患,而且修改標(biāo)準(zhǔn)產(chǎn)品的源代碼本身就是一件麻煩的事情,要涉及到源碼的獲取和理解。本文提供的方法就是在不修改標(biāo)準(zhǔn)產(chǎn)品源代碼的基礎(chǔ)上,通過(guò)增加自定義的客戶化類來(lái)實(shí)現(xiàn)對(duì)標(biāo)準(zhǔn)產(chǎn)品行為的控制。二、原理與實(shí)現(xiàn)方法原理:對(duì)于待修改的標(biāo)準(zhǔn)產(chǎn)品,如果是涉及到 Entity或Facade的,可以添加一個(gè)客戶自定義類并繼承標(biāo)準(zhǔn)產(chǎn)品的ControllerBean

10、或FacadeControllerBean,把自定義代碼寫(xiě)在客化自定義類里,再調(diào)用原ControllerBean對(duì)應(yīng)的方法(super.method()),此自定義類會(huì)取代原類(即標(biāo)準(zhǔn)產(chǎn)品中其它地方之前如果調(diào)用了A類,而我們按下面方法創(chuàng)建了B類,則系統(tǒng)會(huì)自動(dòng)調(diào)用B類而不是A類)。升級(jí)時(shí)就算原ControllerBean的實(shí)現(xiàn)發(fā)生變化也不會(huì)影響客戶化代碼。 1.對(duì)于實(shí)體 ControllerBean,下面的實(shí)現(xiàn)步驟以標(biāo)準(zhǔn)產(chǎn)品的憑證為例,模擬在憑證提交時(shí)運(yùn)行自定義代碼。 Step 1: 找到憑證的實(shí)體(Voucher.entity),文件位置在 /solution/metadata/com/kin

11、gdee/eas/fi/gl/app。用文本編輯器打開(kāi),在中間插入以下代碼: 修改后保存。Step 2:在BOS視圖下打開(kāi)Voucher.entity(不要發(fā)布,發(fā)布會(huì)產(chǎn)生 VoucherControllerBean.java文件,此文件會(huì)覆蓋標(biāo)準(zhǔn)產(chǎn)品的文件)??梢栽跀U(kuò)展屬性里找到 Step1做的成果,如下圖: Step 3: 切換到j(luò)ava視圖下,創(chuàng)建自定義類 com.kingdee.eas.fi.gl.app.VoucherControllerBeanEx:該類要繼承 VoucherControllerBean,VoucherControllerBeanEx的完整代碼如下: package

12、 com.kingdee.eas.fi.gl.app; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.IObjectValue; import mon.EASBizException; /* * ControllerBean擴(kuò)展類 * author Yang Yihao. Just call me House. * date since 2007-9-18 * Email:

13、dejavu.house */ public class VoucherControllerBeanEx extends VoucherControllerBean /* * 覆蓋父類方法 * author Yang Yihao. Just call me House. * date since 2007-9-18 * Email: dejavu.house */ protected IObjectPK _submit(Context ctx, IObjectValue model) throws BOSException, EASBizException System.out.println

14、(Hellooooooooooooooooo World! Im Entity Superman.); return super._submit(ctx, model); Step 4: 運(yùn)行調(diào)試,當(dāng)錄完憑證,點(diǎn)擊提交時(shí),控制臺(tái)會(huì)先打印出“Hellooooooooooooooooo World! Im Entity Superman. ”,那只能說(shuō)明一個(gè)問(wèn)題,你成功了!如要進(jìn)行其它操作,聰明的你完全可以依此類推。 2.對(duì)于 Facade,實(shí)現(xiàn)方法與上面實(shí)體的實(shí)現(xiàn)方法差不多,只是 Facade在 BOS視圖下沒(méi)有擴(kuò)展屬性。下面以 BTPManager.facade為例,模擬在做 BOTP轉(zhuǎn)換前要

15、先運(yùn)行客戶化代碼: Step 1:用文本編輯器打開(kāi)BTPManager.facade文件,在中間插入以下代碼: Step 2: 在java視圖下,創(chuàng)建自定義類 com.kingdee.eas.base.btp.app.BTPManagerControllerBeanEx:該類要繼承 BTPManagerControllerBean,BTPManagerControllerBeanEx的完整代碼如下:package com.kingdee.eas.base.btp.app; import java.util.List; import com.kingdee.bos.BOSException; i

16、mport com.kingdee.bos.Context; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.eas.base.btp.BTPException; import com.kingdee.eas.base.btp.BTPTransformResult; /* * 自定義擴(kuò)展類 * author Yang Yihao. Just call me House. * date since 2007

17、-9-18 * Email: dejavu.house */ public class BTPManagerControllerBeanEx extends BTPManagerControllerBean public BTPTransformResult transformForBotp(Context ctx, String srcBillIDs, String entryNames, List entryIDs, SelectorItemCollection btpSelector, String destBillTypeBOSType, IObjectPK botMappingInf

18、oPK, String srcBillBosType) throws BOSException, BTPException System.out.println(Hellooooooooooooooooo World! Im Facade Superman.); return super.transformForBotp(ctx, srcBillIDs, entryNames, entryIDs, btpSelector, destBillTypeBOSType, botMappingInfoPK, srcBillBosType); Step 3: 運(yùn)行調(diào)試,當(dāng)做單據(jù)BOTP轉(zhuǎn)換時(shí),在生成目標(biāo)

19、單據(jù)時(shí),控制臺(tái)會(huì)先打印出 “Hellooooooooooooooooo World! Im Facade Superman. ”,Congratulations!l 通過(guò)編碼規(guī)則生成編碼的示例代碼ICodingRuleManagercodeMrgr=CodingRuleManagerFactory.getRemoteInstance();String billNo = codeMrgr.getNumber(IObjectValuecaller,Stringorg); / caller為單據(jù)的值對(duì)象, org為組織 readNumber(IObjectValuecaller,Stringorg)

20、是只讀的,即調(diào)用一次后獲得一編碼,再調(diào)時(shí)還是同一編碼,只要兩次調(diào)用中間沒(méi)被別人修改。 getNumber(IObjectValuecaller,Stringorg)是調(diào)用一次后編碼會(huì)往下走。 ICodingRuleManager.isUseIntermitNumber()的返回值會(huì)影響getNumber(IObjectValuecaller,Stringorg),如果為true,則getNumber()返回的是不斷號(hào)的編碼,如果是false則是斷號(hào)的。l 簡(jiǎn)體中文與繁體中文互轉(zhuǎn)的代碼mon.util. STConverter. sc2tc(String s) /簡(jiǎn)體轉(zhuǎn)繁體mon.util. S

21、TConverter. tc2sc(String s) /繁體轉(zhuǎn)簡(jiǎn)體l 發(fā)送消息 下面是發(fā)消息的代碼片段:IBMCMessage i = BMCMessageFactory.getRemoteInstance(); BMCMessageInfo info = new BMCMessageInfo(); info.setType(MsgType.ONLINE);/ 消息類型,例如通知消息,任務(wù)消息,狀態(tài)更新消息 info.setBizType(MsgBizType.ONLINE);/ 業(yè)務(wù)類型,例如工作流,預(yù)警平臺(tái) info.setPriority(MsgPriority.HIGH); / 優(yōu)先

22、級(jí) info.setStatus(MsgStatus.UNREADED); / 消息狀態(tài) info.setReceiver(t50IYAEZEADgAAoICqgEOBO33n8=); / 接收人ID (User的ID,不是Person的ID) info.setSender(House);/ 消息發(fā)送人 info.setTitle(特別的愛(ài)給特別的你); / 消息標(biāo)題 info.setBody(test body);/ 消息內(nèi)容 i.submit(info);l KSQL翻譯器com.kingdee.bos.sql.TransUtil.Translate(sql, DbType.MS_SQL_

23、Server);l BOTP反寫(xiě)的相關(guān)方法_reverseSave(Context ctx, IObjectPK srcBillPK, IObjectValue srcBillVO, BOTBillOperStateEnum bOTBillOperStateEnum, IObjectValue bOTRelationInfo)此方法為ControllerBean的方法,在目標(biāo)單據(jù)提交或刪除的時(shí)候觸發(fā)。l 源單按單(單據(jù)級(jí)粒度)BOTP生成目標(biāo)單public void actionCreateTo_actionPerformed(ActionEvent e) throws Exception s

24、etDAPTrans(true); super.actionCreateTo_actionPerformed(e); setDAPTrans(false); l 代碼操作元數(shù)據(jù)示例代碼如下:IMetaDataLoader iMetaDataLoader = MetaDataLoaderFactory.getLocalMetaDataLoader(ctx);EntityObjectInfo entity = iMetaDataLoader.getEntity(MetaDataPKFactory.getMetaDataPK(com.kingdee.eas.custom.sales.bd.app.M

25、aterialPriceNew); 3. 工具類l KDTable工具類(KDTableUtils)設(shè)置KDTable某列的F7控件,根據(jù)queryInfo自動(dòng)加載控件/* * author LiYanlong * email lylong * param table * param colName * param queryInfo * Description 設(shè)置KDTable某列的F7控件,根據(jù)queryInfo自動(dòng)加載控件 */public static void setTableColF7(KDTable table,String colName,String queryInfo)i

26、f(table.getColumn(colName)!=null)KDBizPromptBox prmt = null;if(table.getColumn(colName).getEditor()!=null)prmt = (KDBizPromptBox)table.getColumn(colName).getEditor().getComponent();prmt.setQueryInfo(queryInfo);elseprmt = new KDBizPromptBox();prmt.setQueryInfo(queryInfo);table.getColumn(colName).setE

27、ditor(new KDTDefaultCellEditor(prmt);elseMsgBox.showInfo(設(shè)置KDTable列F7控件錯(cuò)誤:找不到該列!+colName+);SysUtil.abort();設(shè)置表格列屬性/* * author LiYanlong * email lylong * param table * param str 列名:類型:值,列名:類型:值 . * Description 設(shè)置表格列屬性 */public static void setTableColFormat(KDTable table,String str)String cols = str.s

28、plit(,);String colStr = null;String colName = ;String opType = ;String opValue = ;for(int i=0;icols.length;i+)colStr = colsi.split(:);colName = colStr0;opType = colStr1;opValue = colStr2;/設(shè)置列能否編輯if(opType.matches(-Locked)table.getColumn(colName).getStyleAttributes().setLocked(opValue.equalsIgnoreCas

29、e(true)?true:false);/設(shè)置列顯示格式if(opType.matches(-Format)table.getColumn(colName).getStyleAttributes().setNumberFormat(opValue);/設(shè)置列隱藏if(opType.matches(-Hide)table.getColumn(colName).getStyleAttributes().setHided(opValue.equalsIgnoreCase(true)?true:false);/設(shè)置列寬度if(opType.matches(-Width)table.getColumn(

30、colName).setWidth(new Integer(opValue).intValue();/設(shè)置列水平對(duì)齊if(opType.matches(-HorAlign)HorizontalAlignment alignTemp = null;if(opValue.equalsIgnoreCase(Right)alignTemp = HorizontalAlignment.RIGHT;if(opValue.equalsIgnoreCase(Left)alignTemp = HorizontalAlignment.LEFT;if(opValue.equalsIgnoreCase(Center)

31、alignTemp = HorizontalAlignment.CENTER;table.getColumn(colName).getStyleAttributes().setHorizontalAlign(alignTemp);根據(jù)字符串建立table的列結(jié)構(gòu)/* * author LiYanlong * email lylong * param table * param str col1,col2. * Description 根據(jù)字符串建立table的列結(jié)構(gòu) */public static void initTableCol(KDTable table,String str)table

32、.removeColumns();String strCols = str.split(,);for(int i=0;istrCols.length;i+)table.addColumn().setKey(strColsi);根據(jù)字符串建立table的Head結(jié)構(gòu)/* * author LiYanlong * email lylong * param table * param str Cell1,Cell2.#Cell1,Cell2. (#:Head分隔符,每一個(gè)Head中用逗號(hào)分隔) * Description 根據(jù)字符串建立table的Head結(jié)構(gòu) */public static voi

33、d initTableHead(KDTable table,String str)table.removeHeadRows();IRow rowHead = null;String strHeads = str.split(#);String strCells = null;for(int i=0;istrHeads.length;i+)rowHead = table.addHeadRow();strCells = strHeadsi.split(,);for(int j=0;jstrCells.length;j+)rowHead.getCell(j).setValue(strCellsj);

34、l 數(shù)字工具類(NumberUtils)public class NumberUtilspublic static BigDecimal ZERO=new BigDecimal(0.00);將BigDecimal轉(zhuǎn)換成中文大寫(xiě)金額 public static String toChinese(BigDecimal number) int flag = 0;if(number=null)number=ZERO; if(pareTo(ZERO)s4.length()-3) return(輸入字串最大只能精確到仟億,小數(shù)點(diǎn)只能兩位!); int n1,n2=0; String num=; Strin

35、g unit=; for(int i=0;ilen+2)break; if(i=len) continue; n1=Integer.parseInt(String.valueOf(temp.charAt(i); num=s1.substring(n1,n1+1); n1=len-i+2; unit=s4.substring(n1,n1+1); result=result.concat(num).concat(unit); if (len=temp.length()|(len=temp.length()-1) result=result.concat(整); if (len=temp.lengt

36、h()-2) result=result.concat(零分); if(flag=1) result = 負(fù) +result; return result; l F7類(UIUtils)設(shè)置F7只能選擇CU下的客戶(當(dāng)前CU下加的和分配下來(lái)的)/* * param prmt * param cuId * throws BOSException * throws SQLException * Description 設(shè)置F7只能選擇CU下的客戶(當(dāng)前CU下加的和分配下來(lái)的) */public static void addF7Filter_CU_Customer(KDBizPromptBox p

37、rmt,String cuId) throws BOSException, SQLExceptionSet set=new HashSet();String sql = select distinct a.fdatabasedid fid + from T_BD_DataBaseDAssign a + where a.fbosobjecttype=BF0C040E + and a.fassigncuid=+cuId+ union + select fid + from T_BD_Customer + where FcontrolUnitId =+cuId+;IRowSet rowSet =SQ

38、LExecutorFactory.getRemoteInstance(sql).executeSQL();while(rowSet.next()set.add(rowSet.getString(fid);addF7Filter(prmt,new FilterItemInfo(id,set,CompareType.INCLUDE),append,and); 設(shè)置F7只能選擇CU下的物料(當(dāng)前CU下加的和分配下來(lái)的)/* * param prmt * param cuId * throws BOSException * throws SQLException * Description 設(shè)置F7只

39、能選擇CU下的物料(當(dāng)前CU下加的和分配下來(lái)的) */public static void addF7Filter_CU_Material(KDBizPromptBox prmt,String cuId) throws BOSException, SQLExceptionSet set=new HashSet();String sql = select distinct a.fdatabasedid fid + from T_BD_DataBaseDAssign a + where a.fbosobjecttype=4409E7F0 + and a.fassigncuid=+cuId+ uni

40、on + select fid + from T_BD_Material + where FcontrolUnitId =+cuId+;IRowSet rowSet =SQLExecutorFactory.getRemoteInstance(sql).executeSQL();while(rowSet.next()set.add(rowSet.getString(fid);addF7Filter(prmt,new FilterItemInfo(id,set,CompareType.INCLUDE),append,and); 設(shè)置組織單元F7過(guò)濾條件為用戶所被授權(quán)內(nèi)的組織,以及是否包含下屬組織/

41、* * author LiYanlong * email lylong * param prmt * param userInfo * param type 用戶組織類型:BizOrg 業(yè)務(wù)組織;AdminOrg 行政組織;All 全部: * param sub 是否包含下屬組織: Y 是 ; N 否 * throws BOSException * throws SQLException * Description 設(shè)置組織單元F7過(guò)濾條件為用戶所被授權(quán)內(nèi)的組織,以及是否包含下屬組織 */public static void addF7Filter_UserRangeOrg(KDBizProm

42、ptBox prmt,UserInfo userInfo,String type,String sub) throws BOSException, SQLException/獲取用戶所擁有的組織范圍IRowSet rs = HRUtils.getUserRangeOrg(userInfo,type);String compareValue = ;/建立查詢過(guò)濾FilterFilterInfo filter = new FilterInfo();CompareType compareType = sub.equals(Y)?CompareType.LIKE:CompareType.EQUALS;

43、while(rs.next()compareValue = sub.equals(Y)?rs.getString(FLongNumber)+%:rs.getString(FLongNumber);filter.getFilterItems().add(new FilterItemInfo(longNumber,compareValue,compareType);String mask = #0;int n = rs.size();for (int i=0;in-1;i+)mask = mask + or # + (i+1);filter.setMaskString(mask);/增加Filte

44、r到F7控件addF7FilterInfo(prmt,filter,append,and);為F7控件增加過(guò)濾條件。可選擇新增還是追加,以及追加的邏輯.FilterItemInfo增加/* * author LiYanlong * email lylong * param prmt * param filterItemInfo * param mode append : 追加 | new : 刪除全部的過(guò)濾條件后在新增當(dāng)前條件 * param logic and | or * throws BOSException * Description 為F7控件增加過(guò)濾條件??蛇x擇新增還是追加,以及追加的邏輯.FilterItemInfo增加 */public static void addF7Filter(KDBizPromptBox prmt,FilterItemInfo filterItemInfo,String mode,String logic) throws BOSExceptionFilterInfo filter = getF7Filter(prmt);FilterInfo filterTemp = new FilterInfo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論