1
votes

I'm using GAS to write data to a spreadsheet and everything works as expected except for the part where it saves the record TWICE each time. I don't think the client or server functions are firing twice so it could something else I missed. Any insight would be much appreciated. Thanks!

The client function:

//save data
function savedata() {
  var data = $('#dataSetter');
  var startTime = data.find('#startTime').val();
  var firstName = data.find('#firstName').val();
  var lastName = data.find('#lastName').val();
  var phone = data.find('#phone').val();
  var email = data.find('#email').val();
  var obj = $(this).parent();
  var weekDate = getSuffix(obj.attr('id'));
      weekDate = weekDate.replace('-', '/');
  var year = getSuffix(obj.attr('class'));
  var date = weekDate+'/'+year;

  google.script.run.withSuccessHandler(dataSaved).setdata(office, firstName, lastName, phone, email, date, startTime);
  google.script.run.withFailureHandler(onFailure).setdata(office, firstName, lastName, phone, email, date, startTime);
}

The server function:

//saves data
function setdata(office, firstName, lastName, phone, email, date, startTime) {
  var dataSheet = dataBook.getSheets()[0];
  var membersSheet = membersBook.getSheets()[0];
  var membersLastRow = membersSheet.getLastRow();

  var lastmemberID = membersSheet.getRange('A'+membersLastRow).getValue();

  var newmemberID = memberID(lastmemberID);

  membersSheet.appendRow([newmemberID, lastName, firstName, phone, email]);
}
2

2 Answers

2
votes

You are making two calls to setdata function, so double entries should be expected. Try this:

google.script.run.withSuccessHandler(dataSaved).withFailureHandler(onFailure).setdata(office, firstName, lastName, phone, email, date, startTime);

instead of:

google.script.run.withSuccessHandler(dataSaved).setdata(office, firstName, lastName, phone, email, date, startTime);
  google.script.run.withFailureHandler(onFailure).setdata(office, firstName, lastName, phone, email, date, startTime);
0
votes

I have also experienced tbsi bug many times though sporadically. It inserts twice as many rows as i requested. I have all that code protected with a lock (lock services, which u should use too since u use getastrow and such) so i know the code is not getting run in parallel.