অনেক গুগল অ্যাপস স্ক্রিপ্ট অ্যাপের জন্য অনুমোদন পাওয়া খুবই সহজ। কেউ যখন স্ক্রিপ্ট প্রজেক্টটি ব্যবহার করার চেষ্টা করে, তখন এটি তার প্রয়োজনীয় কিন্তু অনুপস্থিত অনুমতিগুলো চেয়ে নেয়।
বিভিন্ন কারণে এডিটর অ্যাড-অনগুলির অনুমোদন মডেলটি আরও জটিল:
যখন কোনো ব্যবহারকারী একটি ফাইল তৈরি করেন, তখন তার ইনস্টল করা সমস্ত অ্যাড-অন এক্সটেনশন মেনুতে তালিকাভুক্ত হয়, এমনকি যদি ব্যবহারকারী সেই অ্যাড-অনগুলির অনুমোদন এখনও না দিয়ে থাকেন।
এই অ্যাড-অনগুলো গুগল ড্রাইভের সেই ফাইলগুলোতে কাজ করে যেগুলো সহযোগীদের সাথে শেয়ার করা যায়। যেসব সহযোগীর কাছে এডিটর অ্যাড-অনটি ইনস্টল করা নেই, তারাও সেইসব ডকুমেন্টে এটি দেখতে পান যেখানে ফাইল নির্মাতা এটি ব্যবহার করেছেন।
ডকুমেন্ট খোলার সময় এডিটর অ্যাড-অনগুলো স্বয়ংক্রিয়ভাবে তাদের
onOpenফাংশনগুলো চালায়।
ব্যবহারকারীর ডেটা সুরক্ষিত রাখতে, এমন অনুমোদন মোড প্রয়োগ করা হয় যা onOpen জন্য কিছু পরিষেবা অনুপলব্ধ করে তোলে। এই নির্দেশিকাটি ব্যাখ্যা করে যে আপনার কোড কখন কী করতে পারে।
অনুমোদন মডেল
একটি এডিটর অ্যাড-অনের অনুমোদন পদ্ধতি তার অবস্থার উপর নির্ভর করে, এবং এই অবস্থাটি নির্ভর করে কে এটি ব্যবহার করছে তার উপর: অ্যাড-অনটি ইনস্টল করা ব্যবহারকারী নাকি কোনো সহযোগী।
সম্পাদক অ্যাড-অন অবস্থা
এক্সটেনশন মেনুতে থাকা এডিটর অ্যাড-অনগুলি ইনস্টল করা, সক্রিয় করা, অথবা উভয়ই করা আছে:
- কোনো নির্দিষ্ট ব্যবহারকারী বা তার প্রশাসক যখন গুগল ওয়ার্কস্পেস মার্কেটপ্লেস থেকে একটি অ্যাড-অন সংগ্রহ করে এবং সেটিকে তাদের গুগল ডেটা অ্যাক্সেস করার অনুমোদন দেন, তখন সেই ব্যবহারকারীর জন্য অ্যাড-অনটি ইনস্টল হয়ে যায়।
- কোনো ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশিটে যখন কেউ একটি অ্যাড-অন ব্যবহার করে, তখন সেটি সক্রিয় হয়।
- যখন একাধিক ব্যক্তি কোনো ফাইলে একসঙ্গে কাজ করেন এবং তাদের মধ্যে কেউ একজন কোনো অ্যাড-অন ব্যবহার করেন, তখন সেটি সেই ব্যবহারকারীর জন্য ইনস্টল হয়ে যায় এবং ফাইলটির জন্য সক্রিয় হয়ে ওঠে ।
নিম্নলিখিত সারণীতে ইনস্টল করা এবং সক্রিয় করা অবস্থার মধ্যেকার পার্থক্যগুলো সংক্ষেপে তুলে ধরা হয়েছে। যখন আপনি একটি স্ক্রিপ্টকে অ্যাড-অন হিসেবে পরীক্ষা করেন , তখন আপনি পরীক্ষাটি যেকোনো একটি বা উভয় অবস্থাতেই চালাতে পারেন।
| ইনস্টল করা হয়েছে | সক্ষম করা হয়েছে | |
|---|---|---|
| প্রযোজ্য | ব্যবহারকারী | ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীট |
| এর কারণে | স্টোর থেকে একটি অ্যাড-অন পাওয়া | সেই ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীট ব্যবহার করার সময় স্টোর থেকে কোনো অ্যাড-অন নেওয়া, অথবা সেই ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটে পূর্বে ইনস্টল করা একটি অ্যাড-অন ব্যবহার করে |
| মেনু দৃশ্যমান | শুধুমাত্র সেই ব্যবহারকারীই, তার খোলা বা তৈরি করা সমস্ত ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটে। | সেই ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটের সকল সহযোগী। |
onOpen জন্য অনুমোদন মোড | AuthMode.NONE(যদি না এটিও সক্রিয় করা থাকে , সেক্ষেত্রে AuthMode.LIMITED) | AuthMode.LIMITED |
অনুমোদন মোড
যখন কোনো ব্যবহারকারী একটি ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীট খোলেন, তখন একটি এডিটর অ্যাড-অনের onOpen ফাংশনটি স্বয়ংক্রিয়ভাবে চালু হয়। ব্যবহারকারীদের ডেটা সুরক্ষিত রাখতে, অ্যাপস স্ক্রিপ্ট onOpen ফাংশনের কার্যকলাপের উপর সীমাবদ্ধতা আরোপ করে। এডিটর অ্যাড-অনের অবস্থা নির্ধারণ করে যে onOpen ফাংশনটি কোন অনুমোদন মোডে চালু হবে।
যদি ফাইল, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটে কোনো এডিটর অ্যাড-অন সক্রিয় করা থাকে, তাহলে onOpen AuthMode.LIMITED এ চলে। যদি অ্যাড-অনটি সক্রিয় না থাকে এবং শুধুমাত্র ইনস্টল করা থাকে, onOpen AuthMode.NONE এ চলে।
AuthMode.NONE মোডে, ব্যবহারকারী ক্লিক করে বা কাস্টম ফাংশন চালিয়ে অ্যাড-অনটির সাথে ইন্টারঅ্যাক্ট না করা পর্যন্ত এটি নির্দিষ্ট কিছু সার্ভিস চালাতে পারে না। যদি আপনার অ্যাড-অন onOpen , onInstall , বা গ্লোবাল স্কোপে এই সার্ভিসগুলো ব্যবহার করার চেষ্টা করে , তাহলে পারমিশন ব্যর্থ হয় এবং মেনু পূরণ করার মতো অন্যান্য কল বন্ধ হয়ে যায় । একমাত্র সমর্থিত অপশন হলো Help।
সীমাবদ্ধ পরিষেবা কলগুলি চালানোর জন্য, আপনাকে অবশ্যই AuthMode.FULL অনুমোদন মোড ব্যবহার করতে হবে। ব্যবহারকারীর ইন্টারঅ্যাকশন ফাংশন, যেমন মেনু বিকল্পে ক্লিক করা, শুধুমাত্র এই মোডেই চলে। AuthMode.FULL মোডে কোডটি চালানোর পরে, অ্যাড-অনটি সমস্ত অনুমোদিত স্কোপ ব্যবহার করতে পারে।
শুধুমাত্র প্রকাশিত এডিটর অ্যাড-অনগুলোই AuthMode.NONE এ থাকতে পারে; অপ্রকাশিত এডিটর অ্যাড-অনগুলো onOpen AuthMode.LIMITED মোডে চলে। তবে, এগুলো যেকোনো অথরাইজেশন মোডেই চলার জন্য তৈরি। এটি করার জন্য, একটি এডিটর অ্যাড-অন পরীক্ষা করে দেখুন ।
অ্যাপস স্ক্রিপ্ট তার ইভেন্ট প্যারামিটার e এর authMode প্রপার্টি হিসেবে অথরাইজেশন মোডটি পাস করে; e.authMode এর মানটি অ্যাপস স্ক্রিপ্টের ScriptApp.AuthMode enum-এর একটি কনস্ট্যান্টের সাথে সঙ্গতিপূর্ণ।
স্ক্রিপ্ট এডিটর, মেনু আইটেম বা অ্যাপস স্ক্রিপ্টের google.script.run কল থেকে চালানো সহ সমস্ত অ্যাপস স্ক্রিপ্ট এক্সিকিউশন পদ্ধতির ক্ষেত্রে অথরাইজেশন মোড প্রযোজ্য। তবে, e.authMode প্রপার্টিটি শুধুমাত্র তখনই দেখা যাবে যখন স্ক্রিপ্টটি onOpen , onEdit বা onInstall মতো কোনো ট্রিগারের ফলে রান করবে। গুগল শিটসের কাস্টম ফাংশনগুলো তাদের নিজস্ব অথরাইজেশন মোড, AuthMode.CUSTOM_FUNCTION ব্যবহার করে, যা LIMITED মতো হলেও এর সীমাবদ্ধতাগুলো কিছুটা ভিন্ন। অন্য সব ক্ষেত্রে, স্ক্রিপ্টগুলো AuthMode.FULL মোডে রান করে, যা নিচের টেবিলে বর্ণনা করা হয়েছে।
NONE | LIMITED | CUSTOM_FUNCTION | FULL | |
|---|---|---|---|---|
| এর জন্য ঘটে | onOpen (যদি ব্যবহারকারী কোনো অ্যাড-অন ইনস্টল করে থাকেন কিন্তু ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটে সেটি সক্রিয় না করে থাকেন) | onOpen (অন্যান্য সকল সময়ে)onEdit (শুধুমাত্র শীট-এ) | কাস্টম ফাংশন | অন্যান্য সকল সময়, যার মধ্যে অন্তর্ভুক্ত: ইনস্টলযোগ্য ট্রিগার onInstallgoogle.script.run |
| ব্যবহারকারীর ডেটাতে অ্যাক্সেস | শুধুমাত্র স্থানীয়দের জন্য | শুধুমাত্র স্থানীয়দের জন্য | শুধুমাত্র স্থানীয়দের জন্য | হ্যাঁ |
| ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটে অ্যাক্সেস | না | হ্যাঁ | হ্যাঁ — শুধুমাত্র পঠনযোগ্য | হ্যাঁ |
| ব্যবহারকারী ইন্টারফেসে অ্যাক্সেস | মেনু আইটেম যোগ করুন | মেনু আইটেম যোগ করুন | না | হ্যাঁ |
Properties প্রবেশাধিকার | না | হ্যাঁ | হ্যাঁ | হ্যাঁ |
Jdbc , UrlFetch এ অ্যাক্সেস | না | না | হ্যাঁ | হ্যাঁ |
| অন্যান্য পরিষেবা | LoggerUtilities | যে কোনো পরিষেবা যা ব্যবহারকারীর ডেটা অ্যাক্সেস করে না | যে কোনো পরিষেবা যা ব্যবহারকারীর ডেটা অ্যাক্সেস করে না | সমস্ত পরিষেবা |
একটি এডিটর অ্যাড-অনের অনুমোদন জীবনচক্র
যখন বর্তমান ব্যবহারকারীর জন্য কোনো অ্যাড-অন ইনস্টল করা হয় বা বর্তমান ফাইলে সক্রিয় করা হয়, তখন সেই ফাইলটি খোলার সাথে সাথে ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটের জন্য অ্যাড-অনটি লোড হয়। অ্যাড-অনটি এক্সটেনশনস মেনুতে তালিকাভুক্ত থাকে এবং onInstall , onOpen , ও onEdit মতো সাধারণ ট্রিগারগুলোর জন্য লিসেনিং শুরু করে। যদি কোনো ব্যবহারকারী এক্সটেনশনস মেনুর কোনো আইটেমে ক্লিক করেন, তবে এটি রান করে।
এডিটর অ্যাড-অনটি ইনস্টল করা আছে
যখন স্টোর থেকে কোনো এডিটর অ্যাড-অন ইনস্টল করা হয়, তখন এর onInstall ফাংশনটি AuthMode.FULL মোডে চলে। এই অথরাইজেশন মোডে, অ্যাড-অনটি একটি জটিল সেটআপ রুটিন চালাতে পারে। মেনু আইটেম তৈরি করার জন্যও আপনার onInstall ব্যবহার করা উচিত, কারণ ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীটটি ইতিমধ্যেই খোলা থাকে এবং আপনার onOpen ফাংশনটি তখনও চলেনি। নিচের নমুনাটিতে দেখানো হয়েছে কিভাবে onInstall ফাংশন থেকে onOpen ফাংশনটিকে কল করতে হয়:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
এডিটর অ্যাড-অনটি খোলা হয়েছে
যখন কোনো ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশীট খোলা হয়, তখন এটি বর্তমান ব্যবহারকারীর ইনস্টল করা অথবা কোনো সহযোগীর দ্বারা ফাইলটিতে সক্রিয় করা প্রতিটি এডিটর অ্যাড-অন লোড করে এবং সেগুলোর প্রত্যেকটির onOpen ফাংশন কল করে। কোনো অ্যাড-অন ইনস্টল করা বা সক্রিয় করা আছে কিনা, তার উপর নির্ভর করে onOpen কোন অথরাইজেশন মোডে চলবে।
যদি কোনো অ্যাড-অন শুধু একটি সাধারণ মেনু তৈরি করে, তাহলে মোডটি গুরুত্বপূর্ণ নয়। নিম্নলিখিত নমুনাটি একটি সাধারণ onOpen ফাংশন প্রদর্শন করে:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
সংরক্ষিত অ্যাপস স্ক্রিপ্ট প্রোপার্টির উপর ভিত্তি করে ডাইনামিক মেনু আইটেম যোগ করতে, বর্তমান ফাইলের বিষয়বস্তু পড়তে, বা অন্যান্য উন্নত কাজ সম্পাদন করতে, আপনাকে অবশ্যই অথরাইজেশন মোড শনাক্ত করতে হবে এবং যথাযথভাবে তা পরিচালনা করতে হবে।
নিম্নলিখিত নমুনাটি একটি উন্নত onOpen ফাংশন দেখায় যা অনুমোদন মোডের উপর ভিত্তি করে তার ক্রিয়া পরিবর্তন করে:
function onOpen(e) {
var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
if (e && e.authMode == ScriptApp.AuthMode.NONE) {
// Add a normal menu item (works in all authorization modes).
menu.addItem('Start workflow', 'startWorkflow');
} else {
// Add a menu item based on properties (doesn't work in AuthMode.NONE).
var properties = PropertiesService.getDocumentProperties();
var workflowStarted = properties.getProperty('workflowStarted');
if (workflowStarted) {
menu.addItem('Check workflow status', 'checkWorkflow');
} else {
menu.addItem('Start workflow', 'startWorkflow');
}
}
menu.addToUi();
}
যখন onOpen ফাংশনটি চলে, তখন সম্পূর্ণ স্ক্রিপ্টটি লোড হয় এবং গ্লোবাল স্টেটমেন্টগুলো onOpen মতোই একই অথরাইজেশন মোডের অধীনে রান করে। যদি অথরাইজেশন মোডটি গ্লোবাল স্টেটমেন্টগুলোকে নিষিদ্ধ করে, তাহলে গ্লোবাল স্টেটমেন্ট এবং onOpen উভয়ই রান করতে ব্যর্থ হয়। যদি প্রকাশিত অ্যাড-অনটি তার মেনু আইটেমগুলো যোগ করতে ব্যর্থ হয়, তবে কোনো এরর রিটার্ন হয়েছে কিনা তা দেখতে ব্রাউজার কনসোলটি পর্যালোচনা করুন। এরপর, আপনার স্ক্রিপ্টটি পরীক্ষা করে দেখুন যে onOpen ফাংশন বা গ্লোবাল ভেরিয়েবলগুলো এমন কোনো সার্ভিসকে কল করছে কিনা যা AuthMode.NONE এ অনুমোদিত নয়।
AuthMode.LIMITED মোডে চলার সময় অ্যাড-অনগুলি সাইডবার বা ডায়ালগ খুলতে পারে না। আপনি মেনু আইটেম ব্যবহার করে সাইডবার এবং ডায়ালগ খুলতে পারেন, কারণ এগুলি AuthMode.FULL মোডে চলে।
একজন ব্যবহারকারী এডিটর অ্যাড-অনটি চালান।
যখন কোনো ব্যবহারকারী এক্সটেনশন মেনু আইটেমে ক্লিক করেন, তখন অ্যাপস স্ক্রিপ্ট প্রথমে যাচাই করে দেখে যে ব্যবহারকারী অ্যাড-অনটি ইনস্টল করেছেন কিনা এবং না করে থাকলে তাকে তা করার জন্য অনুরোধ করে। যদি ব্যবহারকারী অ্যাড-অনটির অনুমোদন দিয়ে থাকেন, তাহলে স্ক্রিপ্টটি AuthMode.FULL এ থাকা মেনু আইটেমটির সাথে সম্পর্কিত ফাংশনটি চালায়। যদি ডকুমেন্ট, ফর্ম, প্রেজেন্টেশন বা স্প্রেডশিটে অ্যাড-অনটি আগে থেকে সক্রিয় না থাকে, তবে তা সক্রিয় হয়ে যায়।
অ্যাড-অন মেনু রেন্ডার না হওয়ার সমস্যা সমাধান করুন
আপনার কোড যদি অনুমোদন মোডগুলো সঠিকভাবে পরিচালনা না করে, তাহলে আপনার অ্যাড-অন মেনুটি প্রদর্শিত নাও হতে পারে। উদাহরণস্বরূপ:
একটি অ্যাড-অন এমন একটি অ্যাপস স্ক্রিপ্ট সার্ভিস চালানোর চেষ্টা করছে যা বর্তমান অনুমোদন মোড দ্বারা সমর্থিত নয়।
কোনো অ্যাড-অন ব্যবহারকারীর ব্যবহারের আগেই একটি সার্ভিস কল চালানোর চেষ্টা করে।
AuthMode.NONE এ পারমিশন ত্রুটির কারণ হওয়া কোনো সার্ভিস কল অপসারণ বা পুনর্বিন্যাস করতে, নিম্নলিখিত পদক্ষেপগুলি চেষ্টা করুন:
- আপনার অ্যাড-অনের অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন এবং
onOpenফাংশনটি সনাক্ত করুন। -
onOpenফাংশনে Apps Script সার্ভিস বা সেগুলোর সাথে সম্পর্কিত অবজেক্ট, যেমনPropertiesService,SpreadsheetAppবাGmailAppএর উল্লেখ খুঁজুন। - যদি কোনো সার্ভিস UI এলিমেন্ট তৈরি করা ছাড়া অন্য কোনো কাজে ব্যবহৃত হয়, তাহলে সেটিকে সরিয়ে দিন অথবা একটি কমেন্ট ব্লকের মধ্যে রাখুন। শুধুমাত্র এই মেথডগুলো রাখুন:
.getUi,.createMenu,.addItem, এবং.addToUi। এছাড়াও, কোনো ফাংশনের বাইরে থাকা যেকোনো সার্ভিস খুঁজে বের করে সরিয়ে দিন। - পূর্ববর্তী ধাপে কমেন্ট করা বা মুছে ফেলা কোডের লাইনগুলো থাকতে পারে এমন ফাংশনগুলো শনাক্ত করুন, বিশেষ করে যেগুলো ওই লাইনগুলো থেকে প্রাপ্ত তথ্য ব্যবহার করে, এবং সার্ভিস কলগুলোকে প্রয়োজনীয় ফাংশনগুলোতে সরিয়ে নিন। পূর্ববর্তী ধাপগুলোতে করা পরিবর্তনগুলো অন্তর্ভুক্ত করার জন্য আপনার কোডবেস পুনর্বিন্যাস করুন বা নতুন করে লিখুন।
- কোডটি সেভ করুন এবং একটি টেস্ট ডেপ্লয়মেন্ট তৈরি করুন। টেস্ট ডেপ্লয়মেন্ট তৈরি করার সময়, নিশ্চিত করুন যে ‘Config’ ফিল্ডটি বর্তমান ব্যবহারকারীর জন্য ‘Installed’ করা আছে এবং ‘Config’ বক্সের নিচের টেক্সটে ‘Test in
AuthMode.NONE’ লেখা আছে। - টেস্ট ডেপ্লয়মেন্টটি চালু করুন এবং এক্সটেনশন মেনুটি খুলুন।
- যদি মেনুর সমস্ত আইটেম দেখা যায়, তাহলে সমস্যাটি সমাধান হয়ে গেছে। যদি আপনি শুধু হেল্প মেনুটি দেখতে পান, তাহলে ধাপ ১-এ ফিরে যান। হতে পারে আপনি কোনো সার্ভিস কল মিস করেছেন।