Configuration par étapes
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
La configuration par étapes permet à un connecteur d'y insérer de manière dynamique
en fonction des réponses fournies par l'utilisateur. Par exemple, si vous indiquez une "Ville",
menu déroulant après
un « État » est sélectionné.
Conditions requises
Dans ce guide, nous partons du principe que vous connaissez déjà le connecteur de communauté.
de configuration. Pour rappel, consultez la section Définir la configuration via getConfig.
Présentation
La configuration par étapes consiste à ce que Looker Studio appelle getConfig()
plusieurs
et votre connecteur renvoie à chaque fois
plus de questions de configuration. Chaque
l'appel à getConfig()
inclut les réponses de l'utilisateur à la dernière getConfig()
de réponse. Ce processus se poursuit tant que vous renvoyez une réponse avec
setIsSteppedConfig(true)
Consignes
- Définissez
setIsSteppedConfig(true)
jusqu'à ce que la configuration soit terminée
- Looker Studio appellera
getConfig()
à plusieurs reprises tant que
setIsSteppedConfig(true)
est défini.Une fois la configuration terminée, l'état final
La réponse getConfig()
doit définir setIsSteppedConfig(false)
.
- Définissez
isDynamic(true)
pour les questions de configuration qui détermineront les questions ultérieures.
- Si un champ marqué
isDynamic
est modifié par l'utilisateur, les modifications suivantes
entrées de configuration seront effacées dans l'interface utilisateur et l'utilisateur devra
configurer toutes les étapes suivantes. Cela permet de s'assurer que les utilisateurs ne vous envoient pas
configuration non valide.
- Les réponses fournies par l'utilisateur seront transmises via
request.configParams
.
request.configParams
sera undefined
pendant getConfig()
à votre connecteur. Les requêtes suivantes incluront les
les réponses fournies par l'utilisateur sous la forme d'un objet associé aux ID de configuration ou
undefined
si l'utilisateur ne fournit aucune réponse.
Exemple :
{
state: 'CA',
city: 'mountain_view'
}
- Les configurations se cumulent
Les nouvelles questions de configuration doivent être ajoutées après les questions existantes.
- Impossible de modifier les configurations
Si une question de configuration a été posée précédemment, elle doit être présente pour
tous les appels suivants. Par exemple, si la question de configuration A est posée,
lors du premier appel à getConfig()
, A doit être inclus dans tous les futurs appels
des réponses.
- Les configurations sont idempotentes
Les appels à getConfig()
avec le même configParams
doivent renvoyer le même résultat
configuration.
- Impossible de remplacer les paramètres dynamiques
Looker Studio n'autorise pas les paramètres de configuration dynamique
remplacée.
Exemples de configurations
Menus déroulants dynamiques
Cette première question invite l'utilisateur à sélectionner un état, puis fournit dynamiquement
dans un menu déroulant de ville en fonction de l'État sélectionné.
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();
}
Chemins d'embranchement
Une question supplémentaire s'affichera si le "pays" sélectionné est "USA".
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();
}
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[null,null,["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eStepped configuration in Looker Studio connectors allows dynamic population of configuration fields based on user input, such as showing city options after a state is selected.\u003c/p\u003e\n"],["\u003cp\u003eThe process involves Looker Studio repeatedly calling the \u003ccode\u003egetConfig()\u003c/code\u003e function, with the connector providing new configuration questions based on previous answers until the configuration is complete.\u003c/p\u003e\n"],["\u003cp\u003eConfiguration questions influencing later steps should be marked as dynamic using \u003ccode\u003eisDynamic(true)\u003c/code\u003e, ensuring the user reconfigures subsequent steps upon modification.\u003c/p\u003e\n"],["\u003cp\u003eConnectors receive user-provided answers through \u003ccode\u003erequest.configParams\u003c/code\u003e, allowing for conditional logic and tailoring of configuration options.\u003c/p\u003e\n"],["\u003cp\u003eConfigurations should be additive, idempotent (returning the same configuration for identical inputs), and immutable once introduced, with dynamic parameters being non-overridable.\u003c/p\u003e\n"]]],[],null,["# Stepped Configuration\n\nStepped configuration allows a connector to dynamically populate the connector\nconfiguration based on user-provided answers. For example, populating a \"City\"\ndropdown after a \"State\" dropdown is selected.\n\nRequirements\n------------\n\nThis guide assumes you are already familiar with Community Connector\nconfigurations. See [define configuration via getConfig](/looker-studio/connector/build#define_configuration_via_getconfig) for a refresher.\n\nOverview\n--------\n\nStepped configuration consists of Looker Studio calling `getConfig()` multiple\ntimes, and your connector returning more configuration questions each time. Each\ncall to `getConfig()` will include the user's answers to the last `getConfig()`\nresponse. This process is continued as long as you return a response with\n`setIsSteppedConfig(true)`.\n\nGuidelines\n----------\n\nSet `setIsSteppedConfig(true)` until the configuration is complete\n: Looker Studio will repeatedly call `getConfig()` as long as\n `setIsSteppedConfig(true)` is set.Once configuration is complete, the final\n `getConfig()` response should set `setIsSteppedConfig(false)`.\n\nSet `isDynamic(true)` for configuration questions that determine later questions\n: If a field marked `isDynamic` is modified by the user, subsequent\n configuration entries will be cleared in the UI, and the user will need to\n configure all subsequent steps. This helps ensure users don't send you an\n invalid configuration.\n\nUser-provided answers will be passed via `request.configParams`.\n\n: `request.configParams` will be `undefined` for the first `getConfig()`\n request to your connector. Subsequent requests will include the\n user-provided answers as an object keyed by the configuration ids or\n `undefined` if the user doesn't provide any answers.\n\n Example: \n\n {\n state: 'CA',\n city: 'mountain_view'\n }\n\nConfigurations are additive\n\n: New configuration questions should be added after existing ones.\n\nConfigurations cannot be mutated\n\n: If a configuration question was asked previously, it should be present for\n all subsequent calls. For example, if configuration question **A** was asked\n in the first call to `getConfig()`, **A** should be included in all future\n responses.\n\nConfigurations are idempotent\n\n: Calls to `getConfig()` with the same `configParams` should return the same\n configuration.\n\nDynamic parameters cannot be overridable\n\n: Looker Studio will not allow dynamic configuration parameters to be\n [overridden](/looker-studio/connector/data-source-parameters).\n\nExample configurations\n----------------------\n\n### Dynamic dropdowns\n\nThis first question prompts a user to select a state, then dynamically provides\na city dropdown based on the selected state. \n\n var cc = DataStudioApp.createCommunityConnector();\n\n function optionsForState(state) {\n switch (state) {\n case \"IL\": {\n return [[\"Chicago\", \"chicago\"], [\"Springfield\", \"springfield\"]];\n }\n case \"CA\": {\n return [[\"Mountain View\", \"mountain_view\"], [\"Los Angeles\", \"los_angeles\"]];\n }\n default: {\n cc.newUserError()\n .setText('You must either select \"IL\" or \"CA\"')\n .throwException();\n }\n }\n }\n\n function getConfig(request) {\n var configParams = request.configParams;\n var isFirstRequest = configParams === undefined;\n var config = cc.getConfig();\n if (isFirstRequest) {\n config.setIsSteppedConfig(true);\n }\n\n config.newSelectSingle()\n .setId(\"state\")\n .setName(\"State\")\n // Set isDynamic to true so any changes to State will clear the city\n // selections.\n .setIsDynamic(true)\n .addOption(config.newOptionBuilder().setLabel(\"Illinois\").setValue(\"IL\"))\n .addOption(config.newOptionBuilder().setLabel(\"California\").setValue(\"CA\"));\n\n if (!isFirstRequest) {\n var city = config.newSelectSingle()\n .setId(\"city\")\n .setName(\"City\");\n var cityOptions = optionsForState(configParams.state);\n cityOptions.forEach(function(labelAndValue) {\n var cityLabel = labelAndValue[0];\n var cityValue = labelAndValue[1];\n city.addOption(config.newOptionBuilder().setLabel(cityLabel).setValue(cityValue));\n });\n }\n return config.build();\n }\n\n### Branching Paths\n\nThis will ask an additional question if the selected \"Country\" is \"USA\". \n\n var cc = DataStudioApp.createCommunityConnector();\n\n function getConfig(request) {\n var configParams = request.configParams;\n var isFirstRequest = configParams === undefined;\n var config = cc.getConfig();\n if (isFirstRequest) {\n config.setIsSteppedConfig(true);\n }\n\n config\n .newSelectSingle()\n .setId('country')\n .setName('Country')\n // Set isDynamic to true so any changes to Country will clear the state\n // selections.\n .setIsDynamic(true)\n .addOption(config.newOptionBuilder().setLabel('United States').setValue('USA'))\n .addOption(config.newOptionBuilder().setLabel('Canada').setValue('CA'));\n\n if (!isFirstRequest) {\n // validate a valid value was selected for configParams.country\n if (configParams.country === undefined) {\n cc.newUserError().setText('You must choose a country.').throwException();\n }\n switch (configParams.country) {\n case 'USA': {\n config\n .newSelectSingle()\n .setId('state')\n .setName('State')\n .addOption(config.newOptionBuilder().setLabel('New York').setValue('NY'))\n .addOption(config.newOptionBuilder().setLabel('Calfornia').setValue('CA'));\n break;\n }\n case 'CA': {\n // No additional configuration is needed for Canada.\n break;\n }\n default: {\n cc.newUserError()\n .setText('You must either select \"CA\" or \"USA\"')\n .throwException();\n }\n }\n }\n return config.build();\n }"]]