Является ли PropertiesService.getUserProperties () скрипта Google Apps устаревшим? - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь использовать эту библиотеку S3 для скрипта Google Apps. Когда я go на testSupport.gs и пытаюсь запустить setTestEnv, происходит сбой при SyntaxError: Unexpected token: u (line 28, file "testSupport").

Это имеет смысл, так как я еще не установил никаких свойств пользователя, позвольте мне - о подождите, это не правильно ...

No User properties tab

Даже если я клонирую этот скрипт, у меня все равно нет вкладки «Свойства пользователя». Я что-то упускаю здесь?

1 Ответ

1 голос
/ 29 января 2020

Метод PropertiesService.getUserProperties() не считается устаревшим.

На самом деле сообщение об ошибке является правильным. Существует существенное различие между JavaScript и JSON.

В JSON имена свойств объекта ДОЛЖНЫ быть двойными кавычки.

Посмотрите на следующий код для testSupport.gs:

/** @define {string} */
var TEST_ENV_NAME_ = "S3LibraryTestEnv";
// todo: consider splitting into a generic testing lib?

// Format the TestEnv Object with property names in double quotes.
var S3LibraryTestEnv = '{"awsAccessKeyId":"theId","awsSecretKey":"theKey"}';

// Run test() to check it out
function test(){
  setTestEnv(S3LibraryTestEnv);
}

/**
* sets a testing Env, that's accessible from test and demo functios; and persistent for user
* 
* @param {Object} env the environment object to set for testing (should have awsAccessKeyId, awsSecretKey as properties)
* @return {void}
*/
function setTestEnv(env) {
  var userProperties = PropertiesService.getUserProperties();

  // env is a JSON format string eg. ("Property names must be double-quoted strings")
  // No need to use JSON.stringify()
  userProperties.setProperty(TEST_ENV_NAME_, env);  
}

/**
* gets Test Env for the library, optionally skipping validing that all req constants are defined in that env
*
* @param {boolean}  
* @return {Object} key-value for the environment
*/
function getTestEnv(skipEnvValidation) {
  userProperties = PropertiesService.getUserProperties();
  var env = JSON.parse(userProperties.getProperty(TEST_ENV_NAME_));
  // Logger.log(env);
  if (!skipEnvValidation) {
    var requiredKeys = ["awsAccessKeyId", "awsSecretKey"];

    if (env == null) {
      throw "Must set environment in UserProperties (see setTestEnvFromUI)"; 
    }
    for (var i=0; i < requiredKeys.length; i++) {
      if (typeof env[requiredKeys[i]] == 'undefined') {
        throw "Test Environment is missing required property '" + requiredKeys[i] + "'.  Define it object passed to setTestEnv().";
      }
    }
  }
  return env;
}

Также исправлены некоторые опечатки здесь и там.

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