단계별 구성

단계별 구성을 사용하면 커넥터가 사용자가 제공한 답변을 기반으로 커넥터 구성을 동적으로 채울 수 있습니다. 예를 들어 '주' 드롭다운을 선택한 후에 '도시' 드롭다운을 입력합니다.

요구사항

이 가이드에서는 사용자가 커뮤니티 커넥터 구성에 대해 이미 잘 알고 있다고 가정합니다. 복습을 위해 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가 포함되어야 합니다.

구성은 멱등성이 있습니다.

동일한 configParamsgetConfig()를 호출하면 동일한 구성이 반환되어야 합니다.

동적 매개변수는 재정의할 수 없습니다.

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();
}