自动接收网银流水二开指导原创
金蝶云社区-Yeti
Yeti
3人赞赏了该文章 983次浏览 未经作者许可,禁止转载编辑于2019年07月09日 11:31:26

网上银行模块的执行计划【自动接收银行流水后台执行服务】可根据用户自定义的设置来生成对应单据

image.png

但是有用户需要根据某些字段来判断生成什么类型的单据或者不生成单据,比如根据备注来决定生成的收款单的单据类型。

那么就需要对执行计划进行二开。我们可以扩展系统标准的插件来达到目的。

下面是扩展的例子


相关命名空间

Kingdee.K3.FIN.Core.Object.WB

Kingdee.K3.FIN.WB.App.Core.AutoReceiveFromBank


    public class NewAutoService : AutoReceiveFromBankService

    {

        protected override ReceiveFromBankService CreateInstance()

        {

            return new NewService();

        }

    }


    public class NewService : ReceiveFromBankService

    {

        #region 添加新单据类型生成方法


        protected override Dictionary<string, GenerateBillObj> InitBillType()

        {

            var list = base.InitBillType();

            list.Add("单据类型ID", GenerateXXXBillObj);

            return list;

        }


        /// <summary>

        /// 新单据类型生成方法

        /// </summary>

        /// <param name="ctx"></param>

        /// <param name="plan">接收计划(即上图的自动接收银行收款记录设置的实体)</param>

        /// <param name="acc">银行账号</param>

        /// <param name="detailTradeResult">流水数据</param>

        /// <param name="dic">流水批量匹配往来单位dic</param>

        /// <returns></returns>

        private DynamicObject GenerateXXXBillObj(Context ctx, DynamicObject plan, DynamicObject acc, DetailTradeResult detailTradeResult, Dictionary<string, DynamicObject> dic)

        {

            return null;

        }


        #endregion


        /// <summary>

        /// 重写收款单生成方法

        /// </summary>

        /// <param name="ctx"></param>

        /// <param name="plan"></param>

        /// <param name="acc"></param>

        /// <param name="detailTradeResult"></param>

        /// <param name="dic"></param>

        /// <returns></returns>

        protected override DynamicObject GenerateRecBillObj(Context ctx, DynamicObject plan, DynamicObject acc, DetailTradeResult detailTradeResult, Dictionary<string, DynamicObject> dic)

        {

            //标准插件生成的收款单实体

            var recBillObj = base.GenerateRecBillObj(ctx, plan, acc, detailTradeResult, dic);

            //return null则不保存该实体(该条流水不生成单据)

            return recBillObj;

        }


        /// <summary>

        /// 重写收款结算单生成方法

        /// </summary>

        /// <param name="ctx"></param>

        /// <param name="plan"></param>

        /// <param name="acc"></param>

        /// <param name="detailTradeResult"></param>

        /// <param name="dic"></param>

        /// <returns></returns>

        protected override DynamicObject GenerateRecSettleBillObj(Context ctx, DynamicObject plan, DynamicObject acc, DetailTradeResult detailTradeResult, Dictionary<string, DynamicObject> dic)

        {

            //标准插件生成的收款结算单实体

            var recSettleBillObj = base.GenerateRecSettleBillObj(ctx, plan, acc, detailTradeResult, dic);

            //return null则不保存该实体(该条流水不生成单据)    

            return recSettleBillObj;

        }


        /// <summary>

        /// 重写排序方法

        /// </summary>

        /// <param name="lstDynamicObj"></param>

        /// <param name="formId"></param>

        /// <returns></returns>

        protected override List<DynamicObject> OrderBill(List<DynamicObject> lstDynamicObj, string formId)

        {

            switch (formId)

            {

                case "需要排序的单据FormId":

                    return lstDynamicObj.OrderBy(d => d["排序字段"]).ToList();

                default:

                    return base.OrderBill(lstDynamicObj, formId);

            }

        }

    }


如果是新加单据类型需要扩展上图【自动接收银行收款记录设置】单据,在单据体【单据类型】字段枚举中加入新加的单据类型和billtypeid(对应t_Bas_Billtype内主键)


最后只需要把执行计划的注册插件改成二开继承的插件【NewAutoService】即可。

image.png

赞 3