我有一个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;
答案 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 建议的计算模型实现了这一目标。
步骤:
searchQuery
。这将包含用户过滤器。目前我只有一个搜索查询,用户可以搜索很多东西。所以我只添加了一个参数。代码:
// 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;
}
// Client script
function updateRecordCount(newValue) {
var ds = app.datasources.RecordCount;
ds.query.parameters.searchQuery = newValue;
ds.unload();
ds.load();
}