一、需求:因为项目需要在执行计划运算向导前执行一段逻辑,比如增加一个判断逻辑、或做一些备份之类的操作。执行计划运算向导完成后需要执行某些逻辑。
二、实现方法:
1、新增一个插件继承自AbstractWizardFormPlugIn;
参考代码:
public class PlanCalculationWizardPlugIn : AbstractWizardFormPlugIn
{
。。。
}
2、重写ButtonClick事件,将执行前的逻辑写在这个事件中;
参考代码:
public override void ButtonClick(ButtonClickEventArgs e)
{
var baseData = this.View.Model.GetValue("FSchemaId") as DynamicObject;
string isHierPlan = baseData["IsHierPlan"].ToNullString();
switch (e.Key)
{
//开始计算ID为FNEXT
case "FNEXT":
if (this.View.CurrentWizardStep.WizardIndex == 1)
{
if (isHierPlan == "True" && this.Model.GetEntryRowCount("FEntityPWS") == 0)
{
e.Cancel = true;
throw new Exception("分层计划时必须选择计划区!");
}
//产生预留单
CreateReserveBill();
}
break;
case "FPREVIOUS":
break;
default:
break;
}
base.ButtonClick(e);
}
3、重写OnQueryProgressValue事件,将执行完要执行的逻辑写在这个事件中;
参考代码:
public override void OnQueryProgressValue(QueryProgressValueEventArgs e)
{
if (e.Value == 100 && check == 0)
{
string computeNo = this.Model.GetValue("FBillNo").ToString();
//更新语句
string sql = $@"/*dialect*/update 。。。";
DBUtils.Execute(this.Context, sql);
//释放预留
FreeReserveBill();
//备份预留关系表
BackupReservelink();
}
base.OnQueryProgressValue(e);
}
推荐阅读