ScriptDb中的id有多独特(来自getId())?

时间:2012-08-14 20:36:50

标签: google-apps-script

显然,id在脚本实例中是唯一的,但是在用户的所有脚本中id是唯一的吗?域名(适用于Google Apps)?或者它在整个宇宙中是独一无二的(即Google)?

如果数据是跨应用程序共享的,那么id可以是唯一的参考号吗?

3 个答案:

答案 0 :(得分:3)

Google已经确认它只对该脚本有用:

Apps Script Office Hours Questions

答案 1 :(得分:2)

ScriptDB ID对于预定义脚本的存储数据是唯一的。其余的是未定义的行为,依赖它并不是非常可靠。在非危急情况下是可能的,但我不建议,根据

生成唯一ID
  • 当前时间。 var now = new Date();
  • 当前应用程序ID。主要存在但不是100%的情况。 var id = UiApp.getActiveApplication().getId();
  • 当前用户ID。 var user = Session.getActiveUser().getUserLoginId();
  • 一些随机数。 Math.random();

要获取ID,必须连接字符串中的所有内容,计算字符串摘要并使用Base64对结果进行编码。但是这个解决方案并不是真正的随机值,最好让Google创建一个能够生成真正独特UUID的函数。

代码是

function getUniqueId() {
  var now = new Date();
  var id = UiApp.getActiveApplication().getId();
  var randStr = '';
  for (var i = 0; i < 10; i++) {
    randStr += Math.random();
  }
  var user = Session.getActiveUser().getUserLoginId();
  var str = '' + now + id + randStr + user;
  var digets = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, str);
  var res = Utilities.base64Encode(digets);
  res = res.substr(0, res.length - 2);
  return res;
}

答案 2 :(得分:2)

**根据OP的回答/兆字节评论进行编辑**

看起来您只能依赖当前ScriptDb数据库中唯一的ID。存储数据库对象时,documentation表示为其分配了“不透明,不可变的字符串值”,并且它是"unique identifier"

这是一个很好的问题,关于该ID在域中是唯一的,还是在所有中都是唯一的(编辑 - 似乎我们不能依赖于任何一种情况)