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

এই নির্দেশিকায় গুগল ওয়ার্কস্পেস স্টুডিও-এর জন্য কাস্টম রিসোর্স কীভাবে নির্ধারণ করতে হয়, তা ব্যাখ্যা করা হয়েছে।

কাস্টম রিসোর্স হলো নিজস্ব ডেটা স্ট্রাকচার যা আপনি একাধিক ভেরিয়েবলকে একসাথে গ্রুপ করার জন্য সংজ্ঞায়িত করতে পারেন। যখন কোনো ধাপের আউটপুটের একটি স্থির কাঠামো থাকে, তখন সেটিকে একটি কাস্টম রিসোর্স দিয়ে উপস্থাপন করুন। উদাহরণস্বরূপ, একটি 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[] -এর মধ্যে এমন একটি আউটপুট ভেরিয়েবল নির্দিষ্ট করুন যা একাধিক ডাইনামিক আউটপুট ভেরিয়েবল রিটার্ন করে। এই আউটপুট ভেরিয়েবলটির 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() , যা প্রয়োজনে কাস্টম রিসোর্সের কন্টেন্ট পুনরুদ্ধার করে। এটি স্টেপের ইভেন্ট অবজেক্টের JSON পেলোড , অর্থাৎ e ইনপুট হিসেবে গ্রহণ করে এবং তা থেকে কাস্টম রিসোর্স আইডি সেট করে।

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

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

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

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