Я здесь новенький. Заранее спасибо за совет.
Я работаю над приложением, которое будет спрашивать пользователя, сколько предметов он сделал. Пользователь вводит число. Затем мое приложение должно создать столько новых записей в таблице с именем «Items_Made».
Например. Приложение спрашивает «Сколько предметов вы сделали?», пользователь вводит «19», затем приложение создает 19 новых записей в таблице «Items_Made».
Мне удалось собрать некоторый код (показан ниже), который создает ОДНУ новую запись, но я хотел бы создать несколько. Мне, вероятно, нужен какой-то цикл или функция «пока», но я не уверен, как это сделать.
var ceateDatasource = app.datasources.Items_Made.modes.create;
var newItem = ceateDatasource.item;
ceateDatasource.createItem();
Этот код успешно создает 1 запись. Я хотел бы, чтобы он мог создавать несколько.
Я бы предложил создать раскрывающийся список или текстовое поле, где пользователь может выбрать/ввести количество элементов, которые они хотят создать, а затем прикрепить следующий код к вашей кнопке «Создать»:
var createDatasource = app.datasources.Items_Made.modes.create;
var userinput = Number(widget.root.descendants.YourTextboxOrDropdown.value);
for (var i = 0; i <= userinput; i++) {
var newItem = createDatasource.item;
createDatasource.createItem();
}
Простой цикл с вашим пользовательским вводом должен выполнить это.
Не рекомендуется создавать много записей с помощью клиентского скрипта, особенно если вы теряете связь или приложение закрывается по ошибке. На мой взгляд, лучший способ справиться с этим будет через серверный скрипт по двум причинам: во-первых, это надежнее, а во-вторых, это быстрее. Как и в примере из официальной документации, для создания записи нужно сделать примерно так:
// Assume a model called "Fruits" with a string field called "Name".
var newRecord = app.models.Fruits.newRecord();
newRecord.Name = "Kiwi"; // properties/fields can be read and written.
app.saveRecords([newRecord]); // save changes to database.
Приведенный выше пример является наглядным примером того, как создать только одну запись. Чтобы создать несколько записей одновременно, вы можете использовать такой оператор for
:
function createRecordsInBulk(){
var newRecords = [];
for(var i=0; i<19; i++){
var newRecord = app.models.Fruits.newRecord();
newRecord.Name = "Kiwi " + i;
newRecords.push(newRecord);
}
app.saveRecords(newRecords);
}
В приведенном выше примере вы инициируете новые записи, пустой массив, который будет отвечать за хранение всех новых записей для одновременного создания. Затем с помощью оператора for
вы создаете 19 новых записей и помещаете их в новые записи. Наконец, после завершения цикла вы сохраняете все записи сразу, используя app.saveRecords и передавая массив новые записи в качестве аргумента.
Теперь все это происходит на стороне сервера. Очевидно, вам нужен способ вызвать это со стороны клиента. Для этого вам нужно использовать метод google.script.run. Итак, со стороны клиента вам нужно сделать следующее:
google.script.run.withSuccessHandler(function(result) {
app.datasources.Fruits.load();
}).createRecordsInBulk();
Вся эта информация четко задокументирована на сайт официальной документации производителя приложений. Я настоятельно рекомендую вам всегда сначала проверять там, поскольку я считаю, что вы можете получить более быстрое решение, прочитав документацию.