แสดงข้อมูลที่ซับซ้อนด้วยทรัพยากรที่กำหนดเอง

คู่มือนี้อธิบายวิธีกำหนดทรัพยากรที่กำหนดเองสำหรับ Google Workspace Studio

ทรัพยากรที่กำหนดเองคือโครงสร้างข้อมูลที่กำหนดเองซึ่งคุณกำหนดเพื่อจัดกลุ่มตัวแปรหลายรายการเข้าด้วยกันได้ เมื่อเอาต์พุตของขั้นตอนมีโครงสร้างแบบคงที่ ให้แสดงด้วยทรัพยากรที่กำหนดเอง เช่น หากต้องการสร้างโอกาสในการขายของ CRM เอาต์พุตของคุณจะต้องมีตัวแปรหลายรายการ ดังนี้

  • อีเมล
  • ที่อยู่
  • ชื่อ

หากต้องการให้มีข้อมูลทั้งหมดที่จำเป็นในการสร้างโอกาสในการขาย CRM ให้ออกทรัพยากรที่กำหนดเองซึ่งมีอีเมล ที่อยู่ และชื่อ

แสดงผลทรัพยากรที่กำหนดเองเป็นการอ้างอิง

การแสดงผลทรัพยากรที่กำหนดเองเป็นข้อมูลอ้างอิงจะช่วยให้คุณแสดงผลทรัพยากรที่กำหนดเองตามรหัสแทนที่จะเป็นออบเจ็กต์ทรัพยากรที่กำหนดเองแบบเต็มได้ หากทรัพยากรที่กำหนดเองมีขนาดใหญ่หรือซับซ้อน การส่งเฉพาะรหัสจะช่วยปรับปรุงประสิทธิภาพโดยการลดข้อมูลที่โอนระหว่างขั้นตอน

หากต้องการแสดงทรัพยากรที่กำหนดเองเป็นข้อมูลอ้างอิง ให้แก้ไขไฟล์ Manifest และโค้ดของขั้นตอน

แก้ไขไฟล์ Manifest

ในไฟล์ Manifest ให้ทำดังนี้

  1. ระบุ workflowResourceDefinitions และกำหนด id, อาร์เรย์ fields[] และ providerFunction ให้ workflowResourceDefinitions คือ โครงสร้างที่กำหนดประเภทข้อมูลและเนื้อหาของทรัพยากรที่กำหนดเอง

  2. ภายในอาร์เรย์ fields[] คุณจะระบุฟิลด์แต่ละรายการที่ประกอบกันเป็น ทรัพยากรที่กำหนดเอง ในตัวอย่างนี้เรียกว่า field_1 และ field_2

  3. ค่าของ providerFunction ต้องตรงกับชื่อฟังก์ชันในโค้ดของขั้นตอน providerFunction จะดึงเนื้อหาทรัพยากรที่กำหนดเองจริง เมื่อจำเป็น

    JSON

    {
      "workflowResourceDefinitions": [
        {
          "id": "resource_id",
          "name": "Custom Resource",
          "fields": [
            {
              "selector": "field_1",
              "name": "Field 1",
              "dataType": {
                "basicType": "STRING"
              }
            },
            {
              "selector": "field_2",
              "name": "Field 2",
              "dataType": {
                "basicType": "STRING"
              }
            }
          ],
          "providerFunction": "onMessageResourceFunction"
        }
      ]
    }
    
  4. ใน outputs[] ให้ระบุตัวแปรเอาต์พุตที่แสดงผลชุดตัวแปรเอาต์พุตแบบไดนามิก ตัวแปรเอาต์พุตมี dataType ที่มีพร็อพเพอร์ตี้ resourceType ค่าของ cardinality ต้องเป็น SINGLE

    JSON

    {
      "outputs": [
        {
          "id": "resource_data",
          "description": "Resource Data",
          "cardinality": "SINGLE",
          "dataType": {
            "resourceType": {
              "workflowResourceDefinitionId": "resource_id"
            }
          }
        }
      ],
    }
    

ต่อไปนี้คือไฟล์ Manifest ที่สมบูรณ์ซึ่งกำหนดทรัพยากรที่กำหนดเอง

JSON

{
  "timeZone": "America/Los_Angeles",
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "addOns": {
    "common": {
      "name": "Custom Resource (as reference)",
      "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png",
      "useLocaleFromApp": true
    },
    "flows": {
      "workflowElements": [
        {
          "id": "getResourceDataReference",
          "state": "ACTIVE",
          "name": "Custom Resource (as reference)",
          "description": "Output a custom resource as a reference",
          "workflowAction": {
            "outputs": [
              {
                "id": "resource_data",
                "description": "Resource Data",
                "cardinality": "SINGLE",
                "dataType": {
                  "resourceType": {
                    "workflowResourceDefinitionId": "resource_id"
                  }
                }
              }
            ],
            "onConfigFunction": "onConfigResourceFunction",
            "onExecuteFunction": "onExecuteResourceFunction"
          }
        }
      ],
      "workflowResourceDefinitions": [
        {
          "id": "resource_id",
          "name": "Custom Resource",
          "fields": [
            {
              "selector": "field_1",
              "name": "Field 1",
              "dataType": {
                "basicType": "STRING"
              }
            },
            {
              "selector": "field_2",
              "name": "Field 2",
              "dataType": {
                "basicType": "STRING"
              }
            }
          ],
          "providerFunction": "onMessageResourceFunction"
        }
      ]
    }
  }
}

แก้ไขโค้ด

ในโค้ดของแอปพลิเคชัน ให้ทำดังนี้

  1. ใช้ providerFunction ซึ่งเรียกว่า onMessageResourceFunction() ใน ตัวอย่างนี้ ซึ่งจะดึงเนื้อหาทรัพยากรที่กำหนดเองเมื่อจำเป็น โดยจะรับอินพุต e ซึ่งเป็นเพย์โหลด JSON ของออบเจ็กต์เหตุการณ์ของขั้นตอน และตั้งค่ารหัสทรัพยากรที่กำหนดเองจากอินพุตดังกล่าว

    Apps Script

    function onMessageResourceFunction(e) {
      console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e));
    
      var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
      let fieldValue_1;
      let fieldValue_2;
    
      // Using a if-condition to mock a database call.
      if (resource_id == "sample_resource_reference_id") {
        fieldValue_1 = AddOnsResponseService.newVariableData()
          .addStringValue("value1");
        fieldValue_2 = AddOnsResponseService.newVariableData()
          .addStringValue("value2");
      } else {
        fieldValue_1 = AddOnsResponseService.newVariableData()
          .addStringValue("field_1 value not found");
        fieldValue_2 = AddOnsResponseService.newVariableData()
          .addStringValue("field_2 value not found");
      }
    
      let resourceData = AddOnsResponseService.newResourceData()
        .addVariableData("field_1", fieldValue_1)
        .addVariableData("field_2", fieldValue_2)
    
      let workflowAction = AddOnsResponseService.newResourceRetrievedAction()
        .setResourceData(resourceData)
    
      let hostAppAction = AddOnsResponseService.newHostAppAction()
        .setWorkflowAction(workflowAction);
    
      return AddOnsResponseService.newRenderActionBuilder()
        .setHostAppAction(hostAppAction)
        .build();
    }
    
  2. ฟังก์ชันผู้ให้บริการต้องแสดงค่าของทรัพยากรที่กำหนดเองโดย ดึงข้อมูลด้วยกลไกที่เหมาะสม เช่น การเรียกใช้ API หรือการอ่าน ฐานข้อมูล

  3. หากต้องการดึงและแสดงทรัพยากรที่กำหนดเองตามรหัส ให้แสดงเป็น returnOutputVariablesAction ดังที่แสดงใน onExecuteResourceFunction()

    Apps Script

    function onExecuteResourceFunction(e) {
      console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e));
    
      let outputVariables = AddOnsResponseService.newVariableData()
        .addResourceReference("sample_resource_reference_id");
    
      let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
        .addVariableData("resource_data", outputVariables);
    
      let hostAppAction = AddOnsResponseService.newHostAppAction()
        .setWorkflowAction(workflowAction);
    
      return AddOnsResponseService.newRenderActionBuilder()
        .setHostAppAction(hostAppAction)
        .build();
    }
    

ตัวอย่างที่สมบูรณ์มีดังนี้

Apps Script

function onConfigResourceFunction() {
  let section = CardService.newCardSection()
    .addWidget(
      CardService.newTextParagraph()
        .setText("This is the Custom Resource Demo card")
    );

  const card = CardService.newCardBuilder()
    .addSection(section)
    .build();

  return card;
}

function onMessageResourceFunction(e) {
  console.log("Payload in onMessageResourceFunction: " + JSON.stringify(e));

  var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
  let fieldValue_1;
  let fieldValue_2;

  // Using a if-condition to mock a database call.
  if (resource_id == "sample_resource_reference_id") {
    fieldValue_1 = AddOnsResponseService.newVariableData()
      .addStringValue("value1");
    fieldValue_2 = AddOnsResponseService.newVariableData()
      .addStringValue("value2");
  } else {
    fieldValue_1 = AddOnsResponseService.newVariableData()
      .addStringValue("field_1 value not found");
    fieldValue_2 = AddOnsResponseService.newVariableData()
      .addStringValue("field_2 value not found");
  }

  let resourceData = AddOnsResponseService.newResourceData()
    .addVariableData("field_1", fieldValue_1)
    .addVariableData("field_2", fieldValue_2)

  let workflowAction = AddOnsResponseService.newResourceRetrievedAction()
    .setResourceData(resourceData)

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  return AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();
}

function onExecuteResourceFunction(e) {
  console.log("Payload in onExecuteResourceFunction: " + JSON.stringify(e));

  let outputVariables = AddOnsResponseService.newVariableData()
    .addResourceReference("sample_resource_reference_id");

  let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
    .addVariableData("resource_data", outputVariables);

  let hostAppAction = AddOnsResponseService.newHostAppAction()
    .setWorkflowAction(workflowAction);

  return AddOnsResponseService.newRenderActionBuilder()
    .setHostAppAction(hostAppAction)
    .build();
}