-1

I have the problem that I often get duplicate entries in my calendar.

Based on my current situation:

  1. Data is entered into a web form.

  2. These are then entered in my SQL database.

  3. Then sent via script to a Google Spreadsheet. So far everything is OK.

  4. Another Google Sheet in a new folder receives the data received.

  5. Using a trigger on change, this now sends the data to the calendar via script. The problem, however, is this often happens twice for no apparent reason.

Before I chose the solution with the further table, as described in point 4, there were even several entries.

The code for the form entry in Google Sheets is from jamiewilson-form-to-Google-Sheets and the code for the entry in the calendar from the page toptorials.

function Kalendereintrag_func() {
  var kalenderID = 'xxxxxxxx@group.calendar.google.com';
  var meinKalender = CalendarApp.getCalendarById(kalenderID);
  var ss = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxx').getSheetByName(
    'Datenimport'
  );
  var TabelleVonTag = ss.getRange('A2').getValue();
  var TabelleVonZeit = ss.getRange('B2').getValue();
  var TabelleBisTag = ss.getRange('C2').getValue();
  var TabelleBisZeit = ss.getRange('D2').getValue();
  var KalenderVon = new Date(TabelleVonTag);
  KalenderVon.setHours(TabelleVonZeit.getHours());
  KalenderVon.setMinutes(TabelleVonZeit.getMinutes());
  var KalenderBis = new Date(TabelleBisTag);
  KalenderBis.setHours(TabelleBisZeit.getHours());
  KalenderBis.setMinutes(TabelleBisZeit.getMinutes());
  var Titel = ss.getRange('E2').getValue();
  var Beschreibung = ss.getRange('F2').getValue();
  var Ort = ss.getRange('G2').getValue();
  var termin = meinKalender.createEvent(Titel, KalenderVon, KalenderBis, {
    description: Beschreibung,
    location: Ort,
  });
}

function onFormSubmit(e) {
  var targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1);
  var lock = LockService.getScriptLock();
  lock.waitLock(30000);
  var ticketNumber =
    Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
  ScriptProperties.setProperty('lastTicketNumber', ticketNumber);
  lock.releaseLock();
  targetCell.setValue(ticketNumber);
}

I have a Web form. I give the user inputs in this form with a script to a Google Sheet named: "Dateneingang". That's run fine. In a new sheet of this Google table named:"Auswertung" I get the last entry of this sheet. It runs fine and I have no double entries. But in past, when I try to send from here data's to my Google calendar, I have problems to trigger it. So I take my solution way to get this data's in a new table per "Importrange".

There I give trigger by change. And here is my problem. It sends data 2 times. But not every time but very often.

I think OK I delete after a few seconds the entries but there is a new change what activate the trigger. Then I have work with a solution about.

But why sometimes run correctly and other time not.

Dharman
  • 30,962
  • 25
  • 85
  • 135
Alex
  • 21
  • 2

1 Answers1

2
var lock = LockService.getScriptLock();
        lock.waitLock(30000);
        var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
        ScriptProperties.setProperty('lastTicketNumber', ticketNumber);
        lock.releaseLock();
        targetCell.setValue(ticketNumber);
        }

to

 function myFunction() {
  var lock = LockService.getScriptLock();
  try {
    lock.waitLock(5000); // wait 5 seconds try to get lock
  } catch (e) {
    Logger.log('Could not obtain lock after 5 seconds.');
  }
  Utilities.sleep(10000);
  lock.releaseLock();}

Found here: https://stackoverflow.com/a/63182230/10028103

Dharman
  • 30,962
  • 25
  • 85
  • 135
Alex
  • 21
  • 2