Как перенести запись с одной модели на другую в Google App Maker - PullRequest
0 голосов
/ 31 мая 2018

Я создал 2 модели SQL в Google App Maker.Для простоты предположим, что Модель 1 имеет всю информацию, которая может быть добавлена ​​и отредактирована для каждой из записей.Модель 2 работает как модель хранения, где после удаления записи в Модели 1 она перемещается в Модель 2. Идея состоит в том, что человек может щелкнуть «удаленное» логическое значение, которое откроет страницу диалога, чтобы добавить комментарии для удаления.и после завершения запись будет перемещена в модель 2 для хранения и больше не будет видна в модели 1.

Есть ли способ сделать это?Если вам нужна дополнительная информация, дайте мне знать, и я постараюсь предоставить ее, но причина, по которой я не могу опубликовать существующее приложение, заключается в том, что информация является конфиденциальной.

Спасибо за помощь!

Models

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я смог сделать то, что мне было нужно, используя фильтр запросов в качестве клиентского скрипта. Он сохраняет данные на серверной стороне при экспорте и показывает только активному пользователю, что не было удалено.

  1. var datasource1 = app.datasources.WatchList_Data;
  2. datasource1.query.filters.Remove_from_WatchList._equals = 'Нет';
  3. datasource1.load ();
0 голосов
/ 31 мая 2018

Обновленный ответ: перейти к другой модели

Если вы хотите заставить пользователей вводить сообщение, вам нужно запретить им удалять записи из источников данных:

// 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 изначально не поддерживает модели, подключенные к разным базам данных.

...