我的問題是如何確保在併發訪問時不會丟失任何數據。訪問電子表格時鎖定腳本不起作用
我有腳本發佈爲網絡應用程序。我想向DATA_SHEET添加新行。處理提交按鈕的功能看起來像這樣:
function onButtonSubmit(e) {
var app = UiApp.getActiveApplication();
var lock = LockService.getPublicLock();
while (! lock.tryLock(1000))
;
var ssheet = SpreadsheetApp.openById(SHEET_ID);
var sheet = ssheet.getSheetByName(DATA_SHEET);
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
var rangeToInsert = sheet.getRange(lastRow+1, 1, 1, lastCol);
var statText = rangeToInsert.getA1Notation();
rangeToInsert.setValues(<some data from webapp form>);
app.getElementById('statusLabel').setText(statText);
lock.releaseLock();
return app;
}
但似乎這是行不通的。當我打開兩個表單並在一秒內點擊提交按鈕時,它會在statsLabel中顯示相同的範圍,並將數據寫入相同的範圍。所以我失去了一種形式的數據。
這段代碼有什麼問題?似乎tryLock()不會阻止腳本。
是否有任何其他方式如何防止併發寫入訪問表單?
看來,在Web應用程序鎖是一個[Google Apps腳本問題(http://code.google.com/p/google-apps-script-issues/issues/detail?id=1776) – Chemik