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

Google app maker 如何浏览到Google AppMaker中加载到表中的数据源中的下一页,google-app-maker,Google App Maker,我正在处理一个名为“emailSearchResults”的数据源的需求,在该数据源中搜索电子邮件元数据并将结果加载到数据源中 数据源中的字段不相关,但是我根据下面的屏幕截图将数据源设置为每页有50条记录: 用于加载数据源的脚本显示在查询字段中,该字段调用以下脚本: function getMessageDetails(userId, msgID) { var messageDetails = []; var messageData; var msgID_,subject_,fro

我正在处理一个名为“emailSearchResults”的数据源的需求,在该数据源中搜索电子邮件元数据并将结果加载到数据源中

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

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

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;
}
函数getMessageDetails(userId,msgID) { var messageDetails=[]; var消息数据; var msgID,subject,from,date; messageData=Gmail.Users.Messages.get(userId,msgID,{format:“metadata”,metadataHeaders:[“messageid”,“Subject”,“From”,“Date”]}); log(messageData.payload.headers); //console.log(msgID); //log(messageData.payload.headers[3].value); 日期=”; 来自=”“; 主题=”“; msgID_uquo;;
对于(var counter=0;counter,当前分页在计算数据源中无法按预期工作。但是,您可以构建自己的分页。要实现这一点,您需要进行几项更改。首先,您需要将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};
}
您需要修改分页小部件的各种属性。以下是上一个/下一个单击功能:

以前的:

widget.datasource.query.pageIndex--;
widget.datasource.query.parameters.page = widget.datasource.query.pageIndex;
widget.datasource.load();
下一步:


您应该可以从那里开始。

在计算数据源上的分页出现问题,我猜您的数据源是这样的。这可能还没有得到修复。您可能希望查看是否有针对此问题的错误提交并启动它,或者如果没有提交错误报告,请继续并提交一个。Hi@MarkusMalessa,是的,这是一个计算过的数据源,我会检查关于这一点的错误报告。但根据下面App Maker团队的回复,这可能是正常行为?他们在下面提出的修改实际上对我创建的数据源非常有效。进一步检查后,我同意@MarkusMalessa,似乎这是很可能是一个bug。这很好,非常感谢您的帮助。它按照说明工作……我必须调整分页小部件中的一些内容,但它确实按照我的预期工作。它工作正常,就像@Bluescrod在评论中说的,我必须调整上一个/下一个按钮的可见性以及禁用它们的定义。@Bluescrod您是怎么做到的最终禁用“下一页”按钮在客户端?@jorgachacon如果我正确理解了流程,那么每次单击next/prev按钮时,数据源都会加载查询的下一页。我还没有做过这方面的工作,因为我想得到一个完全可以工作的模型来完成我想做的事情,然后我将为next/p进行适当的可见性设置rev按钮。但是,我相信我可以定制一个条件来查看pageToken/页码,或者定制一个计数器来控制这两个按钮的可见性…只是粗略的想法还是真的,我需要尽快开始工作!@jorgechacon为了让我自己暂时开始工作,我更改了ne的可见性设置xt/prev按钮将绑定形式设置为显式值,我将两个按钮的绑定设置为enabled(已启用)。我还将整个寻呼机小部件的可见性设置更改为explicit visible(显式可见)。当我达到最大页数时,我仍然可以单击next/prev,页码将以错误的值更新。我必须解决此问题不过,这在之前的评论中解释过。
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();