Чтобы применить проверку / отклонение / ограничения к ответам Дата / Время / Дата / время в форме Google, необходимо реализовать собственную HTML-форму, поскольку (по состоянию на 07 мая 2018 года) параметры проверки формы Google отсутствуют.DateItem
, DateTimeItem
, TimeItem
или DurationItem
с.Где вы размещаете свою собственную HTML-форму, не имеет значения - вы можете использовать свой собственный веб-сервер, или вы можете использовать Apps Script & HtmlService
, в качестве боковой панели или webapp .
Если вы хотите использовать Google Forms для управления ответами, то ваше решение должно в конечном итоге соединиться с серверной частью скрипта Apps, поскольку только у скрипта Apps есть доступ API к формам (нет REST API, как для Sheets или Drive).Если вам не нужно использовать Google Forms для управления ответами, вы можете делать с ними все, что захотите (например, сохранять их в выбранной вами базе данных).
Получение данных дляApps Script .gs
files
Самостоятельная форма
Для самостоятельной формы потребуется опубликованное веб-приложение Apps Script для взаимодействия.Действие отправки вашей формы должно отправить данные через HTTP-запрос POST на URL-адрес веб-приложения, и ваш проект Apps Script будет использовать триггерную функцию doPost(e)
для принятия передачи данных.
HtmlService (Боковая панель или форма веб-приложения)
Размещение формы с помощью HtmlService
означает, что ваше клиент-серверное взаимодействие должно использовать методы google.script.___
, которые обеспечивают асинхронное поведение.Действие отправки формы должно либо вызывать триггерную функцию doPost(e)
, как указано выше, либо использовать google.script.run.someMethodInAgsFile(yourFormDataObject)
с соответствующими обработчиками успеха и ошибок на стороне клиента для отображения ответа обратно из скрипта приложений.
Использование входных данных
Какой бы метод хостинга вы ни использовали, данные вашей пользовательской формы в конечном итоге дойдут до скрипта Apps, и вам потребуется создать формы Google FormResponse
, которыеВы можете программно отправить желаемую форму Google.Обратите внимание, что отправка программных форм не активирует события запуска «при отправке формы», поскольку они не являются действиями пользователя.Если у вас есть какое-то программное событие, которое должно произойти в результате отправки формы, просто вызовите это же событие из вашего кода, который сделал отправку.
Вы можете просмотреть формат объекта входного события e
в приложениях.Документация сценария: https://developers.google.com/apps-script/guides/web#request_parameters
Особенности преобразования объекта входного события в данные формы зависят от вашей реализации, например, у вас могут быть именованные свойства, универсальный массив и т. Д. Пример doPost
, показывающий, какпостроить и представить FormResponse
:
function doPost(e) {
console.log(e); // Log the object in Stackdriver, to allow easy viewing of its structure.
if (!e) throw new Error("doPost Function called without event object.");
if (!e.postData.length) throw new Error("No form data present.");
var formData = /* construct your form data object, using some method to associate
between a question and the answer, like its index, the title, etc. */;
var form = FormApp.openById("your form id");
if (!form.isAcceptingResponses()) throw new Error("Form is closed to new input.");
var toSubmit = form.createResponse();
// Check every item in the form to provide the relevant answers.
form.getItems().forEach(function (item, itemIndex, allItems) {
// To create the item's response, you must cast it to its type
// (since each item type has a different format for the answer).
var it = item.getType(),
itemResponse = null;
if (it === FormApp.ItemType.DATE) {
item = item.asDateItem(); // Cast this item to its type
var answer = /* Use your formData object, for example use the index property,
e.g. formData[itemIndex] if you made formData an array of the input data. */;
itemResponse = item.createResponse(answer);
/* do ItemType-specific stuff with the ItemResponse */
} else if (it === /* some other item type you use */) {
...
} else {
throw new Error("Unhandled item type");
}
if(itemResponse) {
/* do generic stuff with the item response */
toSubmit.withItemResponse(itemResponse);
}
});
// Submit the FormResponse now that it has been given answers for its items.
toSubmit.submit();
}