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(提交后)事件与保存类似,不再做介绍。

 

















本文转自51GT51CTO博客,原文链接:http://blog.51cto.com/yataigp/1861970 ,如需转载请自行联系原作者


相关文章
SAP QM初阶之事务代码QC51为采购订单创建Quality Certificate
SAP QM初阶之事务代码QC51为采购订单创建Quality Certificate
SAP QM初阶之事务代码QC51为采购订单创建Quality Certificate
SAP WM 针对采购订单收货时候不能自动获取物料主数据里的Special Movement Indicator?
SAP WM 针对采购订单收货时候不能自动获取物料主数据里的Special Movement Indicator?
SAP WM 针对采购订单收货时候不能自动获取物料主数据里的Special Movement Indicator?
SAP QM物料主数据里QM Material Authorization Group字段
SAP QM物料主数据里QM Material Authorization Group字段
SAP QM物料主数据里QM Material Authorization Group字段
SAP RETAIL初阶之MM41创建商品主数据界面里的Industry Sector
SAP RETAIL初阶之MM41创建商品主数据界面里的Industry Sector
SAP RETAIL初阶之MM41创建商品主数据界面里的Industry Sector
|
前端开发
SAP HUM 内向交货单凭证流和Relationship Browser
SAP HUM 内向交货单凭证流和Relationship Browser
SAP HUM 内向交货单凭证流和Relationship Browser
SAP HUM 因为存在Open TO 单据使得HU不能创建盘点凭证
SAP HUM 因为存在Open TO 单据使得HU不能创建盘点凭证
SAP HUM 因为存在Open TO 单据使得HU不能创建盘点凭证
SAP RETAIL 为门店代码维护Plant Group(二)
SAP RETAIL 为门店代码维护Plant Group(二)
SAP RETAIL 为门店代码维护Plant Group(二)
SAP RETAIL 为门店代码维护Plant Group(一)
SAP RETAIL 为门店代码维护Plant Group(一)
SAP RETAIL 为门店代码维护Plant Group(一)
SAP HUM 如何将HU里的物料号换成另外一个物料号?
SAP HUM 如何将HU里的物料号换成另外一个物料号?
SAP HUM 如何将HU里的物料号换成另外一个物料号?
SAP QM 如何在SAP系统里审批挂在Quality Notification里的document?
SAP QM 如何在SAP系统里审批挂在Quality Notification里的document?
SAP QM 如何在SAP系统里审批挂在Quality Notification里的document?