2013-11-17 7 views
0

У меня есть электронная таблица, в которой хранятся данные из формы. как только данные передаются в форме submit, у меня есть сценарий, выполняющий некоторые вычисления расстояний с использованием карт Google и электронной почты соответствующей информации соответствующим заинтересованным сторонам.google apps сценарий календарь авторизация необходимый цикл

сценарий также запускается на столбец в электронной таблице с определенными данными, которые затем снова направляют соответствующую информацию соответствующим заинтересованным сторонам и предполагается создать событие в календаре по умолчанию.

скрипт работает отлично, но с тех пор, как я вставил calendarapp.getdefaultcalendar, чтобы начать создавать события, я продолжаю получать требуемый экран авторизации, запрашивая у меня, что скрипт будет управлять моими календарями, просматривать и управлять моими электронными таблицами, отправлять электронную почту как меня и подключиться к внешним службам. все это нормально, и я принимаю приглашение, за исключением того, что он снова и снова возвращается.

любые предложения, пожалуйста, помогите. я достиг некоторого типа квоты, что это?

function myFunction() { 

    var DISTANCE_COLUMN = 14; 
    var DURATION_COLUMN = 15; 
    var COST_COLUMN = 16; 
    var ROUTE_COLUMN = 17; 
    var STATE_COLUMN = 18; 
    var BOOKED_COLUMN = 19; 

    var EMAILED_STATE = "EMAILED"; 
    var BOOKED_STATE = "BOOKED"; 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; // gets sheet 0 from active spreadsheet 

    var data = getRowsData(sheet); // gets all the data from the active spreadsheet using 
           // the getRowsData function below 

    for (var i = 0; i < data.length; i++) { // for every row within the active spreadsheet 
    var row = data[i]; 

    row.rowNumber = i + 2; 

if(!row.distance) { // check to see if distance already exists 
    var mapsURL = 'http://maps.google.com/maps/api/directions/xml?origin=' + row.pickUpAddress + ' Victoria&destination=' + row.dropOffAddress + ' Victoria&sensor=false&units=metric&mode=driving'; 
    var mapsXML = UrlFetchApp.fetch(mapsURL).getContentText(); 
    var mapsResponse = Xml.parse(mapsXML, true); 
    var distance = mapsResponse.DirectionsResponse.route.leg.distance.getElement("value").getText(); 
    var duration = mapsResponse.DirectionsResponse.route.leg.duration.getElement("value").getText(); 

    var distance = Math.round(distance/1000); // convert distance in to kilometers 
    var duration = Math.round(duration/60); //convert duration in to minutes 
    var cost = 0; 


    // Changes the date fields in to strings so that we can compare for tarif one. 
    var formattedPickUpTime = Utilities.formatDate(row.pickUpTime, "GMT+1000", "HHmmss"); 
    var formattedFromTime = Utilities.formatDate(new Date("12/30/1899 23:00:00"), "GMT+1100", "HHmmss"); 
    var formattedToTime = Utilities.formatDate(new Date("12/31/1899 04:00:00"), "GMT+1100", "HHmmss"); 


    var mapsRoute = '"http://maps.google.com/maps?f=d&source=s_d&saddr=' + row.pickUpAddress + ' Victoria&daddr=' + row.dropOffAddress + ' Victoria&mode=driving"'; 

    sheet.getRange(row.rowNumber, DISTANCE_COLUMN).setValue(distance); // set distance value 
    sheet.getRange(row.rowNumber, DURATION_COLUMN).setValue(duration); // set duration value 
    sheet.getRange(row.rowNumber, COST_COLUMN).setValue(cost); // set cost value 
    sheet.getRange(row.rowNumber, ROUTE_COLUMN).setValue(mapsRoute); // set map of route value 
} 

if(!row.state) { // check to see if emails have already been sent 
    stakeholderEmailFYI(row, distance, duration, cost, mapsRoute); // send an FYI email to the stakeholder 
    // customerEmailConfirmation(row); // send a confirmation email to the customer 
    sheet.getRange(row.rowNumber, STATE_COLUMN).setValue(EMAILED_STATE); // change state value to SENT  
} 

if(row.sendBooking == "Y") { // check to see if emails have already been sent 
    // customerEmailConfirmation(row); // send a confirmation email to the customer 

    var eventStartTime = row.pickUpTime; 
    // End time is calculated by adding an hour in the event start time 
    var eventEndTime = new Date(row.pickUpTime.valueOf()+60*60*1000); 

    var cal = CalendarApp.getDefaultCalendar().createEvent(row.fullName, eventStartTime, eventEndTime, {location: row.pickUpAddress}); 

    // cal.createEvent(row.fullName, eventStartTime, eventEndTime, {location: row.pickUpAddress}); 
    sheet.getRange(row.rowNumber, BOOKED_COLUMN).setValue(BOOKED_STATE); // change state value to SENT 
} 
} 
} 

ответ

2

Попытайтесь отменить авторизацию и повторно авторизировать сценарий, иногда он решает проблему.

Для этого: 2 возможности:

  1. Вы получили почту говоря вы вы уполномочили это приложение, это письмо имеет ссылку на функцию автоматического удаления (но это когда приложение написано кем-то else или другой из ваших учетных записей
  2. Вы знаете имя сценария, и у вас не так много сценариев, перейдите в свой профиль Google/доступ к защите/отзыву, есть список всех разрешенных вами скриптов и кнопка для каждого из них для удаления.
  3. (Да, я знаю, что сказал 2 :) используйте URL вашего скрипта, который что-то, как показано ниже:

    https://script.google.com/macros/d/MZMgUL88c4hd6qj_G2Y7-rKtIT_UhbT9n/edit?uiv=2&tz=Europe/Brussels&docTitle=test+sto&csid=tAeLIRLHehPkQGfa6zUYzpg.11577354092571548890.6605670643166911759&mid=ACjPJvG-INu6kmfFfm649tuH-6KYNVpaz5G9uEy4CUMmcKAVn7RYVi8euALNy9dfPWl6gkCloq5D6SKrqczHteazKR2F41v5K5bqbw&hl=en_US

удалить все после включения

и добавить /manage/uninstall

так, что она становится чем-то вроде "/ редактирования ...?" "/ редактировать?" это:

https://script.google.com/macros/d/MZMgUL88c4h_G2Y7-rKtIT_UhbT9n/manage/uninstall

Это приведет вас на страницу, как это:

enter image description here

Нажмите кнопку Удалить и ваши сделали ... девственница как девственница ...

Затем повторно разрешить, чтобы увидеть, если дела идут лучше ,

+0

вариант 3 работал с удовольствием, большое спасибо за такой быстрый ответ, приветствия. – user3001607

Смежные вопросы