k3cloud單據插件

 

命名空間

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

單據頁面初始化事件

OnGetConvertRule

選單/下推過程, 確定單據轉換規則

OnShowConvertOpForm

選單過程,展示可選源單據;捕獲此事件,調整可選的單據類型

OnShowTrackResult

/下查過程,獲得上/下查結果;捕獲此事件,調整上/下查結果

 

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

AfterCopyData

複製單據完畢後事件

AfterLoadData

業務對象加載後的擴展接口

AfterSave

調用應用服務保存成功後觸發

AfterSetStatus

設置單據狀態後調用

AfterSubmit

調用應用服務提交成功後觸發

BeforeSave

調用應用服務器,提交數據保存前觸發

BeforeSetStatus

設置單據狀態前調用

BeforeSubmit

調用應用服務器,提交前觸發

CopyData

複製單據

LoadData

加載業務對象擴展接口

SaveBillFailed

調用應用服務保存失敗,出錯時觸發

VerifyImportData

數據導入校驗

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(提交後)事件與保存類似,不再做介紹。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章