移动表格控件加载单据单据体数据原创
3人赞赏了该文章
1,080次浏览
编辑于2022年11月25日 16:55:14
最近和一个伙伴一起看了移动表格控件的加载数据的问题,写篇文章做个总结。
设计移动表格
在移动表单设计器上放置2个页签控件,页签控件分别存放一个移动表格
设置移动表格的数据源类型为自定义
插件编写
继承AbstractMobBillPlugIn,编写插件方法并注册
初始化事件中添加2个移动表格控件的MobTablePackageData监听,设置event对象的
@Override public void initialize() { MobTable mobTable = getControl("kdec_mobtableap"); mobTable.addMobTablePackageDataHandlerListener(new IMobTablePackageDataHandlerListener() { @Override public void createMobTablePackageDataHandler(MobTablePackageDataHandlerEvent mobTablePackageDataHandlerEvent) { mobTablePackageDataHandlerEvent.setMobTablePackageDataHandler(new MyMobTablePackageDataHandler()); } }); MobTable mobTable2 = getControl("kdec_mobtableap2"); mobTable2.addMobTablePackageDataHandlerListener(new IMobTablePackageDataHandlerListener() { @Override public void createMobTablePackageDataHandler(MobTablePackageDataHandlerEvent mobTablePackageDataHandlerEvent) { mobTablePackageDataHandlerEvent.setMobTablePackageDataHandler(new MyMobTablePackageDataHandler2()); } }); }
MobTablePackageDataHandler代码如下,数据源都是从model中获取即可,从单据头或者单据体中获取。
class MyMobTablePackageDataHandler extends MobTablePackageDataHandler { @Override public MobTableHandleResult handleData(MobTablePackageDataHandlerArgs args) { /* // 主键id Object pkid = getModel().getValue("id"); // 单据标识 String billName = getModel().getDataEntityType().getName(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkid, billName);*/ IDataModel model = args.getControl().getView().getModel(); List<MobTableColumn> mobTableColumns = args.getMobTableColumns(); MobTableHandleResult mobTableHandleResult = new MobTableHandleResult(); List<MobTableRowData> mobTableRowDataList = new ArrayList<>(); DynamicObjectCollection dynamicObjectCollection = model.getEntryEntity("kdec_textline_en"); for(int i = 0; i < dynamicObjectCollection.size(); i++) { MobTableRowData mobTableRowData = MobTableRowBuilder.buildTemplateRowData(i, mobTableColumns); // 单据名称 mobTableRowData.setValue("kdec_name_en", model.getValue("kdec_textline_name").toString()); // 单据体数量字段 mobTableRowData.setValue("kdec_count_en", dynamicObjectCollection.get(i).getInt("kdec_count")); // 单据体码号字段 mobTableRowData.setValue("kdec_size_en", dynamicObjectCollection.get(i).getString("kdec_size")); mobTableRowDataList.add(mobTableRowData); } mobTableHandleResult.setMobTableRowDataList(mobTableRowDataList); mobTableHandleResult.setFmtInfo(getFmtInfo(args)); return mobTableHandleResult; } } class MyMobTablePackageDataHandler2 extends MobTablePackageDataHandler { @Override public MobTableHandleResult handleData(MobTablePackageDataHandlerArgs args) { IDataModel model = args.getControl().getView().getModel(); List<MobTableColumn> mobTableColumns = args.getMobTableColumns(); MobTableHandleResult mobTableHandleResult = new MobTableHandleResult(); List<MobTableRowData> mobTableRowDataList = new ArrayList<>(); DynamicObjectCollection dynamicObjectCollection = model.getEntryEntity("kdec_textline_en"); for(int i = 0; i < dynamicObjectCollection.size(); i++) { MobTableRowData mobTableRowData = MobTableRowBuilder.buildTemplateRowData(i, mobTableColumns); // 单据名称 mobTableRowData.setValue("kdec_integer_en", dynamicObjectCollection.get(i).getInt("kdec_count")); // 单据体数量字段 mobTableRowData.setValue("kdec_text_en", dynamicObjectCollection.get(i).get("kdec_demand").toString()); mobTableRowDataList.add(mobTableRowData); } mobTableHandleResult.setMobTableRowDataList(mobTableRowDataList); mobTableHandleResult.setFmtInfo(getFmtInfo(args)); return mobTableHandleResult; } }
注意:
在MobTablePackageDataHandler调用给model,有时候会报错,不能取到model
所以可以从 MobTablePackageDataHandlerArgs取到页面视图对象view,再取模型对象model。
效果
推荐阅读