移动表格控件加载单据单据体数据原创
金蝶云社区-吴锐雄
吴锐雄
3人赞赏了该文章 1,080次浏览 未经作者许可,禁止转载编辑于2022年11月25日 16:55:14


最近和一个伙伴一起看了移动表格控件的加载数据的问题,写篇文章做个总结。



设计移动表格

在移动表单设计器上放置2个页签控件,页签控件分别存放一个移动表格

image.png


设置移动表格的数据源类型为自定义

image.png


插件编写

继承AbstractMobBillPlugIn,编写插件方法并注册

image.png


初始化事件中添加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。


效果

image.png

image.png





赞 3