پیکربندی پلکانی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
پیکربندی مرحلهای به یک رابط اجازه میدهد تا به صورت پویا پیکربندی کانکتور را بر اساس پاسخهای ارائهشده توسط کاربر پر کند. به عنوان مثال، پر کردن یک منوی کرکرهای «شهر» پس از انتخاب فهرست کشویی «ایالت».
الزامات
این راهنما فرض می کند که شما قبلاً با پیکربندی های Connector Community آشنا هستید. برای بازنگری به تعریف پیکربندی از طریق getConfig مراجعه کنید.
نمای کلی
پیکربندی مرحلهای شامل استودیو Looker است که چندین بار getConfig()
را فراخوانی میکند و رابط شما هر بار سؤالات پیکربندی بیشتری را برمیگرداند. هر تماس با getConfig()
شامل پاسخ های کاربر به آخرین پاسخ getConfig()
می شود. این فرآیند تا زمانی ادامه می یابد که شما یک پاسخ را با setIsSteppedConfig(true)
برگردانید.
رهنمودها
-
setIsSteppedConfig(true)
را تنظیم کنید تا پیکربندی کامل شود - تا زمانی که
setIsSteppedConfig(true)
تنظیم شده باشد، Looker Studio مکرراً getConfig()
فراخوانی می کند. پس از تکمیل پیکربندی، پاسخ getConfig()
نهایی باید setIsSteppedConfig(false)
را تنظیم کند. - برای سؤالات پیکربندی که سؤالات بعدی را تعیین می کنند،
isDynamic(true)
را تنظیم کنید - اگر فیلدی با علامت
isDynamic
توسط کاربر اصلاح شود، ورودیهای پیکربندی بعدی در UI پاک میشوند و کاربر باید تمام مراحل بعدی را پیکربندی کند. این کمک می کند مطمئن شوید که کاربران پیکربندی نامعتبر را برای شما ارسال نمی کنند. - پاسخ های ارائه شده توسط کاربر از طریق
request.configParams
ارسال می شود. request.configParams
برای اولین درخواست getConfig()
به کانکتور شما undefined
است. درخواستهای بعدی شامل پاسخهای ارائهشده توسط کاربر بهعنوان یک شی کلیددار شده توسط شناسههای پیکربندی یا undefined
در صورتی که کاربر هیچ پاسخی ارائه نکرد، خواهد بود.
مثال:
{
state: 'CA',
city: 'mountain_view'
}
- پیکربندی ها افزودنی هستند
سؤالات پیکربندی جدید باید بعد از سؤالات موجود اضافه شوند.
- تنظیمات را نمی توان تغییر داد
اگر قبلاً سؤال پیکربندی پرسیده شده است، باید برای همه تماسهای بعدی وجود داشته باشد. برای مثال، اگر سوال پیکربندی A در اولین فراخوانی getConfig()
پرسیده شد، A باید در تمام پاسخهای آینده گنجانده شود.
- پیکربندی ها بی قدرت هستند
فراخوانی های getConfig()
با همان configParams
باید همان پیکربندی را برگردانند.
- پارامترهای پویا را نمی توان نادیده گرفت
Looker Studio اجازه نمی دهد که پارامترهای پیکربندی پویا لغو شوند.
تنظیمات نمونه
کشویی پویا
این سوال اول کاربر را وادار می کند تا یک ایالت را انتخاب کند، سپس به صورت پویا یک فهرست کشویی شهر را بر اساس ایالت انتخاب شده ارائه می دهد.
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();
}
مسیرهای انشعاب
اگر "کشور" انتخاب شده "ایالات متحده آمریکا" باشد، این یک سوال اضافی خواهد پرسید.
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();
}
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-07-24 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-24 بهوقت ساعت هماهنگ جهانی."],[[["\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 }"]]