Google Sites ListItem Данные в базу данных Событие
У меня есть сайт Сайтов Google со страницей списка.
Я хочу получить данные из ListItems в базу данных (ScriptDB или JDBC для MySQL/SQL Server.)
Я хотел бы запустить обновление в результате события типа onUpdate, но не могу найти ничего подобного. Является ли решение для запуска сценария так часто?
Недостатком периодического запуска сценария является то, что я не могу зафиксировать все изменения, только текущее состояние при запуске сценария. Я хотел бы провести полную ревизию изменений, если это возможно. Я также должен был бы опросить каждый элемент ListItem, чтобы проверить дату lastUpdated, чтобы увидеть, является ли она новее, чем записи в базе данных, что выглядит как избыточная обработка.
Любой совет?
2 ответа
Действительно, вы не можете запустить событие 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-минутный триггер).
К сожалению, вы не можете сделать больше, чем это.
ура
никола
Спасибо, Николас. В итоге я уже реализовал нечто похожее:
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);
}