首页 文章

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

提问于
浏览
2

我正在按照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 回答

  • 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上渲染多个记录时性能更佳
      数据库中的
    • cons值最终可能会过时

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

    • 专业人士 - 您将始终拥有实际数据

    • 缺点 - 它将工作得更慢,维护和实施将更加困难

    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;
    }
    
    • 专业人士 - 您将始终拥有实际数据

    • cons - 由于对服务器的大量请求,UI上的标签将闪烁,性能更差

相关问题