如何实现审批路线打印时仅显示节点最后一次的审批结果

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何实现审批路线打印时仅显示节点最后一次的审批结果

【问题描述】

如何实现审批路线打印时仅显示节点最后一次的审批结果


【业务场景】

打印单据时,若同一节点存在多次驳回的情况,则在打印的时候也会把审批路线打印出来,会导致不美观且审批路线重复混淆。


【解决方案】

如下图所示,同一节点下有多次审批的情况会导致节点重复显示


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以后的版本才支持在审批路线下添加动态实体字段

如何实现审批路线打印时仅显示节点最后一次的审批结果

【问题描述】如何实现审批路线打印时仅显示节点最后一次的审批结果【业务场景】打印单据时,若同一节点存在多次驳回的情况,则在打印的时候也...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息