Как вызвать опубликованный скрипт Google из другого скрипта Google? скрипты находятся в разных аккаунтах

//script calling the published script, this script is in the account 1
function callScript(){
    try{//published url
       var response =UrlFetchApp.fetch("https://script.google.com/macros/s/../exec?  calendar='CalendarName'");//calendar name as parameter

    }catch(e){
  Logger.log(e);
 }
 Logger.log(response.getContentText());
}

//account 2
//the code is published, it will run as the user who call the script(account 1), the   access is for anyone 
function doGet(e){//published script

  var app = UiApp.createApplication();
  var calendar=e.parameter.calendar; //calendar name as parameter
  // Determines how many events are happening now 
  var now = new Date();
  var oneMinuteFromNow = new Date(now.getTime() + (60 * 1000));
  var events = CalendarApp.getCalendarsByName(calendar)  [0].getEvents(now,oneMinuteFromNow);
  var email=Session.getActiveUser().getEmail();
  for(i in events){
     var tituloEvento=events[i].getTitle();
     var descEvento= events[i].getDescription();
     var insertar=leerBD(email,tituloEvento,descEvento);
     if (insertar) {
       var inserto=insertarBD(email,tituloEvento,descEvento); 
     } 
  }  
  return ContentService.createTextOutput(e.parameter.string.calendar);
 }

Я хочу вызвать сценарий в учетной записи 2 и передать имя календаря в качестве параметра, в учетной записи 2 сценарий будет запускаться от имени пользователя, который вызывает сценарий и получает некоторые события.

2 ответа

Вам не нужно использовать кавычки в параметрах, включенных в ваш URL, попробуйте так:

   var response =UrlFetchApp.fetch("https://script.google.com/macros/s/../exec?calendar=CalendarName");//calendar name as parameter

а также:

почему вы пишете e.parameter.string.calendar в последнем зубце вашего примера кода? Что такое string за? Я предполагаю, что цель состоит в том, чтобы вернуть что-то еще, кроме только имени календаря... пожалуйста, объясните.

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

//script calling the published script, this script is in the account 1
function callScript(){
    try{//published url
       var response =UrlFetchApp.fetch("https://script.google.com/macros/s/AKfycbxg-XiPOSIzTATNO520r2DYqLWFjSJXIZ4h-9G_4eV4UZTgxnjo/exec?calendar=test_agenda");//calendar name as parameter

    }catch(e){
  Logger.log(e);
 }
 Logger.log(response.getContentText());
}

//account 2
//the code is published, it will run as the user who call the script(account 1), the   access is for anyone 
function doGet(e){//published script

  var app = UiApp.createApplication();
  var calendar=e.parameter.calendar; //calendar name as parameter
  // Determines how many events are happening now 
  var now = new Date();
  var oneMinuteFromNow = new Date(now.getTime() + (60 * 1000));
  var events = CalendarApp.getCalendarsByName(calendar)  [0].getEvents(now,oneMinuteFromNow);
  var email=Session.getActiveUser().getEmail();
  for(i in events){
     var tituloEvento=events[i].getTitle();
     var descEvento= events[i].getDescription();
  }  
  return ContentService.createTextOutput(e.parameter.calendar);
 }

Допустим, Script1 - это "клиент", или скрипт, называющий "сервер", Script2.

В опубликованном Script2 перейдите к пункту меню "Файл> Свойства проекта" и скопируйте свойство "Ключ проекта" в диалог "Поиск библиотеки" Script1, как описано здесь: https://developers.google.com/apps-script/guide_libraries

Вам также нужно будет предоставить функции Script2, которые вы хотите обработать из Script1, и передать свои аргументы как обычно:

script1Var = Script2.myFunction(script1Param)
Другие вопросы по тегам