Configuración escalonada

La configuración escalonada permite que un conector propague de forma dinámica su configuración en función de las respuestas proporcionadas por el usuario. Por ejemplo, para propagar un menú desplegable "Ciudad" después de seleccionar un menú desplegable "Estado".

Requisitos

En esta guía, se supone que ya conoces la configuración del conector de comunidad. Consulta Cómo definir la configuración mediante getConfig para hacer un repaso.

Descripción general

La configuración escalonada consiste en que Looker Studio llame a getConfig() varias veces y que el conector muestre más preguntas de configuración cada vez. Cada llamada a getConfig() incluirá las respuestas del usuario a la última respuesta de getConfig(). Este proceso continúa siempre que muestres una respuesta con setIsSteppedConfig(true).

Lineamientos

Establece setIsSteppedConfig(true) hasta que se complete la configuración.
Looker Studio llamará reiteradamente a getConfig() siempre que se configure setIsSteppedConfig(true).Una vez que se complete la configuración, la respuesta final de getConfig() debe establecerse en setIsSteppedConfig(false).
Configura isDynamic(true) para las preguntas de configuración que determinan las preguntas posteriores.
Si el usuario modifica un campo marcado como isDynamic, las entradas de configuración posteriores se borrarán en la IU, y el usuario deberá configurar todos los pasos posteriores. Esto ayuda a garantizar que los usuarios no te envíen una configuración no válida.
Las respuestas proporcionadas por el usuario se aprobarán mediante request.configParams.

request.configParams será undefined para la primera solicitud getConfig() al conector. Las solicitudes posteriores incluirán las respuestas proporcionadas por el usuario como un objeto con clave por los IDs de configuración o undefined si el usuario no proporciona ninguna respuesta.

Ejemplo:

{
  state: 'CA',
  city: 'mountain_view'
}
Las configuraciones son acumulativas

Se deben agregar las preguntas de configuración nuevas después de las existentes.

Los parámetros de configuración no se pueden mutar

Si se hizo una pregunta de configuración anteriormente, debería estar presente en todas las llamadas posteriores. Por ejemplo, si la pregunta de configuración A se hizo en la primera llamada a getConfig(), se debe incluir A en todas las respuestas futuras.

Las configuraciones son idempotentes

Las llamadas a getConfig() con el mismo configParams deben mostrar la misma configuración.

Los parámetros dinámicos no se pueden anular.

Looker Studio no permitirá que se anulen los parámetros de configuración dinámica.

Configuración de ejemplo

Menús desplegables dinámicos

La primera pregunta le pide al usuario que seleccione un estado y, luego, muestra dinámicamente un menú desplegable de la ciudad según el estado seleccionado.

var cc = DataStudioApp.createCommunityConnector();

function optionsForState(state) {
  switch (state) {
    case "IL": {
      return [["Chicago", "chicago"], ["Springfield", "springfield"]];
    }
    case "CA": {
      return [["Mountain View", "mountain_view"], ["Los Angeles", "los_angeles"]];
    }
    default: {
      cc.newUserError()
          .setText('You must either select "IL" or "CA"')
          .throwException();
    }
  }
}

function getConfig(request) {
  var configParams = request.configParams;
  var isFirstRequest = configParams === undefined;
  var config = cc.getConfig();
  if (isFirstRequest) {
    config.setIsSteppedConfig(true);
  }

  config.newSelectSingle()
      .setId("state")
      .setName("State")
  // Set isDynamic to true so any changes to State will clear the city
  // selections.
      .setIsDynamic(true)
      .addOption(config.newOptionBuilder().setLabel("Illinois").setValue("IL"))
      .addOption(config.newOptionBuilder().setLabel("California").setValue("CA"));

  if (!isFirstRequest) {
    var city = config.newSelectSingle()
        .setId("city")
        .setName("City");
    var cityOptions = optionsForState(configParams.state);
    cityOptions.forEach(function(labelAndValue) {
      var cityLabel = labelAndValue[0];
      var cityValue = labelAndValue[1];
      city.addOption(config.newOptionBuilder().setLabel(cityLabel).setValue(cityValue));
    });
  }
  return config.build();
}

Ramificación de rutas

Esta acción hará una pregunta adicional si el “País” seleccionado es “EE.UU.”.

var cc = DataStudioApp.createCommunityConnector();

function getConfig(request) {
  var configParams = request.configParams;
  var isFirstRequest = configParams === undefined;
  var config = cc.getConfig();
  if (isFirstRequest) {
    config.setIsSteppedConfig(true);
  }

  config
      .newSelectSingle()
      .setId('country')
      .setName('Country')
  // Set isDynamic to true so any changes to Country will clear the state
  // selections.
      .setIsDynamic(true)
      .addOption(config.newOptionBuilder().setLabel('United States').setValue('USA'))
      .addOption(config.newOptionBuilder().setLabel('Canada').setValue('CA'));

  if (!isFirstRequest) {
    // validate a valid value was selected for configParams.country
    if (configParams.country === undefined) {
      cc.newUserError().setText('You must choose a country.').throwException();
    }
    switch (configParams.country) {
      case 'USA': {
        config
            .newSelectSingle()
            .setId('state')
            .setName('State')
            .addOption(config.newOptionBuilder().setLabel('New York').setValue('NY'))
            .addOption(config.newOptionBuilder().setLabel('Calfornia').setValue('CA'));
        break;
      }
      case 'CA': {
        // No additional configuration is needed for Canada.
        break;
      }
      default: {
        cc.newUserError()
            .setText('You must either select "CA" or "USA"')
            .throwException();
      }
    }
  }
  return config.build();
}