案例:现在有第三方系统的数据,或者非当前单据的数据,需要展示在列表上,并且实现分页。
实现:在列表的beforeCreateListDataProvider事件中,取动态的取数,重写取数的方法。通过setListDataProvider方法将数据写入,其中取数需要继承ListDataProvider并重写getData方法。
案例代码:
//列表插件
public class KdecBillDemoListPlugin extends AbstractListPlugin{
@Override
public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) {
// TODO Auto-generated method stub
args.setListDataProvider(new BillListDataProvider());
super.beforeCreateListDataProvider(args);
}
}
//取数
public class BillListDataProvider extends 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_billdemo15",
"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_billdemo15", "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;
}
}
案例截图:
每页5条数据
每页10条数据
推荐阅读