命名空間
Kingdee.BOS.Core.Bill.PlugIn
繼承體系
System.Object
Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugIn
Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn
Kingdee.BOS.Core.Base.PlugIn.AbstractBasePlugIn
接口
IBillViewPlugIn
單據視圖的插件接口,繼承自IDynamicFromViewPlugIn,擴展了初始化接口和單據轉換接口。
Name | Description | |
單據頁面初始化事件 | ||
選單/下推過程, 確定單據轉換規則 | ||
選單過程,展示可選源單據;捕獲此事件,調整可選的單據類型 | ||
上/下查過程,獲得上/下查結果;捕獲此事件,調整上/下查結果 |
OnBillInitialize
單據初始化插件,在OnInitialize後調用。OnInitialize是繼承自動態表單的方法,主要應用在動態表單中已介紹。 OnBillInitialize中主要是加載單據參數BillOpenParameter,該參數繼承自DynamicFormOpenParameter。
可以在OpenParameter增加自定義參數。例如:
獲取參數,設置單據的顯示標題,初始化狀態變量。
C# | |
public override void OnBillInitialize(BillInitializeEventArgs e) { //取參數 _billTypeId = this.View.OpenParameter.GetCustomParameter("FBillTypeId"); //設置單據標題 this.View.SetFormTitle(this.View.BillBusinessInfo.GetForm().Name); //獲取當前操作狀態 _curOperationStatus = e.Paramter.Status; base.OnBillInitialize(e); } |
調用方傳遞CustomParameter方法如下:
C# | |
BillOpenParameter billParam = new BillOpenParameter(); billParam.FormId = K3.Core.SCM.SCMFormIdConst.BD_SerialMainFile; billParam.SyncCallBackAction = true; billParam.ParentPageId = this.View.PageId; billParam.PageId = Kingdee.BOS.Util.SequentialGuid.NewGuid().ToString(); billParam.Status = stats; billParam..CustomParams.Add("FBillTypeId", this.BillTypeId); this.View.ShowForm(billParam); |
IBillModelPlugIn
單據模型的插件接口,繼承自IDynamicFromModelPlugIn,提供單據特殊操作。
Name | Description | |
複製單據完畢後事件 | ||
業務對象加載後的擴展接口 | ||
調用應用服務保存成功後觸發 | ||
設置單據狀態後調用 | ||
調用應用服務提交成功後觸發 | ||
調用應用服務器,提交數據保存前觸發 | ||
設置單據狀態前調用 | ||
調用應用服務器,提交前觸發 | ||
複製單據 | ||
加載業務對象擴展接口 | ||
調用應用服務保存失敗,出錯時觸發 | ||
數據導入校驗 |
BeforeSave
單據保存前插件。單據內置保存操作,自動將修改數據保存到數據庫。插件BeforeSave可以在保存前對單據數據進行處理。通常處理有兩個:
數據校驗;
計算和更新數據;
在BOS平臺當客戶端發起請求,到web服務器後,領域模型框架調用運行時,加載插件運行。用戶執行操作時,運行時調用操作服務進行數據模型的操作。而插件中調用服務也是先向服務框架請求服務。
通常應用都是在業務保存前進行數據校驗,校驗通過後,調用保存服務保存,在大多數系統中都是這樣應用。在BOS平臺中,架構設計上支持集成服務,所有操作都是設計有服務接口,二次開發可以很容易將所有操作發佈成服務供外部系統調用。這樣對外部系統來說,調用服務保存將會很容易。但如何保證數據的正確性?大部分設計是由外部系統保證,但對複雜業務系統來說,外部系統很難保證每個業務數據的正確性,甚至用大量訪問系統來獲取驗證數據。爲此,BOS平臺在操作上提供了校驗服務,這樣在系統內部通過插件調用服務前會自動執行校驗服務。而外部系統訪問的是BOS操作發佈的服務本身也帶有校驗。
因此建議將數據校驗按業務邏輯分開成兩類,一類是界面輸入校驗,如字符、數字類型、格式化和表達式校驗等,可以在插件保存前進行校驗;而數據業務的校驗,如庫存校驗信用檢查等,通過校驗服務校驗。
校驗方法如下:
1. 優先通過IDE配置校驗數據,如輸入格式,最大最小值限定;
2. 操作控制類校驗在表單的操作前插件檢查;
3. 業務控制類校驗在表單校驗服務校驗。
該事件中可以通過設置參數的Cancel終止保存操作。
下面例子是保存前更新數據(信用評分單據保存設置信用等級標準)。
C# | |
public override void BeforeSave(BeforeSaveEventArgs e) { DynamicObject doGradeScheme = this.Model.GetValue("FScheme") as DynamicObject; decimal deSumScore = Convert.ToDecimal(this.Model.GetValue("FSumScore")); int iGradeSchemeId = Convert.ToInt32(doGradeScheme["Id"]); // 保存前判斷當前信用評分表的綜合得分屬於哪一個信用等級標準 DynamicObjectCollection docGrades = CreditServiceHelper.GetCreditGrades(this.Context, 0, iGradeSchemeId); for (int i = 0; i < docGrades.Count(); i++) { DynamicObject doGrade = docGrades; decimal deScoreFrom = Convert.ToDecimal(doGrade["FSCOREFROM"]); decimal deScoreTo = Convert.ToDecimal(doGrade["FSCORETO"]); if(deSumScore >= deScoreFrom && deSumScore <= deScoreTo) { this.View.Model.SetValue("FGrade", Convert.ToInt32(doGrade["FID"])); this.View.Model.SetValue("FSuggestion", doGrade["FDESCRIPTION"]); } } } |
AfterSave
單據保存後插件。主要用於保存後界面的控制、控件的顯示以及不需要事務保證的其他數據更新。
BeforeSubmit(提交前)和AfterSubmit(提交後)事件與保存類似,不再做介紹。