计划运算向导,执行计划前或计划执行完成执行自定义逻辑原创
金蝶云社区-广分龙德樟
广分龙德樟
9人赞赏了该文章 754次浏览 未经作者许可,禁止转载编辑于2021年10月15日 10:53:39

一、需求:因为项目需要在执行计划运算向导前执行一段逻辑,比如增加一个判断逻辑、或做一些备份之类的操作。执行计划运算向导完成后需要执行某些逻辑。

二、实现方法:

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);

        }



赞 9