如何开发自定义比较符原创
15人赞赏了该文章
1,028次浏览
编辑于2024年07月04日 16:36:38
关键词:自定义比较符,过滤
一、需求
自定义比较符开发
(1)日期字段,过滤今年的数据
(2)基础资料字段,过滤某个特征值
(3)组织字段,过滤上级组织和同级组织
(4)单据转换中使用自定义比较符脚本
二、思路与方案
【配置工具】可以创建自定义比较符。同时,编写代码,构造QFilter对象,完成数据过滤。
单据转换时,会调用自定义比较符插件(继承AbstractFilterContantParser)的getScriptFilter方法,需要重写这个方法。
三、实现过程
1.日期字段,过滤今年的数据
创建自定义比较符如下图,有几个需要注意的地方:
适用类型,指的是控件类型,创建了比较符之后,还需要在设计器中,选中控件节点,添加这个自定义比较符才会生效。
应用,只有应用中的页面,才能使用这个自定义比较符。
解析类,派生自AbstractFilterContantParser,通过java代码实现自定义比较符的业务逻辑。
ThisYearFilterContantParser这个类的类路径,要填在在自定义比较符的解析类上。
解析类插件代码如下:
package kdec.customfilter; import com.kingdee.guard.service.checkrule.QCP; import kd.bos.entity.filter.AbstractFilterContantParser; import kd.bos.entity.filter.FilterContantParserArgs; import kd.bos.orm.query.QFilter; import java.util.Calendar; /** * 自定义比较符:今年 */ public class ThisYearFilterContantParser extends AbstractFilterContantParser { @Override protected QFilter getQFilter(FilterContantParserArgs filterContantParserArgs) { String fieldName = filterContantParserArgs.getFieldName(); // 构建今年第一天的calendar对象 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_YEAR, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); QFilter qFilter = new QFilter(fieldName, QCP.large_equals, calendar.getTime()); return qFilter; } @Override protected String getScriptFilter(FilterContantParserArgs filterContantParserArgs) { return null; } }
单据中,选中控件节点
添加自定义比较符
2.基础资料字段,过滤某个特征值
参考文章:
https://vip.kingdee.com/link/s/lLE8M
3.组织字段,过滤上级组织和同级组织
参考文章:
https://vip.kingdee.com/link/s/lLEns
4.单据转换中使用自定义比较符
参考文章:
https://vip.kingdee.com/link/s/lPQ9F
四、效果图
在单据列表中添加对应的控件,这个控件必须是加了自定义控件比较符的,才能生效。
在常用条件中添加日期字段。
效果1:表头过滤出现自定义比较符![image.png image.png](/download/01097975b76a907449daa0651a30ebb7ffee.png)
效果2:过滤面板也出现了自定义比较符
效果3:基础服务云,安全管理,数据规则方案(或者特殊数据权限)使用自定义比较符
五、开发环境版本
无限制
六、参考资料
custom_comparison.zip(32.16KB)
推荐阅读