如何使用 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),然后成为您的查询。希望这是有道理的,请随时提出后续问题。