如何实现动态地在列表中分页展示第三方系统数据原创
金蝶云社区-开发者赋能部_吴富彪
开发者赋能部_吴富彪
11人赞赏了该文章 2,792次浏览 未经作者许可,禁止转载编辑于2024年02月26日 15:28:54

关键词:列表、第三方数据、分页


一、需求

现在有第三方系统的数据,或者非当前单据的数据,需要展示在列表上,并且实现分页。


二、思路与方案

在列表的beforeCreateListDataProvider事件中,取动态的取数,重写取数的方法。通过setListDataProvider方法将数据写入,其中取数需要继承ListDataProvider并重写getData方法。


三、实现过程

已经存在单据A(kdec_thirdpart)字段有id, billno, billstatus, kdec_textfield

假设第三方数据来自单据A

图1是单据B(kdec_showthirddata),在单据B上展示单据A的数据并模拟第三方数据展示和分页

image.png

图1



public class ThirdDataListPlugin extends AbstractListPlugin {
    @Override
    public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) {
        // TODO Auto-generated method stub
        args.setListDataProvider(new ListDataProvider(){
            /**
             * 加载列表数据
             *  @remark
             * 获取系统自动加载的列表数据,然后对内容进行修正
             * */
            @Override
            public DynamicObjectCollection getData(int arg0, int arg1) {
                // 获取数据
                DynamicObjectCollection dataCollection = this.getCollection();
                //取数据集合中从arg0开始的arg1条数据
                DynamicObjectCollection dObjectCollection = this.getStartToEnd(arg0, arg1, dataCollection);
                //获取查询记录数量
                int dataCount = dataCollection.size();
                //自己的取数逻辑得到DynamicObjectCollection
                getQueryResult().setCollection(dObjectCollection);
                getQueryResult().setDataCount(dataCount);
                return dObjectCollection;
            }
            // 从第start条数据开始获取limit条数据
            private DynamicObjectCollection getStartToEnd(int start, int limit, DynamicObjectCollection dCollection) {
                DynamicObjectCollection data = QueryServiceHelper.query("kdec_thirdpart", "id, billno, billstatus, kdec_textfield", null);
                int end = start + limit;
                int size = dCollection.size();
                if (size >= end) {
                    for (int i = start; i < end; i++) {
                        data.add(dCollection.get(i));
                    }
                } else {
                    for (int i = start; i < size; i++) {
                        data.add(dCollection.get(i));
                    }
                }
                return data;
            }
            // 创建30条数据,创建的数据的列需要和列表的列数据对应
            private DynamicObjectCollection getCollection() {
                DynamicObjectCollection dCollection = QueryServiceHelper.query("kdec_thirdpart", "id, billno, billstatus, kdec_textfield", null);
                for (int i = 0; i < 30; i++) {
                    DynamicObject data1 = dCollection.addNew();
                    data1.set("billno", "qq" + i);
                    data1.set("kdec_textfield", "文本测试" + i);
                }
                return dCollection;
            }
        });
        super.beforeCreateListDataProvider(args);
    }
}



四、效果图

每页5条数据

image.png

图1


每页10条数据

image.png

图2



五、开发环境版本

不限,本样例采用的轻量级环境,版本是: 苍穹版本号 COSMICV4.0.014.0  星瀚版本号 CONSTELLATIONV4.0.014.0


六、注意事项


七、参考资料

开发平台

学习成长中心


图标赞 11
11人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0