将新项目添加到Google协作平台列表页面模板的列表中时,我需要通知事件。像Page.listUpdated(e)这样的东西会很棒,其中e.Item可能是新的ListItem。
最初是为新项启用条件格式,但我可以想到更多用途。
有人可以为此建议解决方法吗?
答案 0 :(得分:0)
我有一个运行在电子表格中的脚本,我用它来跟踪日历中的变化,我稍微修改了一下以查看SitePage列表......它需要一些'美化增强功能',但它有效。例如,您可以设置时间触发器让它每30'运行一次,如果您在任何选定的页面中进行任何更改,它将向您发送邮件。
您唯一需要做的就是在“主表”上添加要检查的页面的URL,并在尝试之前运行“init”函数。 记录器表也将跟踪变化。
测试表是available here(请复制以运行它),脚本就像这样(将其视为“正在进行中的工作”):
var email = 'test@gmail.com';
var ss = SpreadsheetApp.getActiveSpreadsheet();// this spreadsheet
var sh = ss.getSheetByName('master');
var pageList = sh.getDataRange().getValues();
var logsheet = ss.getSheetByName('logger');
var last = logsheet.getLastRow();
var FUS1=new Date().toString().substr(25,6)+":00";
function onOpen() {
var menuEntries = [ {name: "initialize", functionName: "init"},
{name: "Lauch autoTest", functionName: "autoCheckAllPages"},
];
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sheet.addMenu("Tracking utilities",menuEntries);//
SpreadsheetApp.setActiveSheet(sheet.getSheetByName('logger'));// start on logger page
}
function init(){
ScriptProperties.setProperties({'lastTest': 'empty'}, true);
}
function autoCheckAllPages(){
var message = ScriptProperties.getProperty('lastTest')
var newVal = ''
ss.setActiveSheet(logsheet)
for(nn=0;nn<pageList.length;++nn){
var pageName = pageList[nn][0];
var pageUrl = pageList[nn][1];
var items = SitesApp.getPageByUrl(pageUrl).getListItems()
for (var i = 0; i < items.length; i++) {
Logger.log(items[i].getDatePublished()+' '+items[i].getValueByIndex(1))
newVal+= pageName+','+items[i].getDatePublished()+','+items[i].getValueByIndex(1)+'|'
}
}
ScriptProperties.setProperties({'lastTest': newVal}, true); // write to script properties
logsheet.insertRowAfter(last)
logsheet.getRange(last+1,1).setValue('Autotest on '+ Utilities.formatDate(new Date(),FUS1,"MMM-dd-yy @ hh:mm"))
if(message != newVal){
var addedItem = sendMail_(message,newVal)
logsheet.getRange(last+1,2).setValue('new list Item : '+addedItem)
}
}
function sendMail_(message,newVal){
Logger.log('send mail')
var newItem=''
var old=message
var newI = newVal.split('|');
for(n=0;n<newI.length;++n){
if(message.match(newI[n])!=newI[n]){ newItem += newI[n] + '|'
}
}
//MailApp.sendEmail(email,'new listItem Added',newItem);// this should be developped with HTML body to show date in a table for example...
return newItem
}