需要将目录输出显示为全名而不是电子邮件地址

时间:2017-01-27 02:48:11

标签: google-app-maker

我按照this video中的步骤创建了评论部分。

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

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

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

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

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

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

所有这一切都很完美。我只想找到一种方法让标签显示全名而不是电子邮件地址。

我希望通过像getFullName这样的方式切换getEmail会很简单,但没有这样的运气。

1 个答案:

答案 0 :(得分:3)

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

提供服务

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上呈现多个记录时性能更佳
  • 您的数据库中的缺点值最终会过时

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上的标签会闪烁,由于对服务器的大量请求而导致性能下降