在Appmaker

时间:2018-05-29 10:42:17

标签: google-app-maker

我有一个Google驱动器表数据源,用于存储未结头寸列表。现在在数据源中我已经设置了"每个尺寸的查询"字段为10,这样我每页可以获得10条记录。我还添加了一个寻呼机来显示分页。

我的查询是我希望显示为"第1页的X"对于我的最终用户,此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 :(得分:1)

如果您的表中没有任何过滤器,您的服务器代码可以像

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

  return pagesCount;
}

作为替代方案,您可以考虑使用单个字段PagesCount创建Calculated Model

如果您有一些与该表关联的过滤器,那么您需要使用完全相同的过滤器运行页码的查询。

很可能整个设置无法与驱动器表一起有效工作,因为无法在不查询记录本身的情况下查询记录号。使用Cloud SQL数据后端,可以使用轻量级本机SQL查询创建Calculated SQL Model(此处:PageSize是查询参数,应该等于实际数据源的query.limit):

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

答案 1 :(得分:0)

我使用 Pavel 建议的计算模型实现了这一目标。

步骤:

  1. 创建一个包含一个字段数的计算数据源。
  2. 在该数据源中添加一个参数searchQuery。这将包含用户过滤器。目前我只有一个搜索查询,用户可以搜索很多东西。所以我只添加了一个参数。
  3. 在此数据源中添加以下服务器脚本。
  4. 代码:

    // 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;
    }
    

    1. 在Appmaker页面上,使用此数据源绑定标签。
    2. 在搜索查询/您的过滤器应用事件上添加以下代码,重新加载此数据源并为参数赋值。
    3. // Client script
      function updateRecordCount(newValue) {
        var ds = app.datasources.RecordCount;
        ds.query.parameters.searchQuery = newValue;
        ds.unload();
        ds.load();
      }