Skip to main content

远程数据查询

查询某个实体下的数据

where 是结构化入参(IFindWhereParams)

【无参,默认】 查询所有的用户id 和 name

/**
* 表单的默认值大多数情况是在 formOnLoad 这个入口点执行的。
*/
thisApp.formOnLoad = async (ctx) => {

// 查询所有的用户 id 和 name, 返回前200条
// findMany 传入空对象,会自动补上 {limit: 200, select:{id: true, name:true}}
const data = await ctx.getFormContext().entityQuery("User").findMany({});
console.log('query data: ', data);

//output: [{id:"SJWRH061GU9002D", name:"王五"},{id:"VHD8H061GAR0013", name:"王二"}]

};

【select】 查询用户id是 "SJWRH061GU9002D" 的用户的编码,创建人id和name

const form = ctx.getFormContext().form;
const data = await ctx.getFormContext().entityQuery("User").findUnique({
where: {
id: 'SJWRH061GU9002D'
},
select: {
code: true,
'createdUser.id': true,
'createdUser.name': true
}
});
console.log('query data: ', data);

// output:
/* {
id: "SJWRH061GU9002D",
name: "王五",
code: "ZhiYua0001200006",
createdUser: {
id: "V5G69061GBE0013",
name: "智元"
}

} */

// where 也可以写成:

where: {
id: {
equals: 'SJWRH061GU9002D'
}
}


【AND】 查询姓名包含 "张"字并且并且创建人名字是智元的数据

对象({})下平级的字段属性默认用AND连接

const data = await ctx.getFormContext().entityQuery("User").findMany({
where: {
name: {
like: '张'
},
'createdUser.name': {
equals: '智元'
}

},
select: {
code: true,
'createdUser.id': true,
'createdUser.name': true
}
});
console.log('query data: ', data);

// output:


【OR】 查询创建时间在 2022-5-24 到 2022-5-30 之间, 或者名字不是 "王五",


const data = await ctx.getFormContext().entityQuery("User").findMany({
where: {
name: {
in: ['王五']
},
OR: {
createdTime: {
between: [1653380067900, 1653901226330]
}
}


},
select: {
code: true,
'createdUser.id': true,
'createdUser.name': true
}
});
console.log('query data: ', data);

caution

目前日期字段用结构化方式会出错, 我们正在努力解决。 暂时先使用 where 是字符串条件的方式解决

[not] 查询性别不是"女"的人员

const data = await ctx.getFormContext().entityQuery("User").findMany({
where: {
'gender.title': {
not: '女'
},
OR: {
'gender.title': {
isNull: true
}
}

},
select: {
code: true,
'createdUser.id': true,
'createdUser.name': true
}
});
console.log('query data: ', data);


caution

not 操作符只会处理有数据的记录, 一些用户并没有填性别,性别为空,只有not,这些空记录是不会查出的, 如果需要查出这些空记录还要加上 isNull

where 条件是字符串(string)

IFindWhere 结构化where方式, 存在一定的局限性, 比如无法支持表达式、子查询等特定场景需要的数据请求, 书写上也有一定的不 便性,在此提供了一种criteriaStr的书写方式

查询姓名是张三或者性别是女的人员:

    const data = await ctx.getFormContext().entityQuery("User").findMany({
where: "name='张三' OR gender.title='女'" ,
select: {
code: true
}
});
console.log('query data: ', data);

也可配合bindVars使用: 实现相同功能:

    const data = await ctx.getFormContext().entityQuery("User").findMany({
where: "name = :V0 OR gender.title = :V1" ,
bindVars: [{name:"V0",value:"张三"}, {name:"V1",value:"女"}],
select: {
code: true
}
});
console.log('query data: ', data);

日期字段作为查询条件查询

    const data = await ctx.getFormContext().entityQuery("User").findMany({
where: "createdTime BETWEEN TO_TIMESTAMP(1653380067900) AND TO_TIMESTAMP(1650888894446)" ,
select: {
code: true
}
});
console.log('query data: ', data);

bindVars写法:

注意转换函数不能写在bindVars中

    const data = await ctx.getFormContext().entityQuery("User").findMany({
where: "createdTime BETWEEN TO_TIMESTAMP(:V0) AND TO_TIMESTAMP(:V1)" ,
bindVars: [{name:"V0",value:1653380067900}, {name:"V1",value:1650888894446}],
select: {
code: true
}
});
console.log('query data: ', data);

where 是 criteria结构

where 是字符串虽然灵活, 但在某些场景下也存在问题。 比如,因为向后端发的入参是个字符串, 这是如果我们要对入参做一些拦截, 来改变参数的内容,就很难处理, 而IFindWhere方式的结构化 又不能覆盖全部场景。 因此推出 criteria结构的类型。