初學(xué)者-k3cloud插件開發(fā)基礎(chǔ)_第1頁
初學(xué)者-k3cloud插件開發(fā)基礎(chǔ)_第2頁
初學(xué)者-k3cloud插件開發(fā)基礎(chǔ)_第3頁
初學(xué)者-k3cloud插件開發(fā)基礎(chǔ)_第4頁
初學(xué)者-k3cloud插件開發(fā)基礎(chǔ)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、插件開發(fā)基礎(chǔ)1、插件開發(fā)環(huán)境開發(fā)環(huán)境配置要求K/3 Cloud BOS是運行在windows平臺上的,開發(fā)工具也是基于windows平臺的Visual studio。根據(jù)我們經(jīng)驗給出最低配置建議如下:團隊服務(wù)器配置基準(zhǔn)值團隊數(shù)據(jù)庫服務(wù)器CPU4核,2.0 GHz以上內(nèi)存SQL Server:8 GBOracle:16 GB客戶端CPU雙核,2.0 GHz以上內(nèi)存推薦:4 GB個人客戶端+數(shù)據(jù)庫CPU雙核,2.0 GHz以上內(nèi)存(SQLServer)4 GB以上內(nèi)存(oracle)8 GB以上 服務(wù)器運行環(huán)境: 服務(wù)器組件版本操作系統(tǒng)數(shù)據(jù)庫服務(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ī)模集約生產(chǎn)技術(shù)、標(biāo)準(zhǔn)化的理念和操作的高效率,使得很多應(yīng)用產(chǎn)品都趨于

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

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

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

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

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

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

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

10、框。點擊菜單要重載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.    打開IDE設(shè)計器,配置插件;先找到單據(jù)屬性窗口,編輯“采購收料單-_Bill”單據(jù)屬性: 在插件列表界面,點擊注冊插件:(注意該列表中可能已注冊有其他插件,這些插件在運行時會動態(tài)加載,刪除插件可能會導(dǎo)致業(yè)務(wù)數(shù)據(jù)錯誤)選擇插件界面點擊瀏覽:選擇編譯好的組件:勾選插件,確定返回確定并保存單據(jù)。7.    運行測試; 2、動態(tài)表單插件 2. 動態(tài)表單插件      &

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

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

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

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

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

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

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

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

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

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

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

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

25、ngdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn基礎(chǔ)資料插件Kingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn動態(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  接口視圖訪問接口接口名:IdynamicFormViewPlugIn動態(tài)表單View

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

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

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

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

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

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

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

34、及控件狀態(tài)BeforeClosed                  頁面關(guān)閉前      初始化方法OnInitialize該插件負(fù)責(zé)動態(tài)表單實例初始化,包括單據(jù)Global參數(shù)(當(dāng)然有些參數(shù)僅僅在使用時候才獲?。瑒討B(tài)初始化控件數(shù)據(jù)源等。比如,批量修改界面初始化時將允許修改的字段加入到下拉列表。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)檢測哪些字段允許批量修改,加入列表    foreach (Field field in metadata.BusinessInfo.GetFieldList()            if (field.FunControl & Field.FUNCONTROL_BULK

39、_EDIT) != Field.FUNCONTROL_BULK_EDIT) continue;        /修改時隱藏的字段不予顯示        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動態(tài)表單數(shù)據(jù)包創(chuàng)建,只在新增時觸發(fā),打開表單不觸發(fā)。我們在IDE里畫好單據(jù)和基礎(chǔ)資料后,不需要編寫任何代碼,打開界面,可以看到已經(jīng)創(chuàng)建好一張新的空單據(jù),這是因為新建時候會調(diào)用CreateNewRow創(chuàng)

44、建空數(shù)據(jù)。很多時候,我們需要創(chuàng)建有缺省值或者新增時候從其他服務(wù)獲取數(shù)據(jù)顯示過來,我們就可以通過該事件來加載數(shù)據(jù)。 示例:簡單的加載動態(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é)束后,在動態(tài)表單上顯示操作結(jié)果。C# / <summary>/ 創(chuàng)建數(shù)據(jù)包事件處理;由插件處理數(shù)據(jù)包的創(chuàng)建過程,界面僅展示/ </summary>/ <par

46、am name="e"></param>public override void CreateNewData(BizDataEventArgs e)    / 創(chuàng)建本界面需要的數(shù)據(jù)對象    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)行實體服務(wù)規(guī)則配置。該

53、事件通常用于新增分錄后對數(shù)據(jù)進(jìn)行判斷處理。需要注意,這個事件是在每次新增分錄都會觸發(fā),對于不需要在界面上顯示的可以在新建分錄后(如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è)置工序號=上取整(MAX(工序號)+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動態(tài)表單數(shù)據(jù)包創(chuàng)建后事件。該方法僅在新增表單后觸發(fā)。主要用于新建表達(dá)根據(jù)元數(shù)據(jù)

58、定義初始化數(shù)據(jù)包后,根據(jù)特殊需求,改變當(dāng)前數(shù)據(jù)。通常我們在IDE里通過配置實體服務(wù)規(guī)則實現(xiàn)表單字段的缺省值賦值:但有時需要根據(jù)一些參數(shù)動態(tài)設(shè)置值時,就需要用插件實現(xiàn)。下面舉一個例子,新增單據(jù)時根據(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");    因為該插件屬于創(chuàng)建數(shù)據(jù)包,在該插件里設(shè)置的值不會加到狀態(tài)管理器中,因此該方法設(shè)置的值是整個

62、數(shù)據(jù)包一起發(fā)送到客戶端的??蛻舳藬?shù)據(jù)可以通過Http數(shù)據(jù)監(jiān)控查詢: AfterCreateModelData模型層數(shù)據(jù)包創(chuàng)建完畢。該事件只在新增表單模型后觸發(fā),用于對新增后表單模型進(jìn)行相關(guān)操作。此插件的操作不會引起Model.DataChanged值改變。例:訂單變更查詢中,需要在界面上,根據(jù)查詢列表中的版本顯示訂單內(nè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ù)綁定前對數(shù)據(jù)進(jìn)行處理,對數(shù)據(jù)修改不會被狀態(tài)管理器記錄。例如:單據(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),該事件較常用,加載和界面刷新都會調(diào)用該插件。通常該事件處理數(shù)據(jù)可見性樣式等。如:單據(jù)插件根據(jù)類型設(shè)置單據(jù)字段可見性。C# public override void AfterBindData(EventArgs e)base.AfterBindData(e);/隱藏菜單項this.View.GetMainBarItem("tbNew").Visible = false;/顯示分錄菜單項 &#

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ù)頁簽屏蔽        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)制符號,每2位代表一種基色;從0開始,行序號    grid.SetRowBackcolor("#FFC080&

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

73、見性。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");/隱藏過濾界面排序頁簽this.View.StyleManager.SetVisible("FTab_P21", null, false); 列表界面隱藏分組滑動控件。C# public class SPMPromotionPolicyList : AbstractListPlugIn     public override void OnLoad(EventArgs e)       

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

76、ropertyValue("BackColor", "#FFEEEEEE");      注:該事件在每次UpdateView()時候都會調(diào)用。 BeforeClosed頁面關(guān)閉前插件。對于單個表單關(guān)閉,該插件基本不需要處理。對于多個表單交互,或者嵌入式表單,通常需要關(guān)閉窗體時,返回數(shù)據(jù)時,通過該插件實現(xiàn)。如:關(guān)閉時刷新父窗體。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ù)據(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論