queryStatement 对象
由 0x400 发布于
`queryStatement` 对象用于在查询视图中操作数据,支持通过 JPQL 或 SQL 语句获取和管理数据。其方法与 `queryView` 类似,但更侧重于查询语句的动态控制。可通过 `this.queryStatement` 在查询视图脚本中访问。
## 二、核心方法
### 1. getParentEnvironment() → `Environment`
- **功能**:获取嵌入查询视图的页面或表单上下文(如流程表单、内容管理表单或门户页面)。
- **语法**:
```javascript
const env = this.queryStatement.getParentEnvironment();
env.page.toPortal("公文门户"); // 跳转门户
```
### 2. getPageInfor() → `Object`
- **功能**:获取当前页的分页信息。
- **返回值**:
```javascript
{
pages: 3, // 总页数
perPageCount: 50, // 每页条目数
currentPageNumber: 1 // 当前页码
}
```
### 3. getPageData() → `Array<Object|Array>`
- **功能**:获取当前页的数据,格式取决于 JPQL 语句。
- **示例**:
- JPQL 语句 `SELECT o FROM Task o` 返回:
```javascript
[
{ id: "id1", title: "标题1" },
{ id: "id2", title: "标题2" }
]
```
- JPQL 语句 `SELECT id, title FROM Task o` 返回:
```javascript
[
["id1", "标题1"],
["id2", "标题2"]
]
```
### 4. toPage(pageNumber, callback)
- **功能**:跳转到指定页码并重新加载数据。
- **示例**:
```javascript
this.queryStatement.toPage(2, () => {
const data = this.queryStatement.getPageData();
});
```
### 5. setStatementFilter(filter, parameter, callback)
- **功能**:动态添加查询过滤条件,支持 JPQL 或 SQL 的 WHERE 子句。
- **参数**:
```javascript
// 过滤条件示例
const filter = [
{
path: "o.title", // JPQL 字段路径
comparison: "like",
value: "关于",
formatType: "textValue"
}
];
// 参数绑定示例(用于 :person 等占位符)
const parameter = {
startTime: new Date("2023-01-01"),
applicationName: "%财务%"
};
this.queryStatement.setStatementFilter(filter, parameter, () => {
const data = this.queryStatement.getPageData();
});
```
### 6. switchStatement(options)
- **功能**:切换到另一个查询视图。
- **参数示例**:
```javascript
this.queryStatement.switchStatement({
statementId: "ee334220-66d3-4f78-afce-8ccf6b995c8c", // 查询 ID
filter: [{ path: "o.title", value: "测试" }], // 过滤条件
parameter: { startTime: new Date("2023-01-01") } // 参数绑定
});
```
## 三、完整方法列表
### 1. 数据获取
| 方法名 | 功能描述 | 示例代码 |
|------------------|---------------------------------|-------------------------------------|
| `getPageData()` | 获取当前页数据(支持 JPQL/SQL 格式) | `const data = this.queryStatement.getPageData();` |
| `getStatementInfor()` | 获取查询配置信息(如 JPQL 语句、表名等) | `const config = this.queryStatement.getStatementInfor();` |
### 2. 分页控制
| 方法名 | 功能描述 | 示例代码 |
|----------------|-------------------------|-------------------------------------|
| `toPage()` | 跳转到指定页码 | `this.queryStatement.toPage(2, () => {});` |
| `reload()` | 重新加载当前页数据 | `this.queryStatement.reload(() => {});` |
### 3. 数据选择
| 方法名 | 功能描述 | 示例代码 |
|-----------------|-----------------------------|-------------------------------------|
| `selectAll()` | 选中当前页所有条目(需视图允许多选) | `this.queryStatement.selectAll();` |
| `unSelectAll()` | 取消所有选中条目 | `this.queryStatement.unSelectAll();` |
| `getSelectedData()` | 获取选中数据 | `const selected = this.queryStatement.getSelectedData();` |
### 4. 动态配置
| 方法名 | 功能描述 | 示例代码 |
|------------------|---------------------------------|-------------------------------------|
| `setStatementFilter()` | 添加 WHERE 子句过滤条件 | `this.queryStatement.setStatementFilter(filter, parameter);` |
| `switchStatement()` | 切换到另一个查询视图 | `this.queryStatement.switchStatement(options);` |
## 四、使用场景示例
### 1. 动态过滤数据
```javascript
// 设置过滤条件:标题包含“通知”,金额大于 1000
const filter = [
{
path: "o.title",
comparison: "like",
value: "通知",
formatType: "textValue"
},
{
path: "o.amount",
comparison: "gt",
value: 1000,
formatType: "numberValue"
}
];
this.queryStatement.setStatementFilter(filter, null, () => {
const data = this.queryStatement.getPageData();
});
```
### 2. 分页加载数据
```javascript
// 跳转到第 2 页并处理数据
this.queryStatement.toPage(2, () => {
const currentData = this.queryStatement.getPageData();
console.log("第 2 页数据:", currentData);
});
```
## 五、注意事项
1. **数据格式**:`getPageData()` 返回的格式取决于 JPQL/SQL 语句,需根据实际查询配置解析。
2. **过滤条件**:`setStatementFilter()` 的 `path` 需与查询语句中的字段一致(如 JPQL 使用 `o.title`,SQL 使用 `xtitle`)。
3. **参数绑定**:使用 `parameter` 时,日期类型需传入 `Date` 对象,模糊查询需添加 `%`(如 `%财务%`)。
4. **权限控制**:确保当前用户有权限访问目标查询和数据。
**提示**:更多 JPQL 语法和过滤条件配置请参考 O2OA 查询设计文档。
评论