Как создать расширенный поиск / фильтр с помощью скрипта запроса Google App Maker? - PullRequest
0 голосов
/ 28 января 2019

Я создаю приложение с функцией расширенного поиска, которая может помочь пользователям фильтровать данные из раскрывающихся списков и текстовых полей (раскрывающийся список для выбора столбца и предложения, текстовое поле для ввода параметра поиска), например:

Пример страницы расширенного поиска

Я попытался привязать раскрывающийся список Имя столбца к @datasource.query.parameters.Parameter и изменил часть запроса источника данных следующим образом:

Сценарий запроса источника данных иПараметры

Тем не менее, я продолжаю получать ошибки, такие как

Параметр «Столбец» используется в предложении «где», но не определен в свойстве «параметры»

Не могли бы вы сказать мне, как я могу решить эту проблему?Заранее спасибо.

1 Ответ

0 голосов
/ 28 января 2019

В этом случае вам буквально нужно создать предложение 'Where', а затем установить параметр предложения where равным вашим параметрам.Допустим, ваш первый набор параметров - это Column1: Name, 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 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 содержит?: Parameter1 '(то есть Джон), который затем становится вашим запросом.Надеюсь, что это имеет смысл, не стесняйтесь задавать дополнительные вопросы.

...