সমস্যা সমাধান

এমনকি সবচেয়ে অভিজ্ঞ ডেভেলপাররাও প্রথম চেষ্টাতেই খুব কমই কোড সঠিকভাবে লেখেন, যার ফলে সমস্যা সমাধান ডেভেলপমেন্ট প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ হয়ে ওঠে। এই বিভাগে আপনার স্ক্রিপ্টগুলিতে ত্রুটি খুঁজে বের করার, বোঝার এবং ডিবাগ করার কৌশলগুলি অন্তর্ভুক্ত করা হয়েছে।

ত্রুটি বার্তা

যখন আপনার স্ক্রিপ্টে কোনও ত্রুটি দেখা দেয়, তখন একটি লাইন নম্বর সহ একটি ত্রুটি বার্তা উপস্থিত হয়। দুটি মৌলিক ধরণের ত্রুটি রয়েছে: সিনট্যাক্স ত্রুটি এবং রানটাইম ত্রুটি

বাক্য গঠন ত্রুটি

যখন কোড জাভাস্ক্রিপ্ট ব্যাকরণ অনুসরণ করে না তখন সিনট্যাক্স ত্রুটি ঘটে এবং আপনি যখন স্ক্রিপ্টটি সংরক্ষণ করেন তখন তা সনাক্ত হয়। উদাহরণস্বরূপ, নিম্নলিখিত স্নিপেটে একটি সিনট্যাক্স ত্রুটি রয়েছে:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

সমস্যা হলো ৪র্থ লাইনের শেষে একটি ) অক্ষর অনুপস্থিত। স্ক্রিপ্টটি সংরক্ষণ করার সময়, নিম্নলিখিত ত্রুটিটি প্রদর্শিত হবে:

আর্গুমেন্ট তালিকার পরে ) অনুপস্থিত। (লাইন ৪)

এই ত্রুটিগুলি তাৎক্ষণিকভাবে খুঁজে পাওয়া যায়, যার ফলে সমস্যা সমাধান করা সহজ হয়। আপনার প্রকল্পে কেবলমাত্র বৈধ কোড সংরক্ষণ করা হয়।

রানটাইম ত্রুটি

রানটাইম ত্রুটি ঘটে যখন কোনও ফাংশন বা ক্লাস ভুলভাবে ব্যবহৃত হয় এবং স্ক্রিপ্টটি চালানোর সময় সনাক্ত করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি রানটাইম ত্রুটির কারণ হয়:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

কোডটি সঠিকভাবে ফর্ম্যাট করা হলেও, "john" একটি অবৈধ ইমেল ঠিকানা। নিম্নলিখিত ত্রুটিটি দেখা যাচ্ছে:

অবৈধ ইমেল: জন (লাইন ৫)

এই ত্রুটিগুলি চ্যালেঞ্জিং কারণ ডেটা প্রায়শই স্প্রেডশিট বা ফর্মের মতো বহিরাগত উৎস থেকে নেওয়া হয়। কারণ সনাক্ত করতে ডিবাগিং কৌশল ব্যবহার করুন।

সাধারণ ত্রুটি

নিচে সাধারণ ত্রুটি এবং তাদের কারণগুলির একটি তালিকা দেওয়া হল।

পরিষেবাটি অনেকবার চালু করা হয়েছে: <action name>

এই ত্রুটিটি ইঙ্গিত দেয় যে আপনি কোনও কাজের জন্য আপনার দৈনিক কোটা অতিক্রম করেছেন, যেমন অনেক বেশি ইমেল পাঠানো। কোটা অ্যাকাউন্টের ধরণ অনুসারে পরিবর্তিত হয় এবং পরিবর্তন সাপেক্ষে। অ্যাপস স্ক্রিপ্ট কোটা ডকুমেন্টেশনে সীমা দেখুন।

সার্ভার উপলব্ধ নেই। অথবা সার্ভার ত্রুটি ঘটেছে, অনুগ্রহ করে আবার চেষ্টা করুন।

সম্ভাব্য কারণগুলির মধ্যে রয়েছে:

  • একটি Google সার্ভার অস্থায়ীভাবে অনুপলব্ধ। অপেক্ষা করুন এবং আবার চেষ্টা করুন।
  • আপনার স্ক্রিপ্টের একটি ত্রুটিতে সংশ্লিষ্ট বার্তা নেই। সমস্যাটি আলাদা করার জন্য ডিবাগ করার চেষ্টা করুন।
  • গুগল অ্যাপস স্ক্রিপ্টে একটি বাগ আছে। বাগস এ বাগ রিপোর্ট অনুসন্ধান করুন এবং ফাইল করুন।

এই কাজটি সম্পাদনের জন্য অনুমোদন প্রয়োজন।

স্ক্রিপ্টটি চালানোর জন্য প্রয়োজনীয় অনুমোদনের অভাব রয়েছে। যখন একটি স্ক্রিপ্ট একটি ট্রিগার থেকে বা একটি পরিষেবা হিসাবে চলে, তখন একটি অনুমোদন ডায়ালগ উপস্থাপন করা যাবে না।

স্ক্রিপ্টটি অনুমোদন করতে, স্ক্রিপ্ট সম্পাদকটি খুলুন এবং যেকোনো ফাংশন চালান। যদি স্ক্রিপ্টটি নতুন অননুমোদিত পরিষেবা ব্যবহার করে, তাহলে আপনাকে এটি পুনরায় অনুমোদন করতে হবে।

অনুমোদনের আগে বা মেয়াদ শেষ হওয়ার পরে সক্রিয় ট্রিগারগুলি প্রায়শই এই ত্রুটির কারণ হয়। যদি কোনও অ্যাড-অন এটির কারণ হয়, তাহলে পুনরায় অনুমোদনের জন্য অ্যাড-অনটি আবার ব্যবহার করুন। সমস্যাযুক্ত ট্রিগারগুলি সরান:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টে, ট্রিগারস ক্লিক করুন।
  2. ট্রিগারের পাশে, More > Delete trigger এ ক্লিক করুন।

বিকল্পভাবে, অ্যাড-অনটি আনইনস্টল করুন

গ্রানুলার অনুমতির কারণেও এই ত্রুটিগুলি হতে পারে। ট্রিগার এক্সিকিউশনগুলি সুরক্ষিত রাখতে অনুমোদনের স্কোপ পৃষ্ঠাটি দেখুন।

অ্যাক্সেস অস্বীকৃত: DriveApp অথবা ডোমেন নীতি তৃতীয় পক্ষের Drive অ্যাপগুলিকে অক্ষম করেছে

Google Workspace অ্যাডমিনিস্ট্রেটররা তাদের ডোমেনের জন্য Drive API অক্ষম করতে পারেন, যা ব্যবহারকারীদের Drive পরিষেবা ব্যবহার করে এমন Drive অ্যাপ বা Apps Script অ্যাড-অন ব্যবহার করতে বাধা দেয়।

যদি কোনও অ্যাড-অন বা ওয়েব অ্যাপ ডোমেন-ওয়াইড ইনস্টলেশনের জন্য প্রকাশিত হয় এবং কোনও প্রশাসক দ্বারা ইনস্টল করা হয়, তাহলে ড্রাইভ API অক্ষম থাকলেও স্ক্রিপ্টটি কাজ করে।

স্ক্রিপ্টটির সক্রিয় ব্যবহারকারীর পরিচয় পাওয়ার অনুমতি নেই।

সক্রিয় ব্যবহারকারীর পরিচয় এবং ইমেল অনুপলব্ধ। AuthMode.FULL ব্যতীত অন্য অনুমোদন মোডে Session.getActiveUser() বা Session.getEffectiveUser() কল করার ফলে এটি ঘটে। যদি আপনার স্ক্রিপ্টটি ট্রিগারে চলে, তাহলে আপনি Apps Script ইভেন্ট অবজেক্টের authMode সম্পত্তিতে অনুমোদন মোডটি খুঁজে পেতে পারেন।

অনুমোদন মোডের উপর ভিত্তি করে এটির সমস্যা সমাধান করুন:

  • AuthMode.FULL তে, Session.getEffectiveUser() ব্যবহার করার কথা বিবেচনা করুন।
  • AuthMode.LIMITED এ, নিশ্চিত করুন যে মালিক স্ক্রিপ্টটি অনুমোদিত করেছেন।
  • অন্যান্য অনুমোদন মোডে, উভয় পদ্ধতিতে কল করা এড়িয়ে চলুন।
  • আপনি যদি একজন Google Workspace গ্রাহক হন যিনি নতুন করে ইনস্টলযোগ্য ট্রিগার থেকে এই সতর্কতার সম্মুখীন হচ্ছেন, তাহলে নিশ্চিত করুন যে ট্রিগারটি আপনার প্রতিষ্ঠানের একজন ব্যবহারকারী হিসেবে চলছে।

লাইব্রেরি অনুপস্থিত।

যদি একসাথে অনেক লোক লাইব্রেরি ব্যবহার করে, তাহলে লাইব্রেরিটি অনুপস্থিত বলে রিপোর্ট করা হতে পারে। এটি সমাধানের জন্য:

  • লাইব্রেরির কোডটি সরাসরি আপনার স্ক্রিপ্টে কপি করুন।
  • আপনার নিজের অ্যাকাউন্ট থেকে লাইব্রেরিটি কপি করুন এবং স্থাপন করুন।
  • যদি আপনার স্ক্রিপ্টটি কাজ করার জন্য লাইব্রেরিটি প্রয়োজন না হয়, তাহলে আপনার স্ক্রিপ্ট প্রকল্প থেকে লাইব্রেরিটি সরিয়ে ফেলুন।

লাইব্রেরি সংস্করণ অথবা স্থাপনার সংস্করণ অনুপস্থিত থাকার কারণে ত্রুটি ঘটেছে। ত্রুটি কোড Not_Found

এই ত্রুটি বার্তাটি নিম্নলিখিতগুলির মধ্যে একটি নির্দেশ করে:

  • একটি স্থাপনার ব্যবহৃত স্ক্রিপ্ট সংস্করণটি মুছে ফেলা হয়েছে। এটি সমাধান করতে, স্থাপনা সম্পাদনা করুন এবং একটি ভিন্ন স্ক্রিপ্ট সংস্করণ নির্বাচন করুন।
  • স্ক্রিপ্ট দ্বারা ব্যবহৃত একটি লাইব্রেরি সংস্করণ মুছে ফেলা হয়েছে। এটি সমাধানের জন্য, "লাইব্রেরি" এর অধীনে স্ক্রিপ্ট সম্পাদকে, লাইব্রেরিটি খুঁজুন এবং একটি ভিন্ন সংস্করণে আপডেট করুন অথবা লাইব্রেরিটি সরিয়ে দিন। আপডেট করতে, সংস্করণ নম্বরে ক্লিক করুন এবং একটি ভিন্ন সংস্করণ নির্বাচন করুন। অপসারণ করতে, More > Remove এ ক্লিক করুন।
  • একটি লাইব্রেরিতে আরেকটি লাইব্রেরি থাকে এবং সেই লাইব্রেরির সংস্করণটি মুছে ফেলা হয়েছে। এটি সমাধানের জন্য, লাইব্রেরির লেখকের সাথে যোগাযোগ করুন অথবা আপনার স্ক্রিপ্ট ব্যবহার করে এমন লাইব্রেরির একটি ভিন্ন সংস্করণ ব্যবহার করুন।

ত্রুটি 400: উন্নত পরিষেবা দিয়ে Google Chat API কল করার সময় invalid_scope

যদি আপনি Error 400: invalid_scope এর সম্মুখীন হন যেখানে Some requested scopes cannot be shown " ত্রুটি বার্তাটি থাকে, তাহলে এর অর্থ হল আপনি Apps Script প্রকল্পের appsscript.json ফাইলে কোনও অনুমোদন স্কোপ নির্দিষ্ট করেননি। বেশিরভাগ ক্ষেত্রে, Apps Script স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে কোনও স্ক্রিপ্টের কোন স্কোপ প্রয়োজন, কিন্তু যখন আপনি Chat উন্নত পরিষেবা ব্যবহার করেন, তখন আপনাকে অবশ্যই আপনার স্ক্রিপ্ট যে অনুমোদন স্কোপ ব্যবহার করে তা আপনার Apps Script প্রকল্পের ম্যানিফেস্ট ফাইলে ম্যানুয়ালি যোগ করতে হবে। স্পষ্ট স্কোপ সেট করা দেখুন।

ত্রুটিটি সমাধান করতে, oauthScopes অ্যারের অংশ হিসেবে Apps Script প্রকল্পের appsscript.json ফাইলে উপযুক্ত অনুমোদনের স্কোপ যোগ করুন। উদাহরণস্বরূপ, spaces.messages.create পদ্ধতিটি কল করতে, নিম্নলিখিতগুলি যোগ করুন:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

আপনার অ্যাডমিন <URL> এ UrlFetch কল করার অনুমতি দেয় না।

Google Workspace অ্যাডমিনিস্ট্রেটররা এক্সটার্নাল ডোমেন অ্যাক্সেস নিয়ন্ত্রণ করতে একটি অ্যালাউলিস্ট ব্যবহার করতে পারেন। অ্যালাউলিস্টে URL যোগ করতে আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।

ডিবাগিং

কিছু ত্রুটি সূক্ষ্ম এবং বার্তা ট্রিগার করে না। উদাহরণস্বরূপ, আপনার কোড কার্যকর করতে সক্ষম হতে পারে, কিন্তু ফলাফল অপ্রত্যাশিত। অপ্রত্যাশিতভাবে আচরণ করে এমন স্ক্রিপ্টগুলি তদন্ত করতে নিম্নলিখিত কৌশলগুলি ব্যবহার করুন।

লগিং

স্ক্রিপ্ট এডিটরে ক্লাউড লগিং পরিষেবা অথবা লগার এবং কনসোল পরিষেবা ব্যবহার করে স্ক্রিপ্ট কার্যকর হওয়ার সাথে সাথে তথ্য রেকর্ড করুন।

ত্রুটি প্রতিবেদন

গুগল ক্লাউডে ত্রুটি প্রতিবেদন ব্যবহার করতে, ডিফল্ট প্রকল্পের পরিবর্তে একটি স্ট্যান্ডার্ড, ব্যবহারকারী-পরিচালিত প্রকল্প ব্যবহার করুন।

যখন আপনি একটি স্ট্যান্ডার্ড প্রজেক্ট ব্যবহার করেন, তখন রানটাইম ত্রুটিগুলি স্বয়ংক্রিয়ভাবে Google Cloud Error Reporting-এ রেকর্ড করা হয়। Google Cloud কনসোলে ক্লাউড লগ এবং ত্রুটি প্রতিবেদনগুলি দেখুন

মৃত্যুদণ্ড

গুগল অ্যাপস স্ক্রিপ্ট ক্লাউড লগ সহ প্রতিটি এক্সিকিউশন রেকর্ড করে। এক্সিকিউশন দেখতে, এক্সিকিউশন ক্লিক করুন।

পরিষেবার স্থিতি পরীক্ষা করা হচ্ছে

Google Workspace স্ট্যাটাস ড্যাশবোর্ডে Google Workspace পরিষেবা বিভ্রাটের জন্য পরীক্ষা করুন।

ডিবাগার এবং ব্রেকপয়েন্ট ব্যবহার করুন

আপনার স্ক্রিপ্টে সমস্যাগুলি সনাক্ত করার জন্য, আপনি এটি ডিবাগ মোডে চালাতে পারেন। ডিবাগ মোডে চালানো হলে, একটি স্ক্রিপ্ট যখন একটি ব্রেকপয়েন্টে আঘাত করে তখন বিরতি দেয়, যা আপনার স্ক্রিপ্টে হাইলাইট করা একটি লাইন যা আপনার মনে হয় সমস্যা হতে পারে। যখন একটি স্ক্রিপ্ট বিরতি দেয় তখন এটি সেই সময়ে প্রতিটি ভেরিয়েবলের মান প্রদর্শন করে, যা আপনাকে অনেক লগিং স্টেটমেন্ট যোগ না করেই স্ক্রিপ্টের অভ্যন্তরীণ কার্যকারিতা পরীক্ষা করার অনুমতি দেয়।

একটি ব্রেকপয়েন্ট যোগ করুন

একটি ব্রেকপয়েন্ট যোগ করতে, যে লাইনে ব্রেকপয়েন্ট যোগ করতে চান তার লাইন নম্বরের উপর কার্সার রাখুন। লাইন নম্বরের বাম দিকে, বৃত্তে ক্লিক করুন। নিচের ছবিতে একটি স্ক্রিপ্টে যোগ করা ব্রেকপয়েন্টের একটি উদাহরণ দেখানো হয়েছে:

একটি ব্রেকপয়েন্ট যোগ করুন

ডিবাগ মোডে একটি স্ক্রিপ্ট চালান

ডিবাগ মোডে স্ক্রিপ্টটি চালাতে, এডিটরের উপরে ডিবাগ এ ক্লিক করুন।

স্ক্রিপ্টটি ব্রেকপয়েন্ট সহ লাইনটি চালানোর আগে এটি বিরতি দেয় এবং ডিবাগ তথ্যের একটি টেবিল প্রদর্শন করে। আপনি এই টেবিলটি ব্যবহার করে প্যারামিটারের মান এবং বস্তুতে সংরক্ষিত তথ্যের মতো ডেটা পরিদর্শন করতে পারেন।

স্ক্রিপ্টটি কীভাবে চালানো হবে তা নিয়ন্ত্রণ করতে, ডিবাগার প্যানেলের শীর্ষে, "স্টেপ ইন", "স্টেপ ওভার" এবং "স্টেপ আউট" বোতামগুলি ব্যবহার করুন। এগুলি আপনাকে একবারে এক লাইনে স্ক্রিপ্টটি চালাতে এবং সময়ের সাথে সাথে মানগুলি কীভাবে পরিবর্তিত হয় তা পরীক্ষা করতে দেয়।

ত্রুটি : বর্তমান লাইনের জন্য সোর্স কোড উপলব্ধ নেই।

বর্তমান লাইনের সোর্স কোড উপলব্ধ নেই।

যখন একটি সক্রিয় ডিবাগিং ফাইল উপলব্ধ না থাকে তখন এই ত্রুটিটি দেখা দেয়। Google Apps Script স্ক্রিপ্ট এডিটরে গতিশীলভাবে জেনারেটেড JavaScript (JS) স্ক্রিপ্ট প্রদর্শন সমর্থন করে না, যেমন eval() এবং new Function() ব্যবহার করে তৈরি করা। এই স্ক্রিপ্টগুলি V8 ইঞ্জিনের মধ্যে তৈরি এবং কার্যকর করা হয় কিন্তু এডিটরে স্বতন্ত্র ফাইল হিসাবে উপস্থাপন করা হয় না। আপনি যদি এই স্ক্রিপ্টগুলিতে পদক্ষেপ নেন, তাহলে আপনি এই ত্রুটির সম্মুখীন হবেন।

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি বিবেচনা করুন:

function myFunction() {
  eval('a=2');
}

যখন eval() ব্যবহার করা হয়, তখন এর আর্গুমেন্টকে JS কোড হিসেবে বিবেচনা করা হয় এবং V8 ইঞ্জিনের ভিতরে একটি গতিশীলভাবে তৈরি স্ক্রিপ্ট হিসেবে চালানো হয়। যদি আপনি eval() এ ধাপে ধাপে প্রবেশ করেন, তাহলে এই ত্রুটিটি দেখা যাবে। যদি স্ক্রিপ্টটিতে একটি //# sourceURL মন্তব্য থাকে, তাহলে এর নাম কল স্ট্যাকে দেখানো হবে। অন্যথায়, এটি একটি নামহীন এন্ট্রি হিসেবে প্রদর্শিত হবে।

ত্রুটি বার্তা থাকা সত্ত্বেও, ডিবাগিং সেশন সক্রিয় থাকে এবং এক্সিকিউশন চলতে পারে। এগিয়ে যাওয়ার জন্য, স্টেপ ইন, স্টেপ আউট বা এক্সিকিউশন পুনরায় শুরু করুন। তবে, যতক্ষণ এক্সিকিউশনটি ডায়নামিক স্ক্রিপ্টের আওতার মধ্যে থাকে ততক্ষণ এই ত্রুটিটি প্রদর্শিত হতে থাকে। এক্সিকিউশনটি ডায়নামিক স্ক্রিপ্ট থেকে বেরিয়ে যাওয়ার পরে, এই ত্রুটি ছাড়াই ডিবাগিং চলতে থাকে।

একাধিক গুগল অ্যাকাউন্টের সমস্যা

আপনি যদি একই সময়ে একাধিক Google অ্যাকাউন্টে লগ ইন করেন, তাহলে আপনার অ্যাড-অন এবং ওয়েব অ্যাপ অ্যাক্সেস করতে সমস্যা হতে পারে। মাল্টি-লগইন, অথবা একসাথে একাধিক Google অ্যাকাউন্টে লগ ইন করা, অ্যাপস স্ক্রিপ্ট, অ্যাড-অন বা ওয়েব অ্যাপের জন্য সমর্থিত নয়।

  • একাধিক অ্যাকাউন্টে লগ ইন করে যদি আপনি অ্যাপস স্ক্রিপ্ট এডিটরটি খোলেন , তাহলে গুগল আপনাকে যে অ্যাকাউন্টটি দিয়ে এগিয়ে যেতে চান তা বেছে নিতে অনুরোধ করবে।

  • যদি আপনি একটি ওয়েব অ্যাপ বা অ্যাড-অন খুলেন এবং একাধিক লগইন সমস্যার সম্মুখীন হন, তাহলে নিম্নলিখিত সমাধানগুলির মধ্যে একটি চেষ্টা করে দেখুন:

    • আপনার সমস্ত গুগল অ্যাকাউন্ট থেকে লগ আউট করুন এবং শুধুমাত্র সেই অ্যাকাউন্টে লগ ইন করুন যেখানে আপনি যে অ্যাড-অন বা ওয়েব অ্যাপটি অ্যাক্সেস করতে চান।
    • গুগল ক্রোমে একটি ছদ্মবেশী উইন্ডো খুলুন, অথবা সমতুল্য একটি ব্যক্তিগত ব্রাউজিং উইন্ডো খুলুন, এবং যে গুগল অ্যাকাউন্টে আপনি যে অ্যাড-অন বা ওয়েব অ্যাপটি অ্যাক্সেস করতে চান তাতে লগ ইন করুন।

সাহায্য পাওয়া

প্রশ্ন জিজ্ঞাসা করতে বা বাগ ফাইল করতে আমাদের সহায়তা পৃষ্ঠাটি দেখুন।