跳转到内容

高级筛选器自定义数据源

用户开启高级筛选后,默认情况下可走内置数据源进行查询,若内置数据源筛选不满足用户需求,可自定义高级筛选数据源,主要有三步:

  1. 定义高级筛选器数据结构,承载高级筛选所选条件。
  2. 定义高级筛选器 func 接口。
  3. 定义高级筛选器 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 实现也类似,实现高级筛选接口,实现可使用以下三类查询:

  1. 单条数据查询,对应 DS.findOne()。
  2. 列表数据查询, 对应 DS.findAll()。
  3. 分页数据查询,对应 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>