基于项目跟踪器模板的Changelog方法

时间:2018-03-30 19:40:22

标签: google-app-maker

基于项目跟踪器,我已将更改日志集成到我的应用程序中,该更新日志将UserSettings模型与UserHistory模型相关联。后者包含字段FieldName,CreatedBy,CreatedDate,OldValue,NewValue。

两种模型之间的关系很好。每当修改记录时,我都可以在changelog表中看到更改。我现在想要在表中添加一个"撤消" - 按钮,以便管理员撤消他点击的更改。因此,我创建了一个由保存更改日志记录的小部件处理的方法:

function undoChangesToUserRecord(changelog) {
  if (!isAdmin()) {
    return;
  }

  var fieldName = changelog.datasource.item.FieldName;
  var record = changelog.datasource.item.UserSettings;

  record[fieldName] = changelog.datasource.item.OldValue;
}

理论上,方法将UserHistory和UserSettings之间的连接转到字段并重写其值。但是当我点击按钮时,由于循环引用而导致"失败"错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我能用这段代码重新解决这个问题:

google.script.run.ServerFunction(app.currentPage.descendants.SomeWidget);

这是一种预期的行为,因为所有App Maker对象都非常复杂且Apps Script RPC has some limitations

App Maker实现它的方式如下所示:

// Server side script
function undoChangesToUserRecord(key) {
  if (!isAdmin()) {
    return;
  }

  var history = app.models.UserHistory.getRecord(key);

  if (history !== null) {
    var fieldName = history.FieldName;
    var settings = history.UserSettings;

    settings[fieldName] = history.OldValue;
  }
}

// Client side script
function onUndoClick(button) {
  var history = widget.datasource.item;

  google.script.run
    .undoChangesToUserRecord(history._key);
}