如何重新执行App Maker数据源的查询脚本

时间:2019-06-05 20:32:19

标签: google-apps-script google-cloud-platform google-cloud-sql google-app-maker

目标

使用App Maker收集用户生日并仅显示本月的生日。

问题

我有一个数据模型persons。在该模型中有两个数据源,默认的persons和第二个birthdaysThisMonthbirthdaysThisMonth中的数据源查询脚本正常运行,并且仅从persons模型返回本月的生日。

但是,当我在persons数据源中更改生日时,birthdaysThisMonth数据源将保持不变,例如birthdaysThisMonth中的查询脚本没有重新执行

要更改生日,我从日期选择器中选择一个新日期,新值显示在表格中。我没有使用“提交”按钮,当日期选择器失去焦点时,我看到了更改。

我尝试过的东西

此脚本在birthdaysThisMonth数据源中作为查询脚本执行,该数据源设置为Manual save mode 。它返回我想要的记录。

function setBirthdays() {
  var calcRecords = [];
  var personsRecords = app.models.persons.newQuery().run();
  for (i=0; i<personsRecords.length; i++) {
    var id = app.models.persons.newQuery().filters.Id._equals = i;
    if (personsRecords[i].birthdate.getMonth() == thisMonth())  {
      var calcRecord = app.models.persons.newRecord();
      calcRecord.emailSecondary = personsRecords[i].emailSecondary;
      calcRecord.birthdate = personsRecords[I].birthdate;
      calcRecord.Id = personsRecords[i].Id;
      calcRecords.push(calcRecord);
    }
  }
  return calcRecords;
}

问题

更新birthdaysThisMonth中的数据后,如何重新执行persons中的查询脚本。如何触发查询,以便它重新评估persons中的数据并进行相应过滤。

使用事件和onAfterSave似乎很有希望,但是我还没有找到一个例子。

顺便说一句

我希望这项工作尽可能在服务器端进行。

1 个答案:

答案 0 :(得分:0)

请参阅Markus Malessa的评论以获取答案。

  

不幸的是,您不能使用onAfterSave之类的服务器事件来触发在客户端上重新加载数据源,因此您提出的解决方案将无法工作。似乎唯一可行的解​​决方案是将您的人员数据源设置为手动保存数据源,在这种形式中,您可以更改出生日期,您将需要一个“保存”按钮,该按钮调用widget.datasource.saveChanges()并在该函数中合并一个回调,该回调将重新加载您的BirthdaysThisMonth数据源

我尝试推/拉数据的方式不好。看起来手动模式提供了我需要的功能类型。