初學(xué)者-k3cloud插件開(kāi)發(fā)基礎(chǔ)_第1頁(yè)
初學(xué)者-k3cloud插件開(kāi)發(fā)基礎(chǔ)_第2頁(yè)
初學(xué)者-k3cloud插件開(kāi)發(fā)基礎(chǔ)_第3頁(yè)
初學(xué)者-k3cloud插件開(kāi)發(fā)基礎(chǔ)_第4頁(yè)
初學(xué)者-k3cloud插件開(kāi)發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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、插件開(kāi)發(fā)基礎(chǔ)1、插件開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境配置要求K/3 Cloud BOS是運(yùn)行在windows平臺(tái)上的,開(kāi)發(fā)工具也是基于windows平臺(tái)的Visual studio。根據(jù)我們經(jīng)驗(yàn)給出最低配置建議如下:團(tuán)隊(duì)服務(wù)器配置基準(zhǔn)值團(tuán)隊(duì)數(shù)據(jù)庫(kù)服務(wù)器CPU4核,2.0 GHz以上內(nèi)存SQL Server:8 GBOracle:16 GB客戶端CPU雙核,2.0 GHz以上內(nèi)存推薦:4 GB個(gè)人客戶端+數(shù)據(jù)庫(kù)CPU雙核,2.0 GHz以上內(nèi)存(SQLServer)4 GB以上內(nèi)存(oracle)8 GB以上 服務(wù)器運(yùn)行環(huán)境: 服務(wù)器組件版本操作系統(tǒng)數(shù)據(jù)庫(kù)服務(wù)器Microsoft SQL S

2、erver(標(biāo)準(zhǔn)版、企業(yè)版)2008R2 以上Windows Server 2008以上Oracle11g以上Linux x86-64AIXWEB服務(wù)器IIS6.0以上Windows Server 2008以上Microsoft .NET Framework4.0客戶端環(huán)境: 瀏覽器支持版本支持架構(gòu)瀏覽器插件Internet Explorer8.09.032位(x86)64位(x64)Silverlight 5Firefox12及以上32位(Windows)Silverlight 5 本文在過(guò)去,由于追求大規(guī)模集約生產(chǎn)技術(shù)、標(biāo)準(zhǔn)化的理念和操作的高效率,使得很多應(yīng)用產(chǎn)品都趨于

3、標(biāo)準(zhǔn)化。隨著信息技術(shù)快速發(fā)展,越來(lái)越多的企業(yè)把對(duì)人的關(guān)注、人的個(gè)性釋放及人的個(gè)性需求的滿足推到空前中心的地位,企業(yè)與市場(chǎng)逐步建立一種新型關(guān)系,建立消費(fèi)者個(gè)人數(shù)據(jù)庫(kù)和信息檔案,與消費(fèi)者建立更為個(gè)人化的聯(lián)系,及時(shí)地了解市場(chǎng)動(dòng)向和顧客需求,向顧客提供一種個(gè)人化的銷(xiāo)售和服務(wù),顧客根據(jù)自己需求提出商品性能要求,企業(yè)盡可能按顧客要求進(jìn)行生產(chǎn),迎合消費(fèi)者個(gè)別需求和品味,并應(yīng)用信息,采用靈活戰(zhàn)略適時(shí)地加以調(diào)整,以生產(chǎn)者與消費(fèi)者之間的協(xié)調(diào)合作來(lái)提高競(jìng)爭(zhēng)力,以多品種、中小批量混合生產(chǎn)取代過(guò)去的大批量生產(chǎn)。這有利于節(jié)省中間環(huán)節(jié),降低銷(xiāo)售成本。K/3Cloud BOS平臺(tái)提供動(dòng)態(tài)擴(kuò)展功能,通過(guò)動(dòng)態(tài)領(lǐng)域模型建模將業(yè)務(wù)成

4、各種標(biāo)準(zhǔn)接口和標(biāo)準(zhǔn)服務(wù),通過(guò)插件開(kāi)發(fā)完成標(biāo)準(zhǔn)業(yè)務(wù)擴(kuò)展,快速高效實(shí)現(xiàn)個(gè)性化和非標(biāo)準(zhǔn)化業(yè)務(wù)。K/3Cloud BOS平臺(tái)的插件是一種專門(mén)為某一軟件設(shè)計(jì)、用于功能擴(kuò)充的程序。通過(guò)它可以:實(shí)現(xiàn)更靈活的控制方式和客戶化定制;實(shí)現(xiàn)標(biāo)準(zhǔn)產(chǎn)品中特殊的業(yè)務(wù)流程處理;進(jìn)行個(gè)性化的菜單、外觀定制;增加自定義的菜單并響應(yīng)其操作;對(duì)已有操作和服務(wù)未支持的功能進(jìn)行擴(kuò)展;快速開(kāi)發(fā)、快速實(shí)施、快速應(yīng)用;可配置,可測(cè)試,快速部署。 介紹插件開(kāi)發(fā)前再回顧一下BOS架構(gòu)模型:             &

5、#160;        (圖 10 1 架構(gòu)模型) 動(dòng)態(tài)表單模型封裝了表單標(biāo)準(zhǔn)服務(wù)、操作和擴(kuò)展服務(wù),通過(guò)引擎和標(biāo)準(zhǔn)插件調(diào)用來(lái)組裝業(yè)務(wù)。標(biāo)準(zhǔn)插件可被業(yè)務(wù)插件繼承和替代,實(shí)現(xiàn)客戶個(gè)性化需求。根據(jù)應(yīng)用,BOS平臺(tái)提供了4類插件:1.  動(dòng)態(tài)表單插件業(yè)務(wù)邏輯封裝的插件,用于單據(jù)上業(yè)務(wù)各種事件、操作和服務(wù)的介入;提供了一系列事件、操作和服務(wù)接口;此類插件最常用。2.  服務(wù)插件基于動(dòng)態(tài)表單服務(wù)端的插件,提供服務(wù)編程接口;此類接口在外部服務(wù)直接調(diào)用。3.  校驗(yàn)規(guī)則插件針對(duì)業(yè)務(wù)規(guī)則進(jìn)行校驗(yàn)的插件

6、;4.  表單構(gòu)建插件對(duì)界面加載控件和元數(shù)據(jù)的插件;通過(guò)此插件可對(duì)界面控件及元數(shù)據(jù)動(dòng)態(tài)調(diào)整實(shí)現(xiàn)特殊需求。開(kāi)發(fā)工具        Visual studio 2012        IE插件Silverlight5        SQLServer 2008R2 或 Oracle 11G R2        跟

7、蹤工具(HttpWatchPro6.0)        插件Building路徑(K3CloudK3CloudServerBin)注意事項(xiàng):使用SQLServer2008排序規(guī)則為Chinese_PRC_CI_AS使用Oracle時(shí),數(shù)據(jù)庫(kù)字符集必須是:AL32UTF8,國(guó)家字符集必須是:AL16UTF16開(kāi)環(huán)境搭建公共環(huán)境:1.    配置一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,安裝SQLServer2008R2;2.    配置一臺(tái)web服務(wù)器,安裝K/3Cloud產(chǎn)品,配置為管理中

8、心站點(diǎn);個(gè)人環(huán)境:1.    根據(jù)環(huán)境配置要求,安裝visual studio,安裝K/3Cloud產(chǎn)品(不需要配置管理中心)。2.    檢查并更改管理中心地址,打開(kāi)K/3Cloud產(chǎn)品安裝目錄K3CloudK3CloudServerApp_Data下Common.config文件,查找managementSiteUrl,把地址更改為公共環(huán)境下建立的管理中心ip。<add key="managementSiteUrl" value="0:8000/"

9、/>開(kāi)發(fā)插件的步驟 插件開(kāi)發(fā)的步驟1.    定義插件類打開(kāi)Visual studio 2012,新建工程:MyDev.K3.SCM.Stock.Business.PlugIn;添加引用組件:Kingdee.BOSKingdee.BOS.Core新建類:ReceiptEdit,繼承自Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn2.    分析業(yè)務(wù)定義重載方法;這里,我們先簡(jiǎn)單實(shí)現(xiàn)一個(gè)Hello World:點(diǎn)擊菜單HelloWorld,彈出一個(gè)Hello World對(duì)話

10、框。點(diǎn)擊菜單要重載BarItemClick方法;3.    引用相關(guān)組件(參照組件引用規(guī)則);增加using:C# using Kingdee.BOS.Core.Bill.PlugIn;using Kingdee.BOS.Core.DynamicForm;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; 4.    重載方法編碼;重載BarItemClick方法,輸入以下代碼:C# public override void BarItemClick(BarIt

11、emClickEventArgs e)    base.BarItemClick(e);    if (e.BarItemKey = "HelloWorld")            this.View.ShowMessage("Hello world!", MessageBoxType.Notice);    保存;5.    設(shè)置編譯

12、路徑,編譯組件;編譯路徑:K3CloudK3CloudServerBin;6.    打開(kāi)IDE設(shè)計(jì)器,配置插件;先找到單據(jù)屬性窗口,編輯“采購(gòu)收料單-_Bill”單據(jù)屬性: 在插件列表界面,點(diǎn)擊注冊(cè)插件:(注意該列表中可能已注冊(cè)有其他插件,這些插件在運(yùn)行時(shí)會(huì)動(dòng)態(tài)加載,刪除插件可能會(huì)導(dǎo)致業(yè)務(wù)數(shù)據(jù)錯(cuò)誤)選擇插件界面點(diǎn)擊瀏覽:選擇編譯好的組件:勾選插件,確定返回確定并保存單據(jù)。7.    運(yùn)行測(cè)試; 2、動(dòng)態(tài)表單插件 2. 動(dòng)態(tài)表單插件      &

13、#160;  動(dòng)態(tài)表單插件提供了豐富的接口,通過(guò)這些接口可以在插件中對(duì)表單編輯和列表界面樣式、操作進(jìn)行控制,也可以對(duì)顯示數(shù)據(jù)進(jìn)行各種處理。再來(lái)回顧一下動(dòng)態(tài)表單元數(shù)據(jù)結(jié)構(gòu)和繼承關(guān)系:動(dòng)態(tài)表單模型包含表單外觀和表單業(yè)務(wù)邏輯,表單外觀管理界面控件外觀及樣式,在模型中由視圖(View)來(lái)控制,表單業(yè)務(wù)邏輯管理包括服務(wù)、校驗(yàn)器、操作和業(yè)務(wù)規(guī)則等,由模型(Model)來(lái)控制。動(dòng)態(tài)表單外觀和邏輯都是在IDE中設(shè)置的,設(shè)置的數(shù)據(jù)保存在動(dòng)態(tài)表單模型元數(shù)據(jù)中,具體由布局元數(shù)據(jù)(LayoutInfo)記錄表單外觀數(shù)據(jù),由業(yè)務(wù)元數(shù)據(jù)(BusinessInfo)記錄表單邏輯數(shù)據(jù),這2個(gè)類分別由View和Mod

14、el持有。                                      (圖 10 2 動(dòng)態(tài)表單元模型) 為了方便使用和提高開(kāi)發(fā)效率,我們將動(dòng)態(tài)表單模型分解為各種表單領(lǐng)域模型,同時(shí)為各種模型提供了相應(yīng)插件:

15、                                               (圖 10 3 領(lǐng)域模型-動(dòng)態(tài)表單模型關(guān)系)&

16、#160;         動(dòng)態(tài)表單插件分為5大類: 1.       單據(jù)插件 2.       列表插件 3.       過(guò)濾條件插件 4.       賬表插件 5.    

17、0;  動(dòng)態(tài)表單插件 繼承關(guān)系如下:                                       (圖 10 4 插件繼承關(guān)系)  動(dòng)態(tài)表單視圖 動(dòng)態(tài)表單

18、視圖         前面已經(jīng)介紹,外觀是由視圖來(lái)管理,我們先看看動(dòng)態(tài)表單視圖模型。         根據(jù)BOS架構(gòu)圖可以看到,客戶端首先向服務(wù)發(fā)起HTTP請(qǐng)求,服務(wù)端由控制器服務(wù)接受請(qǐng)求并轉(zhuǎn)送到動(dòng)態(tài)表單模型控制器,再有動(dòng)態(tài)表單控制器訪問(wèn)動(dòng)態(tài)表單視圖。動(dòng)態(tài)表單視圖加載外觀模型,并從動(dòng)態(tài)表單模型獲取數(shù)據(jù)模型。 動(dòng)態(tài)表單視圖提供2個(gè)視圖接口,IDynamicFormView和IDynamicFormViewService。IDyn

19、amicFormView是視圖接口,包含領(lǐng)域模型元數(shù)據(jù)、多視圖模型接口、操作轉(zhuǎn)發(fā)指令和通用屬性方法。該接口可由插件直接訪問(wèn)。IDynamicFormViewService是動(dòng)態(tài)表單內(nèi)部使用的接口定義,包含Controller消息路由方法,插件開(kāi)發(fā)不需關(guān)注。  IDynamicFromView有2個(gè)重要屬性,BusinessInfo和LayoutInfo,分別表示業(yè)務(wù)對(duì)象邏輯元數(shù)據(jù)和布局元數(shù)據(jù)。包含在IDE中設(shè)置的表單的所有信息。在運(yùn)行時(shí),客戶端發(fā)出訪問(wèn)表單請(qǐng)求后,首先讀取元數(shù)據(jù)初始化BusinessInfo和LayoutInfo,View和Model根據(jù)元數(shù)據(jù)定義的界面數(shù)據(jù)

20、和布局信息展示出表單。IDynamicFromView接口提供了訪問(wèn)BusinessInfo和LayoutInfo的一些方法,供插件調(diào)用以實(shí)現(xiàn)業(yè)務(wù),例如:訪問(wèn)菜單,修改控件樣式,設(shè)置標(biāo)題,更新界面等。IDynamicFromView接口同時(shí)提供操作控制和調(diào)用Model的方法,如:調(diào)用表單服務(wù),執(zhí)行操作,發(fā)送客戶端指令,刷新界面,打開(kāi)表單,動(dòng)態(tài)注冊(cè)插件等。本章節(jié)通過(guò)一些示例做詳細(xì)介紹。先看看界面元素的訪問(wèn)。在實(shí)際業(yè)務(wù)中,經(jīng)常需要對(duì)單據(jù)擴(kuò)展,增加功能,那么就需要訪問(wèn)菜單、字段顯示隱藏鎖定等。  動(dòng)態(tài)表單模型 動(dòng)態(tài)表單模型動(dòng)態(tài)表單模型接口:IDynamicFormMod

21、el和IDynamicFormModelService。設(shè)計(jì)思想同動(dòng)態(tài)表單視圖一樣,將邏輯和插件模型分開(kāi)。IDynamicFormModel是模型接口,包含領(lǐng)域模型元數(shù)據(jù)、數(shù)據(jù)操作方法。該接口可由插件直接訪問(wèn)。IDynamicFormModelService是動(dòng)態(tài)表單內(nèi)部使用的接口定義,插件開(kāi)發(fā)不需關(guān)注。          IDynamicFormModel也有BusinessInfo,和IDynamicFromView一樣,表示業(yè)務(wù)對(duì)象邏輯元數(shù)據(jù)。這里BusinessInfo的意義是根據(jù)元數(shù)據(jù)定義綁定數(shù)

22、據(jù)。    另外一個(gè)重要屬性DataObject是當(dāng)前表單的數(shù)據(jù)對(duì)象。該數(shù)據(jù)是個(gè)DynamicObject,包含單據(jù)頭和單據(jù)體數(shù)據(jù),其中單據(jù)體是集合對(duì)象DynamicObjectCollection,并且可以有多個(gè).K/3Cloud BOS動(dòng)態(tài)實(shí)體類型,默認(rèn)使用DynamicObject作為數(shù)據(jù)承載類,可以通過(guò)DynamicObjectType.ClrType屬性指定自定義類。但我們要求指定的類型必須派生自DynamicObject。       IDynamicFormModel提供的主要是針對(duì)數(shù)據(jù)進(jìn)行

23、操作的系列方法,包括:初始化、新增表單數(shù)據(jù)、復(fù)制數(shù)據(jù)、刪除數(shù)據(jù)、定位當(dāng)前分錄數(shù)據(jù)行、設(shè)置值等方法。 動(dòng)態(tài)表單插件動(dòng)態(tài)表單模型是通過(guò)插件代理實(shí)現(xiàn)業(yè)務(wù)邏輯,對(duì)外部的接口主要是插件,這些接口可以提供給二次開(kāi)發(fā)使用。命名空間 命名空間Kingdee.BOS.Core.DynamicForm.PlugIn 主要類及說(shuō)明: ClassDescriptionAbstractDynamicFormDataBinder 動(dòng)態(tài)表單數(shù)據(jù)綁定器抽象類 AbstractDynamicFormPlugIn 動(dòng)態(tài)表單插件抽象基類 AbstractDynamicWebFormBuild

24、erPlugIn 動(dòng)態(tài)表單頁(yè)面元數(shù)據(jù)構(gòu)建插件 AbstractOperationServicePlugIn 操作服務(wù)插件抽象類  主要接口:  InterfaceDescriptionIDynamicFormModelPlugIn 動(dòng)態(tài)表單Model層插件控制接口;實(shí)現(xiàn)本接口的插件,可以接收Model層的事件 IDynamicFormViewPlugIn 動(dòng)態(tài)表單View層插件接口;實(shí)現(xiàn)本接口的插件可以接收動(dòng)態(tài)表單View層事件 繼承體系 繼承體系動(dòng)態(tài)表單插件分4類,單據(jù)、基礎(chǔ)資料、動(dòng)態(tài)表單和列表。業(yè)務(wù)模型類(插件、服務(wù))繼承自抽象類表單插件單據(jù)插件Ki

25、ngdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn基礎(chǔ)資料插件Kingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn動(dòng)態(tài)表單插件Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugIn列表插件列表插件Kingdee.BOS.Core.List.PlugIn.AbstractListPlugIn單據(jù)插件命名空間Kingdee.BOS.Core.Bill.PlugIn繼承體系 繼承體系System.Object   

26、;Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugIn      Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn         Kingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn  接口視圖訪問(wèn)接口接口名:IdynamicFormViewPlugIn動(dòng)態(tài)表單View

27、層插件接口;實(shí)現(xiàn)本接口的插件可以接收動(dòng)態(tài)表單View層事件。 NameDescriptionAfterBarItemClick菜單單擊事件完成后處理擴(kuò)展接口  AfterBindData綁定數(shù)據(jù)后事件處理后擴(kuò)展接口  AfterButtonClick按鈕單擊之后調(diào)用  AfterCopyRow分錄行拷貝后調(diào)用  AfterDoOperation操作完成后調(diào)用  AfterEntryBarItemClick分錄菜單單擊事件處理擴(kuò)展接口  AfterF7Select基礎(chǔ)資料選擇返回后調(diào)用  AfterToolBarIt

28、emClick工具欄單擊事件處理擴(kuò)展接口  BarItemClick主菜單單擊事件處理擴(kuò)展接口  BeforeBindData綁定數(shù)據(jù)前事件處理后擴(kuò)展接口,主要用于加載數(shù)據(jù)到界面前對(duì)控件狀態(tài)進(jìn)行設(shè)置  BeforeClosed頁(yè)面準(zhǔn)備關(guān)閉  BeforeDoOperation操作開(kāi)始前調(diào)用  BeforeF7Select基礎(chǔ)資料界面調(diào)出之前拋出  ButtonClick按鈕單擊時(shí)調(diào)用  EntityRowClick分錄行單擊事件  EntityRowDoubleClick分錄行雙擊事件  EntryBar

29、ItemClick分錄菜單單擊事件處理擴(kuò)展接口  EntryButtonCellClick表格按鈕單擊時(shí)調(diào)用  FieldLabelClick字段標(biāo)題單擊事件  FireEntryCheck單據(jù)體列全選事件  ListViewClick列表控件單擊事件  OnInitialize頁(yè)面初始化  TabItemSelectedChange頁(yè)簽控件的頁(yè)簽選中事件  ToolBarItemClick工具欄單擊事件處理擴(kuò)展接口  TreeDragDropKDTree 拖拽事件  TreeNodeClickTreeV

30、iew 節(jié)點(diǎn)單擊之后調(diào)用  TreeNodeDoubleClickTreeView 節(jié)點(diǎn)雙擊之后調(diào)用   模型訪問(wèn)接口接口名:IdynamicFormModelPlugIn動(dòng)態(tài)表單Model層插件控制接口;實(shí)現(xiàn)本接口的插件,可以接收Model層的事件。主要包括: NameDescriptionAfterCreateNewData業(yè)務(wù)對(duì)象創(chuàng)建后的擴(kuò)展接口  AfterCreateNewEntryRow新增、插入、多行輸入后調(diào)用  BeforeUpdateValue值改變更新前的擴(kuò)展接口  CreateNewData創(chuàng)建新業(yè)務(wù)對(duì)

31、象擴(kuò)展接口,插件可以更加需要自己創(chuàng)建對(duì)象  DataChanged字段值改變后擴(kuò)展接口   加載機(jī)制動(dòng)態(tài)表單元模型包括外觀模型和表單邏輯模型,第一次訪問(wèn)時(shí)會(huì)先加載元數(shù)據(jù),初始化視圖和模型對(duì)象,初始化頁(yè)面,然后創(chuàng)建數(shù)據(jù)包并綁定數(shù)據(jù)。對(duì)于二次開(kāi)發(fā)提供了一系列插件允許二次開(kāi)發(fā)在加載表單時(shí)對(duì)視圖、模型、數(shù)據(jù)包及界面進(jìn)行控制,插件在加載過(guò)程中的執(zhí)行順序如下:OnInitialize                 &

32、#160;          頁(yè)面初始化CreateNewData                     動(dòng)態(tài)表單數(shù)據(jù)包創(chuàng)建AfterCreateNewEntryRow      創(chuàng)建分錄行后AfterCreateNewData     

33、   動(dòng)態(tài)表單數(shù)據(jù)包創(chuàng)建后BeforeBindData                     綁定數(shù)據(jù)前事件AfterBindData                       綁定數(shù)據(jù)

34、及控件狀態(tài)BeforeClosed                  頁(yè)面關(guān)閉前      初始化方法OnInitialize該插件負(fù)責(zé)動(dòng)態(tài)表單實(shí)例初始化,包括單據(jù)Global參數(shù)(當(dāng)然有些參數(shù)僅僅在使用時(shí)候才獲?。?,動(dòng)態(tài)初始化控件數(shù)據(jù)源等。比如,批量修改界面初始化時(shí)將允許修改的字段加入到下拉列表。C# / <summary>/ 界面初始化/ </summar

35、y>/ <param name="e"></param>public override void OnInitialize(Core.DynamicForm.PlugIn.Args.InitializeEventArgs e)    /根據(jù)列表的formid,獲取元數(shù)據(jù)    metadata = (FormMetadata)ServiceHelper.MetaDataServiceHelper.Load       

36、; (this.View.Context, this.View.ParentFormView.BillBusinessInfo.GetForm().Id);     /設(shè)置標(biāo)題 - -!    string strTitle = string.Format("1-0",        metadata.GetLayoutInfo().GetFormAppearance().Caption,    

37、    this.View.LayoutInfo.GetFormAppearance().Caption);    LocaleValue formTitle = new LocaleValue();    formTitle.Add(new KeyValuePair<int, string>(this.Context.UserLocale.LCID, strTitle);    this.View.SetFormTitle(formTitle); &#

38、160;   List<EnumItem> list = new List<EnumItem>();    /循環(huán)檢測(cè)哪些字段允許批量修改,加入列表    foreach (Field field in metadata.BusinessInfo.GetFieldList()            if (field.FunControl & Field.FUNCONTROL_BULK

39、_EDIT) != Field.FUNCONTROL_BULK_EDIT) continue;        /修改時(shí)隱藏的字段不予顯示        Appearance app = metadata.GetLayoutInfo().GetAppearance(field.Key);        if (app != null)    

40、0;               if (app.Visible & Appearance.VIS_EDIT) != Appearance.VIS_EDIT)                continue;         

41、60;       _lstFields.Add(field);        EnumItem item = new EnumItem();        item.Value = field.Key;        item.Caption = field.Name;     

42、;   list.Add(item);         /排序并將list加入到下拉列表    list = list.OrderBy(p => p.Captionthis.View.Context.UserLocale.LCID).ToList();     if (list.Count != 0)            sele

43、ctedFielKey = list.FirstOrDefault().Value;         this.View.GetControl<ComboFieldEditor>("FCombo").SetComboItems(list);創(chuàng)建數(shù)據(jù)包 創(chuàng)建數(shù)據(jù)包CreateNewData動(dòng)態(tài)表單數(shù)據(jù)包創(chuàng)建,只在新增時(shí)觸發(fā),打開(kāi)表單不觸發(fā)。我們?cè)贗DE里畫(huà)好單據(jù)和基礎(chǔ)資料后,不需要編寫(xiě)任何代碼,打開(kāi)界面,可以看到已經(jīng)創(chuàng)建好一張新的空單據(jù),這是因?yàn)樾陆〞r(shí)候會(huì)調(diào)用CreateNewRow創(chuàng)

44、建空數(shù)據(jù)。很多時(shí)候,我們需要?jiǎng)?chuàng)建有缺省值或者新增時(shí)候從其他服務(wù)獲取數(shù)據(jù)顯示過(guò)來(lái),我們就可以通過(guò)該事件來(lái)加載數(shù)據(jù)。 示例:簡(jiǎn)單的加載動(dòng)態(tài)表單數(shù)據(jù)。C# public override void CreateNewData(BizDataEventArgs e)    if (!billFormId.IsNullOrEmptyOrWhiteSpace()            DynamicObject obj = BusinessDataServi

45、ceHelper.LoadBillTypePara(context, businessInfo, formId, false);        e.BizDataObject = obj;        base.CreateNewData(e); 示例:操作結(jié)束后,在動(dòng)態(tài)表單上顯示操作結(jié)果。C# / <summary>/ 創(chuàng)建數(shù)據(jù)包事件處理;由插件處理數(shù)據(jù)包的創(chuàng)建過(guò)程,界面僅展示/ </summary>/ <par

46、am name="e"></param>public override void CreateNewData(BizDataEventArgs e)    / 創(chuàng)建本界面需要的數(shù)據(jù)對(duì)象    e.BizDataObject = new DynamicObject(this.View.OpenParameter.FormMetaData.BusinessInfo.GetDynamicObjectType();     BusinessInfo info = t

47、his.View.OpenParameter.FormMetaData.BusinessInfo;     / 給角色表格賦值    Entity resultEntity = info.GetEntity("FEntity");     Field seqField = info.GetField("FSeq");    Field nameField = info.GetField("FName&quo

48、t;);    Field statusField = info.GetField("FStatus");    Field messageField = info.GetField("FMessage");    Field typeField = info.GetField("FType");     DynamicObjectCollection resultEntityData = (Dynamic

49、ObjectCollection)resultEntity.DynamicProperty.GetValue(e.BizDataObject);     int row = 0;    foreach (OperateResult rowResult in _results)            / 添加新行        DynamicObject ro

50、wData = new DynamicObject(resultEntity.DynamicObjectType);         / 給行中的字段賦值        seqField.DynamicProperty.SetValue(rowData, row + 1);        nameField.DynamicProperty.SetValue(rowData, r

51、owResult.Name);        statusField.DynamicProperty.SetValue(rowData, (rowResult.SuccessStatus ? "1" : "0");        messageField.DynamicProperty.SetValue(rowData, rowResult.Message);     

52、;   typeField.DynamicProperty.SetValue(rowData, (int)rowResult.MessageType).ToString();        resultEntityData.Add(rowData);        row+;     AfterCreateNewEntryRow創(chuàng)建分錄行后事件。字段值設(shè)置優(yōu)先考慮使用IDE進(jìn)行實(shí)體服務(wù)規(guī)則配置。該

53、事件通常用于新增分錄后對(duì)數(shù)據(jù)進(jìn)行判斷處理。需要注意,這個(gè)事件是在每次新增分錄都會(huì)觸發(fā),對(duì)于不需要在界面上顯示的可以在新建分錄后(如AfterCreateNewData事件)一次性處理。C# / <summary> / 創(chuàng)建新的分錄行事件/ </summary>/ <param name="e"></param>public override void AfterCreateNewEntryRow(CreateNewEntryEventArgs e)    base.AfterCreate

54、NewEntryRow(e);     if (e.Entity.Key.Equals(CONST_ENG_Route.CONST_FSubEntity.ENTITY_FSubEntity)            IEnumerable<DynamicObject> subEntryDataCol = this.Model.GetEntityDataObject(e.Entity);     &

55、#160;  if (e.Row = subEntryDataCol.Count() - 1)   / 插入行不賦值                    / 設(shè)置工序號(hào)=上取整(MAX(工序號(hào))+1)/10)*10,且不大于9999            int maxOper

56、Number = subEntryDataCol.Select(w => w.GetDynamicObjectItemValue<int>(CONST_ENG_Route.CONST_FSubEntity.ORM_OperNumber).Max();            int newOperNumber = (int)Math.Ceiling(decimal)maxOperNumber + 1) / 10) * 10;    

57、;        this.Model.SetValue(CONST_ENG_Route.CONST_FSubEntity.KEY_FOperNumber, newOperNumber > 9999 ? 9999 : newOperNumber, e.Row);              AfterCreateNewData動(dòng)態(tài)表單數(shù)據(jù)包創(chuàng)建后事件。該方法僅在新增表單后觸發(fā)。主要用于新建表達(dá)根據(jù)元數(shù)據(jù)

58、定義初始化數(shù)據(jù)包后,根據(jù)特殊需求,改變當(dāng)前數(shù)據(jù)。通常我們?cè)贗DE里通過(guò)配置實(shí)體服務(wù)規(guī)則實(shí)現(xiàn)表單字段的缺省值賦值:但有時(shí)需要根據(jù)一些參數(shù)動(dòng)態(tài)設(shè)置值時(shí),就需要用插件實(shí)現(xiàn)。下面舉一個(gè)例子,新增單據(jù)時(shí)根據(jù)當(dāng)前組織獲取郵件的缺省值,賦值到當(dāng)前數(shù)據(jù)包。 C# public override void AfterCreateNewData(EventArgs e)    base.AfterCreateNewData(e);    OQLFilter ofilter = new OQLFilter();  &

59、#160; ofilter.Add(new OQLFilterHeadEntityItem FilterString = string.Format(" FORGID =0 ", this.Model.Context.CurrentOrganizationInfo.ID) );     DynamicObject obj = BusinessDataServiceHelper.Load(this.View.Context, "BAS_MAILDEFAULTSET", null, ofilter); 

60、60;  if (obj != null && obj.Count() > 0)            DynamicObject defaultSet = obj0;        this.View.Model.SetValue("FMessageType", defaultSet"FMessageType");   &#

61、160;    this.View.Model.SetValue("FServer", defaultSet"FOutgoingMailServer");        this.View.Model.SetValue("FSMTPPort", defaultSet"FSMTPPort");    因?yàn)樵摬寮儆趧?chuàng)建數(shù)據(jù)包,在該插件里設(shè)置的值不會(huì)加到狀態(tài)管理器中,因此該方法設(shè)置的值是整個(gè)

62、數(shù)據(jù)包一起發(fā)送到客戶端的??蛻舳藬?shù)據(jù)可以通過(guò)Http數(shù)據(jù)監(jiān)控查詢: AfterCreateModelData模型層數(shù)據(jù)包創(chuàng)建完畢。該事件只在新增表單模型后觸發(fā),用于對(duì)新增后表單模型進(jìn)行相關(guān)操作。此插件的操作不會(huì)引起Model.DataChanged值改變。例:訂單變更查詢中,需要在界面上,根據(jù)查詢列表中的版本顯示訂單內(nèi)容,在打開(kāi)查詢時(shí)缺省打開(kāi)第一行基準(zhǔn)版本的訂單。插件代碼:C# / <summary>/ 模型數(shù)據(jù)包創(chuàng)建完畢,顯示訂單界面/ </summary>/ <param name="e"></param&g

63、t;public override void AfterCreateModelData(EventArgs e)    if (listVersions != null && listVersions.Count() > 0)            baseOrderData = SCMCommon.DeserializeJsonStringToDynamicObject(orderBusinessInfo, listVersions0.Jso

64、nData);         ShowOrderBillVersion();      數(shù)據(jù)綁定 數(shù)據(jù)綁定BeforeBindData綁定數(shù)據(jù)前事件。該插件可以在數(shù)據(jù)綁定前對(duì)數(shù)據(jù)進(jìn)行處理,對(duì)數(shù)據(jù)修改不會(huì)被狀態(tài)管理器記錄。例如:?jiǎn)螕?jù)插件中根據(jù)類型增加分錄行。C# public override void BeforeBindData(EventArgs e)    base.BeforeBindData(e); &#

65、160;  /基礎(chǔ)資料    if (_modelTypeId = ElementType.ELEMENTTYPE_BASE.ToString()            this.View.Model.CreateNewEntryRow("FSearchControl");        else if (_modelTypeId = ElementType.ELEMENTTY

66、PE_BILL.ToString() /業(yè)務(wù)單據(jù)            this.View.Model.CreateNewEntryRow("FFieldParamControl");        / 操作參數(shù)    this.View.Model.CreateNewEntryRow("FPARAMOPERATION"); 注:批量新增行用this.Mod

67、el.BatchCreateNewEntryRow(string key, int rowCount)方法。 AfterBindData綁定數(shù)據(jù)及控件狀態(tài),該事件較常用,加載和界面刷新都會(huì)調(diào)用該插件。通常該事件處理數(shù)據(jù)可見(jiàn)性樣式等。如:?jiǎn)螕?jù)插件根據(jù)類型設(shè)置單據(jù)字段可見(jiàn)性。C# public override void AfterBindData(EventArgs e)base.AfterBindData(e);/隱藏菜單項(xiàng)this.View.GetMainBarItem("tbNew").Visible = false;/顯示分錄菜單項(xiàng) &#

68、160;  this.View.GetBarItem("Fentity", "tbAdd").Enabled = true;     /基礎(chǔ)資料    if (_modelTypeId = ElementType.ELEMENTTYPE_BASE.ToString()            this.View.StyleManager.SetVisible("FTab

69、_Field", null, false);else if (_modelTypeId = ElementType.ELEMENTTYPE_BILL.ToString() /業(yè)務(wù)單據(jù)        /單據(jù)不含單據(jù)類型字段時(shí),字段參數(shù)頁(yè)簽屏蔽        if (this._metaData.GetLayoutInfo().GetFieldAppearances().Any(f => f is BillTypeFieldAppearance

70、)                    this.View.StyleManager.SetVisible("FTab_Field", null, true);         設(shè)置背景顏色。C# public override void AfterBindData(EventArgs e) &#

71、160;          /獲取單據(jù)體表格, 參數(shù)為單據(jù)體Key,示例代碼假設(shè)為FEntity    EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");    /設(shè)置第一行的背景色,參數(shù):顏色,6位16進(jìn)制符號(hào),每2位代表一種基色;從0開(kāi)始,行序號(hào)    grid.SetRowBackcolor("#FFC080&

72、quot;, 0);    /設(shè)置第二行F1字段的背景色,參數(shù):字段Key;顏色;行序號(hào)    grid.SetBackcolor("F1", "#FFC080", 1);   加載和關(guān)閉 加載和關(guān)閉OnLoad頁(yè)面加載。該事件在BeforeBindData前觸發(fā),并且不受StyleManager管理,在此事件設(shè)置單據(jù)字段的可見(jiàn)性和鎖定性無(wú)效。OnLoad時(shí),數(shù)據(jù)已經(jīng)獲取到,通常我們?cè)诖耸录幚硪恍?shù)據(jù)設(shè)置。 例如:過(guò)濾界面插件設(shè)置缺省值和頁(yè)簽可

73、見(jiàn)性。C# public class SaleCollectFilter : AbstractCommonFilterPlugIn public override void OnLoad(EventArgs e)base.OnLoad(e);/設(shè)置日期缺省值    this.View.Model.SetValue("FStartDate", dateFrom.ToString("yyyy-MM-dd");this.View.Model.SetValue("FEndDate", dateTo.To

74、String("yyyy-MM-dd");/隱藏過(guò)濾界面排序頁(yè)簽this.View.StyleManager.SetVisible("FTab_P21", null, false); 列表界面隱藏分組滑動(dòng)控件。C# public class SPMPromotionPolicyList : AbstractListPlugIn     public override void OnLoad(EventArgs e)       

75、0;      base.OnLoad(e);         / 隱藏分組滑動(dòng)控件(默認(rèn)不展開(kāi))         this.View.GetControl<SplitContainer>("FSpliter").HideFirstPanel(true);this.View.GetControl("FPanel").SetCustomP

76、ropertyValue("BackColor", "#FFEEEEEE");      注:該事件在每次UpdateView()時(shí)候都會(huì)調(diào)用。 BeforeClosed頁(yè)面關(guān)閉前插件。對(duì)于單個(gè)表單關(guān)閉,該插件基本不需要處理。對(duì)于多個(gè)表單交互,或者嵌入式表單,通常需要關(guān)閉窗體時(shí),返回?cái)?shù)據(jù)時(shí),通過(guò)該插件實(shí)現(xiàn)。如:關(guān)閉時(shí)刷新父窗體。C# public override void BeforeClosed(BeforeClosedEventArgs e)   &

77、#160; object isDataChanged = this.View.OpenParameter.GetCustomParameter("Changed");    if (isDataChanged != null && (bool)isDataChanged)            this.View.ParentFormView.Refresh();     

78、0;  this.View.SendDynamicFormAction(this.View.ParentFormView);    base.BeforeClosed(e); 關(guān)閉時(shí)傳遞數(shù)據(jù)到父窗體。C# public override void BeforeClosed(BeforeClosedEventArgs e)this.View.ReturnToParentWindow(_data);    base.BeforeClosed(e); 關(guān)閉窗體判斷數(shù)據(jù)是否修改并提示保存。C# / <summary>/ 界面關(guān)閉前事件:判斷用戶是否修改了數(shù)據(jù),提示保存/ </summary>/ <param name="e"></param>public override void BeforeClosed(BeforeClosedEventArgs e)   

溫馨提示

  • 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)論