我目前有一个页面片段,其中包含以下代码,用于创建数据源条目并发送通知所有人的电子邮件(下面的代码)。
按钮:
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);
}
onCreate代码:
// 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
}
});
答案 0 :(得分:2)
您需要过滤目录模型数据源。如果您计划将其用于不同目的,那么我建议为当前用户创建专用数据源。您可以在服务器(首选)或客户端过滤它:
在服务器上过滤,在客户端上加载:
// 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
}
});
答案 1 :(得分:2)
谢谢帕维尔。一切都有效,但我花了一些时间才明白我需要做什么。对于那些想要尝试复制我在这里所做的事情的人来说,这些步骤。
首先我必须创建一个Directory Model。
然后在应用程序本身的App Settings部分下(单击齿轮)我将以下代码放在 App Startup Script - Client Script 部分下:
loader.suspendLoad();
app.datasources.CurrentUser.load({
success: function() {
loader.resumeLoad();
},
failure: function(error) {
// TODO: Handle error
}
});
接下来,我进入了Directory模型的Datasources部分,并添加了一个名为CurrentUser的数据源。
在查询 - 服务器脚本部分中,我放了:
var query = app.models.Directory.newQuery();
query.filters.PrimaryEmail._equals = Session.getActiveUser().getEmail();
return query.run();
这会过滤数据源,以便其中唯一的条目是当前用户。然后我调整了我的&#34; var fullName&#34;在电子邮件客户端脚本中指向新数据源:
/**
* 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);
}