একটি কাস্টম রিসোর্স ব্যবহার করে জটিল ডেটা উপস্থাপন করুন

এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে Google Workspace Studio-এর জন্য কাস্টম রিসোর্স সংজ্ঞায়িত করতে হয়।

কাস্টম রিসোর্স হলো কাস্টম ডেটা স্ট্রাকচার যা আপনি একাধিক ভেরিয়েবলকে একসাথে গ্রুপ করার জন্য সংজ্ঞায়িত করতে পারেন। যখন একটি ধাপের আউটপুটে একটি স্ট্যাটিক স্ট্রাকচার থাকে, তখন এটি একটি কাস্টম রিসোর্স দিয়ে উপস্থাপন করুন। উদাহরণস্বরূপ, একটি CRM লিড তৈরি করতে, আপনার আউটপুটে একাধিক ভেরিয়েবলের প্রয়োজন হয়:

  • ইমেল ঠিকানা
  • রাস্তার ঠিকানা
  • নাম

একটি CRM লিড তৈরির জন্য প্রয়োজনীয় সমস্ত ডেটার উপস্থিতি নিশ্চিত করতে, একটি ইমেল ঠিকানা, রাস্তার ঠিকানা এবং নাম সম্বলিত একটি কাস্টম রিসোর্স আউটপুট করুন।

রেফারেন্স হিসেবে একটি কাস্টম রিসোর্স আউটপুট করুন

একটি কাস্টম রিসোর্সকে রেফারেন্স হিসেবে আউটপুট করে, আপনি সম্পূর্ণ কাস্টম রিসোর্স অবজেক্টের পরিবর্তে কাস্টম রিসোর্সটিকে তার আইডি দিয়ে ফেরত দিতে পারেন। যদি একটি কাস্টম রিসোর্স বড় বা জটিল হয়, তাহলে শুধুমাত্র আইডি পাস করলে ধাপগুলির মধ্যে স্থানান্তরিত ডেটা হ্রাস করে কর্মক্ষমতা উন্নত হয়।

রেফারেন্স হিসেবে একটি কাস্টম রিসোর্স আউটপুট করতে, ধাপের ম্যানিফেস্ট ফাইল এবং কোড সম্পাদনা করুন।

ম্যানিফেস্ট ফাইলটি সম্পাদনা করুন

ম্যানিফেস্ট ফাইলে:

  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 থাকে যার বৈশিষ্ট্য resourceTypecardinality মান অবশ্যই 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. এই উদাহরণে onMessageResourceFunction() নামক providerFunction প্রয়োগ করুন, যা প্রয়োজনে কাস্টম রিসোর্স কন্টেন্ট পুনরুদ্ধার করে। এটি ইনপুট e নেয় যা ধাপের ইভেন্ট অবজেক্ট JSON পেলোড , এবং এটি থেকে কাস্টম রিসোর্স আইডি সেট করে।

    অ্যাপস স্ক্রিপ্ট

    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() এ দেখানো হয়েছে।

    অ্যাপস স্ক্রিপ্ট

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

এখানে একটি সম্পূর্ণ উদাহরণ:

অ্যাপস স্ক্রিপ্ট

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