Пошаговая настройка позволяет коннектору динамически заполнять конфигурацию на основе ответов пользователя. Например, заполнение выпадающего списка «Город» после выбора пункта в выпадающем списке «Штат».
Требования
В этом руководстве предполагается, что вы уже знакомы с настройками Community Connector. Для повторного ознакомления см. раздел «Определение конфигурации через getConfig» .
Обзор
Пошаговая настройка состоит в том, что Data Studio вызывает getConfig() несколько раз, и ваш коннектор каждый раз возвращает новые вопросы конфигурации. Каждый вызов getConfig() будет включать ответы пользователя на последний запрос getConfig() . Этот процесс продолжается до тех пор, пока вы возвращаете ответ с setIsSteppedConfig(true) .
Руководящие принципы
- Установите значение
setIsSteppedConfig(true)до завершения настройки. - Data Studio будет многократно вызывать
getConfig()до тех пор, пока установлено значениеsetIsSteppedConfig(true)После завершения настройки окончательный ответgetConfig()должен установить значениеsetIsSteppedConfig(false). - Установите
isDynamic(true)для вопросов конфигурации, которые определяют последующие вопросы. - Если пользователь изменяет поле с пометкой
isDynamic, последующие записи конфигурации в пользовательском интерфейсе будут очищены, и пользователю потребуется выполнить все последующие шаги заново. Это помогает гарантировать, что пользователи не отправят вам некорректную конфигурацию. - Ответы, предоставленные пользователем, будут передаваться через
request.configParams. В первом запросе
getConfig()к вашему коннектору значениеrequest.configParamsбудетundefined. Последующие запросы будут включать предоставленные пользователем ответы в виде объекта, ключами которого являются идентификаторы конфигурации, илиundefinedесли пользователь не предоставит никаких ответов.Пример:
{ state: 'CA', city: 'mountain_view' }- Конфигурации являются аддитивными.
Новые вопросы по настройке следует добавлять после существующих.
- Конфигурации нельзя изменять.
Если ранее был задан вопрос о конфигурации, он должен присутствовать во всех последующих вызовах. Например, если вопрос о конфигурации A был задан при первом вызове функции
getConfig(), то A должен быть включен во все последующие ответы.- Конфигурации идемпотентны.
Вызовы метода
getConfig()с одинаковымиconfigParamsдолжны возвращать одну и ту же конфигурацию.- Динамические параметры нельзя переопределить.
Data 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();
}