Я создаю веб-скрипт, который собирает информацию, введенную в поля, и, в конце, позволяет пользователю выбрать тип кода и после нажатия «Создать сейчас»:
Проблема, с которой я сталкиваюсь, заключается в том, чтобы код ключа отображался пользователю после того, как он нажал кнопку «Создать сейчас».
Я также хотел бы масштабировать его путем случайного выбора способа выбора ключа из списка, а не выбора следующего действительного ключа в списке. Это сделано для того, чтобы люди не генерировали ключи одновременно и не получали одинаковые ключи.
Это мое первое кодирование, так что мои знания очень ограничены, но ... Я попытался дать кнопке «Создать сейчас» 2 функции.
Первая функция собирает информацию из полей ввода и записывает ее в «Таблицу данных». В то же время он выбирает действительный код из списка «Ключи», помечает его как погашенный и копирует код в лист сбора данных.
Я попытался создать вторую функцию, которая запускается одновременно при нажатии кнопки «Создать сейчас». Я хотел использовать все идентификаторы полей ввода и использовать его в качестве функции поиска, чтобы вытащить ключ из «Таблицы данных», но не смог заставить его работать.
function userClicked(userInfo){
var ss = SpreadsheetApp.openByUrl(url)
var ws = ss.getSheetByName("Data");
var keysSheet = ss.getSheetByName("Keys");
var codeTypeColumn = getFirstMatchingCoord(keysSheet, userInfo.codeType, 1, null)[1];
var firstValidCodeRow = getFirstMatchingCoord(keysSheet, "Valid", null, codeTypeColumn + 2)[0];
keysSheet.getRange(firstValidCodeRow, codeTypeColumn + 2).setValue("redeemed");
var key = keysSheet.getRange(firstValidCodeRow, codeTypeColumn).getValue();
ws.appendRow([userInfo.memberFirst, userInfo.memberLast, userInfo.memberEmail, userInfo.orderNum, userInfo.agentFirst, userInfo.agentLast, userInfo.codeType, key, new Date()]);
}
function getFirstMatchingCoord(sheet, value, row, col) {
if (row === null) {
var range = sheet.getRange(1, col, sheet.getMaxRows(), 1);
} else {
var range = sheet.getRange(row, 1, 1, sheet.getMaxColumns());
}
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
var value_row = values[i];
for (var j = 0; j < value_row.length; j++) {
if (values[i][j] == value) {
if (row === null) {
return [i + 1, col];
} else {
return [row, j + 1];
}
}
}
}