Один скрипт Google не будет авторизоваться, другие будут

Недавно мы сменили пароль Google и повторно авторизовали все наши скрипты, кроме этого.

Этот скрипт единственный, который не авторизуется. Запуск его из редактора не требует авторизации, но при выполнении веб-приложения по-прежнему отображается ошибка «Вы должны предоставить авторизацию для запуска этого приложения».

Я предоставляю ссылку, пожалуйста, дайте мне знать, что еще я могу сделать.

https://script.google.com/d/1Cb90JPvS2gDn1invg1f4NKErn7urfhJm0vmrkNsjW0trVvHj0NBO8sNK/edit?usp=drive_web

Вот код ниже. Он извлекает «шоу», которые прошли, и помещает их в ежемесячную электронную таблицу (за каждый месяц), удаляя их из рабочей электронной таблицы, поскольку другие скрипты Google становятся медленными, когда в рабочей электронной таблице слишком много строк. (Он также опирается на другой сценарий под названием «Глобальный»).

var MAX_PROCESSED = 100;

function doGet(e) {
  var app = UiApp.createApplication();
  var start_screen = app.createVerticalPanel();

  var wait_screen = app.createVerticalPanel().setId("screen");

  var gig_sheet = Global.getGigsSheet();
  var max_rows = gig_sheet.getLastRow();
  var max_cols = gig_sheet.getLastColumn();
  var col_descriptions = gig_sheet.getRange(1, 1, 1, max_cols).getValues()[0];
  var col_ids = gig_sheet.getRange(2, 1, 1, max_cols).getValues()[0];

  var cur_date = new Date();
  var archive_filename = "Database archive "+cur_date.toDateString();
  var old_file = SpreadsheetApp.create(archive_filename, 0, max_cols);
  var old_sheet = old_file.getActiveSheet();
  old_file.renameActiveSheet("Database");
  old_sheet.appendRow(col_descriptions);
  old_sheet.appendRow(col_ids);
  SpreadsheetApp.flush();

  var message = (max_rows-2)+ " gigs to examine. ";
  if(max_cols > 500)
    message+= "Hmm... This may take a while. ";

  message+="<br/>New archive database ready \""+archive_filename+"\".  Press start to begin.";

  var id_string = old_file.getId();
  Global.log("doc id:"+id_string);
  var doc_id_widget = app.createHidden("doc_id", id_string);
  var row_pos_widget = app.createHidden("row_pos", 3);
  var old_total_widget = app.createHidden("old_total", max_rows);

  var start_button = app.createButton("Start");
  start_button.addClickHandler(app.createClientHandler().forTargets(start_screen).setVisible(false).forTargets(wait_screen).setVisible(true));
  start_button.addClickHandler(app.createServerHandler('processGigs').addCallbackElement(doc_id_widget).addCallbackElement(row_pos_widget).addCallbackElement(old_total_widget));

  start_screen.add(app.createHTML(message));
  start_screen.add(start_button);

  wait_screen.add(app.createHTML("Working... should take about 60 seconds.  If it goes longer than 6 minutes, Google will display an error anyway."));
  wait_screen.setVisible(false);

  app.add(start_screen);
  app.add(wait_screen);

  return app;
}

function test()
{
  var test;
}

function processGigs(e){

  Global.log("processGigs");
  var app = UiApp.getActiveApplication();

  var row_pos = parseInt(e.parameter.row_pos);
  var id_string = e.parameter.doc_id;
  var old_total = e.parameter.old_total;
  var screen = app.getElementById("screen");
  screen.setVisible(false);

  Global.log("Loading row_pos:"+row_pos+", raw data:"+e.parameter.row_pos);
  Global.log("Spreadsheet ID:"+id_string);

  var gig_sheet = Global.getGigsSheet();
  var max_rows = gig_sheet.getLastRow();
  var max_cols = gig_sheet.getLastColumn();
  var col_descriptions = gig_sheet.getRange(1, 1, 1, max_cols).getValues()[0];
  var col_ids = gig_sheet.getRange(2, 1, 1, max_cols).getValues()[0];

  var old_file = SpreadsheetApp.openById(id_string);
  var old_sheet = old_file.getActiveSheet();

  var cur_date = new Date();
  var existing_date;
  var existing_fee;

  var archive_count= 0;
  var row;
  var range;
  var item;
  var items_processed = 0;

  while (items_processed < MAX_PROCESSED && row_pos <= max_rows){
    Global.log("row_pos:"+row_pos+", max_rows:"+max_rows+", max_cols:"+max_cols);
    range = gig_sheet.getRange(row_pos, 1, 1, max_cols);
    row = range.getValues()[0];
    item = Global.arrayToObject(col_ids, row, false);
    Global.parseValuesOnObject(col_ids, item, false);
    if((item.paid >= item.fee && item.date < cur_date) || item.status == "Cancelled"){
      old_sheet.appendRow(row);
      gig_sheet.deleteRows(row_pos,1);
      max_rows--;
      archive_count++;
    }else{
      row_pos++;
    }
    items_processed++;
  }

  var work_screen = app.createVerticalPanel();
  var wait_screen = app.createVerticalPanel().setId("screen").setVisible(false);
  var message_widget = app.createHTML();
  work_screen.add(message_widget);
  wait_screen.add(app.createHTML("Working... should take about 60 seconds.  If it goes longer than 6 minutes, Google will display an error anyway."));


  Global.log("Saving row_pos:"+row_pos);
  var doc_id_widget = app.createHidden("doc_id", id_string);
  var row_pos_widget = app.createHidden("row_pos", row_pos);
  var old_total_widget = app.createHidden("old_total", old_total);

  var start_button = app.createButton("Continue");
  start_button.addClickHandler(app.createClientHandler().forTargets(work_screen).setVisible(false).forTargets(wait_screen).setVisible(true));
  start_button.addClickHandler(app.createServerHandler('processGigs').addCallbackElement(doc_id_widget).addCallbackElement(row_pos_widget).addCallbackElement(old_total_widget));

  //new_sheet.getRange(1, new_data.length, 1, new_data[0].length).setValues(new_data);
  //old_sheet.getRange(1, old_data.length, 1, old_data[0].length).setValues(old_data);
  var message = archive_count + " gigs archived.</br>";
  if(row_pos < max_rows){
    message += "Process limit reached. "+(max_rows - row_pos)+" to go, so click Continue to keep trying.";
    work_screen.add(start_button);
  }else{
    message += "End of records reached, none left to archive.  You can close this window now.";
  }

  //message +="<br/>row_pos:"+row_pos+", max_rows:"+max_rows;
  message_widget.setHTML(message);

  app.add(work_screen);
  app.add(wait_screen);

  return app;
}

person Domarius    schedule 31.10.2016    source источник


Ответы (2)


Как правило, мне не нравятся сценарии, сильно зависящие от других сценариев, и я бы постарался сохранить их вместе. Дважды проверьте, авторизуется ли и работает ли скрипт зависимостей правильно.

Еще одна вещь, которую я могу придумать, это перейти здесь, найти скрипт (более старая версия, вероятно, авторизована) и удалите ее. В противном случае я не думаю, что информации недостаточно, чтобы дать более подробный ответ, если это не поможет.

person Vytautas    schedule 31.10.2016
comment
Я хочу поблагодарить вас за помощь. По крайней мере, я не знал, что эта страница существует. Вникая в это снова, я действительно решил проблему, она была связана с тем, кто владел файлом. Я разместил свой собственный ответ ниже. - person Domarius; 07.11.2016

Хорошо, я разобрался. Поскольку мы переключались между учетными записями, у этого сценария был другой «владелец», чем у остальных. Итак, теперь и этот владелец, и учетная запись, из которой мы хотим запустить его, должны авторизоваться, прежде чем опубликованная версия заработает...

Наконец, я решил проверить, когда заметил, что при публикации есть уведомление, в котором говорится: «Предыдущий владелец должен авторизоваться перед публикацией URL-адреса» или что-то в этом роде.

person Domarius    schedule 07.11.2016