版本:7.5.1.202005 套打支持越过打印次数控制进行重复打印
这里的打印校验指的是套打打印校验(单据已审核、打印次数)
套打增加了套打校验前事件进行了校验控制,可设置忽略单据仅已审核才可打印和忽略上限打印次数打印。
<1>常规场景:忽略单据仅已审核才可打印和忽略上限打印次数打印,设置单据的校验标识
<2>变通场景1:针对套打菜单点击的打印操作,移除部分单据内码或增加单据内码,等价于干预后续的套打打印实体组装时单据内码记录,不存在的项不打印。(套打打印操作依赖于打印校验结果生成打印实体,该集合中移除对应的内码项后不会生成对应的打印校验结果),后续会调整校验项为空的提示信息
<3>变通场景2:由于预览界面打印本质上为前端的弹窗界面,而非标准的表单菜单项,不等价于单据界面、表单界面调用套打操作(套打预览界面没有操作可言,仅仅是预览效果渲染),本次加入该插件能够干预预览界面打印的实现
目前插件还不支持判断是预览界面打印还是套打打印操作,提供一个简单示例判断,一样的我们可以参照套打操作把对应的校验项移除掉(唯一不同的是,预览界面打印本质上是前后端通过打印任务id获取数据,同时预览界面打印本质上是使用预览时的打印任务,针对预览的打印任务重新做控制生成打印任务),目前针对预览界面打印需要保证有至少一个校验项,否则会依然使用预览时的打印任务。
[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;
}
}
推荐阅读