【套打】插件事件:套打打印前校验事件原创
金蝶云社区-_Tmp
_Tmp
9人赞赏了该文章 1690次浏览 未经作者许可,禁止转载编辑于2020年07月23日 11:33:35

版本:7.5.1.202005    套打支持越过打印次数控制进行重复打印


这里的打印校验指的是套打打印校验(单据已审核、打印次数)

套打增加了套打校验前事件进行了校验控制,可设置忽略单据仅已审核才可打印和忽略上限打印次数打印。

<1>常规场景:忽略单据仅已审核才可打印和忽略上限打印次数打印,设置单据的校验标识

image.png

<2>变通场景1:针对套打菜单点击的打印操作,移除部分单据内码或增加单据内码,等价于干预后续的套打打印实体组装时单据内码记录,不存在的项不打印。(套打打印操作依赖于打印校验结果生成打印实体,该集合中移除对应的内码项后不会生成对应的打印校验结果),后续会调整校验项为空的提示信息

image.png

<3>变通场景2:由于预览界面打印本质上为前端的弹窗界面,而非标准的表单菜单项,不等价于单据界面、表单界面调用套打操作(套打预览界面没有操作可言,仅仅是预览效果渲染),本次加入该插件能够干预预览界面打印的实现

image.png

目前插件还不支持判断是预览界面打印还是套打打印操作,提供一个简单示例判断,一样的我们可以参照套打操作把对应的校验项移除掉(唯一不同的是,预览界面打印本质上是前后端通过打印任务id获取数据,同时预览界面打印本质上是使用预览时的打印任务,针对预览的打印任务重新做控制生成打印任务),目前针对预览界面打印需要保证有至少一个校验项,否则会依然使用预览时的打印任务。

image.png

image.png

[Kingdee.BOS.Util.HotUpdate]

    [Description("套打校验前测试插件")]

    public class NotePrintValidateList : AbstractListPlugIn

    {    //判断是否菜单点击套打打印

        private bool barItemPrint = false;

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            BarDataManager bar = this.ListView.BillLayoutInfo.GetFormAppearance().ListMenu;

            if(bar == null)

                return;

            BarItem barItem =  bar.GetBarItem(e.BarItemKey);

            if(barItem == null)

                return;

            foreach (var service in barItem.ClickActions)

            {

                //操作

                if(service == null || service.ActionId != 23)

                    continue;

                barItemPrint |= IsPrintOperation(service.GetParameters()[0]);

                if (barItemPrint)

                    return;

            }

        }

        //是否打印操作

        private bool IsPrintOperation(string opeartionName)

        {

            if (opeartionName.IsNullOrEmptyOrWhiteSpace())

                return false;

            switch (opeartionName)

            {

                case "PrintSelect":

                case "PrintMergeSelected":

                case "PrintMergeAll":

                case "PatchSelectedPrintQuick":

                case "PatchSelectedPrint":

                case "PatchAllPrintQuick":

                case "PatchAllPrint":

                case "BatchSelectedSubEntityPrint":

                case "BatchSelectedEntityPrint":

                case "BatchMergeSelectedEntityPrint":

                    return true;

                    break;

                case "Print":

                    return (this.View is IListView);

            }

            return false;

        }

/// <summary>

        /// 套打检验前事件(该方法在套打打印前调用,包括套打打印操作、预览界面打印,自己组装打印实体套打不会调用)

        /// </summary>

        /// <param name="e"></param>

        public override void OnBeforePrintValidate(BeforePrintValidateEventArgs e)

        {

            base.OnBeforePrintValidate(e);

            //特殊使用场景,自定义校验,如不满足条件,移除实体信息

            for (int i = e.ValidateInfos.Count - 1; i >= 0; --i)

            {

                if (UserDefinePrintCheck(e.ValidateInfos[i].ID))

                    continue;

                //移除该校验项后,后续打印不会打印该单据

                e.ValidateInfos.RemoveAt(i);

            }

            if (!barItemPrint && e.ValidateInfos.Count == 0)

            {   //针对预览界面打印需要加入最少一项

                //预览界面打印是根据原有的打印任务重新进行校验

                e.ValidateInfos.Add(new PrintValidateInfo("-1"));

            }

            //每次检验完后重置

            barItemPrint = false;

        }


        /// <summary>

        /// 用户自定义的打印校验

        /// </summary>

        /// <param name="billId"></param>

        /// <returns></returns>

        private bool UserDefinePrintCheck(string billId)

        {

            return false;

        }

    }


赞 9