statement 对象
由 0x400 发布于
`statement` 对象用于在流程表单、内容管理表单、门户页面或视图中执行查询语句或选择数据。通过 `this.statement` 访问,支持 JPQL/SQL 查询和动态过滤。
## 二、核心方法
### 1. execute(statement, callback, asyncopt) → `Promise`
- **功能**:执行指定的查询语句,支持 JPQL 或 SQL。
- **语法**:
```javascript
// 回调方式
this.statement.execute(statement, callback, async);
// Promise 方式
const promise = this.statement.execute(statement);
promise.then((json) => { /* 处理结果 */ });
```
- **参数**:
- `statement`(Object,必填):查询配置对象,格式如下:
```javascript
{
name: "task", // 查询配置名称/别名/ID
mode: "all", // 查询模式:all(查询+总数)、data(仅数据)、count(仅总数)
page: 1, // 当前页码(默认 1)
pageSize: 20, // 每页条目数(默认 20)
filter: [ // 过滤条件(可选)
{
path: "o.title", // JPQL 字段路径(如 o.title)或 SQL 字段名(如 xtitle)
comparison: "like", // 比较方式(like/eq/gt 等)
value: "7月", // 过滤值
formatType: "textValue" // 值类型(textValue/numberValue/dateValue)
}
],
parameter: { // 参数绑定(可选)
startTime: new Date("2023-01-01"), // 日期类型
applicationName: "%财务%", // 模糊查询
?1: "关于" // V8.0+ 支持问号参数
}
}
```
- `callback`(Function,可选):成功回调函数。
- `async`(Boolean,可选):是否异步执行,默认 `true`。
- **返回值**:`Promise`,解析后包含:
```javascript
{
count: 100, // 总条目数(mode 为 all/count 时返回)
data: [ /* 查询结果数组 */ ] // 数据列表(mode 为 all/data 时返回)
}
```
- **示例**:
```javascript
this.statement.execute(
{
name: "task",
mode: "all",
filter: [{
path: "o.title",
comparison: "like",
value: "通知",
formatType: "textValue"
}],
parameter: {
startTime: new Date("2023-01-01")
}
},
(json) => {
console.log("总条目数:", json.count);
console.log("数据列表:", json.data);
}
);
```
### 2. select(statement, callback)
- **功能**:打开数据选择对话框,通过视图选择数据。
- **语法**:
```javascript
this.statement.select(statement, callback);
```
- **参数**:
- `statement`(Object,必填):查询配置对象,格式如下:
```javascript
{
name: "物业材料查询", // 查询名称/别名/ID
isTitle: true, // 是否显示标题行(默认 true)
isMulti: false, // 是否允许多选(默认 true)
width: 700, // 弹窗宽度(默认 700)
height: 400, // 弹窗高度(默认 400)
caption: "选择材料", // 弹窗标题
filter: [ // 过滤条件(可选)
{
path: "o.ylmc",
comparison: "like",
value: "钢材",
formatType: "textValue"
}
],
parameter: { // 参数绑定(可选)
startTime: new Date("2023-01-01")
}
}
```
- `callback`(Function,必填):选择完成后的回调函数,参数为选中的条目数组。
- **示例**:
```javascript
this.statement.select(
{
name: "物业材料查询",
isMulti: false
},
(items) => {
if (items.length) {
this.data.materialName = items[0].ylmc; // 物料名称
this.data.price = items[0].dj; // 单价
}
}.bind(this)
);
```
## 三、方法对比
| 方法名 | 功能描述 | 适用场景 |
|-----------|----------------------------|----------------------------|
| `execute` | 执行查询并返回结果,支持分页和过滤 | 数据统计、批量加载 |
| `select` | 打开弹窗选择数据并返回选中结果 | 用户交互、表单数据填充 |
## 四、注意事项
1. **查询模式**:`mode` 设为 `all` 时同时返回数据和总数,适用于分页场景。
2. **过滤条件**:`filter` 中的 `path` 需与查询语句中的字段一致(如 JPQL 使用 `o.title`,SQL 使用 `xtitle`)。
3. **参数绑定**:日期类型需传入 `Date` 对象,模糊查询需手动添加 `%`(如 `%财务%`)。
4. **权限控制**:确保当前用户有权限执行目标查询。
**提示**:更多查询配置细节和 JPQL/SQL 语法请参考 O2OA 查询设计文档。
评论