簡體   English   中英

GetScriptLock似乎不起作用

[英]GetScriptLock does not seem to work

我正在嘗試在提交表單時生成唯一的號碼。 我已將我的腳本簡化為以下測試。

function onFormSubmit(event) {

  // Get a script lock, because we're about to modify a shared resource.
  var lock = LockService.getScriptLock();

  // Wait for up to 30 seconds for other processes to finish.
  lock.waitLock(30000);

  var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
  ScriptProperties.setProperty('lastTicketNumber', ticketNumber);

  targetCell = event.range.offset(0, event.range.getNumColumns(), 1, 1); 
  targetCell.setValue(ticketNumber);

  SpreadsheetApp.flush();

  // Release the lock so that other processes can continue. 
  lock.releaseLock();

};

我發現,如果我在一秒鍾內提交兩個表格,我會得到相同的票號。

任何幫助,將不勝感激。

前言 :您正在使用已棄用的ScriptProperties服務,該服務已由Properties Service替換。 你可能想先改變它。

在過去,我在嘗試快速連續使用項目屬性時收到了相同的結果。 幾乎就像舊的值在任何緩存應用程序腳本用於腳本屬性幾秒鍾時都會掛起。

我建議使用緩存服務來補充需要立即反映更改的腳本。

修改代碼:

function onFormSubmit(event) {

  // Get a script lock, because we're about to modify a shared resource.
  var lock = LockService.getScriptLock();

  // Wait for up to 30 seconds for other processes to finish.
  lock.waitLock(30000);      

  var scriptCache = CacheService.getScriptCache();
  var scriptProperties = PropertiesService.getScriptProperties(); 

  var cachedTicketNumber =  scriptCache.get('lastTicketNumber');
  var ticketNumber;

  if(cachedTicketNumber !== null){
    ticketNumber = Number(cachedTicketNumber) + 1;
  } else { 

    //Cache has expired/does not exist, fall back to properties service     
    ticketNumber = Number(scriptProperties.getProperty('lastTicketNumber')) + 1;
  }

  //Set properties service, and cache values of the ticket number
  scriptProperties.setProperty('lastTicketNumber', ticketNumber);
  scriptCache.put('lastTicketNumber', ticketNumber, 21600); //21600 seconds = 6 hours, if you want it to last that long

  targetCell = event.range.offset(0, event.range.getNumColumns(), 1, 1); 
  targetCell.setValue(ticketNumber);

  SpreadsheetApp.flush();

  // Release the lock so that other processes can continue. 
  lock.releaseLock();

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM