এই নির্দেশিকায় গুগল ওয়ার্কস্পেস স্টুডিও-এর জন্য কাস্টম রিসোর্স কীভাবে নির্ধারণ করতে হয়, তা ব্যাখ্যা করা হয়েছে।
কাস্টম রিসোর্স হলো নিজস্ব ডেটা স্ট্রাকচার যা আপনি একাধিক ভেরিয়েবলকে একসাথে গ্রুপ করার জন্য সংজ্ঞায়িত করতে পারেন। যখন কোনো ধাপের আউটপুটের একটি স্থির কাঠামো থাকে, তখন সেটিকে একটি কাস্টম রিসোর্স দিয়ে উপস্থাপন করুন। উদাহরণস্বরূপ, একটি CRM লিড তৈরি করতে, আপনার আউটপুটে একাধিক ভেরিয়েবলের প্রয়োজন হয়:
- ইমেইল ঠিকানা
- রাস্তার ঠিকানা
- নাম
একটি CRM লিড তৈরি করার জন্য প্রয়োজনীয় সমস্ত ডেটার উপস্থিতি নিশ্চিত করতে, একটি ইমেল ঠিকানা, রাস্তার ঠিকানা এবং নাম সম্বলিত একটি কাস্টম রিসোর্স আউটপুট করুন।
একটি কাস্টম রিসোর্সকে রেফারেন্স হিসেবে আউটপুট করুন
একটি কাস্টম রিসোর্সকে রেফারেন্স হিসেবে আউটপুট করার মাধ্যমে, আপনি সম্পূর্ণ কাস্টম রিসোর্স অবজেক্টের পরিবর্তে এর আইডি দ্বারা রিসোর্সটি ফেরত পেতে পারেন। যদি একটি কাস্টম রিসোর্স বড় বা জটিল হয়, তবে শুধুমাত্র আইডি পাস করলে ধাপগুলোর মধ্যে স্থানান্তরিত ডেটার পরিমাণ কমে যাওয়ায় পারফরম্যান্স উন্নত হয়।
কোনো কাস্টম রিসোর্সকে রেফারেন্স হিসেবে আউটপুট করতে, স্টেপটির ম্যানিফেস্ট ফাইল এবং কোড সম্পাদনা করুন।
ম্যানিফেস্ট ফাইলটি সম্পাদনা করুন
ম্যানিফেস্ট ফাইলে:
একটি
workflowResourceDefinitionsনির্দিষ্ট করুন এবং এটিকে একটিid, একটিfields[]অ্যারে এবং একটিproviderFunctionনির্ধারণ করে দিন।workflowResourceDefinitionsহলো এমন একটি কাঠামো যা কাস্টম রিসোর্সের ডেটা টাইপ এবং বিষয়বস্তু সংজ্ঞায়িত করে।fields[]অ্যারের মধ্যে, আপনি কাস্টম রিসোর্সটি তৈরি করে এমন স্বতন্ত্র ফিল্ডগুলি নির্দিষ্ট করেন, এই উদাহরণে যেগুলিকেfield_1এবংfield_2বলা হয়েছে।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" } ] }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"
}
]
}
}
}
কোডটি সম্পাদনা করুন
অ্যাপ্লিকেশন কোডে:
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(); }প্রোভাইডার ফাংশনটিকে অবশ্যই একটি উপযুক্ত পদ্ধতির মাধ্যমে, যেমন এপিআই কল করে বা ডেটাবেস থেকে ডেটা পড়ে, কাস্টম রিসোর্সের মানটি ফেরত দিতে হবে।
কোনো কাস্টম রিসোর্সকে তার আইডি দ্বারা পুনরুদ্ধার ও ফেরত দিতে, সেটিকে
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();
}
সম্পর্কিত বিষয়
- ইনপুট ভেরিয়েবল
- একটি ইনপুট ভেরিয়েবল যাচাই করুন
- আউটপুট ভেরিয়েবল
- কার্যকলাপ এবং ত্রুটিগুলি লগ করুন
- ওয়ার্কস্পেস স্টুডিও ইভেন্ট অবজেক্ট