首页 文章

如何浏览加载到Google AppMaker中的表中的数据源中的下一页

提问于
浏览
1

我正在制定一个要求,我有一个名为'emailSearchResults'的数据源,在那里我搜索电子邮件元数据并将结果加载到数据源中 .

数据源中的字段不相关,但是我将数据源设置为每页有50条记录,如下面的屏幕截图所示:
enter image description here

我用来加载数据源的脚本显示在查询字段中,调用以下脚本:

function getMessageDetails(userId, msgID)
{
  var messageDetails = [];
  var messageData;
  var msgID_,subject_,from_,date_;

  messageData=Gmail.Users.Messages.get(userId,msgID,{format:"metadata", metadataHeaders:["Message-ID", "Subject", "From", "Date"]});

  console.log(messageData.payload.headers);

  //console.log(msgID);
  //console.log(messageData.payload.headers[3].value);

  date_="<na>";
  from_="<na>";
  subject_="<na>";
  msgID_="<na>";

  for (var counter =0;counter<4;counter++)
  {
    if (messageData.payload.headers[counter].name=="Message-ID")
    {
      msgID_=messageData.payload.headers[counter].value;
    }

    if (messageData.payload.headers[counter].name=="Subject")
    {
      subject_=messageData.payload.headers[counter].value;
    }

    if (messageData.payload.headers[counter].name=="From")
    {
      from_=messageData.payload.headers[counter].value;
    }

    if (messageData.payload.headers[counter].name=="Date")
    {
      date_=messageData.payload.headers[counter].value;
    }
  }

  messageDetails.push(date_);
  messageDetails.push(from_);
  messageDetails.push(subject_);
  messageDetails.push(msgID_);

  return messageDetails;
}


function searchMessages(userId,condition)
{
  //
  // first we build the conditions
  // we can make it fixed
  // or we can make it dynamic
  var searchResult;
  var deleteResult;
  var currentMessage;
  var results = [];
  var pageToken;
  var params = {};
  var _stat;
  var options = {
    includeSpamTrash: "true",
    pageToken: pageToken
  };
  var msgRecord = [];

  do
  {
    searchResult=Gmail.Users.Messages.list(userId,options);

    for (var i = 0; i < searchResult.messages.length; i++)
    {
      var record=app.models.emailSearchResults.newRecord();
      msgRecord=getMessageDetails(userId,searchResult.messages[i].id);

      record.msgMainID=searchResult.messages[i].id;
      record.msgID=msgRecord[3];
      record.subject=msgRecord[2];
      record.senderAddress=msgRecord[1];
      record.msgDate=msgRecord[0];

      /*console.log(searchResult.messages[i].id);
      console.log(msgRecord[3]);
      console.log(msgRecord[2]);
      console.log(msgRecord[1]);
      console.log(msgRecord[0]);

      return;*/
      results.push(record);
      msgRecord=null;
    }

    if (searchResult.nextPageToken) {
      options.pageToken = searchResult.nextPageToken;
    }
  } while (searchResult.pageToken);

  searchResult=null;

  return results;
}

在主页面上,我放了一个表并将其链接到数据源,然后我在表格上启用了分页,所以我得到了表格底部的寻呼机按钮,如下所示:
enter image description here

enter image description here

当我执行应用程序并填充数据源时,我看到第一页的结果是正确的,但是当我想要移动到下一页时,我点击下一页按钮,一旦加载完成,我发现我仍然可以从表格的第一页看到相同的结果 .

我不熟悉如何使表格显示第二页的结果,然后是第三页,我就是围绕这个......

希望解释清楚并解决问题..

我真的很感激任何帮助!问候

1 回答

  • 2

    目前分页与计算数据源无法正常工作 . 但是,您可以构建自己的 . 要完成此任务,您需要进行一些更改 . 首先,您需要将searchMessages函数重构为以下内容:

    function searchMessages(userId, pageToken){
    
      var results = [];
      var options = {
        includeSpamTrash: "true",
        pageToken: pageToken,
        maxResults: 50
      };
    
        var searchResult = Gmail.Users.Messages.list(userId, options);
    
        for (var i = 0; i < searchResult.messages.length; i++){
          var record = app.models.emailSearchResults.newRecord();
          var msgRecord = getMessageDetails(userId,searchResult.messages[i].id);
    
          record.msgMainID = searchResult.messages[i].id;
          record.msgID = msgRecord[3];
          record.subject = msgRecord[2];
          record.senderAddress = msgRecord[1];
          record.msgDate = msgRecord[0];
    
          results.push(record);
        }
    
      return {records: results, nextPageToken: searchResult.nextPageToken};
    }
    

    然后你需要添加一个名为 page 的数字参数 .

    var cache = CacheService.getUserCache();
    var page = query.parameters.page || 1;
    var pageToken;
    if(page > 1){
      pageToken = cache.get('pageToken' + page.toString());
    }
    
    var results = searchMessages('me', pageToken);
    
    var nextPage = (page + 1).toString();
    cache.put('pageToken' + nextPage, results.nextPageToken);
    
    return results.records;
    

    您需要修改分页窗口小部件的各种属性 . 以下是上一个/下一个点击功能:

    以前:

    widget.datasource.query.pageIndex--;
    widget.datasource.query.parameters.page = widget.datasource.query.pageIndex;
    widget.datasource.load();
    

    下一个:

    widget.datasource.query.pageIndex++;
    widget.datasource.query.parameters.page = widget.datasource.query.pageIndex;
    widget.datasource.load();
    

    你应该可以从那里拿走它 .

相关问题