基础资料改造批量触发值更新原创
4人赞赏了该文章
944次浏览
未经作者许可,禁止转载编辑于2023年03月31日 18:11:25
基础资料选择多条返回后,会多次触发propertyChange值改变事件,这时如果有比较耗时的逻辑就会需要很长时间。
/** * 基础资料字段,支持批量触发值更新事件,提升F7批量选择返回性能 * * @remark * 因为历史版本没有支持批量触发值更新事件,F7批量返回大量基础资料时,都是单条赋值,性能非常慢; * 为优化性能,平台对F7批量返回基础资料做了优化,支持批量赋值、批量触发值更新事件,允许插件在值更新事件中,也可以批量处理; * 但已有的插件普遍是写死只处理了e.getChangedSet()[0],即第一行的值, * 如果贸然把原来的单行赋值、触发值更新事件模式,改为批量赋值、批量触发值更新事件,会导致插件漏处理数据行; * 为保持兼容,只能是由插件主动调整propertyChanged事件处理代码,支持批量处理,并重写isSupportBatchPropChanged */ public class BasedataFieldPropChangedSample extends AbstractFormPlugin { private static final Log log = LogFactory.getLog(BasedataFieldPropChangedSample.class); @Override public void initialize() { // 设置基础资料字段,支持F7批量返回时,批量触发值更新事件,提示效率,优化性能 BasedataEdit edit = this.getView().getControl("materiel"); edit.setBatchFirePropChanged(true); } @Override public boolean isSupportBatchPropChanged() { //return false; // 申明本插件已经改造了propertyChanged事件处理代码,已处理批量传入的数据行 return true; } @Override public void propertyChanged(PropertyChangedArgs e) { log.info(String.format("%s changed: %s row.", e.getProperty().getName(), e.getChangeSet().length)); if (StringUtils.equals(e.getProperty().getName(), "materiel")) { for(ChangeData row : e.getChangeSet()) { // 循环处理批量传入的所有行 this.getModel().setValue("qty", 2, row.getRowIndex()); } } else if (StringUtils.equals(e.getProperty().getName(), "qty")) { for(ChangeData row : e.getChangeSet()) { this.getModel().setValue("price", 2, row.getRowIndex()); } } } }
推荐阅读