1

ハンドラー関数でこのエラーが発生しますが、原因がわかりません。コードをコピーして非ハンドラー関数でデバッグしましたが、エラーは発生しませんでした。

function _responseToNext(e) {

  var app = UiApp.getActiveApplication();
  app.getElementById('btnPrev').setEnabled(true);

  var current = parseInt(CacheService.getPublicCache().get('currentItem')); 
  var agendaItems = Utilities.jsonParse(CacheService.getPublicCache().get('agenda'));

  agendaItems[current]['notes'] = e.parameter.tAreaNotes;
  agendaItems[current]['status'] = e.parameter.lboxStatus;

  CacheService.getPublicCache().put('agenda', Utilities.jsonStringify(agendaItems));

  current = current + 1;
  CacheService.getPublicCache().put('currentItem', current); 

  fillAgendaDetail(app);

  // only enabled 'Next' if there are more items in the agenda
  if (current < agendaItems.length-1) { 
  app.getElementById('btnNext').setEnabled(true); 
  }

  return app;
}
4

1 に答える 1

0

エラーの原因はget、キャッシュが空の場合の最初の実行時にCacheメソッドがnullを返すことだと思います。はUtilities.jsonParse例外をスローし、キャッシュはいずれの場合も空になります。次の変更されたコードを使用してみてください。

function _responseToNext(e) {

  var app = UiApp.getActiveApplication();
  app.getElementById('btnPrev').setEnabled(true);

  var cachedCurrent = CacheService.getPublicCache().get('currentItem');
  var current;
  if (cachedCurrent == null) {
    current = 0;
  }
  else {
    current = parseInt(cachedCurrent); 
  }
  var cachedAgendaItems = CacheService.getPublicCache().get('agenda');
  var agendaItems;
  if (cachedAgendaItems == null) {
    agendaItems = [][];
  }
  else {
    agendaItems = Utilities.jsonParse();
  }

  agendaItems[current]['notes'] = e.parameter.tAreaNotes;
  agendaItems[current]['status'] = e.parameter.lboxStatus;

  CacheService.getPublicCache().put('agenda', Utilities.jsonStringify(agendaItems));

  current = current + 1;
  CacheService.getPublicCache().put('currentItem', current); 

  fillAgendaDetail(app);

  // only enabled 'Next' if there are more items in the agenda
  if (current < agendaItems.length-1) { 
  app.getElementById('btnNext').setEnabled(true); 
  }

  return app;
}

また、パブリックキャッシュ(CacheService.getPublicCache())はスクリプトのすべてのユーザーで同じであることに注意してください。あなたの場合、これは、2人のユーザーがスクリプトを使用する場合、それらは同じ変数値を持つことをuser1@example.com意味します。つまり、ハンドラーが権限の下ですでに実行されている状況である可能性があります。user2が実行された後、変数は1になります。ハンドラー-変数は2に等しいなど。このような動作が必要ない場合は、を使用してください。user2@example.comcurrentagendaItems_responseToNextuser1current_responseToNextcurrentCacheService.getPrivateCache()

于 2012-08-29T06:13:21.837 に答える