如何使用Google App Maker的查询脚本创建高级搜索/过滤器? [英] How to create an advanced search/filter using Google App Maker's Query Script?

查看:105
本文介绍了如何使用Google App Maker的查询脚本创建高级搜索/过滤器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm making an app with an advanced search feature which can help users filter data from dropdowns and textboxes (Dropdown to choose column and clause, Textbox for entering search parameter) like this one:

高级搜索"页面示例:

我试图将列的名称下拉列表绑定到@datasource.query.parameters.Parameter,并更改数据源的查询"部分,如下所示:

I tried to bind the Column's name dropdown to @datasource.query.parameters.Parameter and changed the Query part of the datasource like this:

数据源的查询脚本和参数:

但是,我不断收到类似这样的错误:

However, I keep getting errors like:

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

Parameter 'Column' is used in 'where' clause but not defined in property 'parameters'

能否请您告诉我如何解决此问题?

Could you please tell me how can I resolve this problem?

推荐答案

在这种情况下,您实际上必须构造"Where"子句,然后将where子句的参数设置为与您的参数相等.因此,假设您的第一组参数是Column1:名称,Query1:包含,Parameter1:John,那么您的数据源需要具有以下参数Column1,Query1和Parameter1,并且您在dropdown1,dropdown2和textbox1上的绑定应为:

You literally have to construct your 'Where' clause in this case and then set the parameter of the where clause equal to your parameters. So lets say your first set of parameters is Column1: Name, Query1: contains, Parameter1: John, then your datasource needs to have the following parameters Column1, Query1, and Parameter1 and your bindings on your dropdown1, dropdown2, and textbox1 should be:

@datasource.query.parameters.Column1
@datasource.query.parameters.Query1
@datasource.query.parameters.Parameter1

分别.

然后,您的查询脚本需要如下:

Then your query script needs to be as follows:

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语句实质上变成了一个字符串,其内容为名称包含? :Parameter1'(即John),然后成为您的查询.希望这是有道理的,随时提出后续问题.

So your where statement essentially becomes a string that reads 'Name contains? :Parameter1' (i.e. John) that then becomes your query. Hope this makes sense, feel free to ask follow up questions.

这篇关于如何使用Google App Maker的查询脚本创建高级搜索/过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆