




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年福建省中考語(yǔ)文真題
- 地理實(shí)踐力培養(yǎng)策略研究:高中地理教學(xué)案例分析論文
- 小學(xué)生零花錢(qián)使用與道德品質(zhì)養(yǎng)成的關(guān)聯(lián)研究論文
- 基于信息技術(shù)的初中歷史教學(xué)中算法思維培養(yǎng)的實(shí)證研究論文
- 中國(guó)醫(yī)藥級(jí)纖維素類衍生物行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 節(jié)水洗車(chē)臺(tái)管理制度
- 規(guī)范安全臺(tái)帳范本
- 茶藝師(高級(jí))試題含答案
- 財(cái)務(wù)管理學(xué)-自考?xì)v年真題
- 課程大綱數(shù)學(xué)分析
- 家庭語(yǔ)言環(huán)境與兒童語(yǔ)言發(fā)展
- 短視頻起號(hào)運(yùn)營(yíng)全攻略
- 清華人工骨成人顱骨修補(bǔ)首選課件
- 班主任微創(chuàng)意:59招讓班級(jí)管理腦洞大開(kāi)
- 水工渡槽課程設(shè)計(jì)
- 《統(tǒng)計(jì)學(xué)》 課件 廖穎文 1. 緒 論
- 07FK02防空地下室通風(fēng)設(shè)備安裝圖集
- 溝通與演講2023學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
- 第四講 堅(jiān)持以人民為中心PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 施工圖審核報(bào)告
評(píng)論
0/150
提交評(píng)論