如何使用Google App Maker的查询脚本创建高级搜索/过滤器?

时间:2019-01-28 05:51:38

标签: google-app-maker

我正在开发一个具有高级搜索功能的应用程序,它可以帮助用户从下拉列表和文本框(下拉菜单中选择列和子句,用于输入搜索参数的文本框)中过滤数据,如下所示:

Advanced Search page sample

我试图将列的名称下拉列表绑定到@datasource.query.parameters.Parameter,并像这样更改数据源的“查询”部分:

Datasource's Query Script and Parameters

但是,我不断收到

之类的错误
  

在“ where”子句中使用参数“ Column”,但未在属性“ parameters”中定义

能否请您告诉我如何解决此问题? 预先感谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您实际上必须构造“ Where”子句,然后将where子句的参数设置为等于您的参数。因此,假设您的第一组参数是Column1:名称,Query1:包含,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 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语句从本质上变成了一个读取“名称包含? :Parameter1'(即John),然后成为您的查询。希望这有道理,请随时提出后续问题。