如何实现选单时过滤数据原创
6人赞赏了该文章
1,823次浏览
编辑于2023年07月06日 17:09:42
关键词:botp、选单(draw)、过滤
一、需求
采购订单上有一个选单功能,根据当前页面物料的数据进行过滤,即再次选单时,不能选择已有物料Item-00000001和Item-00000003的数据。
二、思路与方案
在执行选单操作前,通过操作前操作事件beforeDoOperation去获取当前页面物料字段的值,然后通过传递操作参数数据draw.getOption().setVariableValue,到转换插件中的beforeBuildRowCondition时间中设置数据过滤范围,从而实现选单数据的过滤
三、实现过程
1、选单操作前传条件值
public class ApplyEditPlugin extends AbstractBillPlugIn implements Plugin { @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { if (args.getSource() instanceof Draw){ Draw draw= (Draw) args.getSource(); if (draw.getOperateKey().equals("draw")){ int count = this.getModel().getEntryRowCount("entryentity"); StringBuilder numbers = new StringBuilder(); for (int i = 0; i < count; i++) { DynamicObject materielObj = (DynamicObject) this.getModel().getValue("sunp_materielfield",i); if (materielObj!=null) { String number = materielObj.getString("number"); numbers.append(number).append(","); } } //传递当前已选物料信息到操作参数中 draw.getOption().setVariableValue("numbers",numbers.toString()); } } super.beforeDoOperation(args); } }
2、转换插件设置过滤条件
public class ApplyordConvertPlugin extends AbstractConvertPlugIn implements Plugin { @Override public void beforeBuildRowCondition(BeforeBuildRowConditionEventArgs e) { //获取页面插件传递过来的操作参数 String numbers = this.getOption().getVariableValue("numbers"); if (!numbers.isEmpty()&&numbers!=""){ String[] split = numbers.split(","); QFilter numberQFilter = new QFilter("entryentity.sunp_materielfield.number", QCP.not_in, split); e.getCustQFilters().add(numberQFilter); } super.beforeBuildRowCondition(e); } }
四、效果图
通过前面开发步骤,实现了选单操作时,过滤掉已选物料的数据。
五、开发环境版本
V5.0.011
六、参考资料
drawdemo.zip(17.62KB)
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读