google-apps-script - 如何防止多个用户在 Google 表格中同时运行 Google Apps 脚本代码?
问题描述
我正在向多个用户共享一个谷歌脚本表,我只是想防止同一个用户同时运行脚本。我需要做什么?是通过代码还是仅通过设置?
解决方案
正如@TheMaster 在评论中所说,这LockService
是要走的路。具体来说,您需要LockService.getDocumentLock()
或LockService.getScriptLock()
取决于您的脚本的设置方式。
如何在 Apps Script 中使用锁定服务的示例:
var timeoutMs = 5000; // wait 5 seconds before giving up
var lock = LockService.getScriptLock(); // or LockService.getDocumentLock();
lock.tryLock(timeoutMs);
try {
if (!lock.hasLock()) {
var msg = 'Skipped execution after ' + (timeoutMs / 1000).toString() + ' seconds; script already running.';
console.log(msg);
try {
// If script is being run from a user UI context (ex: from a Menu option),
// gracefully alert the user we gave up
SpreadsheetApp.getUi().alert(msg);
} catch (e2) {}
} else {
//*** ADD CODE YOU WANT TO PROTECT HERE
}
} catch (e) {
console.error(e);
try {
var ui = SpreadsheetApp.getUi();
ui.alert("Error", e ? e.toString() : e, ui.OK);
} catch (e2) {}
}
SpreadsheetApp.flush();
lock.releaseLock();
推荐阅读
- windows - Windows 批处理:将 start 和 FOR /f "tokens=1" 与 | 结合使用 转义编码符号
- java - 使用 ViewModel 时如何获取插入实体的 id?
- java - JDK 11:java.lang.NoClassDefFoundError:javax/xml/ws/handler/soap/SOAPHandler
- list - Tcl/Tk:如何追加或插入嵌套列表?
- netbeans-8 - 如何更改深色 L & F 上的突出显示
- python - user32.SwitchDesktop 仅在调试模式下工作 - Python Windows 服务
- c# - 在实体框架的外部列表中使用 .skip() 的最佳方法
- python - NameError 和 SyntaxError 之间的区别
- python - 如何编写一个grafana简单的json到python中的json表查询
- random-forest - H2ORandomForestEstimator 与 min_samples_split?