I want to send an email notification whenever the user clicks on a button. The button will call sendEmail(widget)
function and invoke a client script as follow:
function sendEmail(widget){
var item = widget.datasource.item;
google.script.run
.withFailureHandler(function(error) {
console.text = error.message;
})
.withSuccessHandler(function(result) {
console.text = 'succeed';
})
.sendEmails(item);
}
then it will pass the datasource on item
and call sendEmails(item)
function from a server script as follows:
function sendEmails(item){
var to = item.OwnerEmail;
var subject = 'Please Review';
var body = 'hello<br/>my name is Muhammad Alif bin Azali';
MailApp.sendEmail({
to: to,
subject: subject,
htmlBody: body,
noReply: true
});
}
but when I click the button I got following error instead. Any help?
Unfortunately, you cannot pass whatever you want as a parameter to your server function. Communication to the server has some limitations:
...most types are legal, but not Date, Function, or DOM element...
...objects that create circular references will also fail...
App Maker's records definitely violate those restrictions.
There are different strategies to handle this limitation, one of them is passing record's key as function's parameter.
// Client script
function sendEmail(widget) {
var item = widget.datasource.item;
google.script.run
...
.sendEmails(item._key);
}
// Server script
function sendEmails(itemKey) {
var item = app.models.MyModel.getRecord(itemKey);
...
}