ব্যবহারকারীর ডেটা, অন্যান্য গুগল সিস্টেম এবং বাহ্যিক সিস্টেমের সাথে যোগাযোগের জন্য গুগল অ্যাপস স্ক্রিপ্ট ৩০টিরও বেশি বিল্ট-ইন সার্ভিস প্রদান করে। এই সার্ভিসগুলো জাভাস্ক্রিপ্টের স্ট্যান্ডার্ড Math অবজেক্টের মতো গ্লোবাল অবজেক্ট হিসেবে সরবরাহ করা হয়। উদাহরণস্বরূপ, ঠিক যেমন Math random() এর মতো মেথড এবং PI মতো কনস্ট্যান্ট রয়েছে, তেমনি অ্যাপস স্ক্রিপ্টের Spreadsheet সার্ভিসে openById(id) এর মতো মেথড, Range মতো ক্লাস (চাইল্ড অবজেক্ট) এবং DataValidationCriteria মতো এনাম রয়েছে।
যেসব সার্ভিস গুগল ওয়ার্কস্পেস প্রোডাক্ট নিয়ন্ত্রণ করে, সেগুলোর রেফারেন্স ডকুমেন্টেশন এই সাইটের সাইডবারের 'রেফারেন্স' হেডারের অধীনে 'গুগল ওয়ার্কস্পেস সার্ভিসেস' সেকশনে সংগ্রহ করা হয়েছে। ইউটিলিটি সার্ভিসগুলো (যেমন ইউজার ইন্টারফেস তৈরি করা, এক্সএমএল পার্স করা বা লগ ডেটা লেখার মতো কাজের জন্য) 'স্ক্রিপ্ট সার্ভিসেস' সেকশনে সংগ্রহ করা হয়েছে।
আধুনিক জাভাস্ক্রিপ্ট বৈশিষ্ট্য
অ্যাপস স্ক্রিপ্ট দুটি জাভাস্ক্রিপ্ট রানটাইম সমর্থন করে: আধুনিক ভি৮ রানটাইম এবং মোজিলা-র রাইনো জাভাস্ক্রিপ্ট ইন্টারপ্রেটার দ্বারা চালিত একটি পুরোনো রানটাইম।
V8 রানটাইম আধুনিক ECMAScript সিনট্যাক্স এবং ফিচারসমূহ সমর্থন করে। রাইনো রানটাইমটি পুরোনো জাভাস্ক্রিপ্ট ১.৬ স্ট্যান্ডার্ডের উপর ভিত্তি করে তৈরি, সাথে ১.৭ এবং ১.৮ এর কিছু ফিচারও রয়েছে। আপনার স্ক্রিপ্টের জন্য কোন রানটাইম ব্যবহার করবেন তা বেছে নিন , তবে V8 রানটাইম ব্যবহারের জন্য জোরালোভাবে সুপারিশ করা হয়।
প্রতিটি রানটাইম জাভাস্ক্রিপ্ট ক্লাস এবং অবজেক্ট সমর্থন করে, যা আপনার স্ক্রিপ্টের জন্য উপলব্ধ থাকে। এর পাশাপাশি গুগলের বিল্ট-ইন এবং উন্নত পরিষেবাগুলোও ব্যবহার করা যায়। আপনার স্ক্রিপ্টগুলো Array , Date , RegExp ইত্যাদির মতো সাধারণ অবজেক্টের পাশাপাশি Math এবং Object গ্লোবাল অবজেক্টগুলোও ব্যবহার করতে পারে।
যেহেতু অ্যাপস স্ক্রিপ্ট কোড গুগলের সার্ভারে চলে ( এইচটিএমএল-সার্ভিস পেজগুলো ছাড়া), তাই ব্রাউজার-ভিত্তিক জাভাস্ক্রিপ্টের ফিচার যেমন ডম ম্যানিপুলেশন বা Window এপিআই অ্যাপস স্ক্রিপ্টে পাওয়া যায় না।
স্বয়ংক্রিয় সম্পূর্ণতা
স্ক্রিপ্ট এডিটর একটি "কন্টেন্ট অ্যাসিস্ট" ফিচার প্রদান করে, যা সাধারণত "অটোকমপ্লিট" নামে পরিচিত। এটি স্ক্রিপ্টের বর্তমান প্রেক্ষাপটে বৈধ গ্লোবাল অবজেক্ট, মেথড এবং এনামগুলো প্রদর্শন করে। যখনই আপনি কোনো গ্লোবাল অবজেক্ট, এনাম, বা অ্যাপস স্ক্রিপ্ট ক্লাস রিটার্ন করে এমন কোনো মেথড কলের পরে একটি পিরিয়ড (.) টাইপ করেন, তখন অটোকমপ্লিট সাজেশনগুলো স্বয়ংক্রিয়ভাবে প্রদর্শিত হয়। উদাহরণস্বরূপ:
- আপনি যদি কোনো গ্লোবাল অবজেক্টের পুরো নামটি টাইপ করেন বা অটোকমপ্লিট থেকে একটি নির্বাচন করে
.(একটি পিরিয়ড) টাইপ করেন, তাহলে আপনি সেই ক্লাসের সমস্ত মেথড এবং এনাম দেখতে পাবেন। - আপনি কয়েকটি অক্ষর টাইপ করলে, সেই অক্ষরগুলো দিয়ে শুরু হওয়া সমস্ত বৈধ সাজেশন দেখতে পাবেন।
বৈশ্বিক বস্তু
প্রতিটি সার্ভিস অন্তত একটি গ্লোবাল (শীর্ষ-স্তরের) অবজেক্ট প্রদান করে; উদাহরণস্বরূপ, Gmail সার্ভিসটি শুধুমাত্র GmailApp অবজেক্ট থেকে অ্যাক্সেস করা হয়। কিছু সার্ভিস একাধিক গ্লোবাল অবজেক্ট প্রদান করে; উদাহরণস্বরূপ, Base সার্ভিসে চারটি গ্লোবাল অবজেক্ট অন্তর্ভুক্ত রয়েছে: Browser , Logger , MimeType , এবং Session ।
পদ্ধতি
প্রায় সকল বিল্ট-ইন বা অ্যাডভান্সড সার্ভিসের গ্লোবাল অবজেক্টগুলোতে এমন মেথড থাকে যা ডেটা অথবা একটি অ্যাপস স্ক্রিপ্ট ক্লাস রিটার্ন করে। স্ক্রিপ্টগুলো এই ফরম্যাটে মেথড কল করে:
GlobalObjectName.methodName(argument1, argument2, ..., argumentN);
উদাহরণস্বরূপ, একটি স্ক্রিপ্ট Gmail সার্ভিসের sendEmail(recipient, subject, body) মেথডটিকে এইভাবে কল করে একটি ইমেল পাঠাতে পারে:
GmailApp.sendEmail('claire@example.com', 'Subject line', 'This is the body.');
যদি কোনো মেথড অন্য কোনো অ্যাপস স্ক্রিপ্ট ক্লাস রিটার্ন করে, তাহলে মেথড কলগুলো এক লাইনে চেইন করুন। (রিটার্ন টাইপ অটোকমপ্লিট এবং মেথডের রেফারেন্স ডকুমেন্টেশন উভয় স্থানেই দেখানো হয়।) উদাহরণস্বরূপ, DocumentApp.create() মেথডটি একটি Document রিটার্ন করে; সুতরাং, কোডের নিম্নলিখিত দুটি অংশ সমতুল্য:
var doc = DocumentApp.create('New document');
var body = doc.getTab('t.0').asDocumentTab().getBody();
body.appendParagraph('New paragraph.');
// Same result as above.
DocumentApp.create('New document').getTab('t.0').asDocumentTab().getBody()
.appendParagraph('New paragraph.');
শিশুদের ক্লাস
প্রতিটি সার্ভিসে এক বা একাধিক চাইল্ড ক্লাস থাকে, যেগুলোকে আপনি টপ লেভেল থেকে গ্লোবাল অবজেক্ট হিসেবে অ্যাক্সেস করতে পারবেন না। আপনি এই ক্লাসগুলো তৈরি করার জন্য new কীওয়ার্ডও ব্যবহার করতে পারবেন না, যেমনটা আপনি Date মতো স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট ক্লাসের ক্ষেত্রে করে থাকেন। একটি চাইল্ড ক্লাস অ্যাক্সেস করতে হলে, আপনাকে অবশ্যই এমন একটি মেথড কল করতে হবে যা সেই ক্লাসটিকে রিটার্ন করে। আপনি যদি কোনো নির্দিষ্ট ক্লাস কীভাবে অ্যাক্সেস করবেন তা নিয়ে নিশ্চিত না হন, তাহলে সার্ভিসটির রেফারেন্স ডকুমেন্টেশনের জন্য রুট পেজটি দেখুন—সেখানে সার্ভিসটির ক্লাসগুলো এবং যে মেথডগুলো সেগুলোকে রিটার্ন করে, তার তালিকা দেওয়া থাকে।
ইন্টারফেস
কিছু সার্ভিসে রেফারেন্স ডকুমেন্টেশনে "ইন্টারফেস" নামে চিহ্নিত ক্লাস অন্তর্ভুক্ত থাকে। এগুলো হলো জেনেরিক ক্লাস, যা এমন সব মেথডের রিটার্ন টাইপ হিসেবে ব্যবহৃত হয়, যেগুলোর সুনির্দিষ্ট টাইপ আগে থেকে নির্ধারণ করা যায় না। উদাহরণস্বরূপ, Document সার্ভিসের Body.getChild(childIndex) মেথডটি একটি জেনেরিক Element অবজেক্ট রিটার্ন করে। Element ইন্টারফেসটি অন্য কোনো ক্লাসকে প্রতিনিধিত্ব করে, যা সম্ভবত Paragraph বা Table হতে পারে। ইন্টারফেস অবজেক্টগুলো নিজে থেকে খুব কমই কার্যকর; এর পরিবর্তে, অবজেক্টটিকে একটি নির্দিষ্ট ক্লাসে কাস্ট করার জন্য Element.asParagraph() এর মতো কোনো মেথড কল করতে হয়।
এনাম
বেশিরভাগ পরিষেবাতেই নামযুক্ত মানের এনাম (গণনাকৃত প্রকার) অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, গুগল ড্রাইভ পরিষেবাটি কোন ব্যবহারকারীর কোনো ফাইল বা ফোল্ডারে অ্যাক্সেস আছে তা নির্ধারণ করতে Access এবং Permission এনাম ব্যবহার করে। বেশিরভাগ ক্ষেত্রে, আপনি গ্লোবাল অবজেক্ট থেকে এই এনামগুলো অ্যাক্সেস করেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
// Creates a folder that anyone on the Internet can read from and write to.
// (Domain administrators can prohibit this setting for Google Workspace users.)
var folder = DriveApp.createFolder('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);