以下是自定义按钮的代码。目标是为不同的按钮存储不同的性别和评级:
var gender='Ladies';
var rating='Good';
setRating(gender, rating);
setRating(性别,评级)的方法实现在客户端脚本上编写如下。目标是告诉浏览器javascript激活sendRating(性别,评级)功能。
function setRating(gender, rating){
google.script.run
.withFailureHandler(function(error) {
// An error occurred, so display an error message.
status.text = error.message;
})
.withSuccessHandler(function(result) {
// Report that the email was sent.
status.text = 'Thank you for the feedback';
})
.sendRating(gender, rating);
}
下面是在服务器脚本上写的sendRating(性别,评级)实现。目标是告诉AppMaker javascript激活.saveRecords API以将性别和评级记录保存到名为ToiletRating的数据源。数据源包含诸如'性别'之类的字段。和'评级'。
function sendRating(gender, rating){
var db = app.models.ToiletaRating.newRecord();
person.Gender = gender;
person.Rating = rating;
app.saveRecord([db]);
}
你能帮我解释为什么我在服务器脚本行号中声明newRecord方法未定义时会出现这个错误。 3。
E
Wed Feb 28 09:47:42 GMT+800 2018
TypeError: Cannot call method "newRecord" of undefined. at sendRating (NewScript:3)
答案 0 :(得分:0)
如果您想更新字段,则无需创建newRecord。您应该访问记录,进行修改并保存更改。
var query = app.models.ToiletaRating.newQuery();
var queryRun = query.run();
for(var i=0;i<queryRun.length;i++) {
var field=queryRun[i].FIELDTOUPLOAD;
}
app.saveRecords([queryRun[i]]);
这应该有效。
另一方面,您确定您有一个名为“ToiletaRating”的数据源吗?我觉得你这里有语法错误。
答案 1 :(得分:0)
你的剧本中似乎有一个拼写错误(Toileta vs Toilet):
// your version with typo
var db = app.models.ToiletaRating.newRecord();
// version without typo
var db = app.models.ToiletRating.newRecord();
但即使您修正了错字,您的脚本也会失败。您需要使用您定义的变量来使事情有效:
function sendRating(gender, rating) {
// define variable
var newRecord = app.models.ToiletRating.newRecord();
// use variable
newRecord.Gender = gender;
newRecord.Rating = rating;
// Note that in original script you have one more typo:
// app.saveRecord vs app.saveRecords
app.saveRecords([newRecord]);
}
另请注意,您可以进一步改进此脚本:
查看Vendor Ratings和Q&A Forum模板,它们具有非常相似的功能