3

Googleサイトリストページテンプレートのリストに新しいアイテムが追加されたときに通知イベントが必要です。Page.listUpdated(e)のようなものは素晴らしいでしょう、ここでe.Itemは新しいListItemである可能性があります。

最初は新しいアイテムの条件付き書式を有効にすることでしたが、もっと多くの用途が考えられます。

誰かがこれの回避策を提案できますか?

4

1 に答える 1

0

カレンダーの変更を追跡するために使用するスプレッドシートで実行されるスクリプトがあり、SitePage リストを確認するために少し変更しました...「外観の拡張」が必要ですが、機能します。たとえば、30分ごとに実行するようにタイムトリガーを設定すると、選択したページのいずれかに変更が加えられた場合にメールが送信されます.

確認したいページの URL を「マスターシート」に追加し、「init」関数を一度実行してから試すだけです。ロガー シートも変更を追跡します。

テスト シートはここから入手できます(実行するにはコピーを作成してください)。スクリプトは次のようになります (これは「進行中の作業」と考えてください)。

  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
}
于 2013-01-20T09:57:59.850 に答える