Попытка включить адрес электронной почты (или имя пользователя) в уведомление по электронной почте

У меня есть Фрагмент страницы, который позволяет пользователям создавать записи. Когда они нажимают кнопку отправки, запускается следующее:

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

Это активирует клиентский скрипт, который отправляет пользователю электронное письмо со значениями из полей виджета:

function newSOEmailMessage(sendButton) {
  var pageWidgets = sendButton.root.descendants;
  var currentuser = Session.getActiveUser().getEmail();
  var htmlbody = currentuser + 'has created new system order for: <h1><span style="color:#2196F3">' + pageWidgets.ShowName.value + ' - ' + pageWidgets.UsersPosition.value + '</h1>' +
      '<p>R2 Order #: <b>' + pageWidgets.R2OrderNumber.value + '</b>' +
      '<p>Delivery Date: <b>' + pageWidgets.DeliveryDate.value.toDateString() + '</b>' +
      '<p>Start of Billing: <b>' + pageWidgets.SOB.value.toDateString() + '</b>' +
      '<p>Sales Person: <b>' + pageWidgets.SalesPerson.value + '</b>' + 
      '<p>&nbsp;</p>' +
      '<p>Company: <b>' + pageWidgets.Company.value + '</b>' +          
      '<p>&nbsp;</p>' +
      '<p>Notes: <b>' + pageWidgets.Notes.value + '</b>';

  google.script.run
    .withSuccessHandler(function() {
     })
    .withFailureHandler(function(err) {
      console.error(JSON.stringify(err));
    })
    .sendEmailCreate(
      'user@email.com',
      'New order for: ' + pageWidgets.ShowName.value + ' - ' + pageWidgets.UsersPosition.value,
      htmlbody);
}

Все это прекрасно работает, кроме параметра "currentuser" (после var htmlbody =). С кодом выше я получаю следующую ошибку:

Session is not defined
at newSOEmailMessage (Notifications_ClientScripts:7:45)
at SystemOrders_Add.SubmitButton.onClick:1:1

Я хотел бы, чтобы "currentuser" равнялся адресу электронной почты (или, желательно, фактическому имени пользователя).

Например: " Джон Доу создал новый системный заказ для..."

Что мне не хватает?

Спасибо!

Примечание. У меня уже есть настройка модели каталога для отображения имен пользователей в разделе комментариев для другой модели. Эта модель работает следующим образом (я полагаю, я мог бы добавить это к моей модели SystemOrders?)

// onCreate
var email = Session.getActiveUser().getEmail();

var directoryQuery = app.models.Directory.newQuery();
directoryQuery.filters.PrimaryEmail._equals = email;
var reporter = directoryQuery.run()[0];

1 ответ

Решение

Похоже, вы смешиваете серверные и клиентские API

// It is server side API
var email = Session.getActiveUser().getEmail();

// It is client side API
var email = app.user.email;

Если вы хотите использовать полное имя пользователя из каталога, вам необходимо заранее загрузить его, например, в сценарии запуска приложения:

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

Итак, вы можете обратиться к этому элементу источника данных позже в своем коде:

var fullName = app.datasources.CurrentUser.item.FullName;

Также я бы рекомендовал отправлять электронные письма только тогда, когда запись действительно создана:

// Sends async request to server to create record
widget.datasource.createItem(function() {
   // Record was successfully created
   newSOEmailMessage(widget);  
});
Другие вопросы по тегам