插件判断单据是否存在下游单据的案例总结

一、【业务需求】
1、单据审核后,如何判断是否存在下游单据?
2、在表单插件中,如何判断是否存在下游单据
3、在列表插件中,如何判断是否存在下游单据
4、若存在下游单据,则不能反审核、删除及作废,该如何实现?
5、如何判断是否下推过特定单据?
二、【功能分析】
实现一个单据转换通常的步骤
1、BOS配置转换路线,字段映射,二开插件,表单服务规则等
2、配置选单条件策略,通过业务单据数量字段结合反写规则,限制单据是否可以下推,是否满足部分下推
3、配置反写规则
实际二开中,业务比较简单粗暴,只做到第一步,并没有配置相关反写规则和选单条件中对数量的判断,导致同一张单据可以反复下推,出现重复单据的业务问题。由此产生二开需求:
“如果去判断单据是否存在下游单据”或者说“单据是否下推过”。
在没有配置反写规则的情况下,除了检查下游单据的源单编号,还有什么方法能判断本单据是否有下游单据?因为如果单据有多个转换规则的话,从下游单据一个一个判断源单编号会非常麻烦。
参考官方文章:
针对表单插件和服务插件,有对应实现案例。
通过参考@JohnnyDing 老师的帖子答复:
调用 Kingdee.BOS.ServiceHelper.BusinessFlowDataServiceHelper.IsPush(ctx, args) 函数进行判断。
参数说明:ctx : 数据库上下文args.BusinessInfo : 源单元数据args.EntityKey : 源单单据体Key,单据下推,是基于单据体行的,需要明确指定那个单据体的那一行是否下推过args.ActiveRow : 源单单据体数据行
返回值:true : 源单单据体行下推过false : 源单单据体行未下推过
另外,Kingdee.BOS.ServiceHelper.BusinessFlowDataServiceHelper还有其他函数,可以获取单据下推了什么单。
1、列表插件
var selectedRows = this.ListView.SelectedRowsInfo;
DynamicObject[] reqObj = BusinessDataServiceHelper.Load(this.Context, selectedRows.GetPrimaryKeyValues(), this.ListView.BillBusinessInfo.GetDynamicObjectType());
BusinessInfo businessInfo = this.ListView.BillBusinessInfo;
LinkEntity linkEntity = businessInfo.GetForm().LinkSet.LinkEntitys[0];
var parentEntity = businessInfo.GetEntity(linkEntity.ParentEntityKey);
foreach(DynamicObject reqObjItem in reqObj)
{
DynamicObjectCollection entryObjs = parentEntity.DynamicProperty.GetValue(reqObjItem) as DynamicObjectCollection;
if (entryObjs != null && entryObjs.Count() > 0)
{
string[] selectEntryIds = selectedRows.GetEntryPrimaryKeyValues();
foreach (var entry in entryObjs)
{
string entryid = Convert.ToString(entry["Id"]);
if (selectEntryIds.Contains(entryid))
{
if (Kingdee.BOS.ServiceHelper.BusinessFlowDataServiceHelper.IsPush(this.Context, new Kingdee.BOS.Core.BusinessFlow.ServiceArgs.IsPushArgs(this.ListView.BillBusinessInfo, "FEntity", entry)))
{
插件判断单据是否存在下游单据的案例总结
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



