电子邮件通知脚本中的 "null" 字段出错
Error With "null" Field In Email Notification Script
对不起。我敢肯定这是一个菜鸟问题,答案很简单。
因此,当用户创建条目时,我使用以下方法发送电子邮件通知。除了与 "null"(空白)条目相关的两个行为外,一切正常。
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.ShowName.value + '</h1>' +
'<p>Shoot Date: <b>' + pageWidgets.ProjectDate.value.toDateString() + '</b>' +
'<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +
'<p>Post AP: <b>' + pageWidgets.PostAP.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@test.com',
'New Sales Entry for: ' + pageWidgets.ShowName.value,
htmlbody);
return sendButton === "" || sendButton === null || sendButton === undefined;
}
问题 1: 每当用户将字段留空时,电子邮件都会在该字段中输入 "null",这是有道理的,但人们一直在问我 [=33= 】 呃。
因此,如果有一种方法可以输出空白 space(例如:"")而不是 "null",那就太好了。
问题 2: 每当用户将 ProjectDate(这是一个日期字段)留空时,我都会收到错误消息:无法读取 属性 'toDateString' of无效的。
这是有道理的,但显然这会导致此脚本无法完成。我希望这样的事情可以解决这两个问题,但它没有:
function newSalesEmailMessage(sendButton) {
var pageWidgets = sendButton.root.descendants;
if (pageWidgets === null) {
pageWidgets = "";
}
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.ShowName.value + '</h1>' +
'<p>Shoot Date: <b>' + pageWidgets.ProjectDate.value.toDateString() + '</b>' +
'<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +
'<p>Post AP: <b>' + pageWidgets.PostAP.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@test.com',
'New Sales Entry for: ' + pageWidgets.ShowName.value,
htmlbody);
}
感谢您的帮助。
有多种方法可以处理这种情况,最简单的方法是引入一些辅助函数:
// This function will return empty string in case widget's value is null
// You can return any default value or even pass it as function's parameter
function getSafeString(widget) {
return widget.value === null ?
'' :
widget.value;
}
function getSafeDate(widget) {
return widget.value === null ?
'' :
widget.value.toDateString();
}
function newSalesEmailMessage(sendButton) {
...
'...some HTML...' + getSafeString(widgets.SomeWidget) + '...some HTML...' +
'...some HTML...' + getSafeDate(widgets.DateWidget) + '...some HTML...'
...
}
顺便说一下,我还建议使用 datasource.item(或 datasource.modes.create.item,具体取决于您的绑定)来获取用户输入。
对不起。我敢肯定这是一个菜鸟问题,答案很简单。
因此,当用户创建条目时,我使用以下方法发送电子邮件通知。除了与 "null"(空白)条目相关的两个行为外,一切正常。
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.ShowName.value + '</h1>' +
'<p>Shoot Date: <b>' + pageWidgets.ProjectDate.value.toDateString() + '</b>' +
'<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +
'<p>Post AP: <b>' + pageWidgets.PostAP.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@test.com',
'New Sales Entry for: ' + pageWidgets.ShowName.value,
htmlbody);
return sendButton === "" || sendButton === null || sendButton === undefined;
}
问题 1: 每当用户将字段留空时,电子邮件都会在该字段中输入 "null",这是有道理的,但人们一直在问我 [=33= 】 呃。
因此,如果有一种方法可以输出空白 space(例如:"")而不是 "null",那就太好了。
问题 2: 每当用户将 ProjectDate(这是一个日期字段)留空时,我都会收到错误消息:无法读取 属性 'toDateString' of无效的。
这是有道理的,但显然这会导致此脚本无法完成。我希望这样的事情可以解决这两个问题,但它没有:
function newSalesEmailMessage(sendButton) {
var pageWidgets = sendButton.root.descendants;
if (pageWidgets === null) {
pageWidgets = "";
}
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.ShowName.value + '</h1>' +
'<p>Shoot Date: <b>' + pageWidgets.ProjectDate.value.toDateString() + '</b>' +
'<p>Contact: <b>' + pageWidgets.Contact.value + '</b>' +
'<p>Post AP: <b>' + pageWidgets.PostAP.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@test.com',
'New Sales Entry for: ' + pageWidgets.ShowName.value,
htmlbody);
}
感谢您的帮助。
有多种方法可以处理这种情况,最简单的方法是引入一些辅助函数:
// This function will return empty string in case widget's value is null
// You can return any default value or even pass it as function's parameter
function getSafeString(widget) {
return widget.value === null ?
'' :
widget.value;
}
function getSafeDate(widget) {
return widget.value === null ?
'' :
widget.value.toDateString();
}
function newSalesEmailMessage(sendButton) {
...
'...some HTML...' + getSafeString(widgets.SomeWidget) + '...some HTML...' +
'...some HTML...' + getSafeDate(widgets.DateWidget) + '...some HTML...'
...
}
顺便说一下,我还建议使用 datasource.item(或 datasource.modes.create.item,具体取决于您的绑定)来获取用户输入。