BOS培訓課件-應用框架_第1頁
BOS培訓課件-應用框架_第2頁
BOS培訓課件-應用框架_第3頁
BOS培訓課件-應用框架_第4頁
BOS培訓課件-應用框架_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

應用框架金蝶軟件(中國)有限公司嚴冠裕單據(jù)發(fā)布代碼結構及常用功能4BOS應用框架詳細設計3BOS應用框架總體設計2BOS應用框架概述1目錄開發(fā)常用接口介紹51.1什么是應用框架框架(Framework)是整個或部分系統(tǒng)的可重用設計,表現(xiàn)為一組抽象組件及組件實例間交互的方法;它規(guī)定了應用的體系結構,闡明了整個設計、協(xié)作組件之間的依賴關系、責任分配和控制流程,表現(xiàn)為一組抽象類以及其實例之間協(xié)作的方法。應用框架則是指實現(xiàn)了某應用領域與業(yè)務無關的通用基礎功能和底層服務的可重用組件。1.2應用框架的作用抽象通用的組件模型提供標準的基礎服務統(tǒng)一規(guī)范的編程模型降低大型應用軟件系統(tǒng)的開發(fā)難度縮短開發(fā)周期提高開發(fā)效率和質量1.3BOS應用框架BOS應用框架是BOS在長期的開發(fā)實踐過程中,不斷積累技術和經(jīng)驗,逐漸建立的一套符合企業(yè)信息化大部分應用場景的業(yè)務框架。開發(fā)人員無需關注太多細節(jié)就可以直接在應用框架的基礎上開發(fā)具體的業(yè)務功能和組件。1.4BOS應用框架的作用抽象通用的業(yè)務邏輯;如新增,修改,刪除等。集成標準的基礎服務;如網(wǎng)絡互斥,權限等。規(guī)范統(tǒng)一的編程模型;如單據(jù),基礎資料等。統(tǒng)一編碼規(guī)范和接口;降低開發(fā)的復雜度,提高開發(fā)效率,最大限度的實現(xiàn)系統(tǒng)的設計重用和代碼重用。單據(jù)發(fā)布代碼結構及常用功能4BOS應用框架詳細設計3BOS應用框架總體設計2BOS應用框架概述1目錄開發(fā)常用接口介紹52.1總體架構表現(xiàn)層ORM-RPC協(xié)議層業(yè)務邏輯層持久對象層數(shù)據(jù)層單據(jù)發(fā)布代碼結構及常用功能4BOS應用框架詳細設計3BOS應用框架總體設計2BOS應用框架概述1目錄開發(fā)常用接口介紹53.1BOS應用框架詳細設計應用框架主要接口和類的設計客戶端類繼承體系服務端類繼承體系核心業(yè)務邏輯的設計

UI界面的創(chuàng)建流程業(yè)務事件的響應流程3.2客戶端類繼承體系3.3客戶端類繼承體系CoreUIObjectEAS中所有UI的基類,從KDPanel派生,這樣UI可以方便地嵌入到其它UI中,不包括業(yè)務邏輯CoreUI

所有UI界面對象的父類,集中處理服務ListUI

所有序時薄UI界面對象的父類

EditUI

所有編輯UI界面對象的父類

3.4客戶端類繼承體系CoreBillListUI,CoreBillEditUI

業(yè)務單據(jù)UI界面對象的父類

BillListUI,BillEditUI

CoreBillListUI,CoreBillEditUI的子類TreeListUI,TreeDetailListUI

樹形層次結構序時薄UI界面對象的父類3.5服務端值對象類繼承體系3.6服務端值對象類繼承體系PropertyContainer

抽象定義了一個屬性容器,EAS值對象的存儲結構IObjectValue,AbstractBaseObjectValue

EAS所有值對象的抽象父類CoreBaseInfo

所有具有ID屬性的值對象的抽象父類

3.7服務端

O

R

M

對象類繼承體系3.8服務端ORM對象類繼承體系IORMModel,ORMObject

ORM-RPC協(xié)議及服務的接口和實現(xiàn)IBOSObject,AbstractBOSObject

獲取BOS運行引擎所需的上下文的接口和實現(xiàn)ICoreBase,CoreBase

所有ORM對象的抽象父類ICoreBillBase,CoreBillBaseEAS中所有業(yè)務單據(jù)ORM對象的抽象父類3.9服務端EJB對象類繼承體系3.10服務端EJB對象類繼承體系SessionBean

無狀態(tài)會話Bean的一系列操作接口AbstractBizControllerBean

EJB操作的基本實現(xiàn),獲取數(shù)據(jù)庫連接AbstractEntityControllerBeanORMapping引擎中數(shù)據(jù)訪問對象(DAO)的獲取和調用

AbstractCoreBaseControllerBeanEAS中具體業(yè)務值對象對應EJB的抽象父類3.11UI界面的創(chuàng)建流程3.12業(yè)務事件的響應流程3.13序時簿虛模式取數(shù)序時簿取數(shù)方法實模式虛模式虛模式取數(shù)的優(yōu)點

取數(shù)效率高占用內存小設置tblMain.getDataRequestManager().setDataRequestMode(KDTDataRequestManager.VIRTUAL_MODE_PAGE);KDTDataRequestManager.REAL_MODE3.14序時簿虛模式取數(shù)的流程虛模式取數(shù)的原理每次只取當前顯示頁預取前一頁和后一頁單據(jù)發(fā)布代碼結構及常用功能4BOS應用框架詳細設計3BOS應用框架總體設計2BOS應用框架概述1目錄開發(fā)常用接口介紹54.1開發(fā)常用接口及功能介紹業(yè)務單元發(fā)布后生成代碼結構說明客戶端服務端應用框架常用功能介紹開發(fā)常用接口介紹4.2生成代碼結構主要開發(fā)類

XXXListUI.javaXXXEditUI.javaXXXControllerBean.java4.3生成代碼

客戶端生成代碼:

AbstractXXXEditUI.java

AbstractXXXListUI.java

XXXEditUI.java

XXXListUI.java

AbstractXXXEditUI_perties

AbstractXXXEditUI_perties

AbstractXXXEditUI_perties

AbstractXXXEditUI.properties

AbstractXXXListUI_pertiesAbstractTXXXListUI_pertiesAbstractTXXXListUI_pertiesAbstractXXXListUI.properties4.4生成代碼

服務端生成代碼:

AbstractXXXControllerBean.java

AbstractXXXEntryControllerBean.java

XXXController.java

XXXControllerBean.java

XXXEntryController.java

XXXEntryControllerBean.java

AbstractXXXEditUIHandler.java

AbstractXXXListUIHandler.java

XXXEditUIHandler.java

XXXListUIHandler.java4.5生成代碼

客戶端服務端公共代碼:

AbstractXXXInfo.java

AbstractXXXEntryInfo.java

IXXX.java

IXXXEntry.java

XXX.java

XXXEntry.java

XXXCollection.java

XXXEntryCollection.java

XXXFactory.java

XXXEntryFactory.java

XXXInfo.java

XXXEntryInfo.java4.6必須覆蓋的框架方法編輯界面類(EditUI):

protectedIObjectValuecreateNewData(){

//returnnewXXXInfo();returnnull;}protectedICoreBasegetBizInterface()throwsException{

//returnXXXFactory.getRemoteInstance();returnnull;}protectedIObjectValuecreateNewDetailData(KDTabletable){

//returnnewXXXEntryInfo();returnnull;}4.7必須覆蓋的框架方法列表界面類(ListUI):

protectedStringgetEditUIName(){

//returnXXXEditUI.class.getName();returnnull;}protectedICoreBasegetBizInterface()throwsException{

//returnXXXFactory.getRemoteInstance();returnnull;}4.8應用框架常用功能介紹UI界面的創(chuàng)建UI界面的數(shù)據(jù)綁定對序時簿查詢的擴展UI界面右鍵表格設置EAS系統(tǒng)中各種類型ID的轉換4.9UI界面的創(chuàng)建UI界面(窗口)的創(chuàng)建代碼UIContextuiContext=newUIContext(this);IUIWindowiWindow=UIFactory.createUIFactory(UIFactoryName.MODEL).create(uiName,uiContext,null,OprtState.VIEW);iWindow.show();4.9UI界面的創(chuàng)建創(chuàng)建一個UI的panel對象,并加入到容器中。實例化一個UI,此實例化不能直接newUIContextuiContext=newUIContext(this);IUIObjectuiObject=UIFactoryHelper.initUIObject.(getEditUIName(),uiContext,null,OprtState.VIEW);***UIcurUI=(***UI)uiObject;在實例化完ui后轉型成自己定義的ui,并根據(jù)業(yè)務需求添加到某個容器中。4.10UI界面的創(chuàng)建UI打開模式包括:

UIFactoryName.FIXTAB:固定頁簽打開方式。

UIFactoryName.NEWTAB:新頁簽打開方式。

UIFactoryName.NEWWIN:新窗口打開方式。

UIFactoryName.MODEL:模態(tài)窗口打開方式。UI打開模式包括:

OprtState.VIEW:查看OprtState.ADDNEW:新增OprtState.EDIT:編輯4.11UI界面的數(shù)據(jù)綁定序時簿界面的數(shù)據(jù)綁定

KDTable的setFormatXML方法:完成表格列的定義

KDTable的putBindContents方法:設置綁定關系

KDTalbe的doRequestRowSet事件:數(shù)據(jù)獲取與顯示編輯界面的數(shù)據(jù)綁定

loadFields和storeFields方法4.12對序時簿查詢的擴展添加查詢字段(Sql語句中的select子句內容)SelectorItemCollectionsic=newSelectorItemCollection();sic.add(newSelectorItemInfo("id"));sic.add(newSelectorItemInfo("name"));this.mainQuery.getSelectors().addObjectCollection(sic);EntityViewInfo對象mainQuery中添加查詢條件:4.13對序時簿查詢的擴展添加過濾條件(Sql語句中的where子句內容)FilterInfofilterInfo=newFilterInfo();StringBuffermaskString=newStringBuffer();filterInfo.getFilterItems().add(newFilterItemInfo("id",idLists,CompareType.INCLUDE));filterInfo.getFilterItems().add(newFilterItemInfo("fiVouchered",Boolean.TRUE));maskString.append("#0AND#1");filterInfo.setMaskString(maskString.toString());filterInfo.mergeFilter(this.mainQuery.getFilter(),"AND");this.mainQuery.setFilter(filterInfo);4.14對序時簿查詢的擴展添加排序條件(Sql語句中的where子句內容)SorterItemInfosorterInfo=newSorterItemInfo("owner.number")sorterInfo.setSortType(SortType.ASCEND);this.mainQuery.getSorter().add(sorterInfo);4.15EAS中各種類型ID的轉換BOSUuidIObjectPKString4.16EAS中各種類型ID的轉換BOSUuid->IObjectPK

IObjectPKpk=newObjectUuidPK(uuid);IObjectPK->BOSUuid

BOSUuid.read(pk.toString());BOSUuid和IObjectPK->String

uuid.toString()和pk.toString();String->BOSUuid和IObjectPK

BOSUuiduuid=BOSUuid.read(id);

IObjectPKpk=newObjectUuidPK(uuid);4.17UI之間參數(shù)傳遞當從序事薄打開一個編輯窗口的時候,需要傳遞一些參數(shù),傳遞和獲取方式如下:

UIContextuiContext=newUIContext(this);uiContext.put(“name”,”tester”);

然后創(chuàng)建窗口時作為參數(shù)傳入,在編輯窗口獲取的方式如下:

tester=(String)uiContext.get(“name”);4.18上下文與資源文件

獲取客戶端的系統(tǒng)上下文參數(shù)

SysContextctx=SysContext.getSysContext()

UserInfouserInfo=(UserInfo)ctx.getCurrentUserInfo()獲取某個資源文件的鍵值EASResource.getString("com.kingdee.eas.base.TestResource","periodName")單據(jù)發(fā)布代碼結構及常用功能4BOS應用框架詳細設計3BOS應用框架總體設計2BOS應用框架概述1目錄開發(fā)常用接口介紹55.1開發(fā)常用接口介紹通用UI頁面(CoreUI)序時簿頁面(ListUI)編輯界面(EditUI)左樹右表序時簿界面(TreeListUI,TreeDetailListUI)5.2通用UI頁面(CoreUI)如何設置并顯示狀態(tài)欄中的信息如何開啟附件功能并顯示如何屏蔽表格右鍵菜單中的復制粘貼菜單如何添加一個序時簿中表格右鍵菜單項5.3設置并顯示狀態(tài)欄中的信息設置狀態(tài)欄中信息:

設置狀態(tài)欄消息:setMessageText(Stringstr);

設置狀態(tài)欄圖標:setMessageIcon(Iconicon);

設置狀態(tài)欄背景色:setMessageBgcolor(Colorcolor);設置狀態(tài)欄中信息:

showMessage();5.4如何開啟附件功能并顯示開啟并顯示附件的步驟:

覆蓋ListUI和EditUI的isShowAttachmentAction方法;返回true在客戶端的client\deploy\client目錄下新建

attachCperties文件,并在文件中加入需要顯示附件的單據(jù)的編輯界面的全路徑類名參數(shù)。例如:

com.kingdee.eas.framework1.test.client.TestBizUnitEditUI=true將attachCperties文件放到服務端

server\deploy\fileserver.ear\easWebClient\deploy\client

目錄下5.5屏蔽右鍵菜單的復制粘貼菜單只屏蔽粘貼菜單,保留復制菜單:

table.getStyleAttributes().setLocked(true)復制粘貼菜單都屏蔽掉:

在調用父類onload方法之前調用CoreUI的setCanCopyPaste方法,設置為false5.6添加序時簿中表格右鍵菜單項覆蓋CoreUI的addCommonMenusToTable方法并在調用父類方法后加入自定義的菜單:publicvoidaddCommonMenusToTable(KDTabletable){super.addCommonMenusToTable(table);PopupMenuManagermgr=this.getPopupMenuManager(table);MenuSectionsection=newMenuSection("test");mgr.addMenuSection(section);JMenuItemmenuItem=newJMenuItem();menuItem.setName("test");menuItem.setText("test");section.insertAfter(menuItem);}

5.7序時簿頁面(ListUI)表格中表頭的排序功能查詢功能表格右鍵菜單獲取表格中所選單據(jù)的id集合5.8表格中表頭的排序功能屏蔽表格中所有列表頭的排序功能:

ListUI類中的isCanOrderTable

ListUI類中的isOrderForClickTableHead

如果屏蔽只需覆蓋任意一個方法并返回fasle即可屏蔽表格中某些列的排序功能:

重寫ListUI類中的getNotOrderColumns方法并返回不排序的表格列的綁定字段的集合

5.9查詢功能

在查詢前如何增加或修改查詢條件:

在打開單據(jù)和執(zhí)行通用過濾查詢都要改變查詢條件:重寫ListUI的beforeExcutQuery方法

只在執(zhí)行通用過濾查詢時要改變查詢條件:重寫ListUI的prepareQuery方法5.10查詢功能讓單據(jù)查詢時忽略CU過濾:重寫ListUI的isIgnoreCUFilter方法:

true:忽略

false:過濾顯示序時簿表格中的合計行:

重寫ListUI的isFootVisible方法:

true:顯示false:屏蔽5.11查詢功能

設置打開序時簿前先彈出通用過濾對話框:

重寫ListUI的initDefaultFilter方法:

true:彈框false:直接打開

確保查詢方案中沒有方案選中“下次直接以該方案進入”5.12表格右鍵菜單屏蔽序時簿中表格右鍵菜單:

CoreUI的tHelper對象提供的方法:

this.tHelper.getDisabledTables().add(table);table:需要屏蔽的表格對象(如:this.tblMain)獲取序時簿中表格右鍵菜單項:

使用CoreUI的提供的方法:

this.getMenuManager(table).getMenu()5.13獲取表格中所選單據(jù)的id集合ListUI的取Id方法:

protectedStringgetSelectedKeyValue()

獲取默認表格(tblMain)選擇列表第一行的的主鍵值

protectedArrayListgetSelectedIdValues()

獲取默認表格(tblMain)所有選擇行的主鍵值protectedfinalArrayListgetSelectIdForTableSelect(KDTabletable)

獲取指定表格選擇行的主鍵值5.14編輯界面(EditUI)增刪查改功能合計行5.15增刪查改功能在保存或提交單據(jù)之前和之后加入業(yè)務邏輯:覆蓋EditUI的doBeforeSave和doAfterSave方法覆蓋EditUI的doBeforeSubmit和doAfterSubmit方法判斷單據(jù)是否被修改:

EditUI的isModify方法新增一個單據(jù)時如何初始化單據(jù)的字段:

重寫EditUI的applyDefaultValue方法,對this.editData進行初始化5.16增刪查改功能在修改單據(jù)后關閉時選擇暫存還是提交單據(jù):

重寫EditUI的isModifySave方法:

true:暫存false:提交獲取當前單據(jù)的id(PK):

EditUI的getSelectedKeyForAll方法判斷或設置當前編輯對象是否獲得對象更新鎖:

EditUI的isHasObjectUpdateLock方法

EditUI的setHasObjectUpdateLock方法5.17合計行顯示和設置編輯界面表格的合計行列:調用EditUI的setTableToSumField方法參數(shù)說明:

table:表格對象

columnFields:默認顯示格式則傳入:

{"colname1","colname2"}

如果自定義顯示格式則傳入:

{"colname1@0.0","colname2@#.##"}列表界面setIsCountAndSumRow(boolean)true:顯示合計結果false:表格下方雙擊顯示合計結果5.18左樹右表序時簿界面TreeListUI和TreeDetailListUI樹節(jié)點查詢功能TreeListUI:多級別左樹右表單據(jù)TreeDetailListUI:分組左樹右表單據(jù)區(qū)別:

TreeListUI:樹和表屬同一實體,表中數(shù)據(jù)有多個級別,具有父子關系

TreeDetailListUI:樹和表屬不同實體,表中數(shù)據(jù)分為不同的組別,可以對組別進行增刪查改5.19TreeListUI和TreeDetailListUI獲取選中的樹節(jié)點:

getSelectedTreeNode方法獲取選中的樹節(jié)點的id:

getSelectedNodeKeyValue方法判斷和設置是否包含所有子孫節(jié)點:

isIncludeAllChildren或setIncludeAllChildren方法

isIsIncludeChild或setIsIncludeChild方法5.20樹節(jié)點移動樹節(jié)點功能:

isMoveTree方法

isMoveTree或isMoveGroup方法移動樹節(jié)點到根節(jié)點下:

溫馨提示

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

評論

0/150

提交評論