الإعداد المرحلي
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يسمح الإعداد المتدرج للموصل بملء الموصِّل ديناميكيًا
استنادًا إلى الإجابات المقدمة من المستخدم. على سبيل المثال، تعبئة "مدينة"
القائمة المنسدلة بعد "الولاية" القائمة المنسدلة.
المتطلبات
يفترض هذا الدليل أنّك على معرفة جيدة بأداة "موصِّل المنتديات".
الإعدادات. راجِع تحديد الإعداد من خلال getConfig لتنشيط ذاكرتك.
نظرة عامة
تتألف الإعدادات المفصَّلة من Looker Studio الذي يطلب رقم getConfig()
عدة مرات، وسيعرض الموصل المزيد من أسئلة التهيئة في كل مرة. على كل
ستشمل المكالمة إلى getConfig()
إجابات المستخدم على آخر getConfig()
الاستجابة. تستمر هذه العملية طالما أنك ترسل ردًا يتضمّن
setIsSteppedConfig(true)
الإرشادات
- اضبط السمة
setIsSteppedConfig(true)
إلى أن تكتمل عملية الضبط.
- ستتصل Looker Studio بـ
getConfig()
بشكل متكرّر ما دامت
يتم ضبط setIsSteppedConfig(true)
.بعد اكتمال عملية الضبط، تأتي الخطوة الأخيرة
يجب ضبط استجابة getConfig()
على setIsSteppedConfig(false)
.
- ضبط
isDynamic(true)
لأسئلة الضبط التي تحدِّد الأسئلة اللاحقة
- إذا عدَّل المستخدم حقلاً تم وضع علامة
isDynamic
عليه، سيتم
سيتم محو إدخالات التهيئة في واجهة المستخدم، وسيحتاج المستخدم إلى
تهيئة جميع الخطوات اللاحقة. ويساعد ذلك على ضمان عدم إرسال المستخدمين إليك
إعدادات غير صالحة.
- سيتم تمرير الإجابات المقدَّمة من المستخدم عبر
request.configParams
.
سيكون "request.configParams
" undefined
في أوّل getConfig()
.
إلى الموصل. ستشمل الطلبات اللاحقة
الإجابات المقدّمة من المستخدم ككائن يعتمد على معرّفات الضبط أو
undefined
إذا لم يقدّم المستخدم أي إجابات.
مثال:
{
state: 'CA',
city: 'mountain_view'
}
- الإعدادات قابلة للإضافة
يجب إضافة أسئلة الضبط الجديدة بعد الأسئلة الحالية.
- لا يمكن تغيير الإعدادات
إذا تم طرح سؤال حول الضبط في وقت سابق، يجب أن يكون متاحًا لـ
جميع الاتصالات اللاحقة. على سبيل المثال، إذا تم طرح سؤال الإعداد A
في المكالمة الأولى إلى getConfig()
، يجب تضمين A في جميع عناوين URL القادمة
الردود.
- الإعدادات غير ثابتة
يجب أن تكون المكالمات الواردة إلى 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();
}
مسارات التشعّب
سيؤدي هذا إلى طرح سؤال إضافي إذا تم تحديد "البلد" هي "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();
}
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2025-07-25 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-25 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\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 }"]]