# 筛选记录

## 说明
筛选符合条件的记录

## 语法
表达式.Condition(Filters,FilterOp)

表达式:RecordRange

## 参数
|参数名|是否必需|类型|描述|
|---|---|---|---|
|Filters|是|Filter[]|筛选数据的条件组, 条件组里每个Filter，可以包含多个筛选条件|
|FilterOp|否|"And"/"Or"|筛选数据条件组之间的关系，是同时满足还是只需要满足一条，默认值为And|

Filter数据结构：
|参数名|是否必需|类型|描述|
|---|---|---|---|
|Criterias|是|[Criteria](/app-integration-dev/guide/dbsheet/Api/Api/Criteria/Criteria)[]|筛选条件项组|
|Op|否|"And"/"Or"|筛选条件项组之间的关系，是同时满足还是只需要满足一条，默认值为And|



[Criteria](/app-integration-dev/guide/dbsheet/Api/Api/Criteria/Criteria) 中筛选规则（大小写不敏感）：
|枚举值|描述|
|---|---|
|Equals|等于|
|NotEqu|不等于|
|Greater|大于|
|GreaterEqu|大等于|
|Less|小于|
|LessEqu|小等于|
|GreaterEquAndLessEqu|介于（取等）|
|LessOrGreater|不介于（不取等）|
|BeginWith|开头是|
|EndWith|结尾是|
|Contains|包含|
|NotContains|不包含|
|Intersected|指定值|
|Empty|为空|
|NotEmpty|不为空|

各筛选规则独立地限制了values数组内最多允许填写的元素数，当values内元素数超过阈值时，该筛选规则将失效。“为空、不为空”不允许填写元素；“介于”允许最多填写2个元素；“指定值”允许填写65535个元素；其他规则允许最多填写1个元素
values[]数组内的元素为字符串时，表示文本匹配。目前还支持对日期进行动态筛选，此时values[]内的元素需以结构体的形式给出：
```
const dateValue = {"dynamicType": "lastMonth","type": "DynamicSimple"}
Criteria("@日期", "Equals", [dateValue])
```
上述示例对应的筛选条件为“等于上一个月”。
要使用日期动态筛选，values[]内的结构体需要指定"type": "DynamicSimple"，当"op"为"equals"时，"dynamicType"可以为如下的值（大小写不敏感）：
|枚举值|描述|
|---|---|
|today|今天|
|yesterday|昨天|
|tomorrow|明天|
|last7Days|最近7天|
|last30Days|最近30天|
|thisWeek|本周|
|lastWeek|上周|
|nextWeek|下周|
|thisMonth|本月|
|lastMonth|上月|
|nextMonth|次月|

当"op"为"greater"或"less"时，"dynamicType"只能是昨天、今天或明天。

对不同字段类型，values会有不同的用法
联系人字段:
```
// value是一个结构体，指定type为 Contact, value 为用户id
const dateValue = {"type":"Contact", value:"user id"}
```
单/多选项字段:
```
// value是一个结构体，指定type为 SelectItem, value 为选项的ID
const dateValue = {"type":"SelectItem", value:"B"}
```

## 返回值
RecordRange

## 浏览器环境示例
```javascript
async function example() {
  await instance.ready();
  const app = instance.Application;
  // 创建筛选条件criteria
  const Criteria = app.Criteria 
  const criterias = []
  criterias.push(await Criteria("@名称",  "Intersected", ["1"]))
  // 创建筛选列表filters
  const filters = []
  const filter = {Criterias: criterias, Op: "AND"}
  filters.push(filter)
  // 筛选记录
  const res = await app.ActiveSheet.Views(1).RecordRange.Condition(filters, "AND")
  console.log(res)
  // 操作记录，返回第一个筛选结果的记录ID
  await res.Item(1).Id
  // 删除记录
  await res.Item(1).Delete()
}
```
## 脚本编辑器 示例
```javascript
function main() {
  // 创建筛选条件criteria
    const critera1 = Criteria("@名称", "Intersected", ["1", "999", "aaaa"])
    const critera2 = Criteria("@数量", "Equals", ["1"])
    const criterias = []
    criterias.push(critera1)
    criterias.push(critera2)
    // 创建filters
    const filters = []
    const filter = { Criterias: criterias, Op: "OR" }
    filters.push(filter)
    const res = Application.ActiveSheet.Views(1).RecordRange.Condition(filters, "AND")
    console.log(res.Value)
}
main()
```