webhooks: я теряю события, когда заполняю лист - PullRequest
0 голосов
/ 17 июня 2020

Я использую сценарий приложения для получения данных через веб-перехватчики, и я заметил, что в локальной базе данных (веб-перехватчики) есть события, которых у меня нет в моем листе Google. Я думаю, это из-за совпадения и, может быть, я переписываю ячейку или что-то подобное. Кто-нибудь мог мне помочь? КОД

var SHEET_NAME = "Hoja";
var SCRIPT_PROP = PropertiesService.getScriptProperties();

function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Custom Menu')
  .addItem('Clear content', 'clearRange')
  .addSeparator()      
  .addToUi();
 }

 function clearRange() {
 var sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_NAME);
 sheet.getRange('A2:N').clearContent();//lo hace bien
  }

 function doPost(request){
 console.log(request);
 return handleResponse(request);
  }

 function handleResponse(request) {
 var lock = LockService.getPublicLock();
 lock.waitLock(10000);

  try {
  //var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = doc.getSheetByName(SHEET_NAME);

  var headRow = 1;

  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var nextRow = sheet.getLastRow() + 1;
  var row = []; 
  var postData = JSON.parse(request.postData.getDataAsString());

  for (i in headers){
    row.push(postData[headers[i]]);
   }
   sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);

   return ContentService
      .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
      .setMimeType(ContentService.MimeType.JSON);
   } catch(e){
   return ContentService
   .createTextOutput(JSON.stringify({"result":"error", "error": e }))
      .setMimeType(ContentService.MimeType.JSON);
   } finally {
   lock.releaseLock();
   }
    }

 function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
SCRIPT_PROP.setProperty("key", doc.getId());
 }

1 Ответ

0 голосов
/ 18 июня 2020

Похоже, вы используете специальный метод getActiveSpreadsheet() в решении API WebApp или Apps Script. Согласно документации Special Methods это не поддерживается.

Примечание : эти методы доступны только для связанных сценариев, запускаемых из редактора сценариев, пунктов меню, диалоговых окон, боковых панелей или триггеров. Когда связанный скрипт запускается как веб-приложение или через API скрипта приложений, эти методы недоступны.

Я бы рекомендовал использовать метод openById(), который гарантирует, что вы не нарушаете это ограничение.

Ссылка

Скрипт связанных приложений

...