基于项目跟踪器,我已将更改日志集成到我的应用程序中,该更新日志将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之间的连接转到字段并重写其值。但是当我点击按钮时,由于循环引用而导致"失败"错误。我做错了什么?
答案 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);
}