高级筛选器自定义数据源
用户开启高级筛选后,默认情况下可走内置数据源进行查询,若内置数据源筛选不满足用户需求,可自定义高级筛选数据源,主要有三步:
- 定义高级筛选器数据结构,承载高级筛选所选条件。
- 定义高级筛选器 func 接口。
- 定义高级筛选器 func 接口实现。
下面展开介绍。
定义高级筛选器数据结构
高级筛选器数据结构请继承 QAdvancedSearch,所需范型类型为待查询 BO 的 QModel, eg:
public class ItemBOAdvancedSearch extends QAdvancedSearch<QItemBO> {}定义用于高级筛选的 func
func 定义与普通 func 定义一致,仅 func 入参有所区别。高级筛选 func 的入参为上面定义的高级筛选器数据结构, eg:
@Function(name = "Item 高级筛选")public interface ListItemFunc { List<ItemBO> execute(ItemBOAdvancedSearch advancedSearch);}定义用于高级筛选的 func 实现
func 实现也类似,实现高级筛选接口,实现可使用以下三类查询:
- 单条数据查询,对应 DS.findOne()。
- 列表数据查询, 对应 DS.findAll()。
- 分页数据查询,对应 DS.paging()。
如:
@FunctionImpl(name = "Item 高级筛选实现")public class ListItemFuncImpl implements ListItemFunc { @Override public List<ItemBO> execute(ItemBOAdvancedSearch advancedSearch) { // ItemBO item = DS.findOne(advancedSearch); // List<ItemBO> items = DS.findAll(advancedSearch);
Paging<ItemBO> paging = DS.paging(advancedSearch);
return paging.getData(); }}定义完成后,在视图中通过 dataFunc/dataFlow 指定自定义数据源, 另外视图添加高级筛选的开关: filter="multiGroup",eg:
<View type="List" forModel="item_ItemBO" title="商品列表" menuItem="true"> <Table model="item_ItemBO" dataFunc="item_ListItemFunc" filter="multiGroup"> <Search> <Fields> <Field name="itemName" label="商品名称"/> <Field name="itemType" label="商品类型"/> </Fields> </Search> <Fields> <Field name="itemName" label="商品名称"/> <Field name="itemType" label="商品类型"/> <Field name="itemNumber" label="商品编号"/> <Field name="itemPrice" label="商品价格"/> </Fields> <RecordActions label="操作"> <Action label="详情" targetView="item_ItemBO_ItemDetail"/> <Action label="编辑" targetView="item_ItemBO_ItemEdit"/> <Action type="Delete" label="删除" after="Refresh" logicFunction="item_DeleteItemFunc"/> </RecordActions> <Actions> <Action label="新建商品" targetView="item_ItemBO_ItemCreate"/> </Actions> </Table></View>