EAS:二开基于单据组织隔离需求实现方案原创
金蝶云社区-HN_刘敏
HN_刘敏
50人赞赏了该文章 158次浏览 未经作者许可,禁止转载编辑于2024年12月02日 10:06:37
summary-icon摘要由AI智能服务提供

本文介绍了在listui相关操作场景中,为实现单据组织隔离,需要对Listui扩展类中的getQueryExecutor方法进行重写。通过创建FilterInfo对象并添加基于当前公司id的过滤条件,与已有视图信息的过滤条件合并,最终获取查询执行器,确保查询结果符合业务逻辑和数据安全要求。

首编于:2024年12月3日

关键词:EAS、二开、单据组织隔离、getQueryExecutor 


前言:


在涉及到与 listui 相关的操作场景中,常常需要获取其执行的查询(query)并在此基础上添加特定的过滤条件以满足业务需求。为实现这一目标,在对应的 Listui 扩展类 中需要对标准 getQueryExecutor 方法进行重写 ,具体来说,当要对单据进行组织隔离时,在标准查询里就必须依据当前的组织情况来添加过滤条件。这里通过创建一个新的 FilterInfo 对象,并向其中添加以当前公司的 id 作为限制条件的 FilterItemInfo,随后尝试将该新的过滤条件与已有的 EntityViewInfo 视图信息中的过滤条件进行合并,以此来实现基于当前组织对查询进行过滤的功能,为后续符合组织隔离要求的查询执行做好准备。


实现代码:

在对应的Listui中重写 getQueryExecutor 方法:

protected IQueryExecutor getQueryExecutor(IMetaDataPK queryPK,
EntityViewInfo viewInfo) {
// TODO Auto-generated method stub
FilterInfo filter1 = new FilterInfo();
filter1.getFilterItems().add(new FilterItemInfo("company.id", ContextHelperFactory.getRemoteInstance().getCurrentCompany().getId()));
try {
viewInfo.getFilter().mergeFilter(filter1, "and");
} catch (BOSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//		
return super.getQueryExecutor(queryPK, viewInfo);
}


总结:

这段代码的核心在于获取 listui 的查询执行器并添加满足单据组织隔离应用场景的过滤条件。通过创建专门的 FilterInfo 并填充基于当前公司 id 的过滤项,然后将其与已有视图信息的过滤条件合并(虽合并过程可能出现 BOSException 并做了简单异常处理),最终借助调用父类方法成功获取到了查询执行器。如此一来,在标准查询里就能够依据当前组织进行有效的过滤,从而实现单据的组织隔离功能,确保查询结果符合相应的业务逻辑和数据安全要求。


附:BOS二开案例及常见问题的解决方合集:https://vip.kingdee.com/link/s/lnEvP

图标赞 50
50人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!