कस्टम संसाधन की मदद से जटिल डेटा दिखाना

इस गाइड में, Google Workspace Studio के लिए कस्टम संसाधन तय करने का तरीका बताया गया है.

कस्टम रिसॉर्स, कस्टम डेटा स्ट्रक्चर होते हैं. इन्हें एक साथ कई वैरिएबल को ग्रुप करने के लिए तय किया जा सकता है. जब किसी चरण के आउटपुट का स्ट्रक्चर स्टैटिक होता है, तो उसे कस्टम रिसॉर्स के तौर पर दिखाएं. उदाहरण के लिए, सीआरएम लीड बनाने के लिए, आपके आउटपुट में कई वैरिएबल होने चाहिए:

  • ईमेल पता
  • मोहल्ले का पता
  • नाम

सीआरएम लीड बनाने के लिए ज़रूरी सभी डेटा मौजूद है या नहीं, यह पक्का करने के लिए, ईमेल पता, मोहल्ले का पता, और नाम वाली कस्टम रिसॉर्स का आउटपुट दें.

कस्टम संसाधन को रेफ़रंस के तौर पर आउटपुट करना

कस्टम रिसोर्स को रेफ़रंस के तौर पर आउटपुट करके, पूरे कस्टम रिसोर्स ऑब्जेक्ट के बजाय, उसके आईडी के हिसाब से कस्टम रिसोर्स को वापस लाया जा सकता है. अगर कोई कस्टम रिसॉर्स बड़ा या जटिल है, तो सिर्फ़ आईडी पास करने से परफ़ॉर्मेंस बेहतर होती है. ऐसा इसलिए होता है, क्योंकि इससे चरणों के बीच ट्रांसफ़र किए जाने वाले डेटा की मात्रा कम हो जाती है.

कस्टम संसाधन को रेफ़रंस के तौर पर आउटपुट करने के लिए, चरण की मेनिफ़ेस्ट फ़ाइल और कोड में बदलाव करें.

मेनिफ़ेस्ट फ़ाइल में बदलाव करना

मेनिफ़ेस्ट फ़ाइल में:

  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[] में, ऐसा आउटपुट वैरिएबल तय करें जो आउटपुट वैरिएबल का डाइनैमिक सेट दिखाता हो. आउटपुट वैरिएबल में, resourceType प्रॉपर्टी वाला dataType है. cardinality की वैल्यू SINGLE होनी चाहिए.

    JSON

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

यहां कस्टम रिसॉर्स को तय करने वाली पूरी मेनिफ़ेस्ट फ़ाइल दी गई है:

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. सेवा देने वाली कंपनी के फ़ंक्शन को कस्टम संसाधन की वैल्यू दिखानी होगी. इसके लिए, उसे सही तरीके से वैल्यू को वापस पाना होगा. जैसे, एपीआई को कॉल करना या डेटाबेस को पढ़ना.

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