App Maker:发送电子邮件、客户端脚本到服务器脚本功能不起作用。由于 属性 中的非法值而失败:a
App Maker: Sending Email, client script to server script function not working. Failed due to illegal value in property: a
我是 AppMaker 的新手,但我有开发经验。
该应用程序是项目跟踪器应用程序
我期望发生的事情:在创建项目时,用户使用用户选择器select 与该项目关联的用户。创建项目后,我想向与该项目关联的用户发送电子邮件。
问题:单击“添加”按钮时 addProject(addButton)
客户端脚本函数被调用。
在这个函数中调用 sendEmailToAssignees(project, assignees)
应该到达服务器脚本和 运行 notifyAboutProjectCreated(project, assignees)
但那没有发生。
须知:使用日志记录我从未访问过 'Trying to send email' 所以我似乎永远无法访问我的服务器脚本。此外,在客户端脚本上,当我注释掉 sendEmailToAssignees
功能时,一切 运行 都很顺利。我已将此文档视为一种资源,因此我觉得我的实现没问题。 https://developers.google.com/appmaker/scripting/client#client_script_examples
我得到的最后错误信息是:
Failed due to illegal value in property: a at addProject
(AddProject:110:24) at
AddProject.Container.PanelAddProject.Form1.Spring.ButtonAdd.onClick:1: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);
}
您收到此错误的原因是您试图将客户端 "project record" 传递给服务器。如果需要访问项目,则将记录密钥传递给服务器,然后使用密钥访问服务器上的记录。
客户:
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
}
客户端中的项目记录对象与服务器中的项目记录对象不一致;因此非法 属性 值错误。
我是 AppMaker 的新手,但我有开发经验。
该应用程序是项目跟踪器应用程序
我期望发生的事情:在创建项目时,用户使用用户选择器select 与该项目关联的用户。创建项目后,我想向与该项目关联的用户发送电子邮件。
问题:单击“添加”按钮时 addProject(addButton)
客户端脚本函数被调用。
在这个函数中调用 sendEmailToAssignees(project, assignees)
应该到达服务器脚本和 运行 notifyAboutProjectCreated(project, assignees)
但那没有发生。
须知:使用日志记录我从未访问过 'Trying to send email' 所以我似乎永远无法访问我的服务器脚本。此外,在客户端脚本上,当我注释掉 sendEmailToAssignees
功能时,一切 运行 都很顺利。我已将此文档视为一种资源,因此我觉得我的实现没问题。 https://developers.google.com/appmaker/scripting/client#client_script_examples
我得到的最后错误信息是:
Failed due to illegal value in property: a at addProject (AddProject:110:24) at AddProject.Container.PanelAddProject.Form1.Spring.ButtonAdd.onClick:1: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);
}
您收到此错误的原因是您试图将客户端 "project record" 传递给服务器。如果需要访问项目,则将记录密钥传递给服务器,然后使用密钥访问服务器上的记录。
客户:
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
}
客户端中的项目记录对象与服务器中的项目记录对象不一致;因此非法 属性 值错误。