Google app maker 表未使用手动保存模式更新

Google app maker 表未使用手动保存模式更新,google-app-maker,Google App Maker,因此,我有一个表显示了条目。用户点击按钮打开一个片段页面来编辑数据 app.datasources.SystemOrders.selectKey(widget.datasource.item._key); app.showDialog(app.pageFragments.SystemOrders_Edit); 这部分很好用 我已将数据源更改为手动保存模式,以便能够利用电子邮件通知更改Project Tracker示例中使用的功能。因此,用户可以进行更改,点击“保存关闭”按钮,一封显示更改的电子

因此,我有一个表显示了条目。用户点击按钮打开一个片段页面来编辑数据

app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);
这部分很好用

我已将数据源更改为手动保存模式,以便能够利用电子邮件通知更改Project Tracker示例中使用的功能。因此,用户可以进行更改,点击“保存关闭”按钮,一封显示更改的电子邮件就会发出

问题是,当用户关闭片段时,表不会更新,因为它们具有相同的数据源。当我处于自动保存模式时,我能够利用以下命令强制重新加载表格,以使其反映任何更改:

var datasource = app.datasources.SystemOrders_HideComplete;
datasource.load();
app.closeDialog();
所以我想我只需要添加widget.datasource.saveChanges;关闭按钮的选项

widget.datasource.saveChanges();
var datasource = app.datasources.SystemOrders_HideComplete;
    datasource.load();
    app.closeDialog();
不幸的是,当我使用上面的方法时,我得到了以下错误,并且表在尝试重新加载微调器时似乎被卡住了

无法查询具有更改的模型上的记录

我假设这可能是因为数据源在尝试重新加载datasouce之前还没有完成保存新更改

如何使用“保存关闭”按钮:

保存更改

关闭对话框

是否刷新表格以使其反映更改


谢谢你的帮助

您可以尝试在save callback中刷新数据源,前提是您实际上在页面片段和页面之间共享数据源:

widget.datasource.saveChangesfunction{ widget.datasource.load; app.closeDialog; };
您可以尝试在save Callback中刷新数据源,前提是您实际上在页面片段和页面之间共享数据源:

widget.datasource.saveChangesfunction{ widget.datasource.load; app.closeDialog; };
如果您的数据源试图刷新而您有未保存的更改,则会发生此错误

我知道您的代码块在再次加载数据源之前会调用客户端saveChanges,但您可能需要检查以确保数据源不会同时在其他地方重新加载

如果还没有解决,请尝试将值传递给服务器端脚本,并在分配属性后保存更改,如下所示:

客户:

function handleSuccess() {
  // ensures that records are saved, now reload
  app.models.YourModel.YourDatasource.load();
}

google.script.run.withSuccessHandler(handleSuccess).addItem(field_value1, field_value2, field_value3); 
服务器:

function addItem(field_value1, field_value2, field_value3) {

 // create new items
 var newItem = app.models.YourModel.newRecord();

 // assign values
 newItem.field1 = field_value1; 
 newItem.field2 = field_value2; 
 newItem.field3 = field_value3; 

 // save
 app.saveRecords([newItem]);
}

我发现这种方法比从客户端脚本操作更改更可靠。

如果您的数据源试图刷新而您有未保存的更改,则会发生此错误

我知道您的代码块在再次加载数据源之前会调用客户端saveChanges,但您可能需要检查以确保数据源不会同时在其他地方重新加载

如果还没有解决,请尝试将值传递给服务器端脚本,并在分配属性后保存更改,如下所示:

客户:

function handleSuccess() {
  // ensures that records are saved, now reload
  app.models.YourModel.YourDatasource.load();
}

google.script.run.withSuccessHandler(handleSuccess).addItem(field_value1, field_value2, field_value3); 
服务器:

function addItem(field_value1, field_value2, field_value3) {

 // create new items
 var newItem = app.models.YourModel.newRecord();

 // assign values
 newItem.field1 = field_value1; 
 newItem.field2 = field_value2; 
 newItem.field3 = field_value3; 

 // save
 app.saveRecords([newItem]);
}

我发现这种方法比从客户端脚本中操作更改更可靠。

更新是因为可以异步调用服务器函数更新是因为可以异步调用服务器函数