# 4.检索

# 全局搜索单据

提示

通过系统左侧的单据菜单可以全局检索系统中的业务单据,全局检索默认不支持配置,
但是通过自定义查询可以配置个性化的查询页面

提示

保存当前过滤条件-将搜索条件保存,方便下一次快速执行单据检索操作

电梯:https://demo.elcube.cloud/#/apps/docs (opens new window)

# 创建自定义查询-NkQueryGrid|查询

提示

通过JSON配置一个查询菜单界面,可以定制界面的搜索内容、搜索条件及列表字段,就像传统系统中的管理功能一样

# 配置查询页面

电梯:https://demo.elcube.cloud/#/apps/def/base (opens new window)

开发-模型中新建一个模型程序为用户页面的单据模型,功能卡片选择'NkQueryGrid|查询'

字段 描述 示例
启用预览 列表页是否可以预览单据数据,默认为否
默认条目数 列表页的每页条目数
查询服务 定义数据的从哪个数据服务中取值,默认为空,从ElasticSearchSQLService中取值
查询命令 查询服务对应的查询命令,默认为空
查询表 默认为document,也可以是doc-ext
模板 小程序,H5用到
导出 定义列表页是否有导出按钮可导出数据
数据过滤 ES语法的过滤条件
检索条件 菜单栏的搜索条件,名称是描述,列为字段名,从索引中取出,例如,dynamics.jobNumber_keyword
更多条件 可以配置更多的搜索条件
数据列 菜单的展示数据,字段名为配置的索引字段或者基础字段,对于金额或者日期等特殊格式,可选择格式化对其进行处理
创建菜单 在菜单栏是否可以创建该单据,若该单据没有前序单据,则可以配置

####数据列的各字段

字段 描述 示例
名称 显示在列表页的表头
字段 显示的数据,基础字段直接写字段 基础字段:docName,其他:dynamics.name_name
宽度 显示的列的宽度默认均分,字符长的可以设置宽一点,展示完全部数据 20%
列类型 序号:一般用在数据列的第一列,方便列表查看,高亮:当该字段是检索条件时,此处的列类型必选高亮,
格式化 对于金额和时间可以进行不同格式的转换
排序 该字段是否能排序显示
排序字段 当排序为true时,该字段填写:字段.original dynamics.name_name.original
忽略 不展示该字段

提示

查询配置有边可点击源码查看该配置的源码JSON

# 一个典型的源码例子就像这样

{
    "table": "document",
    "filter": {
        "terms": {
            "docType": [
                "PU01"
            ]
        }
    },
    "queryService": "ElasticSearchSQLService",
    "queryCommand": null,
    "mobileTemplate": null,
    "defaultRows": 10,
    "preview": false,
    "border": "inner",
    "searchItemsDefault": [
        {
            "name": "关键字",
            "component": "nk-search-options-text",
            "field": [
                "dynamics.name_name",
                "dynamics.jobNumber_keyword",
                "dynamics.position_keyword"
            ],
            "placeholder": null,
            "defaultValue": null,
            "agg": false,
            "defaultOptions": true,
            "max": null,
            "formatter": null,
            "_X_ROW_KEY": "row_302"
        },
        {
            "name": "状态",
            "component": "nk-search-options-single",
            "field": "docStateDesc",
            "placeholder": null,
            "defaultValue": null,
            "agg": true,
            "defaultOptions": true,
            "max": null,
            "formatter": null,
            "_X_ROW_KEY": "row_303"
        },
        {
            "name": "更新时间",
            "component": "nk-search-options-date-range",
            "field": "updatedTime",
            "placeholder": null,
            "defaultValue": null,
            "agg": false,
            "defaultOptions": true,
            "max": null,
            "formatter": null,
            "_X_ROW_KEY": "row_304"
        }
    ],
    "searchItemsMoreDef": [],
    "columns": [
        {
            "field": null,
            "title": "#",
            "type": "seq",
            "width": "5%",
            "sortable": true,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_324"
        },
        {
            "field": "docTypeDesc",
            "title": "单据类型",
            "type": null,
            "width": "12%",
            "sortable": false,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_325"
        },
        {
            "field": "dynamics.name_name",
            "title": "姓名",
            "type": "html",
            "width": "16%",
            "sortable": false,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_326"
        },
        {
            "field": "dynamics.jobNumber_keyword",
            "title": "工号",
            "type": "html",
            "width": "16%",
            "sortable": false,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_327"
        },
        {
            "field": "dynamics.position_keyword",
            "title": "职位",
            "type": "html",
            "width": "12%",
            "sortable": false,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_328"
        },
        {
            "field": "docStateDesc",
            "title": "状态",
            "type": null,
            "width": "15%",
            "sortable": true,
            "params": {
                "orderField": null
            },
            "formatter": null,
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_329"
        },
        {
            "field": "updatedTime",
            "title": "更新时间",
            "type": null,
            "width": "15%",
            "sortable": true,
            "params": {
                "orderField": null
            },
            "formatter": [
                "nkDatetimeFriendly"
            ],
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_330"
        },
        {
            "field": null,
            "title": "操作",
            "type": "html",
            "width": "",
            "sortable": false,
            "params": {
                "orderField": null
            },
            "formatter": [
                "docLink",
                "docId"
            ],
            "ignore": false,
            "mobileTemplateFiled": null,
            "_X_ROW_KEY": "row_331"
        }
    ],
    "creatable": [
        {
            "docType": "PU01",
            "docName": "创建",
            "_X_ROW_KEY": "row_343"
        }
    ],
    "sortConfig": {
        "remote": true,
        "trigger": "cell",
        "orders": [
            "desc",
            "asc",
            null
        ]
    },
    "exportConfig": {
        "enable": false
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

# 配置格式说明

字段 描述 数据类型 默认值
table 索引 String document
title 页面Tab标题 String null
preview 是否启用单据预览 Boolean false
defaultRows 默认条目数量 Integer 10
postCondition 数据过滤条件 JSONObject null不过滤,显示索引全部数据
searchItemsDefault 搜索框 JSONArray null
searchItemsMoreDef 更多搜索框 JSONArray null
columns 列定义 JSONArray null

# 数据过滤条件 postCondition

postCondition 是一段 ElasticSearch 查询语法

过滤类型 描述 语法
term 单条件过滤 {"字段名":"过滤条件"}
terms 单条件多值过滤 {"字段名":["过滤条件1"、"过滤条件2"、"过滤条件3"]}
bool 多条件过滤

提示

更多 ElasticSearch 查询语法可参考百度

# 搜索框 searchItemsDefault

searchItemsDefault 描述界面的搜索条件框,目前支持下述输入框类型

提示

当字段被作为检索条件时,该字段在数据列中的列类型需要设置为高亮

# 通用选项

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段,不可多选 docName
component 查询组件 nk-search-options-suggest
condition 显示条件 function

显示条件 condition 是一个回调函数,通过函数返回值来决定搜索框是否显示

{
    condition : function(params){
       return !!params["dynamics.province_keyword"];
    }
}
1
2
3
4
5

# 搜索提示框 nk-search-options-suggest

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段,不可多选 docName
component 查询组件 nk-search-options-suggest
placeholder 输入提示 请输入关键字

注意

搜索提示框仅对部分字段类型有效

# 文本搜索框 nk-search-options-text

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段,可多选 ["keyword","docName","partnerName"]
component 查询组件 nk-search-options-text
placeholder 输入提示 请输入关键字

# 下拉框 nk-search-options-single

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段
component 查询组件 nk-search-options-single
agg 下拉框数据分组统计候选值 true or false
min 最小显示宽度
max 最大显示宽度
placeholder 输入提示 请选择

# 多选下拉框 nk-search-options-multiple

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段
component 查询组件 nk-search-options-multiple
agg 下拉框数据分组统计候选值 true or false
min 最小显示宽度
max 最大显示宽度
placeholder 输入提示 请选择

# 日期区间框 nk-search-options-date-range

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段
component 查询组件 nk-search-options-date-range
placeholder 输入提示 请选择

# 数值区间框 nk-search-options-number-range

过滤类型 描述 配置参考
name 查询字段描述 搜索
field 查询字段
component 查询组件 nk-search-options-number-range
from 最小值
to 最大值
placeholder 输入提示 请选择

# 更多搜索框 searchItemsMoreDef

提示

跟searchItemsDefault一样,searchItemsMoreDef同样配置搜索框;

与searchItemsDefault区别是,更多输入框默认不显示,折叠在更多下拉菜单中,需要用户手动点击选择;

这样的好处是可以减少搜索框对界面版幅的占用

# 列定义 columns

属性 描述 配置参考
title 字段标题
field 显示字段
width 字段宽度,默认px,可显示指定为% 80, 15%
type 列类型,可设置序号或者高亮
formatter 格式化 percent, currency, datetime等
sortable 是否可排序 true or false
params.orderField 对于text类型的字段,如果排序则需要指定该字段的原始数据字段,一般情况下为field.original name.original

# 挂载到主菜单

电梯:https://demo.elcube.cloud/#/apps/settings/menus (opens new window)

在菜单设置中,增加一个菜单项,并设置路径属性为/apps/q/查询页面的模型类型

提示

/apps/q/docType 是一个预定义的Vue路由,它指向一个动态表格页面的Vue组件

# 菜单属性

字段 描述 配置参考
菜单 显示在主菜单上的文字描述
图标 显示在主菜单上的图标,仅一级菜单有效
路径 Vue的路由地址
权限 权限KEY,多个权限可以使用|分割,用户拥有任意权限即可显示该菜单

# 为单据增加自定义索引

提示

默认情况下,查询界面只能处理单据模型的基础字段,通过增加自定义索引列,可以为单据模型提供更多字段选择

# 基础字段

字段 描述 索引类型
docId 单据ID keyword
docName 单据名称 text
docType 单据类型KEY keyword
docTypeDesc 单据类型描述 keyword
docNumber 单据编号 keyword
docState 单据状态KEY keyword
docStateDesc 单据状态描述 keyword
docDesc 单据描述或备注 text
docDefVersion 单据配置版本 keyword
createdTime 创建时间 date
updatedTime 更新时间 date
preDocId 前序单据ID keyword
refObjectId 根单据ID keyword
tags TAG标签数组 keyword
partnerId 交易伙伴ID keyword
partnerName 交易伙伴名称 text
processInstanceId 工作流实例ID keyword
classify 单据分类 伙伴或交易 keyword
dynamics 动态字段对象 object

# 为单据增加索引字段

单据配置详情-业务逻辑-索引字段中添加索引字段

字段 描述 说明
索引名 添加到单据索引中的key值
索引类型 字段的数据类型与索引规则
SpEL 字段的取值逻辑

提示

添加的索引字段,在单据保存时会同步到ElasticSearch的索引中,作为自定义菜单的数据源使用;

字段命名规则如下:

dynamics.[索引名]_[索引类型] 索引字段

dynamics.[索引名]_[索引类型].original 分词类型的原始字段

# 创建树查询-NkQueryTree|树查询

提示

通过树查询配置,再搭配NkQueryGrid | 查询卡片,可以配置出树形数据结构,可应用于用户组织架构等场景
例如:组织架构从上到下分为:部门PUDE,小组PUGR,员工PU01
小组则是部门的后序单据
员工单据中需要选择部门和小组,并且增加索引字段dynamics.zzjg_keyword,EL取值为部门和小组的docId:{data.Department?.name?.docId,data.Group?.name?.docId}

# 配置树查询页面

开发-模型中新建一个模型程序为用户页面的单据模型,功能卡片选择'NkQueryTree|树查询'和'NkQueryGrid|查询'

字段 描述 示例
索引 默认document
数据过滤 所有上级的单据类型 { "terms": { "docType": [ "PUDE", "PUGR" ] } }
上级字段 树形的上下关联关系 preDocId
显示字段 树形的显示字段 docName
过滤条件字段 dynamics.zzjg_keyword

提示

NkQueryGrid|查询 卡片的配置则以员工单据为主