google appmaker:更新数据源中的字段

google appmaker: update field in datasource

下面是自定义按钮的代码。 objective 是为不同的按钮存储不同的性别和等级:

var gender='Ladies';
var rating='Good';
setRating(gender, rating);

setRating(gender, rating) 的方法实现写在客户端脚本如下。 objective 是告诉浏览器 javascript 激活 sendRating(gender, rating) 函数。

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(gender, rating) 实现。 objective 是告诉 AppMaker javascript 激活 .saveRecords API 以将性别和评级记录保存到名为 ToiletRating 的数据源中。数据源包含 'Gender' 和 'Rating'.

等字段
function sendRating(gender, rating){

  var db = app.models.ToiletaRating.newRecord();
  person.Gender = gender;
  person.Rating = rating;
  app.saveRecord([db]);

}

你能帮我解释一下为什么我在服务器脚本第 3 行中声明 newRecord 方法未定义时收到此错误消息吗? 3.

E
Wed Feb 28 09:47:42 GMT+800 2018
TypeError: Cannot call method "newRecord" of undefined. at sendRating (NewScript:3)

您的脚本中似乎有错字(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 and Q&A Forum 模板,它们具有非常相似的功能