2

我正在按照此视频中的步骤创建评论部分。

James(作者)创建了两个模型,然后创建了两者之间的关系,然后创建了一个表格来添加/编辑评论/注释。

他在一个模型中使用了以下事件:

onCreate    
record.reported_by = Session.getActiveUser().getEmail();    
record.Date = new Date();

以及第二个中的以下事件。

onCreate
record.Tech = Session.getActiveUser().getEmail();
record.Date = new Date();

现在,如果您有一个绑定到关系的标签,它将显示创建新项目的用户的电子邮件地址。

所有这些都运行良好。我只是想找出一种方法让标签显示全名而不是电子邮件地址。

我希望这会是一些简单的事情,比如用 getFullName 之类的东西切换 getEmail,但没有这样的运气。

4

1 回答 1

3

Afaik 目前在 App Maker 中没有内置方法来获取当前用户的全名,但是您可以通过将目录模型添加到您的应用程序来获取它。添加目录模型后,您有多种方式来提供用户的全名:

1 创建记录时将其保存到数据库中

// onCreate
var email = Session.getActiveUser().getEmail();

var directoryQuery = app.models.Directory.newQuery();
directoryQuery.filters.PrimaryEmail._equals = email;
var reporter = directoryQuery.run()[0];

record.reported_by = email;
record.reported_full_name = reporter.FullName;
record.Date = new Date();

然后在绑定中使用这个“reported_full_name”而不是“reported_by”。

  • 优点 - 在 UI 上呈现多条记录时性能更好
  • 数据库中的 cons 值最终可能会过时

2 使用计算模型并在本地模型和目录之间建立动态“虚拟关系”

  • 优点 - 您将始终拥有实际数据
  • 缺点 - 它会运行得更慢,更难维护和实施

3 在 UI 上加载数据源后查询服务器的全名

// widget binding
setFullName(widget, @datasource.item.reported_by)

// client script
setFullName(widget, email) {
  google.script.run
        .withSuccessHandler(function(fullName) {
           widget.text = fullName;
         })
         .getFullName(email);
}

// server script
function getFullName(email) {
  var directoryQuery = app.models.Directory.newQuery();
  directoryQuery.filters.PrimaryEmail._equals = email;
  var person = directoryQuery.run()[0];

  return person.FullName;
}
  • 优点 - 您将始终拥有实际数据
  • 缺点 - UI 上的标签会闪烁,由于对服务器的大量请求,性能会更差
于 2017-01-27T18:44:27.553 回答