使用脚本更新关系会覆盖除最新记录

时间:2017-05-31 13:14:55

标签: google-app-maker

我有一个样式(服装)模型和一个图像模型以及一对多样式< =图像关系。

我有一个Cloudinary jQuery小部件来上传图像,然后我尝试使用图像的URL更新Images关系。然后打算在表格中显示这些图像。

但是,当我使用我的代码更新关系时,它只会根据关系保存最新的StyleCode。

因此,如果我保存一个图像,然后保存另一个图像,那么Image表就是这样的:

Image URL         Style
http://abc        1234

到这个

Image URL         Style
http://abc        <blank>
http://xyz        1234  

我的第一个问题是,这种关系实际上是如何运作的?它似乎依赖于我的StyleCode来保持记录关系。我会认为它会_key ..... ????

其次,我的代码中是否有任何可能会覆盖以前StyleCode的内容?

服务器端代码

function saveImageToStyle(images, styleCode) {
  var imgs = [];
  images.forEach(function(image)
  {
    var imageRecord = app.models.Images.newRecord();
    imageRecord.ThumbnailURL = image.thumbnail_url;
    imageRecord.ImageURL = image.url;
    imageRecord.Path = image.path;
    imageRecord.ImageName = image.original_filename;
    imgs.push(imageRecord);
  }); 
  app.saveRecords(imgs);
  var query = app.models.Styles.newQuery();
  query.filters.StyleCode._equals = styleCode; // is it this???
  var styleRecord = query.run()[0];
  styleRecord.Images = imgs;
  app.saveRecords([styleRecord]);
}

客户端代码

function saveStyleImages(images) {
  var styleCode = app.datasources.Styles.item.StyleCode; // is there a better way to get the current StyleCode?
  var status = app.pages.StyleEdit.descendants.Status; 
  google.script.run
  .withFailureHandler(function(error) {
    status.text = error.message;
  })
  .withSuccessHandler(function(result) {
    status.text = images + "success";
  })
  .saveImageToStyle(images, styleCode);
}

2 个答案:

答案 0 :(得分:1)

看起来您可以在客户端上执行所有操作(如果您对安全模型没有任何限制):

function addStyleImage(newImage) {
  var newImageDs = app.datasources.Styles.relation.Images.modes.create;
  var newImage = newImageDs.item;

  newImage.ThumbnailURL = image.thumbnail_url;
  newImage.ImageURL = image.url;
  newImage.Path = image.path;
  newImage.ImageName = image.original_filename;

  newImageDs.createItem(function(record) {
     // do smth with new record
  });
}

使用这种方法,您将立即在客户端上看到新图像(如果图像关系绑定到表/列表/网格)。

了解更多:

https://developers.google.com/appmaker/models/datasources#create_mode_datasource

答案 1 :(得分:0)

以下行替换所有现有的样式关联: styleRecord.Images = imgs; 你可以用以下代替它: styleRecord.Images = styleRecord.Images.concat(imgs);