সম্প্রদায় সংযোগকারীদের জন্য ত্রুটি পরিচালনা এবং বার্তা

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

এই ডকুমেন্টে কানেক্টরের ক্ষেত্রে ঘটতে পারে এমন ত্রুটি, এরর মেসেজ কীভাবে কাজ করে এবং কানেক্টরের ত্রুটিগুলো কীভাবে সঠিকভাবে সমাধান করতে হয়, তা বর্ণনা করা হয়েছে।

তথ্য: জাভাস্ক্রিপ্টে এক্সেপশন হ্যান্ডলিং সম্পর্কে আরও জানতে try...catch স্টেটমেন্ট দেখুন।

ত্রুটির প্রকারভেদ

আপনার কানেক্টর ব্যবহার করার সময় একজন ব্যবহারকারী যে ধরনের ও কারণের ত্রুটির সম্মুখীন হতে পারেন, সেগুলো সাধারণত নিম্নলিখিত তিনটি বিভাগের কোনো একটির অন্তর্ভুক্ত হয়:

  1. সংযোগকারী অভ্যন্তরীণ ত্রুটি
  2. সংযোগকারী বাহ্যিক ত্রুটি
  3. [ডেটা স্টুডিও ত্রুটি]

কানেক্টরের অভ্যন্তরীণ ও বাহ্যিক ত্রুটিগুলো কানেক্টর ডেভেলপারের দ্বারা সমাধান করা উচিত। এই ত্রুটিগুলো ডেভেলপারের লেখা কোডের কারণে ঘটে থাকে।

সংযোগকারী অভ্যন্তরীণ ত্রুটি

কানেক্টর কার্যকর হওয়ার সময় অভ্যন্তরীণ ত্রুটি ঘটে। উদাহরণস্বরূপ, যদি কোনো কানেক্টর getData() ফাংশন কার্যকর করার সময় কোনো API প্রতিক্রিয়া পার্স করতে না পারে। এই ত্রুটিগুলো আগে থেকে অনুমান করা উচিত এবং যেখানে প্রযোজ্য, সেখানে ব্যবহারকারী-বান্ধব ব্যাখ্যাসহ সমাধান করা উচিত।

কানেক্টরের অভ্যন্তরীণ ত্রুটি কীভাবে সমাধান করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, কানেক্টরের ত্রুটি সমাধানের সর্বোত্তম পদ্ধতি দেখুন।

সংযোগকারী বাহ্যিক ত্রুটি

কানেক্টর কার্যকর হওয়ার পরে এর বাহ্যিক ত্রুটি ঘটে। উদাহরণস্বরূপ, যখন তিনটি ফিল্ডের জন্য করা getData() অনুরোধ কেবল দুটির ডেটা ফেরত দেয়। যদিও কানেক্টরটির কার্য সম্পাদন সম্পন্ন হয়েছে, এটি ডেটা স্টুডিওর অনুরোধটি পূরণ করতে পারেনি। পুঙ্খানুপুঙ্খ পরীক্ষার মাধ্যমে এই ত্রুটিগুলো প্রতিরোধ করা সম্ভব।

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

ডেটা স্টুডিও ত্রুটি

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

যদি ত্রুটিটি সরাসরি কানেক্টরের সাথে সম্পর্কিত না হয়, তাহলে কানেক্টর ডেভেলপারের করণীয় কোনো পদক্ষেপ নেই। ব্যবহারকারীরা [ডেটা স্টুডিও হেল্প সেন্টার] পরিদর্শন করে অতিরিক্ত সাহায্য পেতে পারেন।

ত্রুটির বার্তা দেখানো হচ্ছে

অ্যাডমিন স্ট্যাটাসের উপর ভিত্তি করে ত্রুটির বিবরণ দেখানো হচ্ছে

যখন কোনো কানেক্টর ত্রুটি দেখায়, তখন ডেটা স্টুডিও ব্যবহারকারীর অ্যাডমিন স্ট্যাটাসের ওপর নির্ভর করে ত্রুটির বার্তাটি প্রদর্শন করে।

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

ব্যবহারকারীর সামনে ত্রুটি দেখানো

ডিফল্টরূপে, শুধুমাত্র কানেক্টর অ্যাডমিনরাই ত্রুটির বিবরণ দেখতে পান। এটি স্ট্যাক ট্রেসে এপিআই কী-এর মতো সংবেদনশীল তথ্যের অনিচ্ছাকৃত প্রকাশ রোধ করতে সাহায্য করে। নন-অ্যাডমিন ব্যবহারকারীদের ত্রুটির বার্তা দেখানোর জন্য, ডেটা স্টুডিও অ্যাপস স্ক্রিপ্ট সার্ভিস থেকে newUserError() ব্যবহার করুন।

উদাহরণ:

try {
  // API request that can be malformed.
  getDataFromAPI();
} catch (e) {
  DataStudioApp.createCommunityConnector()
      .newUserError()
      .setDebugText('Error fetching data from API. Exception details: ' + e)
      .setText('There was an error communicating with the service. Try again later, or file an issue if this error persists.')
      .throwException();

}

এই উদাহরণে, setText() সকল ব্যবহারকারীকে দেখানো হবে এমন টেক্সট সেট করে, অন্যদিকে setDebugText() শুধুমাত্র অ্যাডমিন ব্যবহারকারীদের দেখানো হবে এমন টেক্সট সেট করে।

কানেক্টর ত্রুটি মোকাবেলার সর্বোত্তম পদ্ধতি

আপনার কানেক্টর কোড নির্বাহের সময় যত বেশি সম্ভব ত্রুটি শনাক্ত ও সমাধান করার চেষ্টা করা উচিত। উদাহরণস্বরূপ, কিছু সাধারণ অপারেশন যা ত্রুটি বা অনাকাঙ্ক্ষিত অবস্থার কারণ হতে পারে, সেগুলো হলো:

  • ইউআরএল আনার একটি ব্যর্থ প্রচেষ্টা (ক্ষণস্থায়ী ত্রুটি, সময়সীমা অতিক্রান্ত)
  • অনুরোধকৃত সময়কালের জন্য কোনো ডেটা উপলব্ধ নেই।
  • এপিআই থেকে প্রাপ্ত ডেটা পার্স বা ফরম্যাট করা যায় না।
  • অনুমোদন টোকেনগুলো প্রত্যাহার করা হয়েছে।

পুনরুদ্ধারযোগ্য ত্রুটিগুলি পরিচালনা করুন

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

ক্যাচ এবং থ্রো ত্রুটি

যেসব ত্রুটি পুনরুদ্ধার করা সম্ভব নয়, সেগুলো শনাক্ত করে পুনরায় থ্রো করা উচিত। পুনরায় থ্রো করা ত্রুটিটি ব্যবহারকারীদের বুঝতে সাহায্য করবে যে ত্রুটিটি কেন ঘটেছে। যদি সমস্যাটি সমাধান করা সম্ভব হয়, তবে প্রতিকারমূলক পদক্ষেপ সম্পর্কে বিস্তারিত তথ্য প্রদান করা উচিত।

ব্যবহারকারীর সামনে ত্রুটি দেখানো দেখুন।

স্ট্যাকড্রাইভারে ত্রুটিগুলি লগ করুন

ত্রুটি এবং অন্যান্য বার্তা লগ করার জন্য স্ট্যাকড্রাইভার ব্যবহার করুন। এটি ত্রুটি বুঝতে, সমস্যা ডিবাগ করতে এবং অনিয়ন্ত্রিত এক্সেপশন শনাক্ত করতে সাহায্য করে।

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

অপ্রচলিত: নিরাপদ ত্রুটি বার্তার জন্য DS_USER: উপসর্গ ব্যবহার করুন।

নন-অ্যাডমিন ব্যবহারকারীদের জন্য ব্যবহার-বান্ধব ত্রুটি বার্তা প্রদান করতে, ত্রুটি বার্তার সাথে DS_USER: প্রিফিক্সটি অন্তর্ভুক্ত করুন। এই প্রিফিক্সটি নন-অ্যাডমিন ব্যবহারকারীদের জন্য নিরাপদ বার্তা শনাক্ত করতে ব্যবহৃত হয় এবং এটি মূল ত্রুটি বার্তায় অন্তর্ভুক্ত থাকে না।

নিম্নলিখিত উদাহরণগুলিতে এমন একটি পরিস্থিতি অন্তর্ভুক্ত রয়েছে যেখানে ত্রুটির বার্তা নন-অ্যাডমিন ব্যবহারকারীদের দেখানো হবে এবং আরেকটি পরিস্থিতিতে শুধুমাত্র অ্যাডমিন ব্যবহারকারীদের দেখানো হবে:

ডেটা-স্টুডিও/ত্রুটিসমূহ জিএস
function showErrorToAllUsers() {
  try {
    // Code that might fail.
    throw new Error("Something went wrong");
  } catch (e) {
    throw new Error("DS_USER:This will be shown to admin & non-admin.");
  }
}

function showErrorToAdminUsers() {
  // Only admin users will see the following error.
  try {
    // Code that might fail.
    throw new Error("Something went wrong");
  } catch (e) {
    throw new Error("This message will only be shown to admin users");
  }
}