如何使用 Google App Maker 的查询脚本创建高级 search/filter?
How to create an advanced search/filter using Google App Maker's Query Script?
我正在开发一款具有高级搜索功能的应用,它可以帮助用户从下拉菜单和文本框(用于选择列和子句的下拉菜单,用于输入搜索参数的文本框)过滤数据,如下所示:
高级搜索页面示例:
我尝试将列的名称下拉列表绑定到 @datasource.query.parameters.Parameter
并像这样更改数据源的查询部分:
数据源的查询脚本和参数:
但是,我不断收到如下错误:
Parameter 'Column' is used in 'where' clause but not defined in property 'parameters'
你能告诉我如何解决这个问题吗?
在这种情况下,您实际上必须构建 'Where' 子句,然后将 where 子句的参数设置为您的参数。因此,假设您的第一组参数是 Column1:Name、Query1:contains、Parameter1:John,那么您的数据源需要具有以下参数 Column1、Query1 和 Parameter1,并且您在 dropdown1、dropdown2 和 textbox1 上的绑定应该是:
@datasource.query.parameters.Column1
@datasource.query.parameters.Query1
@datasource.query.parameters.Parameter1
分别
那么你的查询脚本需要如下:
if (query.parameters.Field1 === null || query.parameters.Query1 === null) {
throw new app.ManagedError('Cannot complete query without Parameters!');
}
switch (app.metadata.models.MaintenanceManagement.fields[query.parameters.Field1].type) {
case 'Number':
query.parameters.Parameter1 = Number(query.parameters.Parameter1);
break;
case 'Date':
query.parameters.Parameter1 = new Date(query.parameters.Parameter1);
break;
case 'Boolean':
if (query.parameters.Parameter1 === 'True' || query.parameters.Parameter1 === 'true') {
query.parameters.Parameter1 = true;
} else {
query.parameters.Parameter1 = false;
}
break;
default:
query.parameters.Parameter1 = query.parameters.Parameter1;
}
query.where = query.parameters.Column1 + " " + query.parameters.Query1 + "? :Parameter1";
return query.run();
因此,您的 where 语句实质上变成了一个字符串,该字符串显示为 'Name contains? :Parameter1'(即 John),然后成为您的查询。希望这是有道理的,请随时提出后续问题。
我正在开发一款具有高级搜索功能的应用,它可以帮助用户从下拉菜单和文本框(用于选择列和子句的下拉菜单,用于输入搜索参数的文本框)过滤数据,如下所示:
高级搜索页面示例:
我尝试将列的名称下拉列表绑定到 @datasource.query.parameters.Parameter
并像这样更改数据源的查询部分:
数据源的查询脚本和参数:
但是,我不断收到如下错误:
Parameter 'Column' is used in 'where' clause but not defined in property 'parameters'
你能告诉我如何解决这个问题吗?
在这种情况下,您实际上必须构建 'Where' 子句,然后将 where 子句的参数设置为您的参数。因此,假设您的第一组参数是 Column1:Name、Query1:contains、Parameter1:John,那么您的数据源需要具有以下参数 Column1、Query1 和 Parameter1,并且您在 dropdown1、dropdown2 和 textbox1 上的绑定应该是:
@datasource.query.parameters.Column1
@datasource.query.parameters.Query1
@datasource.query.parameters.Parameter1
分别
那么你的查询脚本需要如下:
if (query.parameters.Field1 === null || query.parameters.Query1 === null) {
throw new app.ManagedError('Cannot complete query without Parameters!');
}
switch (app.metadata.models.MaintenanceManagement.fields[query.parameters.Field1].type) {
case 'Number':
query.parameters.Parameter1 = Number(query.parameters.Parameter1);
break;
case 'Date':
query.parameters.Parameter1 = new Date(query.parameters.Parameter1);
break;
case 'Boolean':
if (query.parameters.Parameter1 === 'True' || query.parameters.Parameter1 === 'true') {
query.parameters.Parameter1 = true;
} else {
query.parameters.Parameter1 = false;
}
break;
default:
query.parameters.Parameter1 = query.parameters.Parameter1;
}
query.where = query.parameters.Column1 + " " + query.parameters.Query1 + "? :Parameter1";
return query.run();
因此,您的 where 语句实质上变成了一个字符串,该字符串显示为 'Name contains? :Parameter1'(即 John),然后成为您的查询。希望这是有道理的,请随时提出后续问题。