단계별 구성을 사용하면 커넥터가 사용자가 제공한 답변을 기반으로 커넥터 구성을 동적으로 채울 수 있습니다. 예를 들어 '주' 드롭다운을 선택한 후에 '도시' 드롭다운을 입력합니다.
요구사항
이 가이드에서는 사용자가 커뮤니티 커넥터 구성에 대해 이미 잘 알고 있다고 가정합니다. 복습을 위해 getConfig를 통해 구성 정의를 참고하세요.
개요
단계별 구성은 getConfig()
를 여러 번 호출하는 Looker Studio와 매번 커넥터가 더 많은 구성 질문을 반환하는 것으로 구성됩니다. 각 getConfig()
호출에는 마지막 getConfig()
응답에 대한 사용자의 답변이 포함됩니다. 이 프로세스는 setIsSteppedConfig(true)
로 응답을 반환하는 한 계속됩니다.
가이드라인
- 구성이 완료될 때까지
setIsSteppedConfig(true)
설정 setIsSteppedConfig(true)
가 설정되어 있으면 Looker Studio는getConfig()
를 반복적으로 호출합니다.구성이 완료되면 최종getConfig()
응답은setIsSteppedConfig(false)
를 설정해야 합니다.- 이후 질문을 결정하는 구성 질문에
isDynamic(true)
을(를) 설정합니다. - 사용자가
isDynamic
로 표시된 필드를 수정하면 UI에서 후속 구성 항목이 지워지고 사용자는 모든 후속 단계를 구성해야 합니다. 이렇게 하면 사용자가 잘못된 구성을 전송하지 않습니다. - 사용자가 제공한 답변은
request.configParams
를 통해 전달됩니다. request.configParams
는 커넥터에 대한 첫 번째getConfig()
요청에 대해undefined
입니다. 후속 요청에는 사용자가 제공한 답변이 구성 ID로 키가 지정된 객체로 포함됩니다. 또는 사용자가 답변을 제공하지 않으면undefined
가 객체에 포함됩니다.예:
{ state: 'CA', city: 'mountain_view' }
- 구성은 추가할 수 있음
기존 질문 다음에 새 구성 질문을 추가해야 합니다.
- 구성은 변경할 수 없습니다.
이전에 구성 질문이 질문이 있는 경우 모든 후속 호출에 표시되어야 합니다. 예를 들어
getConfig()
에 대한 첫 번째 호출에서 구성 질문 A를 묻는 경우 이후의 모든 응답에 A가 포함되어야 합니다.- 구성은 멱등성이 있습니다.
동일한
configParams
로getConfig()
를 호출하면 동일한 구성이 반환되어야 합니다.- 동적 매개변수는 재정의할 수 없습니다.
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();
}