日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

金蝶EAS开发笔记

發布時間:2024/3/26 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 金蝶EAS开发笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.界面介紹

1.?新建業務單位,若無需求,默認選用財務組織。

2. 在項目路徑下的\metadata\com\kingdee\eas\custom\bill 可改單據名稱。

3. 標準:默認先在用戶自定義下面建立報表(rpt)、基礎資料(basedata)和業務單據(bill),即在業務組別下面建業務單元,然后再在下面建業務組別,最后再建業務單元。總共四層結構。

rpt里面建一個項目名,再下面自建app和client。

4.?規范布局按鈕,位于頁面的上方,可一鍵規范布局。

5. 主要的元數據:

? ? 1)entity(實體):設計開發視圖->app->entity->屬性。

? ? 有兩種類型,鑰匙圖標和園點圖標。前者表示自有屬性,后者表示關聯屬性,類似于數據庫中的外鍵。也可以在屬性右邊的方法里面,添加自定義的方法。

? ? 2)table(數據表):可直接理解為數據庫里面的表,在此可以查看對應的字段名稱、類型和長度等等。

? ? 3)query(查詢):?主要就是SQL語句。?在子對象(主對象下面的屬性)里面可以選擇連接方式,若連接方式為默認類型就相當于于內連接父對象所有行<---->左連接子對象所有行<---->右連接

6. 修改了單據的屬性,一定要記得發布業務單元,發布完業務單元之后,接著一定要刷新Java代碼。

7.info對象:類似于一般開發中的,POJO對象或者叫entity對象。

8.ListUI和EditUI屬于前端頁面,ControllerBean.java是負責處理后臺的業務邏輯的。前后端所使用的代碼不相同。


2.單據

? 1. 使用鋼鐵基類后添加組織需要加上的代碼:

? ?EditUI編輯界面:

?public KDBizPromptBox getMainOrgUnit() {return prmtFICompany;// 主業務組織控件}protected OrgType getMainBizOrgType() {return OrgType.Company;// 組織類型}

? ?ListUI序時簿界面:

?protected OrgType getMainBizOrgType() {return OrgType.Company;}protected String getPropertyOfBizOrg(OrgType orgType) {return "FICompany.id";}

? 2.取值和設值

(1)控件:

? ? 獲取值:

? ? this.控件名稱.getValue或get類型(如getText),

? ??設置值:

? ? this.控件名稱.setValue或set類型(如setText)。

(2)分錄(kdtEntry):

? ??獲取值:

? 先獲取單元格,再定位到列。

this.kdtEntry.getCell(rowIndex, kdtEntry.getColumnIndex("RowName")).getValue(值);

? ? 或者

this.kdtEntry.getCell(rowIndex, "RowName").getValue(值);

? ? 設置值:

this.kdtEntry.getCell(rowIndex, kdtEntry.getColumnIndex("RowName")).setValue(值);

? ??或者

this.kdtEntry.getCell(rowIndex, "RowName").setValue(值);

? 3.方法

? ? onload():類加載后調用此方法,在方法里面設置監聽事件,設置初始值。操作的是控件。

? ? onshow():綁定控件。

? ? createNewDate(): 在UI頁面添加控件后會進入此方法,用于設置默認值。不能在onload()設置默認值,會被覆蓋。操作的是對象。使用字段名稱。

? ? ?createNewDetailData():操作分錄,也是用來設置默認值。

? 基本用法:

//此例子為DEP的采購訂單 @Override public IObjectValue createNewDetailData(KDTable arg0) {//獲取到控件final KDFormattedTextField rate = (KDFormattedTextField)DEPUtils.findComponetByName(this, "控件名稱");PurOrderEntryInfo vo = (PurOrderEntryInfo)super.createNewDetailData(arg0);vo.put("控件名稱", rate.getValue());return vo; }

? ? ?storeField() : 將控件的值綁定到數據庫,方法觸發的時機是在保存前、提交前、窗體關閉前。

? ? ?beforeStoreFields(): 用于綁定前的事件處理。

? ? ?verifyInput(): 校驗數據,方法里面寫保存和提交的操作。

? 4.事件

最常用的就兩個事件:editStarted和editStopped。如果是在分錄上,則為kdtEntry_editStarted和kdtEntry_editStopped。

還有mouseClicked、properyChange。

添加事件的步驟:在UI界面的事件里面找到對應的事件名稱,雙擊點進去,然后保存事件,將事件的名稱復制到相應的Java代碼里面

? 5.監聽器

(1)addDataChangeListener:

? 用法:

控件名稱.addDataChangeListener(new DataChangeListener(){@Overridepublic void dataChanged(DataChangeEvent arg0){......}});

?(2)addActionListener:

?用法:

控件名稱.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {......}});

? 6. F7

? F7類型的控件命名為:pk+自定義的控件名稱

? F7過濾:

EntityViewInfo viewInfo = new EntityViewInfo();//視圖 FilterInfo filterInfo = new FilterInfo(); //過濾設置過濾條件 filterInfo.getFilterItems().add(new FilterItemInfo("xxx"='yyyy'));//相當于where1 filterInfo.getFilterItems().add(new FilterItemInfo("zzz"='kkkk'));//相當于where2 new FilterItemInfo("number","11111",CompareType.EQUALS);//比較,相當于蒼穹的QFilter filterInfo.setMaskString("#0 or #1");//將and替換成or,下表從0開始viewInfo.setFilter(filterInfo); this.控件名稱.setEntityViewInfo(viewInfo);

? 7. 序時簿的常用方法

? ? ? refreshList:刷新頁面

? ? ? refresh:刷新操作

? ? ? getSeletedValue:獲取單據的id

? ? ??getSeletedList:獲取下標

? 8.Factory

? ? 在app下面的ControlBean.java下面操作數據庫,在對應的介入點寫代碼( _save() 增加 、 _submit 提交、_audit?審核、_unAudit 反審核和 _delete 刪除 ),只有要上下文關系,就能調用其它的Factory。

? ? ?Factory:調用指定的屬性,在entity里面查詢方法,子類沒有去父類查找。

? ? 服務端通過工廠獲取本地Controller實例:

?IProject iproj = ProjectFactory.getLocalInstance(ctx);

? ? 客戶端通過工廠獲取遠程Controller實例:

IProject iproj = ProjectFactory.getRemoteInstance();

? 9.Experience?

? ? 獲取分錄的行數:this.kdtEntry.getRowCount()

? ? 獲取枚舉類型的值:this.枚舉類型的字段名稱.getSelectedIndex(),返回的是int型,需要和自定義的枚舉值比較是否相等。


4.監聽器

F7字段:

this.F7字段.addDataChangeListener(new DataChangeListener(){@Overridepublic void dataChanged(DataChangeEvent event) {.......} });

?分錄刪除行:

this.分錄面板.addRemoveListener(new IDetailPanelListener(){@Overridepublic void afterEvent(DetailPanelEvent paramDetailPanelEvent)throws Exception {.......}}@Overridepublic void beforeEvent(DetailPanelEvent paramDetailPanelEvent)throws Exception {........} });

5.異常處理

EASBIzException:業務異常。

throw new EASBizException(new NumericExceptionSubItem("error","提示信息的內容"));

BOSException:編程時的異常,SQL,空指針......

throw new BOSException(e);

handleException:在前端拋出的異常,在createNewDate方法里面,因為其父類沒有拋出異常。

ps:在處理異常時,不能e.printStackTrace(),除非自己確保語句沒有異常。

? ? ?也可以用如下方法,來彈出提示信息:

MsgBox.error("warning", "提示內容", this); 或者 MsgBox.info("warning", "提示內容", this);

?不過此方法有局限性。?

6.SQL

利用工廠:

查詢數據: SelectorItemCollection sic = new SelectorItemCollection(); sic.add("id"); sic.add("name"); XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo(new ObjectUuidPK(),sic); XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo("此處填寫少了from條件的SQL語句,因為已經確定了表對象"); 或者 XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo("where name = "); //過濾 EntityViewInfo viewInfo = new EntityViewInfo();//視圖 FilterInfo filterInfo = new FilterInfo(); //過濾 XXXXXXFactory.getLocalInstance(ctx).getXXXXXXCollection(viewInfo); 說明:XXXXXX為自命名的單據名稱

?直接執行SQL:

前端: 增刪改:FMIsqlFacadeFactory.getRemoteInstance().executeSql(sqlString); 查:IRowSet selectRowSet = SQLExecutorFactory.getRemoteInstance(sqlString).executeSQL();后臺: 增刪改:DbUtil.execute(ctx, sqlString); 查:IRowSet rowSet = DbUtil.executeQuery(ctx, sqlString);

7.標準改造(DEP)

用user登錄系統,在動態擴展平臺高級版。

在實體類里面添加字段,不會在頁面上顯示出來,適合開發人員。

在元數據校驗或元數據檢查里面復制PK(全類名),新建Java類,命名為:名稱+CTEx。新建的類會自動進入繼承的類的子類的onload方法。

標準擴展類:

命名:名稱+Ex

以CF開頭的列名為自添加的,以F開頭的列名為本來就有。?

拿到控件名稱:

DEPUtils.findComponentByName(this,"控件名稱")

獲取類型為KDCheckBox的值 :?

int xxx = 控件名稱.getSelected();

ps:當值為32時,?KDCheckBox為勾選狀態。


8.WebSocket接口:

添加方法:在entity里面的方法里聲明一個方法。

創建接口也類似,但是命名+Facade,然后發布websocket,在runtime文件夾里面打開資源目錄,把生成的文件拉到資源目錄里面。

localhsot:56898/ormrpc/services,本地的地址,用來查看暴露的接口。部署到服務器后,記得要改成對應訂單服務器地址和端口號。


9.手工報表

繼承檢行分析的包。

_createTempTable方法,得到臨時表,查詢的列和顯示的列要一致。

_query方法(四個參數),查詢臨時表。

新建用戶頁面,自建一個UI界面。

自定義彈窗:

說明:UrgentMaterial和Cause為分錄的某一個列名,UrgentMaterialsUI為自定義的UI界面。aaaa為自定義的key值,get和put時,名稱要保持一致。

int rowIndex = e.getRowIndex(); int colIndex = e.getColIndex(); if(colIndex == kdtEntry.getColumnIndex("UrgentMaterial")){//判斷單元格是否為空ICell cell = this.kdtEntry.getCell(rowIndex,"UrgentMaterial");if(cell != null){//判斷列是否為空Boolean value = (Boolean)this.kdtEntry.getCell(rowIndex,"UrgentMaterial").getValue();if(value){UIContext context = new UIContext(ui);context.put("aa","bb");//可往 UIContext 類的實例里 put 參數,這些參數可以帶到被打開的界面上IUIWindow uiWindow = null;try {uiWindow = UIFactory.createUIFactory(UIFactoryName.MODEL).create(com.kingdee.eas.custom.bill.client.UrgentMaterialsUI.class.getName(), context, null, OprtState.VIEW);uiWindow.show();} catch (UIException uException) {handUIException(uException);}this.kdtEntry.getCell(rowIndex, "Cause").setValue(uiWindow.getUIObject().getUIContext().get("aaaa"));}else {this.kdtEntry.getCell(rowIndex, "Cause").setValue("");}}}

?自定義彈窗的Java代碼:

@Override public void ConfirmButton_mouseClicked(java.awt.event.MouseEvent e) {getUIContext().put("aaaa", this.kDTextArea.getText());//獲取文本里面的內容this.disposeUIWindow();//關閉窗體 }

10.修改客戶端地址

?參考路徑如上圖所示,更改配置文件里面的服務器地址即可,適用于IP地址發生改變時。

11.常用快捷鍵

ctrl + e:查看詳細的報錯信息。

alt + shift + d:打開debug panel??加上?ctrl + f? 查找結點,查看返回值類型。

ctrl + shift + q :分析執行器。

ctrl + alt + ] :選中要查詢的SQL語句,點擊錄制,暫停,然后就能SQL查看SQL的運行時間。

12.查詢分析器

刪除查詢分析器里面的內容只要刪除下面這個文件里面的內容即可:

13.從客戶端下載服務器下面的文件

總結

以上是生活随笔為你收集整理的金蝶EAS开发笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。