Обновленный ответ: перейти к другой модели
Если вы хотите заставить пользователей вводить сообщение, вам нужно запретить им удалять записи из источников данных:
// onBeforeDelete model event
throw new Error('You should provide message prior deleting a record');
Затем вам нужно реализовать сам аудит:
// server script
function archive(itemKey, message) {
if (!message) {
throw new Error('Message is required');
}
var record = app.models.MyModel.getRecord(itemKey);
if (!record) {
throw new Error('Record was not found');
}
var archive = app.models.Removed.newRecord();
archive.Field1 = record.Field1;
archive.Field2 = record.Field2;
...
archive.Message = message;
app.saveRecords([archive]);
app.deleteRecords([record]);
}
// client script
google.script.run
.withSuccessHandler(function() {
// TODO
})
.withFailureHandler(function() {
// TODO
})
.archive(itemKey, message);
Если вам нужно реализовать аудит для нескольких / всех моделей, вы можете обобщить фрагмент, передав имя модели и используя Метаданные модели : funciton archive(modelName, itemKey, message) {}
Исходный ответ: перейти к другой базе данных
Обычно я бы рекомендовал просто добавить и установить логическое поле Deleted
для модели и убедиться, чточто записи, помеченные как удаленные, не отправляются клиенту.Реализация перемещения данных между базами данных может быть сложной, так как транзакции не поддерживаются для нескольких баз данных .
Если вы отчаянно хотите сделать свое приложение более сложным и менее надежным, вы можете создать резервную копию записи в onBeforeDelete
событие модели с использованием службы JDBC Apps Script ( Пример внешней базы данных может быть вашим другом для начала):
// onBeforeDelete model event
var connection = Jdbc.getConnection(dbUrl, user, userPassword);
var statement = connection.prepareStatement('INSERT INTO ' + TABLE_NAME +
' (Field1, Field2, ...) values (?, ?, ...)');
statement.setString(1, record.Field1);
statement.setString(2, record.Field2);
...
statement.execute();
Почемутебе нужен JDBC?Поскольку App Maker изначально не поддерживает модели, подключенные к разным базам данных.