nc65金盤2018nc6開發(fā)參考pubapp高級(jí)課件2012版_第1頁(yè)
nc65金盤2018nc6開發(fā)參考pubapp高級(jí)課件2012版_第2頁(yè)
nc65金盤2018nc6開發(fā)參考pubapp高級(jí)課件2012版_第3頁(yè)
nc65金盤2018nc6開發(fā)參考pubapp高級(jí)課件2012版_第4頁(yè)
nc65金盤2018nc6開發(fā)參考pubapp高級(jí)課件2012版_第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PUBAPP高級(jí)課程 第一 PUBAPP概述以及架 PUBAPP產(chǎn)生背 Pubapp基本原 PUBAPP設(shè)計(jì)目 PUBAPP架構(gòu)描 第二 PUBAPP對(duì)UIF2的擴(kuò) 對(duì)外API以及工具 業(yè)務(wù)擴(kuò) 介 配置方 PubApp一覽 自定義機(jī) 定義對(duì) 源 PUBAPP的應(yīng)用場(chǎng) 第三 PUBAPP性能擴(kuò) 懶加 目 分頁(yè)查 原理解 配置方 應(yīng)用場(chǎng) 差異 目 應(yīng)用場(chǎng) 原理解 第四 PUBAPP流程擴(kuò) 拉 原理解 拉單流 應(yīng)用場(chǎng) 推 原理解 編寫及配置推式動(dòng)作對(duì)應(yīng)的動(dòng)作(與流相同 應(yīng)用場(chǎng) 單據(jù)聯(lián) 原理解 單據(jù)類型按鈕配 打開界面 方 效果展 應(yīng)用場(chǎng) 單據(jù)追 第五章擴(kuò)展開 組件擴(kuò) 前臺(tái)擴(kuò) 規(guī)則擴(kuò) 目 規(guī)則調(diào) BP實(shí)現(xiàn)業(yè)務(wù)規(guī)則注 第六 PUBAPPUI控件介 原理解 應(yīng)用場(chǎng) 原理解 應(yīng)用場(chǎng) 原理解 應(yīng)用場(chǎng) 原理解 應(yīng)用場(chǎng) 原理解 應(yīng)用場(chǎng) 原理解 應(yīng)用場(chǎng) 第七 PUBAPP配置功能解 mediator配置解 mediator原理解 mediator應(yīng)用場(chǎng) INITDATALISTENER打開節(jié)點(diǎn)CLOSINGLISTENER關(guān)閉節(jié)點(diǎn)BaseOrgPanel主組 原理解 應(yīng)用場(chǎng) 空行過 原理解 簡(jiǎn)單過 復(fù)雜過 應(yīng)用場(chǎng) 第八章常用組件、工 應(yīng)用場(chǎng) 原理解 配置使 應(yīng)用場(chǎng) 精度處 原理解 VO精度工具的配置使 應(yīng)用場(chǎng) 原理解 新建formulaeditdialog的情況下動(dòng)態(tài)替換其中的頁(yè) 編輯器的內(nèi)容進(jìn)行轉(zhuǎn)換(即業(yè)務(wù)語言<->原 應(yīng)用場(chǎng) 導(dǎo) 原理解 應(yīng)用場(chǎng) 導(dǎo) 單表導(dǎo) 應(yīng)用場(chǎng) 打 打印介 直接打 模板打 分單打 合并打 第九 PUBAPP主子孫擴(kuò) 主子孫UI擴(kuò) 主子孫擴(kuò) 主子孫ACTION的擴(kuò) 中間調(diào)停者M(jìn)ediator的作 效果展 第十 配置文件 配置文件SCHOOL.XML配 分頁(yè)設(shè) 配 XML界面布局總 Action的定義以及配 效果如 第十一章關(guān)鍵術(shù)語、重要知識(shí)點(diǎn)JAR 代碼生 原理解 應(yīng)用場(chǎng) PUBAPPJAR包結(jié) Pubapp下的public下的 Pubapp下的下的 Pubapp下的private下的 第一章PubApp概述以及架Pubapp產(chǎn)生背景Pubapp基本原理PubappPubAppUIFactoryII的IAppModel接口提供增加和移除的方法但不區(qū)分類型,且其只關(guān)注模型見AppEventConst類的定義不關(guān)注業(yè)務(wù)諸如beforeEditor、afterEdit、sort等。務(wù),需要在控件中實(shí)現(xiàn)相關(guān)類,并增加處理邏輯,比較分散且容易,最后一個(gè)加入的會(huì)覆蓋之前加入的,不方便且不好管理和。PubApp在解決UIFactoryII基礎(chǔ)上支持業(yè)務(wù)、并封裝標(biāo)準(zhǔn)控件增加支持對(duì)模型觸發(fā)業(yè)務(wù)的處理、在此基礎(chǔ)上出現(xiàn)了精度處理、金額計(jì)算、除此之外PubApp還提PubappPUBAPPUIF2也是MVC的典型應(yīng)用。PUBAPP和UIF2并不是的,而是依賴的,開發(fā)人員也可以UIF2UIF2PUBAPP。PubAppUAPUIF2典型界面組織形式,開發(fā)業(yè)務(wù)流程,或者開發(fā)流程節(jié)點(diǎn)等典型的NC節(jié)點(diǎn)時(shí)均可以提供支持。PubappERP管理功能PubAppPubappuif2uif2進(jìn)行了封裝、無論是在標(biāo)準(zhǔn)控件還是在領(lǐng)域模型中、對(duì)標(biāo)準(zhǔn)控件的支持?jǐn)U展了業(yè)務(wù)支持、懶加載、分UI以及模型轉(zhuǎn)發(fā)、結(jié)構(gòu)PubAppPubApp大部分的內(nèi)容、PubApp的內(nèi)容按照上述結(jié)構(gòu)來展開進(jìn)行詳細(xì)解析。PuhbappUIF2工廠基本內(nèi)容的擴(kuò)展PubApp在性能上擴(kuò)展PubApp對(duì)流程的擴(kuò)展PubApp的兩種擴(kuò)展機(jī)制PubappUI控件Pubapp提供的配置功能的解析Pubapp提供的常用工具的解析Pubapp擴(kuò)展的主子孫模式單據(jù)的解析PubappDemo在開始進(jìn)行下面的內(nèi)容前、先看一下Pubapp的一個(gè)大概的類圖、使大家對(duì)其在細(xì)粒度PubAppPubAppuif2的基礎(chǔ)上進(jìn)行擴(kuò)展、下面分三個(gè)模塊按照PubAppUIF2的標(biāo)準(zhǔn)控件例如BillListViewBillFormBatchBillTable單表界面、PubAppuif2PubAppBillListView、卡片BillForm、單表BatchBillTable都在初始化方法中增加了重新定義轉(zhuǎn)發(fā)機(jī)制、豐富了類型、其中在卡片BillForm下增加了主組織OrgPanel面板、以便定義單據(jù)的數(shù)據(jù)層次Action改變狀態(tài)的接口、表體UIF2的模型例如管理型模型BillManageModelBatchBillTableModel模型了界面數(shù)據(jù)、數(shù)據(jù)狀態(tài)、觸發(fā)、業(yè)務(wù)邏輯等功能、PubApp在此基礎(chǔ)上進(jìn)行了擴(kuò)展、管理型繼承了BillManageModel、支持流程操作、增加、擴(kuò)展支持懶加載、單表擴(kuò)展了BatchBillTableModel添加業(yè)務(wù)、主要針對(duì)處理批量數(shù)據(jù)。UIF2ActionsActionUIF2第二章PubappUIF2的擴(kuò)Pubapp列表BillListVIew、卡片BIllForm、單表BatchBillTable、樹表BillTreeView、主子孫界面等件并進(jìn)行處理、這里的包括控件和模型、pubapp里面在接收的時(shí)候并不區(qū)分單表擴(kuò)展UIFactoryII的模型(BillManageModel)層次最終實(shí)現(xiàn)的為IAppModel接口、pubapp的模型在繼承UIFactoryII的模型的基礎(chǔ)上增加了支持懶加載、支持業(yè)務(wù)流程、支持轉(zhuǎn)發(fā)增加機(jī)pubapp擴(kuò)展UIFactoryII的AppModel模型接口新增IAppModelEx接口繼承自IAppModel, API平臺(tái)AppModel的擴(kuò)展,支持按照類型來業(yè)務(wù)原理解DefaultQueryActiondataManager屬性即為上面所注入的模型管理器。PubAppUIFactoryII配置幺簡(jiǎn)單一些、UIFactoryIIaction中還配置類、它把查詢框的創(chuàng)建改為內(nèi)部的實(shí)現(xiàn)、減少了配置的繁瑣程度以及錯(cuò)誤的塊的內(nèi)容將在模型驅(qū)動(dòng)原理中介紹。效果如左邊是查詢面板 、是通過七巧板布局放置、上面是查詢按鈕、是通業(yè)務(wù)擴(kuò)目前的單據(jù)管理模型都是繼承了流程平臺(tái)模型的自定義的處理類通過配置文件裝載入AppEventHandlerMediator中并根據(jù)時(shí)間對(duì)象類型對(duì)分類,之后在模型中。已提供的路徑:nc.ui.pubapp.uif2app.event包 新 排 行改變、合計(jì)等配置方通過handleMap進(jìn)行配自定義類領(lǐng)域模型發(fā)出的、需要實(shí)現(xiàn)IAppEventHandler、這樣模型發(fā)出的會(huì)被相應(yīng)的對(duì)象捕捉到、例如上圖的為卡片表頭表尾編輯后。通過handlerGroup進(jìn)行配,可擴(kuò)展的注入方式分組中可以注入挑剔條件,符合條件的將被到模,多用來處理表體多頁(yè)簽的情況,使得的對(duì)哪些頁(yè)簽有效。不注入挑剔條件將和handlerMap的處理相同,無條件到模型。handlerGroup來進(jìn)行配置、同時(shí)可以在里面設(shè)置可以挑剔的事件以便對(duì)具體的業(yè)務(wù)進(jìn)行處理、配置如下所示:配置說明event取值為具體的event屬性picky取值可實(shí)現(xiàn)IPickyEventHandler接口來過濾是否派發(fā),如果取值為PubApp一覽自定義機(jī) 檢查源是否發(fā)生了某 產(chǎn)產(chǎn)接源外部動(dòng)對(duì)定義對(duì)在自定義中、首先需要自定義對(duì)象、對(duì)象中有”類型Type”、”型進(jìn)行定義、以便在觸發(fā)不同的操作件源可以發(fā)出不同類型的定義的類型。源大家都知道Swing界面中如果操作一個(gè)按鈕、則會(huì)觸發(fā)一個(gè)、當(dāng)然這些都是Swing里面封裝好的邏輯、現(xiàn)在需要自定義源和觸發(fā)時(shí)機(jī)、當(dāng)然以Swing觸發(fā)的為基礎(chǔ)、在此基礎(chǔ)上通過領(lǐng)域模型也即(model)發(fā)送自定義的通過模型驅(qū)動(dòng)機(jī)制然后由監(jiān)聽model的器去處理針對(duì)不同類型的邏輯操作。這個(gè)時(shí)機(jī)通過model觸發(fā)、分別被不同的器進(jìn)行捕捉并進(jìn)行相應(yīng)的處理這時(shí)Swing中的控件會(huì)先接到觸發(fā)、然后通過其對(duì)應(yīng)控件的模型也即model發(fā)事件、這個(gè)時(shí)候平臺(tái)中的控件到、例如BillScrollPane到DefaultListSelectionModel發(fā)出的然后進(jìn)行相應(yīng)的邏輯處理處理完畢后通過自己的數(shù)據(jù)模型(BillManageModel)發(fā)出特定類型含義的對(duì)象、然后由改模型的控件接到改進(jìn)而去更新界面器上面的“模型”或者“控件”發(fā)出對(duì)應(yīng)的器可以到、器可以是控件、也可以是單獨(dú)的一個(gè)類對(duì)象、但是即使定義好器也不知道改器的是哪個(gè)模型、義的器是直接顯示EventListener的然后直接到需要被的控件或者模型中就可源模會(huì)到改變、從而做出相應(yīng)控那么在器以后、模型發(fā)的時(shí)候會(huì)遍歷模型內(nèi)部的一個(gè)器列表、當(dāng)其中某個(gè)器發(fā)現(xiàn)該模型發(fā)出的是自己感的后、便會(huì)相應(yīng)并處理邏輯、發(fā)代碼如下Pubapp對(duì)于UIFactoryII中的類型進(jìn)行區(qū)分并分別進(jìn)行不同的處理、支持流程處理、轉(zhuǎn)發(fā)通過轉(zhuǎn)發(fā)進(jìn)行轉(zhuǎn)發(fā)Pubapp中增加了業(yè)務(wù)類型、例如卡片表頭表尾編輯前、編輯后;PubappPubapp中支持前臺(tái)Action抽Pubapp第三章PubApp性能擴(kuò)前臺(tái)配置過原理解臺(tái)界面在列表界面下點(diǎn)擊一條主數(shù)據(jù)、這時(shí)會(huì)懶加載改主數(shù)據(jù)下的子數(shù)據(jù)(前提是也沒VO數(shù)據(jù)全部查詢出來、只查詢出第一條主數(shù)據(jù)以及子數(shù)據(jù)、可以用操作過原理解懶加載需要使用BIllLazyQuery通過傳入的查詢條件加載單據(jù)實(shí)體、單據(jù)根據(jù)查詢voVOVO可能不是在表頭顯示效配置過原理解備注原理解PubappActionLazilyLoadActionAction提供懶加載查詢提供接口*@param *@return提供子表變化接口@paramchildrenClz@parambills

合并為一 PubApp提供了一個(gè)對(duì)象PaginationTransferObject來所有的PK以及第一頁(yè)的數(shù)據(jù)。model分頁(yè)model派發(fā)PaginationBar接收更新數(shù)據(jù)、頁(yè)取d分頁(yè)model派發(fā)數(shù)據(jù)模型管理器配voidvoid可刷接平臺(tái)的接間的數(shù)據(jù)、保證數(shù)據(jù)同步、但后面由于提供了一個(gè)BillManagePaginationDelegator作為model配注意一下使用的model為pubapp下的分頁(yè)model、注入的service需要實(shí)現(xiàn)IPaginationQueryServicepk查詢數(shù)據(jù)即Service配Pubapp提供了一個(gè)nc.ui.pubapp.uif2app.model.pagination.UIPageQueryService、前臺(tái)分頁(yè)服務(wù)接口類、目的是把之前的兩次調(diào)用合并為一次調(diào)用、兩次和數(shù)據(jù)庫(kù)交互、其allPagePkQueryServiceMethodPKs的方法;dataOfPksQueryServiceMethodpk來查數(shù)據(jù)的方法。分頁(yè)控件(面板)的配獲取的數(shù)據(jù)結(jié)果集過30萬。其主要目的就是防止錯(cuò)誤的編程代碼造成數(shù)據(jù)庫(kù)的內(nèi)容數(shù)據(jù)量自動(dòng)計(jì)算所的一個(gè)突出的問題。。V515萬行時(shí)就能達(dá)到中間件內(nèi)ID查詢到內(nèi)存,然后以一萬為一批,分批加載整個(gè)VO的數(shù)據(jù)到內(nèi)存中計(jì)算。這樣也就防止了內(nèi)存的溢出。但是結(jié)果集過30萬行的限制,從底層就斷絕了這個(gè)算法的超大數(shù)據(jù)計(jì)算可能性須找到一個(gè)辦法,可以緩ID,然后繼續(xù)分批計(jì)算。。原理解 VOs的副本作為輕量級(jí)差異VO傳到使用。VO、在保存前如果有執(zhí)行前規(guī)則、執(zhí)行后規(guī)則分別從在方法前執(zhí)行、方法后執(zhí)行、從輕量級(jí)差異VO獲取一個(gè)完整的客戶端VO、然后操作保存.合并客戶端VO和保存后的聚合VO得到一個(gè)只有改變字段的聚合VOtspk組成、原理解update方法去操作數(shù)據(jù)庫(kù)、PK的數(shù)據(jù)、差異保存邏輯如下:通過前臺(tái)界面中獲取到新增的數(shù)據(jù)VOsmodel獲取緩存中的VO數(shù)據(jù)oldVO、oldVO和VOsVOVO、也即輕量級(jí)VO(LightVO)、然后作為參數(shù)傳遞到。獲取界面VO的副本VO、(這時(shí)的聚合VO數(shù)據(jù)是修改后的的、ts也更新過了)、然據(jù)庫(kù)中、返回?cái)?shù)據(jù)庫(kù)中的單據(jù)VO。然后利用保存后具有完整數(shù)據(jù)的VO(這時(shí)VO已經(jīng)帶有TS和最新數(shù)據(jù))用 合并客戶端VO和保存后的聚合VO得到一個(gè)只有改變字段的聚合VO、通常有ts、pk組成、但也可能有其他數(shù)據(jù)組成并返回客戶端、這樣數(shù)據(jù)在傳輸?shù)倪^程中減少VOVO合并、得到一個(gè)完整的聚合VO、界面狀態(tài)為新增狀態(tài)、然后更新model、然后model發(fā)去更新標(biāo)準(zhǔn)界面。原理解model以及界面。pk以及ts的數(shù)據(jù)組成差異VO一般用在單據(jù)的“新增“修改“刪除”上面、這樣做可以減少數(shù)據(jù)的vo一般和流程業(yè)務(wù)有關(guān)、例如插入前規(guī)則、UIF2節(jié)點(diǎn)調(diào)用合并處理、其實(shí)調(diào)用合并屬于的合并調(diào)用、一般的節(jié)點(diǎn)打開需要的調(diào)用最多不超過6次、平臺(tái)中提供了 binatorCaller類來記性遠(yuǎn)binatorCallerremoteCallers屬性中、這樣在加載模板的時(shí)候會(huì)進(jìn)行一次調(diào)用、在這一次調(diào)用中、分別進(jìn)行加載單據(jù)模板以及查詢模板、比之前的首先調(diào)用每一個(gè)temteContainer的prepare()方法進(jìn)行加載模板、例如上圖中單據(jù)模然后調(diào)用BillTemoader的prepare(param1,param2,param3,..)方法進(jìn)行獲取單據(jù)模板和第一個(gè)模板的調(diào)用信息、收集完后把Token的狀態(tài)置為ready、此時(shí)開始第二個(gè)模板的調(diào)用信息的收集、當(dāng)然Token中的狀態(tài)在收集完調(diào)用信息后會(huì)被置會(huì)ready狀態(tài)、然后由查詢模板初始化查詢數(shù)據(jù)的時(shí)候從TokenToken的狀態(tài)、如果狀態(tài)不為commit則開始進(jìn)行真正調(diào)用、同時(shí)把Token的狀態(tài)置為commit、防止多次執(zhí)行調(diào)用。這些調(diào)用需要的信息在 binatorSession的RemoteCallInfo對(duì)象列表 調(diào)用的信息后、此時(shí)所有Token的狀態(tài)被置為Ready狀態(tài)、在設(shè)這樣就合并了調(diào)用、減少了調(diào)用的次數(shù)、通過一次調(diào)用和數(shù)據(jù)庫(kù)打交道多3.4.3調(diào)用類第四章PubApp流程擴(kuò)推VO轉(zhuǎn)換、最后設(shè)置到下有單據(jù)的一種操作在下游單據(jù)中點(diǎn)在下游單據(jù)中點(diǎn)框選擇上游單據(jù)中需要加載的 上接轉(zhuǎn)到目的單據(jù)接轉(zhuǎn)到目的單據(jù)當(dāng)前單據(jù)是否支持第一步,當(dāng)前單據(jù)支持nc.ui.pubapp.uif2app.actions.ReferenceAction的子類。注意:isManualtrue。如下:protectedbooleanisManual(){returntrue;}ActiondoAction方法即可。Action注入進(jìn)去,如下所示:<!--新增--<!--按鈕可以隨便寫--<!--第二步,當(dāng)前單據(jù)支持從上游拉nc.ui.pubapp.uif2app.actions.ReferenceAction的子類。POBillType.Order.getCode(),getModel().getContext().getEntranceUI(),null,null);if(PfUtil.isCloseOK())////}第三步,把支持的所有上游單據(jù)的依次注入到配置文件1<!--參照采購(gòu)訂單新增<!--<!--"/>:<!--參照請(qǐng)購(gòu)單新增<!--<!--<!--第四步,增加一個(gè)按鈕組,并把所有以<!--<!--<!--<property第五步,把新增按鈕組添加到按鈕的列表中,跟普通按鈕的處理相同,此處不再贅述。參照上游單據(jù)并且進(jìn)行VO交換之后要根據(jù)當(dāng)前類(即生成功能節(jié)點(diǎn)的類型)方式一:上游單據(jù)在動(dòng)作里調(diào)用“單據(jù)轉(zhuǎn)換規(guī)則”接口(PfUtilTools.runchangedataary方法)VO,再調(diào)用下游單據(jù)提供的服務(wù)接口實(shí)現(xiàn)推單 編寫及配置推式動(dòng)作對(duì)應(yīng)的動(dòng)作(與流相同編寫動(dòng)作同時(shí)需要在pub_business中上下游單據(jù)信息、定義單據(jù)動(dòng)作和動(dòng)作id,將這兩個(gè)屬性對(duì)應(yīng)到元數(shù)據(jù)的子實(shí)體對(duì)應(yīng)字段上,如下圖所示:系列提供的供應(yīng)鏈查詢類,在V6首先需要在單據(jù)類型管理里面上下游單據(jù)的類型、例如上游報(bào)價(jià)單的單據(jù)類型為“QUOmodel和單據(jù)類型,配置如下:<propertyname="model"下所示,更詳細(xì)的配置見文檔《打開界面.doc》<bean<propertyname="model"VO<propertyname="voClassName" <property onent"4.3.5IBillFlowIMutiBillFlowFactory,通BillFlow。IBillFlowid,使用時(shí)對(duì)于每一組的來源單據(jù)type和id,在元數(shù)據(jù)上分別配上“SRCGROUP_TYPE:X”和“SRCGROUP_ID:XX可以自己任意指定,只要保證對(duì)于每一組一致即可;4.3.6方業(yè)務(wù)組實(shí)現(xiàn)自己的MutiSrcTypeDataFinderpublicpublicclassTagMutiSrcTypeDataFinderextendsMutiSrcTypeDataFinderpublicTagMutiSrcTypeDataFinder() CompositeBillFlowFactoryfactory=newfactory.addFactory(newfactory.addFactory(new}}第五章擴(kuò)展開VO類通過UI工廠原有的方式進(jìn)行擴(kuò)業(yè)務(wù)組可以直接使用PubappActionAction不滿足當(dāng)前的業(yè)務(wù)需求、可直接定義Action繼承目前所使用的Action、通過重寫其doAction(ActionEvente)Action。doAction(ActionEvente)方法然后去實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。界面控件的繼承擴(kuò)一般直接在繼承UIFactoryII的基礎(chǔ)上擴(kuò)展界面、需要在實(shí)現(xiàn)繼承的類中實(shí)現(xiàn) ponentWithActions這三個(gè)接口、繼承PubApp提供的列表ShowUpableBillListView、卡片ShowUpableBillForm、單表ShowUpableBatchBillT、直接繼承即可、不需在重新實(shí)現(xiàn) 、ponentWithActions接口、這些接口Pubapp在上面提供 ponentWithActions這三個(gè)接口、UIFactoryIIBillManageModel即可。繼承PubApp的BillManageModelPubApp的領(lǐng)域模型繼承了UIFactoryII的BillManageModel、在上面擴(kuò)展了支持業(yè)務(wù)流程功能、懶加載功能、轉(zhuǎn)發(fā)采用代理機(jī)制區(qū)分類型可以說是在UIFactoryII的封裝需要這些功能支持時(shí)可以采用PubappIAppModel接口的模型、在模型中維持?jǐn)?shù)據(jù)、數(shù)據(jù)的狀態(tài)、收發(fā)操作、以及可以自己加入特定的業(yè)務(wù)流程、這一塊屬于領(lǐng)域模型的擴(kuò)應(yīng)用場(chǎng)UIActionUIAction、領(lǐng)域模型UIUI工廠的提供的基礎(chǔ)上進(jìn)行的、當(dāng)然需要自己BeanConfigFilePathxml文件進(jìn)行定義通過UI需要在”功能”節(jié)點(diǎn)中為需要擴(kuò)展的功能節(jié)點(diǎn)添加PluginBeanConfigFilePath參數(shù)以及變?cè)泄δ艿那疤嵯逻M(jìn)行擴(kuò)展、有利于二次開發(fā)。頁(yè)簽擴(kuò)VOVOgetValue()getClazz()方法應(yīng)用場(chǎng)規(guī)則組織方式簡(jiǎn)單,可性強(qiáng); 2可以從配置文件中加載行業(yè)和二次開發(fā)增加的業(yè)務(wù)規(guī)則 用戶需實(shí)現(xiàn)nc.impl.pubapp.pattern.rule.plugin.IPluginPoint接口,來進(jìn)行服務(wù)、操作、BP的二次開發(fā)插入點(diǎn)定義publicenumAction32PlugInPointimplementsIPluginPoint{ //銷售新 //銷售送審} bills){AroundProcesser<BillVO>= BillVO[]vos=returnvos;} processer){ rule=newCheckBillRule();}BPBPBPBPBPInsertBPTemte<AggApplyPayVO>bp=newInsertBPTemte<AggApplyPayVO>(returnbp.insert(bills);}IRule<AggApplyPayVO>rule=newFillInsertDataRule();}IRule<AggApplyPayVO>rule=newBillCodeCheckRule("36M5","vbillno","pk_group","pk_org");}}vextendtype的值支持以下三種,不可為空,參見Rece:用新的擴(kuò)展規(guī)則替換目標(biāo)規(guī)則nc.impl.pubapp.pattern.rule.plugin.EventType中定義:After:前類型mapkey對(duì)應(yīng)的插件集合按本地化+行業(yè)化優(yōu)先級(jí)進(jìn)行過濾,只保留優(yōu)先級(jí)最高的一行業(yè)(行業(yè)匹配)+本地化(本地化匹配)行業(yè)為水平+本地化(本地化匹配)行業(yè)(行業(yè)匹配)+本地化為行業(yè)為水平+本地化為第六章PubAppUI控件介BillManageModel配合使用PubApp中提供的標(biāo)準(zhǔn)列表控件為nc.ui.pubapp.uif2app.view.BillListView、其中nc.ui.pubapp.uif2app.view.ShowUpableBillListView繼承該類并實(shí)現(xiàn)了 ponent切換時(shí)對(duì)外通知的接口、其中的單據(jù)模板為BillListPanel、BillListPanel中維護(hù)一個(gè)BillData單據(jù)列表數(shù)據(jù)控制類BillListData、它是BillItem的集合、也了一個(gè)BillModel、在BillModel中可以設(shè)置不同的BillItemBillListView6.2卡片視圖(VO的上卡片下列表形式)PubApp中提供的標(biāo)準(zhǔn)卡片控件為nc.ui.pubapp.uif2app.view.BillForm、其中nc.ui.pubapp.uif2app.view.ShowUpableBillForm繼承該類并實(shí)現(xiàn)了 ponent自動(dòng)切換 ponent切換時(shí)對(duì)外通知的接口、IComponentWithActions肩膀頁(yè)簽按鈕接口、其中的單據(jù)模板為BillCardPanel、BillCardPanel中一個(gè)BillData單據(jù)列表數(shù)據(jù)控制類BillData它是BillItem的集合也了一個(gè)BillModel、在BillModel中可以設(shè)置不同的BillItemBIllForm多為標(biāo)準(zhǔn)主子表單據(jù)所采用的卡片模型、大多數(shù)節(jié)點(diǎn)都會(huì)使用這種卡片模型用這里給出平臺(tái)中的一個(gè)節(jié)點(diǎn)“客戶-”作為參考形面板、右邊為卡片界面、采用的就是BillCardPanelForm控件以及模型。實(shí)現(xiàn)對(duì)BatchBillTableModel模型數(shù)據(jù)的展現(xiàn)及的響應(yīng),與BatchEditAction、BatchAddLineAction、BatchDelLineAction等動(dòng)作配合使用PubAppnc.ui.pubapp.uif2app.view.BatchBillTable、里面增加了一些轉(zhuǎn)發(fā)和一些業(yè)務(wù)邏輯、繼承UIF2工廠的BatchBillTable、其中的單據(jù)模板為BillCardPanelBillCardPanel中一個(gè)BillData單據(jù)列表數(shù)據(jù)控制類BillData、它是BillItem的集合、也了一個(gè)BillModel、在BillModel中可以設(shè)置不同的model取單表BatchBillTable”幣種”BatchBillTable當(dāng)在左邊選擇一棵樹上的節(jié)點(diǎn)添加到右邊的那刻樹上時(shí)、需要處理其的model中的數(shù)ListToListPanelIItemChooserModel模型中的數(shù)據(jù)。ListToListPanel、效果如下初始化單據(jù)模板的BillItem

替換BillModel的第一列為樹TableTreeModel

通過轉(zhuǎn)換把具有樹表模型的TableTreeModel轉(zhuǎn)換BiiModelBillCardPanel第七章PubApp配置功能解XxxMediator配置解析InitDataListener打開節(jié)點(diǎn)ClosingListener關(guān)閉節(jié)點(diǎn)XxxMediatormediatorHierachicalDataAppModel與BillManageModel之間的第中介負(fù)責(zé)相互的傳導(dǎo)。根據(jù)情況實(shí)現(xiàn)對(duì)單個(gè)或兩個(gè)模型進(jìn)行。在樹管理型界面中,左樹驅(qū)動(dòng)右管理的數(shù)據(jù)加載<beanid="doubleClickMediator" <propertyname="listView"ref="listView"<property ponent"ref="billFormEditor"”雙擊列表顯示卡片”Bean的idMediator例如(XxxMediator)可以自動(dòng)初始化、這個(gè)中間調(diào)停者最常用的mediator其實(shí)這個(gè)中間調(diào)停者也是通過實(shí)現(xiàn)接口去兩個(gè)模型的動(dòng)作從而針對(duì)兩個(gè)模型mediator對(duì)象,又能對(duì)特定對(duì)象信息進(jìn)行操作。場(chǎng)景一:樹管理模型左邊為樹右邊為單據(jù)模板(例如”功能節(jié)點(diǎn)”)場(chǎng)景三:支持配InitDataListener打開節(jié)點(diǎn)一般為打開一個(gè)節(jié)點(diǎn)時(shí)觸發(fā)的例如在聯(lián)查單據(jù)的時(shí)候需要設(shè)置打開節(jié)點(diǎn)、配置方式比較簡(jiǎn)單、經(jīng)提供好的、配置方式如下所示:<!--打開節(jié)點(diǎn)--<bean <propertyname="model"ref="manageAppModel"<propertyname="context"<propertyname="ui"ref="billFormEditor"VO<propertyname="voClassName"value="nc.vo.train.entity.QuotationVO"/><property ponent"ref="billFormEditor" initData()進(jìn)行一些初始化的邏輯操作。ClosingListener<bean <propertyname="model"ref="ManageAppModel"<propertyname="saveAction"ref="saveAction"BaseOrgPanel<!--<beanid="orgPanel"class="nc.ui.pubapp.uif2app.view.OrgPanel"init-<propertyname="model"ref="ManageAppModel"<propertyname="dataManager"ref="modelDataManager" <propertyname="onlyLeafCanSelected"value="true"Pubapp提供了一個(gè)BillOrgPanel主組織面板類、這個(gè)面板接收組織選擇后、在設(shè)置完可BaseOrgPanelBaseOrgPanelBaseOrgPanel中Model此時(shí)單據(jù)界面上的組織定義的主組織接收并對(duì)單據(jù)表頭組織showOrgPanel屬性、當(dāng)這個(gè)屬性設(shè)置為True的時(shí)候會(huì)顯示主組織參照、當(dāng)設(shè)置false的時(shí)候不會(huì)顯示主組織。Pubappnull,VO屬于空子表、配置方式如下:<property簡(jiǎn)單的根據(jù)一個(gè)字段是否為空的空行過濾器,因?yàn)槎鄶?shù)情況下都是判斷存貨是否為空來過濾空行-->TODO<propertyname="fieldName"value="xxxx"nFilter"><property第八章常用組件、工billItem為日期參照類型、則可以按照如下設(shè)置即可:UFDateTime類型、然后pk_orgUFDateTime//IRelationForItemsitem=newitemkitemkeysetitemkeynumitemkeynnumber,則//IDataSetForCaldata=newBillCardPanelDataSet(newBillCardPanel(),row,item);//row改變的行計(jì)算的取值默認(rèn)從卡片模板表體上面取值,特殊情況,可以繼承BillCardPanelDataSet,/**publicStringgetCorigcurrencyid()//}/**publicvoidsetCorigcurrencyid(Stringvalue)}獲取精度實(shí)ScaleUtilsscale=設(shè)定參數(shù)條//ConditioncondnewCondition();////////////創(chuàng)建實(shí)例進(jìn)行計(jì)Calculatortool=newCalculator(data,卡片的精度處理放在主組織改變后后,處理一次即可,不需要其它地方代碼調(diào)用通過pk_group以及對(duì)應(yīng)卡片的billcardpanel來進(jìn)行構(gòu)造卡片精度處理對(duì)象privatevoidsetScale(BillScaleProcessorscale,TotalValueScaleProcessortotal){String[]costpricekeys=newString[] String[]globalmnykeys=newString[]{ //本位幣金String[]groupmnykeys=newString[]{ String[]orgmnykeys=newString[]{ String[]mnykeys=newString[] String[]assistNumkeys=newString[]{String[]numkeys=newString[] String[]pricekeys=newString[]{ scale.setCostPriceCtlInfo(costpricekeys,PosEnum.body,scale.setGlobalLocMnyCtlInfo(globalmnykeys,PosEnum.body,//本位幣金額精scale.setGroupLocMnyCtlInfo(groupmnykeys,PosEnum.body,scale.setNumCtlInfo(assistNumkeys,PosEnum.body,null,ItemVO.CASTUNITID,PosEnum.body,null);scale.setNumCtlInfo(numkeys,PosEnum.body,null,PosEnum.body,scale.setPriceCtlInfo(pricekeys,PosEnum.body,scale.setMnyCtlInfo(mnykeys,PosEnum.body,null,PosEnum.head,scale.setMnyCtlInfo(orgmnykeys,PosEnum.body,null,PosEnum.head, }String[]numkeys=newString[] scale.setNumCtlInfo(numkeys,PosEnum.body,null,ItemVO.CUNITID,PosEnum.body,null);VOpk_groupVOVO精度處理對(duì)象,然后設(shè)置需要計(jì)算VOprocess方法進(jìn)行處理:這里提供一個(gè)業(yè)務(wù)組用的節(jié)點(diǎn)”銷售訂單”作為展示改節(jié)點(diǎn)用到了列表和卡片的精度處UIF2nc.ui.pub.formulaedit.(ncu.pub.fruadaog.oruaaEdioraelcfraaraael(c.u.pubforua.dag.oruDganl面,默認(rèn)單擊為向編輯器中當(dāng)前編輯的位置添加文本。(n.u.pub.orua.daog.rupeaornelcraaracaelcraaraaraeae(c.u.pu.frua.daog.oruaHnsganel解析器界面使用了UI工廠2,基于配置文件的方式。nc.ui.pub.formulaedit.用戶可以參照此配置文件,寫出自己的界面配置文件,F(xiàn)ormulaEditorDialog類中包含了構(gòu)造用戶可以指定配置文件路徑來定制并展示出自己的編輯器界面但是其中幾個(gè)配置的名dialog的根容器自定義頁(yè),將其添加至函數(shù)/變量面板在新的實(shí)現(xiàn)中,有兩個(gè)地方可以添加,F(xiàn)ormulaFunctionPanel(函數(shù)實(shí)現(xiàn))新加入的IFormulaTabBuilder接口包含創(chuàng)建Tab需要的一些基本功能,包括的點(diǎn)擊時(shí)發(fā)出相應(yīng)的IFormulaListener通知,大多數(shù)需求使用此界面即可。如果用戶需要自己實(shí)現(xiàn)界面進(jìn)行展示,那么就需要在某個(gè)Panel中實(shí)現(xiàn)IFormulaTabBuilder接口,并在initUI()方法中進(jìn)行初始化界面的操作,具體實(shí)現(xiàn)可以參照在功能區(qū)如何新建一個(gè)FormulaFunctionPanel中存在屬性customerTabBuilders,用戶將自己的IFormulaTabBuilderlist中(springIOC方式)IFormulaTabBuilder而不實(shí)現(xiàn)界面(Component,UIPanel等),builderIFormulaTabBuilder去創(chuàng)建一個(gè)DefaultFormulaTabBuilderUIList進(jìn)行展示。如果想自己定義一個(gè)新的界面的話,那么就可以繼承Component(或其子類實(shí)現(xiàn))并IFormulaTabBuilder接口,此時(shí)就可以自己定義界面并進(jìn)行實(shí)現(xiàn)。自己實(shí)現(xiàn)界面的話IFormulaTabBuilderComponent(或更加通用的UIPanel)TableFieldTabBuilder。此時(shí),需要自己對(duì)listeners中的器發(fā)出處理,如果想要?jiǎng)討B(tài)添加關(guān)鍵字,那FormulaUtil類中的addKeyword并刷新(refresh)。為了兼容以前版本中對(duì)FormulaEditorDialog中一些加入頁(yè)簽Tab的操作,如addCustomTabBuilder,setCustomTabBuilderFormulaEditorDialog中仍然保存了實(shí)現(xiàn)方法:對(duì)原有的TabBuilderIFormulaTabBuilder接慮解析的 Tab實(shí)現(xiàn),但是要自定義展示列表(UIList)nc.ui.pub.formula.dialog.NatualOrderFormulaTabBuilder實(shí)現(xiàn),可以根據(jù)的formulaItems屬性(List實(shí)現(xiàn))中數(shù)據(jù)的順序進(jìn)行展示。用戶也可以繼承DefaultFormulaTabBuilder并實(shí)現(xiàn) 法返回null(默認(rèn)實(shí)現(xiàn)為null),則按照字符串的大小順序。行自定義頁(yè)簽展示(IFormulaTabBuilder)型管理,中加入FormulaTypeManager作為函數(shù)類型的管理器,將管理所有的函數(shù),并FormulaFunctionPanel中進(jìn)行展示。FormulaTypeManager中可以對(duì)函數(shù)進(jìn)行基本配置,其中basicTypeConfig是對(duì)基本函數(shù)類型(數(shù)學(xué)、字符串等)進(jìn)行配置,可以設(shè)置這些是否進(jìn)行顯示(show屬性),F(xiàn)ormulaTypetypeIdIFormulaConstantint值(轉(zhuǎn)成String),基本類型中也只是這兩個(gè)屬性在起作用;customerTypeList是用戶可以配置的公FormulaType。FormulaType中配置了函數(shù)的類型,typeId可以唯一確定此type類型,故不能發(fā)生重復(fù)(內(nèi)置函數(shù)的typeId為IFormulaConstant數(shù)字,所以用戶自定義的類型typeId不要使用類似”1”,”3”的字符串),類型名稱typeName作為顯示在函數(shù)頁(yè)簽名稱,用戶可以配置name2FormulaItemMap類型,也可以配置 到name2FormulaItemMap中,名稱-> 用)typeId0的類型頁(yè)簽(字符串函數(shù)頁(yè)簽)不顯示;并在不擴(kuò)展DefaultTabBuilder的同時(shí)加入一個(gè)自定義頁(yè)簽(名稱為“新類型”,在customerTypeList中暫時(shí)注掉了)。為了支持“業(yè)務(wù)語言描述”到“原型”的轉(zhuǎn)換(通過“轉(zhuǎn)換器鏈”來實(shí)現(xiàn))以及支持“原型”到“業(yè)務(wù)語言描述”的轉(zhuǎn)換(通過“解析器鏈”來實(shí)現(xiàn)。現(xiàn)提供一個(gè)接口IConvertor接口用來實(shí)現(xiàn)“轉(zhuǎn)換器”和“解析器”。將進(jìn)行前置轉(zhuǎn)換的方法,類似編輯器->實(shí)際@parampublicStringpreConvert(String將進(jìn)行前置轉(zhuǎn)換的方法,類似實(shí)際->編輯器@parampublicStringpostConvert(String這些轉(zhuǎn)換器可以直接配置到formulaRealEditorPanelconvertorList當(dāng)前解析中的處中編輯器界面和提示信息界面均屬于觀察者,他們要對(duì)對(duì)象“數(shù)字按鈕界面”、“邏輯按鈕界面”、“功能函數(shù)多界面”進(jìn)行。在新的解析中,觀察者需要實(shí)現(xiàn)IFormulaEventListenerFormulaRealEditorPanelFormulaHintMsgPanel,他們都需要對(duì)對(duì)象發(fā)出的請(qǐng)求FormulaEventSource進(jìn)行處理。對(duì)于對(duì)象,例如FormulaButtonPanel只需要配置一個(gè)listeners對(duì)象所有的觀察者并在必要時(shí)刻發(fā)出即可(spring配置即可)如果用戶需要實(shí)現(xiàn)自己的對(duì)象和觀察者,那么只需要實(shí)現(xiàn)接口IFormulaListener并對(duì)于IFormulaTabBuilder中的listenersFormulaFunctionPanel和FormulaVariablePanel中的listeners主要是為了兼容老版本中和內(nèi)置(將在后FormulaVariablePanel。而對(duì)于后來實(shí)現(xiàn)的IFormulaTabBuilder使用的是此builder中的點(diǎn)中的默認(rèn)規(guī)則定義中的參照即為“編輯器、效果如下所示:excel2003的導(dǎo)入以及導(dǎo)出、200363以后對(duì)會(huì)支Apache的POIexcel的操作、支持批量導(dǎo)出與批量導(dǎo)入選擇要導(dǎo)

IImportableEditor中獲取

ExcelImporter構(gòu)造導(dǎo)出billData構(gòu)造導(dǎo)出

*

{@return{@linkJComponent}對(duì)象publicJComponent @returntt>{@linkList<InputItem>}對(duì)象publicList<InputItem>getInputItems();2,nc.ui.trade.excelimport.ExcelImporterexportToExcel這個(gè)3,getValue()將導(dǎo)出的數(shù)據(jù)進(jìn)行解析,(例如把數(shù)據(jù)解析成針對(duì)一對(duì)nc.ui.trade.excelimport.Uif2BodyOnlyImportablePanelIImportableEditorExportAction需要注入模型以及導(dǎo)入/導(dǎo)出功和單表體導(dǎo)出類似、唯一不同的是主子表中導(dǎo)出導(dǎo)出實(shí)現(xiàn)IImportableEditor1,所有需要數(shù)據(jù)導(dǎo)入功能的(或單據(jù))的UI類(即結(jié)點(diǎn)類)必須實(shí)底層程序已經(jīng)確定的。IImportableEditor接口中的getInputItems方法用來返回(或單3,將格式文件中的數(shù)據(jù)解析后傳到數(shù)據(jù)導(dǎo)入器中數(shù)據(jù)導(dǎo)入器回調(diào)該數(shù)據(jù)所屬或?qū)耄ㄈ鐓?shù)控制addNewsetValue方法,將save方法,進(jìn)行保存數(shù)據(jù)操作,完成了和業(yè)務(wù)邏據(jù)) 5或單據(jù))實(shí)現(xiàn)IImportableEditor接口之后,可通過向數(shù)據(jù)導(dǎo)入工具的文 Excel2010版本)Excel文件中根據(jù)提示信息輸入數(shù)據(jù)、對(duì)于主子表錄入數(shù)據(jù)請(qǐng)參圖子數(shù)據(jù)中對(duì)應(yīng)編號(hào)為0的有兩條子數(shù)據(jù)都為0ss1主數(shù)據(jù)信息、excel中的對(duì)應(yīng)關(guān)系。nc.ui.uif2.excelimport.ImportAction中需要注入對(duì)應(yīng)的實(shí)現(xiàn)IImportableEditor接口專門處理單表體導(dǎo)入導(dǎo)出功能的類、而在Uif2BodyOnlyImportablePanel中需要注入addAction、saveActionaddNew()以及保存時(shí)的調(diào)用、對(duì)于多表導(dǎo)入的實(shí)現(xiàn)和單表類IImportableEditor接口的實(shí)現(xiàn)、這里不再贅述。(很多或單據(jù))錄入數(shù)據(jù)的方式一般是手工一條條的在界面上輸入然后保存到數(shù)據(jù)(直接打印配1directPrint:true為打印,false2modelmodel3、editor:卡片界面4onlyPrintCurrentBodyTab:false應(yīng)用場(chǎng)原理解nodeKey->–>模板打印配應(yīng)用場(chǎng)原理解打印完成。點(diǎn)擊【分單打印,則會(huì)彈出分單規(guī)則框(自動(dòng)帶出配置好的分單條件)如下圖,然后可以選擇是否作為分單依據(jù),點(diǎn)擊【確定】會(huì)打印出分單后的結(jié)果。2天分為一組。分單打印使用配<propertyname="model"ref="ManageAppModel"/><!--分表屬性,可以根據(jù)具體單據(jù)進(jìn)<property><!--SplitPrintParamDlg分單打印PrintDataSplitProcessorSplitBillData分單處理類SplitPrintAction應(yīng)用場(chǎng)合并打印介使用示第九章Pubapp主子孫擴(kuò) 面為孫表視圖(包括列表和卡片)UIPanel進(jìn)行封裝、上層為主子視圖、下層uif2uif2以主子孫模式類圖(設(shè)計(jì)圖以上是主子孫模式的設(shè)計(jì)類圖、平臺(tái)提供了對(duì)UI的擴(kuò)展即 posite列 展、UI擴(kuò)展、以及模型擴(kuò)展、下面先講述元數(shù)據(jù)層面的擴(kuò)展:NCVOPOJO類型、然后發(fā)布元數(shù)據(jù)、生成代碼、需要注意的是主子孫UI主子孫模式提供了UI層次上的擴(kuò)展提供了一個(gè)抽象類 posite實(shí)現(xiàn)自動(dòng)在此基礎(chǔ)上提供了針對(duì)列表和卡片兩種模式的主子孫封裝界面、列表即posit、卡片 posite這兩個(gè)主子孫UI控件分別組合了主子孫列 主子孫卡 CardGrandPanelListGrandPanel、該類組合模型、為了方便以及從統(tǒng)一的層面進(jìn)行控制、平臺(tái)提供了一個(gè)MainGrandModel來定義一個(gè)實(shí)現(xiàn)IAppModel接口的抽象model對(duì)象、其中重要的是一個(gè)領(lǐng)域模現(xiàn)、MainGrandModel代碼如下:主子孫model中了新增和編輯緩存是作為記錄子數(shù)據(jù)中每一條數(shù)據(jù)下對(duì)應(yīng)那些孫主子孫擴(kuò)類型定義:用枚舉類型來對(duì)主子孫類型進(jìn)行定ActionActionuif2pubapp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論