处理程序函数中的“遇到错误:无效参数”

时间:2012-08-28 23:14:11

标签: google-apps-script

我在处理程序函数中遇到此错误,但我不知道导致它的原因。我已复制代码并在非处理函数中调试它,并且没有错误。

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;
}

1 个答案:

答案 0 :(得分:0)

我想,错误原因是当缓存为空时,Cache get方法在第一次执行期间返回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())对于脚本的所有用户都是相同的。在您的情况下,这意味着,如果两个用户user1@example.comuser2@example.com使用该脚本,则他们将具有相同的currentagendaItems变量值,即它可能是一种情况_responseToNext处理程序已在user1权限下执行 - current变量等于1,在user2执行_responseToNext处理程序后 - current变量等于2,依此类推。如果您不需要此类行为,请使用CacheService.getPrivateCache()