尝试将当前用户名放入通知电子邮件

Trying To Put Current User Name Into Notification Email

我目前有一个包含以下代码的页面片段,它为数据源创建一个条目并发送一封电子邮件(下面的代码)通知所有人。

按钮:

newSalesEmailMessage(widget);
widget.datasource.createItem();
app.closeDialog();

客户端脚本电子邮件通知代码:

/**
 * Calls a server method to send an email.
 * @param {Widget} sendButton - widget that triggered the action.
 */
function newSalesEmailMessage(sendButton) {
  var pageWidgets = sendButton.root.descendants;
  var fullName = app.datasources.Directory.item.FullName;
  var htmlbody = '<b><font size="3">' + fullName + '</font></b>' + ' has created a new sales entry for: ' +  
      '<h1><span style="color:#2196F3">' +pageWidgets.ProjectName.value  + '</h1>' +
      '<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +      
      '<p>Sales Person: <b>' + pageWidgets.SalesPerson.value + '</b>' +
      '<p>Notes: <b>' + pageWidgets.Notes.value + '</b>';


  google.script.run
    .withSuccessHandler(function() {
     })
    .withFailureHandler(function(err) {
      console.error(JSON.stringify(err));
    })
    .sendEmailCreate(
      'test@email.com',
      'New Sales Entry for: ' + pageWidgets.ProjectName.value,
      htmlbody);
}

on为模型创建代码:

// 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();

除 fullName 选项外一切正常。即使另一个用户创建了一个条目,它也会继续提取我的名字(可能是因为我是管理员?)。我有一个目录模型设置,当我显示用户评论的全名时,它似乎适用。

我希望 fullName = 当前创建条目的人的姓名。

感谢您的帮助!

应用程序启动脚本:

// App startup script
// CurrentUser - assuming that it is Directory model's datasource
// configured to load record for current user.
loader.suspendLoad();
app.datasources.Directory.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});

您需要过滤目录模型数据源。如果您打算将它用于不同的目的,那么我会建议为当前用户创建专用数据源。您可以在服务器端(最好)或客户端对其进行过滤:

服务器端过滤,客户端加载:

// Directory model's Server Script for Current User datasource
var query = app.models.Directory.newQuery();

query.filters.PrimaryEmail._equals = Session.getActiveUser().getEmail();

return query.run();

// ------------------------
// Your startup script will remain almost the same:
loader.suspendLoad();
app.datasources.CurrentUser.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});

仅限客户端:

var currentUserDs = app.datasources.CurrentUser;

currentUserDs.query.filters.PrimaryEmail._equals = app.user.email;

loader.suspendLoad();
currentUserDs.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});

谢谢帕维尔。一切正常,但我花了一些时间才明白我需要做什么。对于那些想要尝试和复制我在这里所做的事情的人来说,这些是步骤。

首先我必须创建一个 Directory Model

然后在应用程序本身的“应用程序设置”部分下(单击齿轮),我将以下代码放在 App Startup Script - Client Script 部分下:

loader.suspendLoad();
app.datasources.CurrentUser.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});

接下来,我在目录模型的数据源部分下添加了一个名为 CurrentUser 的数据源。

Query - Server Script 部分我输入:

var query = app.models.Directory.newQuery();

query.filters.PrimaryEmail._equals = Session.getActiveUser().getEmail();

return query.run();

这会过滤数据源,以便其中唯一的条目是当前用户。然后我在电子邮件客户端脚本中调整了我的 "var fullName" 以指向新的数据源:

/**
 * Calls a server method to send an email.
 * @param {Widget} sendButton - widget that triggered the action.
 */
function newSalesEmailMessage(sendButton) {
  var pageWidgets = sendButton.root.descendants;
  var fullName = app.datasources.CurrentUser.item.FullName;
  var htmlbody = '<b><font size="3">' + fullName + '</font></b>' + ' has created a new sales entry for: ' +  
      '<h1><span style="color:#2196F3">' +pageWidgets.ProjectName.value  + '</h1>' +
      '<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +      
      '<p>Sales Person: <b>' + pageWidgets.SalesPerson.value + '</b>' +
      '<p>Notes: <b>' + pageWidgets.Notes.value + '</b>';


  google.script.run
    .withSuccessHandler(function() {
     })
    .withFailureHandler(function(err) {
      console.error(JSON.stringify(err));
    })
    .sendEmailCreate(
      'test@email.com',
      'New Sales Entry for: ' + pageWidgets.ProjectName.value,
      htmlbody);
}