0

我有一个带有列表页面的 Google 协作平台网站。

我想将数据从 ListItems 获取到数据库中(ScriptDB 或 JDBC 到 MySQL/SQL Server。)

由于 onUpdate 类型事件,我想触发更新,但找不到类似的东西。是否经常运行脚本的解决方案?

定期运行脚本的缺点是我无法捕获所有更改,只能捕获脚本运行时的当前状态。如果可能,我希望对更改进行全面审核。我还必须询问每个 ListItem 以检查 lastUpdated 日期,看看它是否比数据库中已有的记录更新,这似乎是很多冗余处理。

有什么建议吗?

4

2 回答 2

0

实际上,您不能运行 onUpdate 事件,因为它们是为电子表格保留的。

但是,您有关于 listItems 的信息,您可以运行这样的循环来获取项目的更新时间和发布时间:

function getChanges(){
    var listItems=page.getListItems();
    var update;
    var datePublished;
    for(var i=0;i<listItems.length;++i){
        update=item[i].getLastUpdate();
        datePublished=item[i].getDatePublished();

        list of stuff to do like compare with the content of your database;
    }
}

时钟触发器是捕捉变化的最佳解决方案(如 10 分钟触发器)。

不幸的是,你不能做更多的事情。

干杯

尼古拉斯

于 2013-06-09T10:38:30.993 回答
0

谢谢尼古拉斯。最后我已经实现了一些非常相似的东西:

function updatePeople(){
  for(var j in peopleList){
    // Check if the record in the peopleList is newer than the last database (not record) update.
    var personUpdated=peopleList[j].getLastUpdated().getTime();
    var dbUpdated= db.query({Type:"dbUpdated"}).next().dbUpdated;
    // If the record is newer than the last database update...
    if(personUpdated>dbUpdated)
    { 
      // ...check if the record exists in the database (check for current record using Is_Current = 1)
      // If it does, set the Valid_To date on the old record to be 1 second before the Valid_From date of the new record.
      var result = db.query({Type:"Person", Initials: peopleList[j].getValueByName("Initials"), Is_Current:1}).getSize();
      if(result>0){
        var oldPerson = db.query({Type:"Person", Initials: peopleList[j].getValueByName("Initials"), Is_Current:1}).next();
        var validTo = personUpdated-1000;
        oldPerson.Valid_To = validTo;
        oldPerson.Is_Current = 0;
        db.save(oldPerson); 
        // now add a new Person record.
        addPerson(j);
      }
      else {
        addPerson(j); 
      }
    }
  }
  updateDbUpdatedDate();
}

addPerson() 函数是一个非常简单的添加新记录的函数。

function addPerson(j){
  var person={};
  person["Valid_From"]=peopleList[j].getLastUpdated().getTime();
  person["Valid_To"]=9999999999999;
  person["Is_Current"]=1;
  person["Type"]="Person";
  person["Initials"]= peopleList[j].getValueByName("Initials");
  person["Name"]=peopleList[j].getValueByName("Name");
  person["Email_Address"]= peopleList[j].getValueByName("Email Address");
  person["Team"]=peopleList[j].getValueByName("Team");
  person["Grade"]=peopleList[j].getValueByName("Grade");
  person["Admin"]=peopleList[j].getValueByName("Admin");
  db.save(person); 
}
于 2013-06-09T20:46:14.463 回答