




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品研發(fā)分工管理制度
- 藥品采購配送管理制度
- 藥店企業(yè)健康管理制度
- 藥店收費票據(jù)管理制度
- 薪酬外包服務(wù)管理制度
- 設(shè)備出口資料管理制度
- 設(shè)備定期校驗管理制度
- 設(shè)備施工成本管理制度
- 設(shè)備班組安全管理制度
- 設(shè)備自主保全管理制度
- 第四講 堅持以人民為中心PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- DolphinScheduler體系架構(gòu)突破
- 施工圖審核報告
- 七年級下冊英語語法精解試題
- 2019年河北省中考數(shù)學(xué)試題【及答案】
- 腰椎ODI評分完整版
- 四川省某高速公路材料試驗專項監(jiān)理細(xì)則
- 露天礦山安全生產(chǎn)責(zé)任制匯編
- 南通鋼筋加工裝備項目可行性研究報告
- 《稅務(wù)風(fēng)險文獻(xiàn)綜述》
- 鋁電解基礎(chǔ)知識培訓(xùn)
評論
0/150
提交評論