Я работаю над сценарием для подачи заявления через формы Google. Я нашел этот скрипт в сети и пытался заставить его работать. Когда форма отправляется, скрипт извлекает и заполняет связанную электронную таблицу с идентификатором транзакции, адресом электронной почты запрашивающей стороны и помещает статус запроса как «ожидающий». Затем он отправляет электронное письмо менеджеру и включает в него ссылки для подтверждения или отклонения запроса.
У меня до этого дошло, что является функцией onFormSubmit. Это все работает.
Когда я прихожу к функции doGet (e), я сталкиваюсь с проблемами. Предполагается получить ответ менеджера и обновить статус электронной таблицы: от ожидающего до одобрения или отклонения. Затем отправителю по электронной почте отправляется сообщение с результатом.
Когда я нажимаю на электронное письмо, чтобы подтвердить или отклонить запрос, я получаю сообщение «Для выполнения этого действия требуется авторизация».
Когда я пытаюсь запустить функцию doGet (запрос), я получаю сообщение об ошибке: «TypeError: Невозможно прочитать свойства« параметров »неопределенного (строка 42)».
var responseID = request.parameters.id;
Возможно ли мне нужно заново авторизовать скрипт из-за новых сервисов? Но это трудно, когда я продолжаю возвращать эту ошибку.
Любая помощь или идеи будут с благодарностью.
Вот полный сценарий:
function onFormSubmit(e) {
// Open the sheet which stores the responses
var ssID = 'My Sheet ID' // Replace with spreadsheet ID
var ssName = 'Form responses' // Replace with sheet name
var sheet = SpreadsheetApp.openById(ssID).getSheetByName(ssName);
// #1 - Identify the requestor's email address and save it to the sheet.
var email = Session.getEffectiveUser().getEmail();
sheet.getRange(sheet.getLastRow(), 7).setValue(email);
// #2 - Get the response ID and save it to the sheet.
var responseID = e.response.getId();
sheet.getRange(sheet.getLastRow(), 8).setValue(responseID);
// #3 - Set the status of the request to 'Pending'.
sheet.getRange(sheet.getLastRow(), 9).setValue('Pending');
// Create variables for email
var items = e.source.getItems();
var manager_email = e.response.getResponseForItem(items[4]).getResponse();
var subject = "A leave request has been submitted";
// Include form data in the body of the email
var message = "";
for(var i in items)
message += "\n\n" + items[i].getTitle() + ": " +
e.response.getResponseForItem(items[i]).getResponse();
// #4 - Insert approve and deny links within the body of the email
message += "\n\nClick link below to approve: https://script.google.com/macros/s/AKfycbxdS3cUP_oSjfphDaSNkn_5GuxxlPG6czVHH_wGJ2OxImqFASmZ/exec?id=" + responseID + "&status=Approved \n\n" + "Click link below to deny: https://script.google.com/macros/s/AKfycbxdS3cUP_oSjfphDaSNkn_5GuxxlPG6czVHH_wGJ2OxImqFASmZ/exec?id=" + responseID + "&status=Denied";
// #5 - Email the manager the request information
MailApp.sendEmail(manager_email, subject, message);
}
function doGet(request) {
// Retrieve the parameter information for response ID and stutus
var responseID = request.parameters.id;
var status = request.parameters.status;
// Open the sheet which stores the responses
var ssID = 'My Sheet ID' // Replace with spreadsheet ID
var ssName = 'Form responses' // Replace with sheet name
var sheet = SpreadsheetApp.openById(ssID).getSheetByName(ssName);
// Find the row where the ID in the URL equals the ID in the sheet and update the
// status to the parameter value
var data = sheet.getDataRange().getValues();
for (var i=1; i < data.length; i++) {
if (data[i][7] == responseID){
sheet.getRange(i+1,9,1,1).setValue(status);
var date = Utilities.formatDate(data[i][3],"NZ", "EEE, MMM d, yyyy");
var type = data[i][4];
var email = data[i][6];
}
}
if (status == 'Approved') {
var subject = 'Your request for time-off has been approved';
var message = 'Your request for time-off (' + type + ') on ' + date + ' has been approved.';
} else {
var subject = 'Your request for time-off has been denied';
var message = 'Your request for time-off (' + type + ') on ' + date + ' has been denied.';
}
// Send email to requestor alerting them of the approval/denial of request
MailApp.sendEmail(email, subject, message);
// Show message to manager that the response has been updated.
var result = "The request has been '" + status + "'.";
return ContentService.createTextOutput(result);
}