Google Script: определение переменной из библиотеки - PullRequest
0 голосов
/ 24 августа 2018

У меня есть скрипт Google, настроенный для получения данных из базы данных mySQL. Сценарий настраивается путем первого определения переменных для учетных данных доступа. Пример:

var host = '123.45.67.89';
var user = 'username';
var password = 'password';
var port = '3306';

Моя проблема: эти учетные данные могут измениться. Если они меняются, мне придется менять их в каждом сценарии, в каждой электронной таблице, в которой они используются.

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

function setCredentials() {
    var host = '123.45.67.89';
    var user = 'username';
    var password = 'password';
    var port = '3306';
}

И как только он будет настроен как библиотека, сохраненная как «DBCredentials», я настрою каждый скрипт захвата SQL так, чтобы он просто вызывал эти переменные из этой библиотеки. Но я не могу заставить его работать. Я уверен, что мне просто не хватает правильного способа вызова переменной из библиотеки, но мне не повезло найти ответ с помощью Google.

Я нашел это: Определение глобальных переменных в скрипте Google Apps, которые можно использовать в нескольких проектах

В соответствии с этим я бы назвал переменную с помощью:

var host = SpreadsheetApp.openById( DBCredentials.host );

Но когда я это делаю, я получаю сообщение об ошибке "Bad value". Я также попробовал:

var user = DBCredentials.user;

Но это тоже не работает. Сценарий запустится, но проверка журналов доступа показывает, что пользователь с именем «undefined» пытался получить доступ к базе данных.

Как правильно вызывать переменную из скрипта библиотеки?

1 Ответ

0 голосов
/ 25 августа 2018

Второй комментарий Сэнди привел меня к ответу:

GLOBAL может быть установлен изнутри функции, но вы не можете использовать var внутри функции, или переменная будет ограничена областьювнутри функции.Итак, объявите ваш глобальный вне какой-либо функции, и если вы хотите установить значение глобальных изнутри функции, то не используйте var

Моя ошибка была в настройке моей библиотекифайл скрипта, тот, что с учетными данными.Я поместил переменную с установленными учетными данными (хост, пользователь, пароль, порт) в функцию, например:

function getCredentials() {
var host = '123.45.67.89';
var user = 'username';
var password = 'password';
var port = '3306';
}

Здесь я ошибся .Я довольно новичок в этом, поэтому я предположил, что ВСЕ сценарии должны иметь функцию для работы.Помещение переменных в функцию сделало эти переменные областью видимости только для этой функции, поэтому они не передавали OUT, когда другой скрипт вызывал эти переменные.

Я просто удалил функцию вокруг переменных, изменив сценарий библиотеки только на это и ничего более:

  var host = '123.45.67.89';
  var user = 'user';
  var password = 'password';
  var port = '3306';

Затем я смог вызвать эти переменные из сценария, привязанного к контейнеру (один привязан к электронной таблице) с использованием следующего:

  var host = DBCredentials.host;
  var user = DBCredentials.user;
  var password = DBCredentials.password;
  var port = DBCredentials.port;

(DBCredentials - это идентификатор, выбранный для скрипта библиотеки.) Теперь он работает отлично.Большое спасибо за помощь!

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