【问题标题】:Using Cache from Server Handler从服务器处理程序使用缓存
【发布时间】:2012-11-03 02:39:33
【问题描述】:

我正在尝试将一些用户输入从电子表格上的 Google App 脚本表单保存到私人缓存中。

这是一个测试脚本:

var cache = CacheService.getPrivateCache();

function onLoad() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet(),
      entries = [{
        name : "Show form",
        functionName : "showForm"
      }];
  sheet.addMenu("Test Menu", entries);
}

function showForm() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(),
      app = UiApp.createApplication(),
      setButton = app.createButton("Set"),
      setHandler = app.createServerClickHandler('setTest');

  setButton.addClickHandler(setHandler);
  app.add(setButton);
  spreadsheet.show(app);
}

function setTest(event) {
  cache.put("test", "test", 7200);

  Browser.msgBox("Test was set: " + cache.get("test") + ". Use the getTest cell formula to test the cache.");
}

function getTest() {
  var result = cache.get("test");

  return result;
}

单击菜单按钮后,会出现一个表单,并在服务器处理程序中设置缓存值。然后我尝试在单元格中使用 =getTest() 从缓存中获取值。我希望缓存返回值“test”,但它似乎返回 null。

我从这里开始这个问题: http://code.google.com/p/google-apps-script-issues/issues/detail?id=2039

我还发现了另一个类似的: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1804

尝试将表单上的一些用户输入保存到缓存中,以便稍后从另一个函数访问它。

有什么建议吗?

【问题讨论】:

  • 消息框显示的值是否正确?
  • 如果您正在谈论弹出确认缓存值确实是从 setTest 函数设置的 msgBox,那么是的,确实如此。

标签: google-apps-script google-sheets


【解决方案1】:

自定义功能的范围有限,因此只能访问少数选定的服务。你阅读了更多关于他们的限制here

使用缓存有点棘手 - 缓存是每个“脚本范围”。因此,当首先从服务器处理程序脚本范围访问缓存时,它作为具有更多权限的 UiApp 运行,这与自定义函数运行的脚本范围不同。因此,缓存不在这两个范围之间共享。

您可以从其他自定义函数访问您在自定义函数中设置的缓存项,但此缓存不能跨越这些边界。

理论上,您可以将其存储在 ScripProperties 中,但这可能非常笨拙,并且会滥用这些功能,并且会在所有用户之间共享。

ScriptProperties.setProperty("test", "test")

var result = ScriptProperties.getProperty("test");

如果您可以更深入地解释您的用例,也许我们可以提供一些替代解决方案。

【讨论】:

  • 用例是弹出一个表单让用户输入一些凭据,保存它们,然后让自定义函数使用这些凭据进行 REST 调用。
  • 啊。您可能必须将其传递给自定义函数。虽然我知道对于敏感数据来说可能不是很安全。或者,您可以使用自定义菜单按需将数据设置到单元格中。
猜你喜欢
  • 2020-03-30
  • 2011-01-26
  • 1970-01-01
  • 2020-06-02
  • 2016-08-23
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多