การกําหนดค่าแบบเป็นขั้น

การกำหนดค่าแบบขั้นบันไดช่วยให้เครื่องมือเชื่อมต่อสร้างการกำหนดค่าเครื่องมือเชื่อมต่อแบบไดนามิกตามคำตอบที่ผู้ใช้ให้ไว้ เช่น การใส่เมนูแบบเลื่อนลง "เมือง" หลังจากเลือกเมนู "รัฐ" แบบเลื่อนลง

ข้อกำหนด

คู่มือนี้จะถือว่าคุณคุ้นเคยกับการกำหนดค่า ปลั๊กอินจากชุมชนสำหรับใช้ลิงก์ข้อมูลอยู่แล้ว โปรดดูกำหนดการกำหนดค่าผ่าน getConfig สำหรับการทบทวน

ภาพรวม

การกำหนดค่าแบบขั้นบันไดประกอบด้วย Looker Studio ที่เรียกใช้ getConfig() หลายครั้ง และเครื่องมือเชื่อมต่อของคุณส่งกลับคำถามในการกำหนดค่าเพิ่มเติมในแต่ละครั้ง การโทรมาที่ getConfig() แต่ละครั้งจะรวมคำตอบของผู้ใช้สำหรับคำตอบ getConfig() ล่าสุด กระบวนการนี้จะดำเนินต่อไปหากคุณตอบกลับด้วย setIsSteppedConfig(true)

หลักเกณฑ์

ตั้งค่า setIsSteppedConfig(true) จนกว่าการกำหนดค่าจะเสร็จสมบูรณ์
Looker Studio จะเรียกใช้ getConfig() ซ้ำๆ ตราบใดที่มีการตั้งค่า setIsSteppedConfig(true) เมื่อกำหนดค่าเสร็จสมบูรณ์แล้ว การตอบกลับ getConfig() สุดท้ายควรตั้งค่า setIsSteppedConfig(false)
ตั้งค่า isDynamic(true) สำหรับคำถามการกำหนดค่าที่กำหนดคำถามต่อไปนี้
หากผู้ใช้แก้ไขช่องที่มีเครื่องหมาย isDynamic ระบบจะล้างรายการการกำหนดค่าที่ตามมาใน UI และผู้ใช้จะต้องกำหนดค่าขั้นตอนที่ตามมาทั้งหมด ซึ่งจะช่วยป้องกันไม่ให้ผู้ใช้ส่งการกำหนดค่าที่ไม่ถูกต้องให้คุณ
ระบบจะส่งคำตอบที่ผู้ใช้ให้ไว้ผ่านทาง request.configParams

request.configParams จะเป็น undefined สำหรับคำขอ getConfig() แรกที่ส่งไปยังเครื่องมือเชื่อมต่อของคุณ คำขอที่ตามมาจะรวมคำตอบที่ผู้ใช้ให้ไว้เป็นออบเจ็กต์ที่คีย์ตามรหัสการกำหนดค่า หรือ undefined หากผู้ใช้ไม่ได้ให้คำตอบใดๆ

ตัวอย่าง

{
  state: 'CA',
  city: 'mountain_view'
}
การกำหนดค่าเป็นแบบบวกเพิ่ม

ควรเพิ่มคำถามการกำหนดค่าใหม่หลังจากคำถามที่มีอยู่

เปลี่ยนแปลงการกำหนดค่าไม่ได้

หากมีการถามคำถามการกำหนดค่าก่อนหน้านี้ คำถามดังกล่าวควรจะปรากฏสำหรับการโทรครั้งต่อๆ ไปทั้งหมด ตัวอย่างเช่น หากมีถามคำถามการกำหนดค่า A ในการเรียก getConfig() ครั้งแรก ควรใส่ A ในคำตอบในอนาคตทั้งหมด

การกำหนดค่าจะอยู่ในรูปแบบเดิมเสมอ

การเรียกใช้ 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();
}

เส้นทางการขยายสาขา

การดำเนินการนี้จะถามคำถามเพิ่มเติมหาก "ประเทศ" ที่เลือกเป็น "สหรัฐอเมริกา"

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