Google app maker 如何使用Google App Maker创建高级搜索/过滤器';什么是查询脚本?

Google app maker 如何使用Google App Maker创建高级搜索/过滤器';什么是查询脚本?,google-app-maker,Google App Maker,我正在制作一个具有高级搜索功能的应用程序,它可以帮助用户从下拉列表和文本框(下拉选择列和子句,输入搜索参数的文本框)中筛选数据,如下所示: 高级搜索页面示例: 我尝试将列的名称下拉列表绑定到@datasource.query.parameters.Parameter,并更改了datasource的查询部分,如下所示: 数据源的查询脚本和参数: 但是,我经常会遇到如下错误: 参数“Column”在“where”子句中使用,但未在属性“parameters”中定义 你能告诉我如何解决这个问题吗

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

高级搜索页面示例:

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

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

但是,我经常会遇到如下错误:

参数“Column”在“where”子句中使用,但未在属性“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?”:参数1'(即John),然后成为您的查询。希望这是有意义的,请随时提出后续问题。

在这种情况下,您必须构造“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?”:参数1'(即John),然后成为您的查询。希望这有意义,请随时提出后续问题。

谢谢您的回复。我想问一下什么是
query.parameters.Param1=query.parameters.Parameter1真的吗?我知道
query.parameters.Column1
代表dropdown1的值,而
query.parameters.Query1
代表dropdown2的值,但为什么参数与其他两个不同呢?我需要手动将Param1添加到数据源吗?P/S:我收到一个错误:在“?”处出现意外输入:Param1'当我试图执行脚本时。@Kiko我刚刚再次测试了一些示例代码,您不需要第二行代码。只要将第一行改为:Parameter1而不是:Param1,您就可以开始了。不确定这是否能解决您的错误。我已编辑了反映更新代码的答案。该代码适用于字符串,但如果参数为数字,则会出现错误:“Parameter1”参数的值应为数字。如果列需要数字类型值,我们可以将
:Parameter1
转换为数字吗?@Kiko我再次编辑了我的答案,添加了一些额外的代码来确定列参数的字段类型。我在文本框中用参数1的一个数字测试了新代码,但是我没有测试日期或布尔字段,因此对于这些类型的字段,您可能需要做一些额外的测试。希望这能让你走上正确的方向。如果Column1或Query1参数为null,也会包含一个错误返回,这可能也很重要。除了异常部分外,代码运行良好。使用
throw app.ManagedError
时,我遇到了一个错误(无法在此处发布,因为它很长,很难理解,但如果您需要,我将上传它的图像)。所以我改为抛出新错误('Error')那么它工作得很好。谢谢你的回复。我想问一下什么是
query.parameters.Param1=query.parameters.Parameter1真的吗?我知道
query.parameters.Column1
代表dropdown1的值,而
query.parameters.Query1
代表dropdown2的值,但为什么参数与其他两个不同呢?我需要手动将Param1添加到数据源吗?P/S:我收到一个错误:在“?”处出现意外输入:Param1'当我试图执行脚本时。@Kiko我刚刚再次测试了一些示例代码,您不需要第二行代码。只要将第一行改为:Parameter1而不是:Param1,您就可以开始了。不确定这是否能解决您的错误。我已编辑了反映更新代码的答案。该代码适用于字符串,但如果参数为数字,则会出现错误:“Parameter1”参数的值应为数字。如果列需要数字类型值,我们可以将
:Parameter1
转换为数字吗?@Kiko我再次编辑了我的答案,添加了一些额外的代码来确定列参数的字段类型。我在文本框中用参数1的一个数字测试了新代码,但是我没有测试日期或布尔字段,因此对于这些类型的字段,您可能需要做一些额外的测试。希望这能让你走上正确的方向。如果Column1或Query1参数为null,也会包含一个错误返回,这可能也很重要。除了异常部分外,代码运行良好。使用
throw app.ManagedError
时,我遇到了一个错误(无法在此处发布,因为它很长,很难理解,但如果您需要,我将上传它的图像)。所以我改为抛出新错误('Error')然后它工作得很好。