App Maker:发送电子邮件,客户端脚本到服务器脚本功能不起作用.由于属性a中的值非法而失败



我是AppMaker的新手,但我有开发经验。

该应用程序是项目跟踪器应用程序

我期望发生的事情:创建项目时,用户使用用户选择器来选择与该项目关联的用户。当项目创建时,我想给与该项目相关联的用户发电子邮件。

问题:单击"添加"按钮时,会调用addProject(addButton)客户端脚本函数。在这个函数中调用了sendEmailToAssignees(project, assignees),它应该访问服务器脚本并运行notifyAboutProjectCreated(project, assignees),但这并没有发生。

需要知道的事情:通过日志记录,我从未访问过"尝试发送电子邮件",因此我似乎从未访问过我的服务器脚本。此外,在客户端脚本上,当我注释掉sendEmailToAssignees函数时,一切都运行顺利。我把这个文档看作是一种资源,所以我觉得我的实现是可以的。https://developers.google.com/appmaker/scripting/client#client_script_examples

我得到的最后一条错误消息是:

由于属性中的非法值而失败:addProject处的a(添加项目:110:24(添加项目。容器PanelAddProject。Form1.Spring.ButtonAdd.onClick:1:

我是不是遗漏了什么?如有任何帮助,我们将不胜感激。非常感谢。

客户端脚本

function sendEmailToAssignees(project, assignees) {
google.script.run
.withSuccessHandler(function() {
console.log('Sending Email Success');
}).withFailureHandler(function(err) {
console.log('Error Sending Email: ' + JSON.stringify(err));
})
.notifyAboutProjectCreated(project, assignees);
}
function addProject(addButton) {
if (!addButton.root.validate()) {
return;
}
addButton.datasource.createItem(function(record) {  
var page = app.pages.AddProject;
var pageWidgets = page.descendants;
var trainees = pageWidgets.AssigneesGrid.datasource.items;
var traineesEmails = trainees.map(function(trainee) {
return trainee.PrimaryEmail;
});
record.Assignee = traineesEmails.toString();
var assignees = traineesEmails.toString();
var project = record; 
updateAllProjects(record);
console.log('update all projects done');    
sendEmailToAssignees(project, assignees);
console.log('Send Email done');
if (app.currentPage !== app.pages.ViewProject) {
return;
}              
gotoViewProjectPageByKey(record._key, true);

});
gotoViewProjectPageByParams();
}

服务器脚本

function notifyAboutProjectCreated(project, assignees) {
console.log('Trying to send email');
if (!project) {
return;
}
var settings = getAppSettingsRecord_()[0];
if (!settings.EnableEmailNotifications) {
return;
}
var data = {
appUrl: settings.AppUrl,
assignee: project.Assignee,
owner: project.Owner,
startDate: project.StartDate,
endDate: project.EndDate,
jobType: project.Type,
jobId: project.Id
};
// Email Subject
var subjectTemplate = HtmlService.createTemplate(settings.NotificationEmailSubjectJob);
subjectTemplate.data = data;
var subject = subjectTemplate.evaluate().getContent();
// Email Body
var emailTemplate =
HtmlService.createTemplate(settings.NotificationEmailBodyJob);
emailTemplate.data = data;
var htmlBody = emailTemplate.evaluate().getContent();
console.log('About to send email to:', assignees);
sendEmail_(null, assignees, subject, htmlBody);    
}

出现此错误的原因是您试图将客户端的"项目记录"传递给服务器。如果需要访问项目,请将记录密钥传递给服务器,然后使用该密钥访问服务器上的记录。

客户:

function sendEmailToAssignees(project, assignees) {
var projectKey = project._key;
google.script.run
.withSuccessHandler(function() {
console.log('Sending Email Success');
}).withFailureHandler(function(err) {
console.log('Error Sending Email: ' + JSON.stringify(err));
})
.notifyAboutProjectCreated(projectKey , assignees);
}

服务器:

function notifyAboutProjectCreated(projectKey, assignees) {
console.log('Trying to send email');
var project = app.models.<PROJECTSMODEL>.getRecord(projectKey);
if (!project) {
return;
}
//Rest of the logic
}

客户端中的项目记录对象与服务器中的项目纪录对象不同;因此出现了特权属性值错误。

最新更新