错误与" null"电子邮件通知脚本中的字段

时间:2017-08-04 18:28:28

标签: google-app-maker

我道歉。我确信这是一个新手问题,答案很简单。

因此,当用户创建条目时,我使用以下内容发送电子邮件通知。一切正常,除了两个与" 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:每当用户将字段留空时,电子邮件就会显示&#34; null&#34;在现场,这是有道理的,但人们一直在问我&#34;谁是空的?&#34;啊。

因此,如果有办法输出空格(例如:&#34;&#34;)而不是&#34; null&#34;那太好了。

问题2:每当用户将ProjectDate(日期字段)留空时,我都会收到错误:无法读取属性&#39; toDateString&#39;为null。

这是有道理的,但显然这会导致此脚本无法完成。我希望这样的事情可以解决这两个问题,但它并没有:

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);
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

有多种方法可以处理这种情况,最简单的方法是引入一些辅助函数:

// 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,具体取决于你的绑定)来获取用户输入。