Cấu hình dạng bậc cho phép trình kết nối tự động điền cấu hình trình kết nối dựa trên câu trả lời do người dùng cung cấp. Ví dụ: điền sẵn trình đơn thả xuống "Thành phố" sau khi chọn trình đơn thả xuống "Trạng thái".
Yêu cầu
Hướng dẫn này giả định rằng bạn đã quen thuộc với các cấu hình Trình kết nối cộng đồng. Hãy xem phần xác định cấu hình qua getConfig để ôn lại kiến thức.
Tổng quan
Cấu hình theo bậc bao gồm Looker Studio gọi getConfig()
nhiều lần và trình kết nối của bạn trả về nhiều câu hỏi về cấu hình hơn mỗi lần. Mỗi lệnh gọi đến getConfig()
sẽ bao gồm câu trả lời của người dùng cho phản hồi getConfig()
gần đây nhất. Quá trình này sẽ tiếp tục miễn là bạn trả về phản hồi bằng setIsSteppedConfig(true)
.
Nguyên tắc
- Đặt
setIsSteppedConfig(true)
cho đến khi cấu hình hoàn tất - Looker Studio sẽ liên tục gọi
getConfig()
miễn là bạn đã đặtsetIsSteppedConfig(true)
.Sau khi quá trình định cấu hình hoàn tất, phản hồi cuối cùng củagetConfig()
sẽ có giá trị làsetIsSteppedConfig(false)
. - Đặt
isDynamic(true)
cho các câu hỏi về cấu hình xác định các câu hỏi sau này - Nếu người dùng sửa đổi một trường được đánh dấu là
isDynamic
, thì các mục nhập cấu hình tiếp theo sẽ bị xoá trong giao diện người dùng và người dùng sẽ phải định cấu hình tất cả các bước tiếp theo. Việc này giúp đảm bảo người dùng không gửi cho bạn cấu hình không hợp lệ. - Câu trả lời do người dùng cung cấp sẽ được chuyển qua
request.configParams
. request.configParams
sẽ làundefined
đối với yêu cầugetConfig()
đầu tiên gửi đến trình kết nối. Các yêu cầu tiếp theo sẽ bao gồm câu trả lời do người dùng cung cấp dưới dạng một đối tượng được khoá bằng mã cấu hình hoặcundefined
nếu người dùng không cung cấp bất kỳ câu trả lời nào.Ví dụ:
{ state: 'CA', city: 'mountain_view' }
- Cấu hình có tính bổ sung
Bạn sẽ thêm các câu hỏi mới về cấu hình sau những câu hỏi hiện có.
- Không thể thay đổi cấu hình
Nếu một câu hỏi về cấu hình đã được đặt ra trước đó, câu hỏi đó sẽ xuất hiện trong tất cả các lệnh gọi tiếp theo. Ví dụ: nếu câu hỏi cấu hình A được đặt ra trong lệnh gọi đầu tiên đến
getConfig()
, thì A sẽ được đưa vào tất cả các phản hồi sau này.- Cấu hình không thay đổi
Các lệnh gọi đến
getConfig()
có cùngconfigParams
sẽ trả về cùng một cấu hình.- Không thể ghi đè thông số động
Looker Studio sẽ không cho phép ghi đè các thông số cấu hình động.
Cấu hình mẫu
Trình đơn thả xuống linh động
Câu hỏi đầu tiên này nhắc người dùng chọn một tiểu bang, sau đó tự động cung cấp một trình đơn thả xuống về thành phố dựa trên tiểu bang đã chọn.
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();
}
Đường dẫn phân nhánh
Thao tác này sẽ đặt ra một câu hỏi bổ sung nếu "Quốc gia" được chọn là "Hoa Kỳ".
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();
}