Лучший способ для отображения общего числа страниц для источника данных в Appmaker - PullRequest
0 голосов
/ 29 мая 2018

У меня есть источник данных таблицы Google Drive, в котором хранится список открытых позиций.Теперь в источнике данных я установил в поле «Запрос на размер» значение 10, чтобы получить 10 записей на страницу.Я также добавил пейджер для отображения нумерации страниц.

Мой запрос состоит в том, что я хочу, чтобы "Конечная страница 1" отображалась моим конечным пользователям, и этот X будет зависеть от определенных поисковых фильтров.Как лучше всего добиться этого в Appmaker?

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

//Server side
    var newQuery = app.models.Company.newQuery();
    var records = newQuery.run();
    var totalCount =0;
    for(var i=0;i<records.length;i++)
    {
       totalCount=totalCount+1;
    }
    return totalCount;

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Я достиг этого, используя Расчетную модель, как предложено Павел .

Шаги:

  1. Создание источника вычисляемых данных с одним счетчиком полей.
  2. В этот источник данных добавить один параметр searchQuery.Это будет содержать фильтр пользователей в будущем.В настоящее время у меня есть только один поисковый запрос, в котором пользователь может искать много вещей.Поэтому я добавил только один параметр.
  3. В этом источнике данных добавьте следующий скрипт сервера.

Код:

// Server script
function getTotalRecords(query) {
  var receivedQuery = query.parameters.searchQuery;
  // console.log('Received query:' + query.parameters.searchQuery);

  var records = app.models.Company.newQuery();
  records.parameters.SearchText = query.parameters.searchQuery;

  if(receivedQuery !== null) {
    records.where = '(Name contains? :SearchText or InternalId contains? ' +
      ':SearchText or LocationList contains? :SearchText )';
  }

  var recordsCount = records.run().length;
  var calculatedModelRecords = []; 
  var draftRecord = app.models.RecordCount.newRecord();
  draftRecord.count = ''+recordsCount;
  calculatedModelRecords.push(draftRecord);

  return calculatedModelRecords;
}

.

На странице Appmaker свяжите метку с этим источником данных. К поисковому запросу / событию, к которому применен ваш фильтр, добавьте следующий код, который перезагружает этот источник данных, и присвойте значение параметру.
// Client script
function updateRecordCount(newValue) {
  var ds = app.datasources.RecordCount;
  ds.query.parameters.searchQuery = newValue;
  ds.unload();
  ds.load();
}
0 голосов
/ 29 мая 2018

Если в вашей таблице нет фильтров, ваш серверный код может быть простым:

// Server script
function getPagesCount(pageSize) {
  var recordsCount = app.models.MyModel.newQuery().run().length;
  var pagesCount = Math.ceil(recordsCount / pageSize);

  return pagesCount;
}

В качестве альтернативы вы можете рассмотреть возможность создания Расчетной модели с однимполе PagesCount.

Если у вас есть несколько фильтров, связанных с таблицей, вам нужно будет выполнить запрос для номера страницы с точно такими же фильтрами.

Скорее всего, вся настройкане будет эффективно работать с таблицами накопителей, поскольку невозможно запросить номер записи без запроса самих записей.С бэкэндом данных Cloud SQL можно создать Модель вычисляемого SQL с облегченным собственным запросом SQL (здесь :PageSize - это параметр запроса, который должен быть равен query.limit фактического источника данных):

SELECT
  Ceil(COUNT(1) / :PageSize) AS RecordsNumber
FROM
  TableName
WHERE
  ...
...