Google app maker 正在尝试将当前用户名放入通知电子邮件中

Google app maker 正在尝试将当前用户名放入通知电子邮件中,google-app-maker,Google App Maker,我目前有一个页面片段,其中包含以下代码,为数据源创建一个条目,并发送一封电子邮件(代码如下)通知所有人 按钮: newSalesEmailMessage(widget); widget.datasource.createItem(); app.closeDialog(); // onCreate var email = Session.getActiveUser().getEmail(); var directoryQuery = app.models.Directory.newQuery(

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

按钮:

newSalesEmailMessage(widget);
widget.datasource.createItem();
app.closeDialog();
// 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();
// 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
  }
});
客户端脚本电子邮件通知代码:

/**
 * 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);
}
除了全名选项外,其他一切都可以工作。即使其他用户创建条目(可能是因为我是管理员?)。我有一个目录模型设置,当我显示用户评论的全名时,它似乎可以工作

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

谢谢你的帮助

应用程序启动脚本:

newSalesEmailMessage(widget);
widget.datasource.createItem();
app.closeDialog();
// 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();
// 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
  }
});

您需要筛选目录模型数据源。如果您计划将其用于不同的目的,那么我建议为当前用户创建专用数据源。您可以在服务器端(首选)或客户端对其进行筛选:

在服务器上筛选,在客户端加载:

/**
 * 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);
}
//当前用户数据源的目录模型服务器脚本
var query=app.models.Directory.newQuery();
query.filters.PrimaryEmail._=Session.getActiveUser().getEmail();
返回query.run();
// ------------------------
//您的启动脚本将几乎保持不变:
loader.suspendLoad();
app.datasources.CurrentUser.load({
成功:函数(){
loader.resumeLoad();
},
失败:功能(错误){
//TODO:句柄错误
}
});
仅限客户端:

/**
 * 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);
}
var currentUserDs=app.datasources.CurrentUser;
currentUserDs.query.filters.PrimaryEmail._=app.user.email;
loader.suspendLoad();
currentUserDs.load({
成功:函数(){
loader.resumeLoad();
},
失败:功能(错误){
//TODO:句柄错误
}
});

您需要筛选目录模型数据源。如果您计划将其用于不同的目的,那么我建议为当前用户创建专用数据源。您可以在服务器端(首选)或客户端对其进行筛选:

在服务器上筛选,在客户端加载:

/**
 * 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);
}
//当前用户数据源的目录模型服务器脚本
var query=app.models.Directory.newQuery();
query.filters.PrimaryEmail._=Session.getActiveUser().getEmail();
返回query.run();
// ------------------------
//您的启动脚本将几乎保持不变:
loader.suspendLoad();
app.datasources.CurrentUser.load({
成功:函数(){
loader.resumeLoad();
},
失败:功能(错误){
//TODO:句柄错误
}
});
仅限客户端:

/**
 * 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);
}
var currentUserDs=app.datasources.CurrentUser;
currentUserDs.query.filters.PrimaryEmail._=app.user.email;
loader.suspendLoad();
currentUserDs.load({
成功:函数(){
loader.resumeLoad();
},
失败:功能(错误){
//TODO:句柄错误
}
});

谢谢你,帕维尔。一切都很顺利,但我花了一些时间才明白我到底需要做什么。对于那些想尝试和复制我在这里所做的事情的人来说,步骤如下

首先,我必须创建一个

然后在应用程序本身的应用程序设置部分(单击齿轮)下,我将以下代码放在应用程序启动脚本-客户端脚本部分下:

loader.suspendLoad();
app.datasources.CurrentUser.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});
接下来,我在目录模型的Datasources部分下添加了一个名为CurrentUser的数据源

查询-服务器脚本部分中,我将:

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);
}
/**
*调用服务器方法以发送电子邮件。
*@param{Widget}sendButton-触发该操作的小部件。
*/
功能newSalesEmailMessage(发送按钮){
var pageWidgets=sendButton.root.com;
var fullName=app.datasources.CurrentUser.item.fullName;
var htmlbody=''+fullName+''+已为以下内容创建新的销售条目:'+
''+pageWidgets.ProjectName.value+''页面+
“Contact:”+pageWidgets.Contact.value++”
“销售人员:”+pageWidgets.salesson.value+”+
“Notes:”+pageWidgets.Notes.value+”;
google.script.run
.withSuccessHandler(函数(){
})
.withFailureHandler(函数(错误){
console.error(JSON.stringify(err));
})
.sendmailcreate(
'test@email.com',
'新销售条目:'+pageWidgets.ProjectName.value,
htmlbody);
}

谢谢你,帕维尔。一切都很顺利,但我花了一些时间才明白我到底需要做什么。对于那些想尝试和复制我在这里所做的事情的人来说,步骤如下

首先,我必须创建一个

然后在应用程序本身的应用程序设置部分(单击齿轮)下,我将以下代码放在应用程序启动脚本-客户端脚本部分下:

loader.suspendLoad();
app.datasources.CurrentUser.load({
  success: function() {
    loader.resumeLoad();
  },
  failure: function(error) {
   // TODO: Handle error
  }
});
接下来,我在目录模型的Datasources部分下添加了一个名为CurrentUser的数据源

查询-服务器脚本部分中,我将:

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);
}
/**
*调用服务器方法以发送电子邮件。
*@param{Widget}sendButton-触发该操作的小部件。
*/
功能newSalesEmailMessage(发送按钮){
var pageWidgets=sendButton.root.com;
var fullName=app.datasources.CurrentUser.item.fullName;
var htmlbody=''+fullName+''+已为以下内容创建新的销售条目:'+
''+pageWidgets.ProjectName.value+''页面+
“Contact:”+pageWidgets.Contact.value++”
“销售人员:”+pageWidgets.salesson.value+”+
“Notes:”+pageWidgets.Notes.value+”;
google.script.run
.withSuccessHandler(函数(){
})
.withFailureHandler(有趣