2017-07-26 2 views
0

J'ai une page Fragment qui permet aux utilisateurs de créer une entrée. Quand ils cliquent sur le bouton Envoyer il fonctionne comme suit:essayez d'inclure l'adresse e-mail (ou le nom de l'utilisateur) Dans la notification Email

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

Ce active un script client qui envoie un courrier électronique à l'utilisateur qui comprend les valeurs des champs de widget:

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(
     '[email protected]', 
     'New order for: ' + pageWidgets.ShowName.value + ' - ' + pageWidgets.UsersPosition.value, 
     htmlbody); 
} 

Toutes ces œuvres bien, sauf l'option "currentuser" (après var htmlbody =). Avec le code ci-dessus, je reçois l'erreur suivante:

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

Je voudrais « currentuser » pour égaler l'adresse e-mail (ou, de préférence le nom réel de l'utilisateur).

ex: "John Doe a créé un nouvel ordre de système pour ..."

Qu'est-ce que je manque?

Merci!

Note: Je l'ai déjà une configuration du modèle Directory pour afficher les noms des utilisateurs dans une section de commentaires pour un autre modèle. Ce modèle est en cours d'exécution qui suit (je suppose que je pourrais ajouter que mon modèle SystemOrders?)

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

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

Il semble que Session.getActiveUser() getEmail();. fait partie des Apps Script (https://developers.google.com/apps-script/reference/base/session#getActiveUser()) et ne peut pas être utilisé dans un script client. Pour les scripts Client, vous pouvez utiliser ceci: https://developers.google.com/appmaker/scripting/api/client#User – Wilmar

Répondre

3

On dirait que vous mixez API côté serveur et client

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

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

Si vous voulez utiliser l'utilisateur Nom complet à partir du répertoire, vous devez charger l'avance, par exemple dans le script de démarrage de l'application:

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

Ainsi, vous pouvez vous référer à cet élément de source de données plus tard dans votre code:

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

Aussi, je recommande d'envoyer des e-mails que lorsque l'enregistrement est en fait créé:

// Sends async request to server to create record 
widget.datasource.createItem(function() { 
    // Record was successfully created 
    newSOEmailMessage(widget); 
}); 
+1

Tout cela a bien fonctionné! Je vous remercie! Ça m'a pris une minute, mais pour ceux qui sont curieux l'App script de démarrage va dans la case « App Script de démarrage » qui est sous Paramètres de l'application (le GEaR). –