Скрипт Google Apps: неопределенная переменная или функция при использовании различных скриптов (зависимостей) - PullRequest
1 голос
/ 01 мая 2020

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

Publi c ссылка, чтобы увидеть мой код, если вам нужно: Папка с кодом и листами

  1. Существует 1 функция (updateInvoice()), которую я звоню с Code.gs
  2. Это Функция в другом скрипте: factory / invoice.gs
  3. Эта функция также использует данные, сгенерированные из другого скрипта: factory / keys.gs

Что действительно странно, так это то, что я получаю "неопределенность" при вызове этой функции.

Если я добавлю весь код из всех моих скриптов в том же сценарии Code.gs это работает как шарм. Поэтому я удивляюсь: как сценарии связаны с остальными? Я думал, что это автомат c?

Я сделал очень интересный опыт:

  1. Я создал новый проект и добавил код в Code.gs , затем добавляем factory / keys.gs и, наконец, добавляем factory / invoice.gs : и это работает!
  2. Я удалил Code.gs
  3. Я создал новый Code.gs Сценарий и вставьте предыдущий удаленный код: и он не работает!

Вывод: есть что-то относительно «порядки создания» сценариев, которые я не могу объяснить ...

Вот фотоколлаж, чтобы показать вам, что у меня есть:

Коллаж изображений

  1. ошибка в тестовом проекте связана с ss var
  2. ошибка в реальном проекте (у вас есть доступ) связана с keyVal() функцией
  3. оба связаны с тем же вопросом зависимости между СБ ripts

Заранее спасибо за помощь,

Томас

1 Ответ

1 голос
/ 02 мая 2020

есть что-то относительно "порядка создания" сценариев, которое я не могу объяснить ...

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

Файлы анализируются в том же порядке, в котором они отображаются в редакторе скриптов приложений (т. Е. Когда «Просмотр»> «Сортировка файлов по алфавиту» отключена) , Функции файла могут быть недоступны, когда глобальные переменные создаются в другом файле. Это расположение идентично тому, как браузеры обрабатывают несколько тегов в одном файле HTML.

Также, как указано в документации,

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

В этом случае вы можете изменить код как

Файл # 1:

var ss;

function getss(){
  if (ss == undefined){
    ss = SpreadsheetApp.openById(/*ID HERE*/);
  }
  return ss;
}

Файл № 2

function updateInvoice(){
  getss();
  updateInvoiceData();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...