如何实现审批路线打印时仅显示节点最后一次的审批结果
【问题描述】
如何实现审批路线打印时仅显示节点最后一次的审批结果
【业务场景】
打印单据时,若同一节点存在多次驳回的情况,则在打印的时候也会把审批路线打印出来,会导致不美观且审批路线重复混淆。
【解决方案】
如下图所示,同一节点下有多次审批的情况会导致节点重复显示
step1.审批路线配置动态字段,取当前审批意见对应的节点审批动作内码
社区连接:https://vip.kingdee.com/article/269045370196307456?productLineId=1
动态字段标识:WFCurInst
表达式:'0' if ActiveObject.ActivityInfo.ActivityId in (0,1) else ActiveObject.ActivityInfo.ActInstId
step2.审批路线配置聚合动态字段,按照节点ID分组,取该节点下所有审批意见处理时间最大所对应的审批动作内码
聚合动态字段:WFMaxTimeInst
分组表达式:str(ActiveObject.ActivityInfo.ActivityId)
聚合表达式:str(ActiveObject[0].ActivityInfo.ActivityId) if ActiveObject[0].ActivityInfo.ActivityId in (0,1) else filter(lambda y:y.ActionInfo.CompleteTime == max(map(lambda x:x.ActionInfo.CompleteTime , ActiveObject)), ActiveObject)[0].ActivityInfo.ActInstId
step3.单据表单插件配置数据过滤插件
(1)BOS设计器→应收单→表单插件
(2)注册python脚本后保存即可:
from System import *
from Kingdee.BOS import *
def OnPrepareNotePrintData(e):
if e.DataSourceId.Equals("workflow.approveline",StringComparison.OrdinalIgnoreCase):
if e.DataObjects.Count <=0:
return;
if not e.DataObjects[0].DynamicObjectType.Properties.ContainsKey("ac_WFCurInst"):
return;
if not e.DataObjects[0].DynamicObjectType.Properties.ContainsKey("ac_WFMaxTimeInst"):
return;
tempList = filter(lambda x: x["ac_WFCurInst"] == x["ac_WFMaxTimeInst"], e.DataObjects);
tempArray = Array.CreateInstance(e.DataObjects[0].GetType(), len(tempList));
for index in range(len(tempArray)):
tempArray[index] = tempList[index];
e.DataObjects = tempArray;
【备注】
此操作在金蝶云星空8.1.0.20230420版本下操作,
7.7.0 202112以后的版本才支持在审批路线下添加动态实体字段
如何实现审批路线打印时仅显示节点最后一次的审批结果
本文2024-09-23 04:11:02发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163668.html