গুগল ওয়ার্কস্পেস অ্যাড-অনগুলিতে ইন্টারেক্টিভ আচরণ যুক্ত করতে অ্যাকশন অবজেক্ট ব্যবহার করুন।
অ্যাড-অন UI-তে কোনো ব্যবহারকারী যখন কোনো উইজেটের (যেমন, একটি বাটন) সাথে ইন্টারঅ্যাক্ট করে, তখন কী ঘটবে তা অ্যাকশন অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়।
একটি উইজেটে একটি অ্যাকশন যোগ করুন
একটি উইজেটের সাথে কোনো অ্যাকশন সংযুক্ত করতে, একটি উইজেট হ্যান্ডলার ফাংশন ব্যবহার করুন, যা অ্যাকশনটি ট্রিগার করার শর্তটিও নির্ধারণ করে। ট্রিগার হলে, অ্যাকশনটি একটি নির্দিষ্ট কলব্যাক ফাংশন এক্সিকিউট করে। কলব্যাক ফাংশনটিতে একটি ইভেন্ট অবজেক্ট পাস করা হয়, যা ব্যবহারকারীর ক্লায়েন্ট-সাইড ইন্টারঅ্যাকশন সম্পর্কিত তথ্য বহন করে। আপনাকে অবশ্যই কলব্যাক ফাংশনটি ইমপ্লিমেন্ট করতে হবে এবং এর থেকে একটি নির্দিষ্ট রেসপন্স অবজেক্ট রিটার্ন করাতে হবে।
উদাহরণ: একটি বোতামে ক্লিক করা হলে একটি নতুন কার্ড প্রদর্শন করুন।
আপনার অ্যাড-অনে এমন একটি বাটন যোগ করতে চাইলে, যা ক্লিক করলে একটি নতুন কার্ড তৈরি ও প্রদর্শন করবে, এই ধাপগুলো অনুসরণ করুন:
- একটি বাটন উইজেট তৈরি করুন।
- কার্ড তৈরির অ্যাকশন সেট করতে, বাটন উইজেট হ্যান্ডলার ফাংশন
setOnClickActionযোগ করুন। - এক্সিকিউট করার জন্য একটি অ্যাপস স্ক্রিপ্ট কলব্যাক ফাংশন তৈরি করুন এবং উইজেট হ্যান্ডলার ফাংশনের মধ্যে এটিকে
actionহিসেবে নির্দিষ্ট করুন। এক্ষেত্রে, কলব্যাক ফাংশনটি আপনার কাঙ্ক্ষিত কার্ডটি তৈরি করবে এবং একটিActionResponseঅবজেক্ট রিটার্ন করবে। এই রেসপন্স অবজেক্টটি অ্যাড-অনকে কলব্যাক ফাংশন দ্বারা তৈরি করা কার্ডটি প্রদর্শন করতে নির্দেশ দেয়।
নিম্নলিখিত উদাহরণটি একটি বাটন উইজেট তৈরি করা দেখাচ্ছে। এই অ্যাকশনটি অ্যাড-অনের পক্ষ থেকে বর্তমান ফাইলের জন্য drive.file স্কোপের অনুরোধ করে।
/**
* Adds a section to the Card Builder that displays a "REQUEST PERMISSION"
* button. When it's clicked, the callback triggers file scope permission flow.
* This is used in the add-on when the home-page displays basic data.
*/
function addRequestFileScopeButtonToBuilder(cardBuilder) {
var buttonSection = CardService.newCardSection();
// If the add-on does not have access permission, add a button that
// lets the user provide that permission on a per-file basis.
var buttonAction = CardService.newAction()
.setFunctionName("onRequestFileScopeButtonClickedInEditor");
var button = CardService.newTextButton()
.setText("Request permission")
.setBackgroundColor("#4285f4")
.setTextButtonStyle(CardService.TextButtonStyle.FILLED)
.setOnClickAction(buttonAction);
buttonSection.addWidget(button);
cardBuilder.addSection(buttonSection);
}
/**
* Callback function for a button action. Instructs Docs to display a
* permissions dialog to the user, requesting `drive.file` scope for the
* current file on behalf of this add-on.
*
* @param {Object} e The parameters object that contains the document's ID
* @return {editorFileScopeActionResponse}
*/
function onRequestFileScopeButtonClickedInEditor(e) {
return CardService.newEditorFileScopeActionResponseBuilder()
.requestFileScopeForActiveDocument().build();
}
REST API-এর জন্য ফাইল অ্যাক্সেস ইন্টারঅ্যাকশন
গুগল ওয়ার্কস্পেস অ্যাড-অন, যা এডিটরগুলোকে প্রসারিত করে এবং REST API ব্যবহার করে, সেগুলোতে ফাইল অ্যাক্সেসের অনুরোধ করার জন্য একটি অতিরিক্ত উইজেট অ্যাকশন অন্তর্ভুক্ত থাকতে পারে। এই অ্যাকশনটির জন্য সংশ্লিষ্ট অ্যাকশন কলব্যাক ফাংশনটিকে একটি বিশেষায়িত রেসপন্স অবজেক্ট রিটার্ন করতে হয়:
| পদক্ষেপের চেষ্টা করা হয়েছিল | কলব্যাক ফাংশন ফেরত দেওয়া উচিত |
|---|---|
| ফাইল অ্যাক্সেসের অনুরোধ করুন | EditorFileScopeActionResponse |
এই উইজেটের অ্যাকশন এবং রেসপন্স অবজেক্ট ব্যবহার করতে হলে, নিম্নলিখিত সবগুলি অবশ্যই সত্য হতে হবে:
- অ্যাড-অনটি REST API ব্যবহার করে।
- অ্যাড-অনটি
CardService.newEditorFileScopeActionResponseBuilder().requestFileScopeForActiveDocument().build();মেথডটি ব্যবহার করে রিকোয়েস্ট ফাইল স্কোপ ডায়ালগটি উপস্থাপন করে। - অ্যাড-অনটির ম্যানিফেস্টে
https://www.googleapis.com/auth/drive.fileএডিটর স্কোপ এবংonFileScopeGrantedট্রিগার অন্তর্ভুক্ত রয়েছে।
বর্তমান নথির জন্য ফাইল অ্যাক্সেসের অনুরোধ করুন
বর্তমান ডকুমেন্টটির জন্য ফাইল অ্যাক্সেস অনুরোধ করতে, এই ধাপগুলো অনুসরণ করুন:
- এমন একটি হোমপেজ কার্ড তৈরি করুন যা যাচাই করবে অ্যাড-অনটির
drive.fileস্কোপ আছে কি না। - যেসব ক্ষেত্রে অ্যাড-অনটিকে
drive.fileস্কোপ দেওয়া হয়নি, সেসব ক্ষেত্রে ব্যবহারকারীদের কাছে বর্তমান ডকুমেন্টটির জন্যdrive.fileস্কোপ মঞ্জুর করার অনুরোধ জানানোর একটি উপায় তৈরি করুন।
উদাহরণ: ডকস-এ বর্তমান ডকুমেন্ট অ্যাক্সেস পান
নিম্নলিখিত উদাহরণটি Docs-এর জন্য একটি ইন্টারফেস তৈরি করে যা বর্তমান ডকুমেন্টের আকার প্রদর্শন করে। যদি অ্যাড-অনটির drive.file অথরাইজেশন না থাকে, তবে এটি ফাইল স্কোপ অথরাইজেশন শুরু করার জন্য একটি বাটন প্রদর্শন করে।
/**
* Build a card that checks selected items' quota usage. Checking
* quota usage requires user-permissions, so this add-on provides a button
* to request `drive.file` scope for items the add-on doesn't yet have
* permission to access.
*
* @param e The event object passed containing information about the
* current document.
* @return {Card}
*/
function onDocsHomepage(e) {
return createAddOnView(e);
}
function onFileScopeGranted(e) {
return createAddOnView(e);
}
/**
* For the current document, display either its quota information or
* a button that lets the user provide permission to access that
* file to retrieve its quota details.
*
* @param e The event containing information about the current document
* @return {Card}
*/
function createAddOnView(e) {
var docsEventObject = e['docs'];
var builder = CardService.newCardBuilder();
var cardSection = CardService.newCardSection();
if (docsEventObject['addonHasFileScopePermission']) {
cardSection.setHeader(docsEventObject['title']);
// This add-on uses the recommended, limited-permission `drive.file`
// scope to get granular per-file access permissions.
// See: https://developers.google.com/drive/api/v2/about-auth
// If the add-on has access permission, read and display its quota.
cardSection.addWidget(
CardService.newTextParagraph().setText(
"This file takes up: " +
getQuotaBytesUsed(docsEventObject['id'])));
} else {
// If the add-on does not have access permission, add a button that
// lets the user provide that permission on a per-file basis.
cardSection.addWidget(
CardService.newTextParagraph().setText(
"The add-on needs permission to access this file's quota."));
var buttonAction = CardService.newAction()
.setFunctionName("onRequestFileScopeButtonClicked");
var button = CardService.newTextButton()
.setText("Request permission")
.setOnClickAction(buttonAction);
cardSection.addWidget(button);
}
return builder.addSection(cardSection).build();
}
/**
* Callback function for a button action. Instructs Docs to
* display a permissions dialog to the user, requesting `drive.file` scope for
* the current file on behalf of this add-on.
*
* @param {Object} e The parameters object that contains the document's ID
* @return {editorFileScopeActionResponse}
*/
function onRequestFileScopeButtonClicked(e) {
return CardService.newEditorFileScopeActionResponseBuilder()
.requestFileScopeForActiveDocument().build();
}