প্র্যাকটিক্যাল লাইন-আইটেম ফর্মের জন্য প্যারেন্ট-চাইল্ড ডেটা মডেল
কোট, অর্ডার, রিইম্বার্সমেন্ট ও চেকলিস্টের জন্য প্যারেন্ট-চাইল্ড ডেটা মডেল শিখুন ও এডিটেবল লাইন-আইটেম ফর্মের সরল নকশা ও প্যাটার্ন দেখুন।

কেন একটি রেকর্ডই যথেষ্ঠ নয়
একটি কোট, অর্ডার, রিইম্বার্সমেন্ট রিকোয়েস্ট বা চেকলিস্ট প্রায়ই কেবল এক জিনিসই বর্ণনা করে না। অধিকাংশ ফর্মের উপরে একটি প্রধান রেকর্ড থাকে, আর তার নিচে অনেক ছোট এন্ট্রি থাকে। সবকিছুকে এক রেকর্ডে জোর করলে ফর্মটি পড়তে কষ্টকর, এডিট করতে ঝামেলার এবং ভাঙতে সহজ হয়ে যায়।
শুরুতে একটি বড় টেক্সট ফিল্ড সহজ মনে হতে পারে, কিন্তু তা দ্রুতই সমস্যা দিয়ে দেয়। মানুষ আলাদাভাবে একটি আইটেম যোগ করতে পারে না, একটি সারি ঠিক করতে গিয়ে বাকিগুলো ছোঁয়াচে হতে পারে, বা পুরোনো তথ্য নীর্বিচারে মুছে ফেলতে পারবে না। ভ্যালিডেশনও দুর্বল হয়ে পড়ে, কারণ সিস্টেম আলাদা-আলাদা আইটেমের বদলে একটি ব্লক টেক্সট দেখলে স্পষ্টতা হারায়।
একটি সেলস কোট ভাবুন। একটি কাস্টমার রিকোয়েস্টে পাঁচটি প্রডাক্ট থাকতে পারে, আর প্রতিটির আলাদা পরিমাণ, ইউনিট প্রাইস, ডিসকাউন্ট ও নোট লাগবে। রিইম্বার্সমেন্ট রিকোয়েস্টেও একই কনসেপ্ট কাজ করে। একটি সাবমিশন এক জন এমপ্লয়ীর সঙ্গে সম্পর্কিত, কিন্তু প্রতিটি খরচের তারিখ, ক্যাটাগরি, পরিমাণ এবং রশিদ স্ট্যাটাস আলাদা হয়।
এখানেই প্যারেন্ট-চাইল্ড মডেল উপকারে আসে। প্যারেন্ট রেকর্ড পুরো ফর্মের শেয়ার করা বিবরণ রাখে, যেমন রিকোয়েস্টার, তারিখ, ডিপার্টমেন্ট বা অনুমোদন স্ট্যাটাস। চাইল্ড রেকর্ডগুলো লাইন আইটেমগুলো রাখে। প্রতিটি সারি আলাদাভাবে যোগ, এডিট বা ডিলিট করা যায় মূল রেকর্ড নষ্ট না করে।
এই বিভাজন ফর্মকে ব্যবহার করার দিক থেকে সহজ করে এবং টিমের বিশ্বাস বাড়ায়। যদি এক সারিতে ভুল পরিমাণ বা অনুপস্থিত ফিল্ড থাকে, আপনি শুধুমাত্র সেই সারিটাই ঠিক করতে পারেন। বাকি রেকর্ড অক্ষত থাকে।
একই প্যাটার্ন এডিটেবল চেকলিস্টের ক্ষেত্রেও কার্যকর। চেকলিস্টের এক মালিক এবং এক ডেডলাইন থাকতে পারে, আর প্রতিটি টাস্কের আলাদা লেবেল, দায়িত্বশীল, নোট এবং সম্পন্ন স্ট্যাটাস থাকে। শেয়ার করা বিবরণ এক জায়গায় থাকে, আইটেমের বিবরণ তাদের জায়গায় থাকে।
কিভাবে প্যারেন্ট এবং চাইল্ড রেকর্ড কাজ করে
একটি লাইন-আইটেম ফর্ম সবচেয়ে সহজে ম্যানেজ করা যায় যখন আপনি এটিকে দুই অংশে ভাগ করেন: একটি মেইন রেকর্ড এবং বহু রিলেটেড আইটেম রেকর্ড।
প্যারেন্ট রেকর্ড শুধু সেই তথ্য রাখে যা একবারই দেখানো উচিত। একটি কোটে সেটা হতে পারে কাস্টমার, কোট তারিখ, সেলস ওনার এবং বর্তমান স্ট্যাটাস। একটি রিইম্বার্সমেন্ট রিকোয়েস্টে এটা হতে পারে এমপ্লয়ীর নাম, ডিপার্টমেন্ট, জমা তারিখ এবং অনুমোদন ধাপ।
প্রতিটি চাইল্ড রেকর্ড সেই প্যারেন্টের সাথে লিঙ্ক করা একটি এডিটেবল আইটেম রাখে। একটি কোটে, এক চাইল্ড হতে পারে একটি প্রডাক্ট বা সার্ভিস লাইনের প্রতিনিধিত্ব। একটি চেকলিস্টে, এক চাইল্ড হতে পারে একটি টাস্ক। একটি রিইম্বার্সমেন্ট ফর্মে সাধারণত প্রতিটি চাইল্ড একটি খরচ যা ক্যাটাগরি, পরিমাণ, খরচের তারিখ এবং রশিদ নোটের মতো ফিল্ড রাখে।
সবচেয়ে সহজভাবে ভাবার নিয়ম হলো:
- প্যারেন্ট: পুরো ফর্মের শেয়ার করা বিবরণ
- চাইল্ড: এক সারি, এক আইটেম, এক অ্যাকশন
- লিঙ্ক: চাইল্ডে এমন একটি ফিল্ড যা তার প্যারেন্টের দিকে ইঙ্গিত করে
এই স্ট্রাকচার গুরুত্বপূর্ণ কারণ টোটাল এবং সারাংশগুলো চাইল্ড রো থেকে আসা উচিত, প্যারেন্টের মধ্যে ম্যানুয়ালি টাইপ করা নয়। যখন কেউ একটি আইটেম যোগ, মুছ বা এডিট করে, টোটাল বাস্তব ডেটা থেকে আপডেট হওয়া উচিত। এতে ভুল কমে এবং অনুমোদন ভরসাযোগ্য হয়।
এছাড়া এটি ভ্যালিডেশনকে আরও নির্ভুল করে তোলে। আপনি একটি পরিমাণ আবশ্যক করতে পারেন, নেগেটিভ অ্যামাউন্ট বাতিল করতে পারেন, বা শুধু এক সারিতে অনুপস্থিত তারিখ ফ্ল্যাগ করতে পারেন পুরো ফর্ম আটকে না রেখে।
প্রতিদিনের কাজে সাধারণ ব্যবহার
আপনি এই প্যাটার্নটি দেখতে পাবেন যেখানে এক রেকর্ডের নিচে অনেক এডিটেবল সারি লাগে।
কোট একটি পরিষ্কার উদাহরণ। এক সেলস রেপ এক কোট তৈরি করে, তারপর প্রতিটি প্রডাক্ট বা সার্ভিসের জন্য একটি লাইন যোগ করে। প্রতিটি সারিতে আইটেম নাম, পরিমাণ, ইউনিট প্রাইস, ডিসকাউন্ট, ট্যাক্স বা নোট থাকতে পারে, যখন প্যারেন্টে কাস্টমার, তারিখ এবং অনুমোদন স্ট্যাটাস থাকে।
অর্ডারেও একই ধারণা কাজ করে, কিন্তু সারিগুলো সাধারণত বেশি অপারেশনাল ডিটেইল ধরে রাখে। একটি অর্ডারে একাধিক প্রডাক্ট থাকতে পারে, এবং প্রতিটি সারিতে স্টক স্ট্যাটাস, ওয়্যারহাউস নোট, শিপিং ডিটেইল বা ফুলফিলমেন্ট তারিখ লাগতে পারে। লাইনে-আইটেমগুলো অর্ডার প্লেস হওয়ার পরে কাজ চালায়।
রিইম্বার্সমেন্ট ওয়ার্কফ্লো আরেকটি সাধারণ কেস। একটি রিকোয়েস্ট এক এমপ্লয়ীর ও একটি রিপোর্টিং পিরিয়ডের সঙ্গে যুক্ত, কিন্তু এতে অনেক খরচ থাকতে পারে। প্রতিটি খরচের সারি সাধারণত একটি তারিখ, পরিমাণ, ক্যাটাগরি, ভেন্ডর এবং রশিদের রেফারেন্স রাখে। ম্যানেজাররা প্রায়ই সারিগুলো এক এক করে রিভিউ করে, পুরো রিকোয়েস্টকে একটিই সিদ্ধান্তে সীমাবদ্ধ রাখে না।
চেকলিস্টও একই মডেল মানে, এমনকি যখন দেখতে সহজ মনে হয়। প্যারেন্ট রেকর্ড হতে পারে অনবোর্ডিং প্ল্যান, সাইট ইন্সপেকশন বা সাপ্তাহিক রিভিউ। প্রতিটি চাইল্ড সারি একটি টাস্ক যা তার নিজস্ব ডান/হয়েছে স্টেট, নোট, দায়িত্বশীল বা শেডিউল ডেট রাখে।
একটি সহজ টেস্ট: ফর্মের কি একটি হেডার আছে এবং তার নিচে অনেক সারি যা মানুষ যোগ, এডিট বা মুছে ফেলবে? যদি হ্যাঁ, প্যারেন্ট-চাইল্ড স্ট্রাকচার সাধারণত পরিষ্কার পছন্দ।
তৈরি করার আগে স্ট্রাকচার প্ল্যান করুন
ভালো ফর্ম সাধারণত একটি প্রশ্ন দিয়ে শুরু হয়: কোনটি পুরো রেকর্ডের জন্য, এবং কোনটি প্রতিটি সারিতে পুনরাবৃত্ত হয়?
প্রথমে সেটার উত্তর দিলে অনেক পরে সমস্যাই এড়ানো যায়। আপনি ডুপ্লিকেট ফিল্ড, এলোমেলো টোটাল এবং পরিচালনা করতে কষ্টকর সারি এড়াতে পারবেন।
প্যারেন্ট রেকর্ডে শুধু সেই ফিল্ড রাখুন যা পুরো ডকুমেন্টকে বর্ণনা করে। একটি কোটে সেটা হতে পারে কাস্টমার নাম, কোট তারিখ, মুদ্রা, সেলস রিপ এবং সার্বিক অনুমোদন স্ট্যাটাস। একটি রিইম্বার্সমেন্ট রিকোয়েস্টে এটা হতে পারে এমপ্লয়ীর নাম, ডিপার্টমেন্ট, জমা তারিখ এবং চূড়ান্ত সিদ্ধান্ত।
চাইল্ড রেকর্ডে সেই ফিল্ড রাখুন যা প্রতিটি লাইনের জন্য প্রযোজ্য। সেটা হতে পারে আইটেম নাম, পরিমাণ, ইউনিট প্রাইস, খরচের তারিখ, ক্যাটাগরি, রশিদ টাইপ, টাস্ক লেবেল বা সারি নোট। যদি একটি মান প্রতিটি সারিতে ভিন্ন হতে পারে, সাধারণত তা চাইল্ডে থাকা উচিত।
একটি দরকারী টেস্ট: আপনি যদি একটি সারি মুছে ফেলেন, সেই মান কি সঙ্গেই মুছে যাবে? যদি হ্যাঁ, তাহলে সেটি সম্ভবত চাইল্ড রেকর্ডে থাকা উচিত।
প্রতিটি সারিতেই একটি ইউনিক আইডি থাকা উচিত। কেবল সারির অবস্থানের ওপর (প্রথম, দ্বিতীয়, তৃতীয়) নির্ভর করবেন না। একটি সারি আইডি নির্দিষ্ট খরচ এডিট করা, মুছে ফেলা আইটেম ফিরিয়ে আনা বা কী changed হয়েছে ট্র্যাক করা সহজ করে তোলে।
তৈরির আগে নির্ধারণ করুন মানুষ কিভাবে সারিগুলোর সঙ্গে কাজ করবে। তারা কি নতুন সারি যোগ করতে পারবে, একটি সারি ডুপ্লিকেট করতে পারবে, সরাতে পারবে, পুনঃক্রমায়িত করতে পারবে বা দীর্ঘ তালিকা ফিল্টার করতে পারবে? এছাড়া সিদ্ধান্ত নিন কখন টোটাল এবং স্ট্যাটাস আপডেট হবে। কিছু টিম চাইতে পারে সারি বদলালেই টোটাল রিফ্রেশ হোক। অন্যরা পছন্দ করতে পারে শুধুমাত্র রেকর্ড সেভ বা সাবমিট করলে আপডেট হোক। উভয় পদ্ধতি কাজ করতে পারে, কিন্তু নিয়ম কনসিস্টেন্ট থাকা উচিত।
স্ট্যাটাস নিয়মও গুরুত্বপূর্ণ। যদি একটি খরচ প্রত্যাখ্যাত হয়, কি পুরো রিকোয়েস্ট ড্রাফটে ফিরে যাবে, মুলতুবি থাকবে, না কি পারশিয়ালি অনুমোদিত হবে? ব্যবহারকারীরা ফর্মে নির্ভর করতে শুরু করার আগে এই প্রশ্নগুলোর উত্তর দেয়া সহজ।
ফর্ম ব্যবহারকারীর জন্য এডিটিং সহজ করুন
একটি লাইন-আইটেম ফর্ম তখনই সবচেয়ে কার্যকর যখন মানুষ প্যারেন্ট ডিটেইলস এবং আইটেম সারিগুলো একসঙ্গে দেখতে পায়। মূল রেকর্ডটি উপরে রাখুন, তারপর সরাসরি নিচে এডিটেবল টেবিল দেখান। যদি কেউ একটি কোট তৈরি করছে, তারা প্রোডাক্ট যোগ করা শুরু করার আগে কাস্টমার, তারিখ এবং স্ট্যাটাস নিশ্চিত করতে পারা উচিত।
এমন সরল বিন্যাস ভুল কমায় কারণ মানুষকে যা এডিট করছে তা চেক করতে স্ক্রিনের মধ্যে লাফানো লাগবে না।
পুরো কাজটিকে এক স্ক্রিনে রাখুন
নতুন সারি যোগ করা দ্রুত মনে হওয়া উচিত। টেবিলের উপরে বা নিচে একটি স্পষ্ট "আইটেম যোগ করুন" বাটন সাধারণত যথেষ্ট। কেউ যখন সেটিতে ক্লিক করে, একটি খালি সারি বা ছোট ইনলাইন ফর্ম খুলে দিন আলাদা পেজে পাঠানোর বদলে।
এটি বিশেষ করে লম্বা ফর্মে জরুরি। যদি কারো দশটি খরচ টাইপ করতে হয়, প্রতিটি অতিরিক্ত ক্লিক তাদের ধীর করে এবং ভুল হওয়ার সম্ভাবনা বাড়ায়।
সর্বাধিক কার্যকর সারি অ্যাকশনগুলো সাধারণত সবচেয়ে সরল: যোগ, ডুপ্লিকেট, ডিলিট এবং কখনো কখনো সরানো। ডুপ্লিকেট বিশেষ দরকারি যখন একাধিক সারি একইরকম দেখায়, যেমন বারবারের হোটেল রাত বা শুধু সামান্য পরিবর্তন থাকা চেকলিস্ট আইটেম।
যেখানে ত্রুটি হয় সেখানে তা দেখান
লম্বা ফর্মগুলো অটো-সেভ করা উচিত বা অন্তত ব্যবহারকারীরা ড্রাফট সেভ করতে পারা উচিত। ট্যাব বন্ধ হয়ে গেলে বিশ মিনিটের কাজ হারানো একটি দ্রুত উপায়ে ফর্মকে অবিশ্বাসযোগ্য করে তোলে।
ভ্যালিডেশনও পরিষ্কার হওয়া উচিত। যদি একটি সারিতে অনুপস্থিত অ্যামাউন্ট বা অবৈধ পরিমাণ থাকে, ঠিক সেই সারি ও ফিল্ডে ত্রুটি দেখান। ব্যবহারকারীদের পুরো ফর্ম জুড়ে অস্পষ্ট সতর্কতা খুঁজতে বাধ্য করবেন না।
যদি সাতটি খরচ লাইন সঠিক থাকে এবং একটি রশিদের নম্বর ছাড়াই থাকে, কেবল সেই সারিটিই মার্ক করুন। বাকিটা অক্ষত রাখুন এবং মানুষটিকে সেখানে থেকেই সমস্যাটি ঠিক করার সুযোগ দিন।
উদাহরণ: বহু খরচসহ একটি রিইম্বার্সমেন্ট রিকোয়েস্ট
একটি রিইম্বার্সমেন্ট রিকোয়েস্ট ঠিক দেখায় কেন এই মডেল এত কার্যকর। একটি রিকোয়েস্ট প্যারেন্ট রেকর্ড হিসেবে কাজ করে, এবং প্রতিটি খরচ একটি চাইল্ড সারি হয়।
প্যারেন্ট সেই বিবরণ রাখে যা পুরো দাবি-উপরে প্রযোজ্য: এমপ্লয়ীর নাম, দাবির পিরিয়ড, ম্যানেজার এবং সার্বিক স্ট্যাটাস। স্ট্যাটাসটি হতে পারে Draft থেকে Submitted, তারপর Partially Approved বা Approved।
প্রতিটি খরচ সারি শুধু সেই আইটেমের বিবরণ রাখে। একটি সারিতে মर्चেন্ট, ক্রয়ের তারিখ, পরিমাণ, ক্যাটাগরি এবং রশিদ থাকতে পারে—যেমন ট্যাক্সি ভ্রমণের জন্য। অন্যটিতে একই ফিল্ড থাকতে পারে হোটেল বিলের জন্য।
একটি সাধারণ রিকোয়েস্টে তিনটি সারি থাকতে পারে:
- City Taxi, May 3, $28, Travel, receipt attached
- Grand Hotel, May 4, $180, Lodging, receipt attached
- Corner Cafe, May 4, $14, Meals, no receipt
এই স্ট্রাকচার গুরুত্বপূর্ণ কারণ ম্যানেজাররা পরবর্তী ধাপে রিইম্বার্সমেন্ট সারিগুলো একেকটি করে রিভিউ করে। ট্যাক্সি আর হোটেল অনুমোদিত হতে পারে, আর খাবারের খরচ প্রত্যাখ্যাত হতে পারে সংক্ষিপ্ত কারণ দিয়ে যেমন "রশিদ নেই" বা "দৈনিক সীমা ছাড়িয়েছে।"
একটি প্রত্যাখ্যাত সারি পুরো রিকোয়েস্টকে ব্যর্থ করে দেওয়া উচিত নয়। এমপ্লয়ীকে অনুমোদিত আইটেমগুলোর জন্য এখনও ফেরত দেওয়া উচিত, এবং প্রত্যাখ্যাত সারিটি তার কারণসহ দৃশ্যমান থাকা উচিত। এতে প্রক্রিয়াটি বোঝা সহজ হয় এবং পরবর্তীতে অডিট করা সহজ হয়।
টোটালগুলো চাইল্ড রো থেকে আসা উচিত, প্যারেন্টে হাতে টাইপ করা সংখ্যা থেকে নয়। অনেক টিম দুইটি টোটাল রাখে: সব অন্তর্ভুক্ত সারির উপর ভিত্তি করে সাবমিট করা মোট, এবং কেবলমাত্র অনুমোদিত সারির উপর ভিত্তি করে অনুমোদিত মোট। এতে স্পষ্ট হয় কেন প্রদেয় অর্থ মূল অনুরোধের চাইতে কম হতে পারে।
টোটাল, অনুমোদন এবং স্ট্যাটাস পরিবর্তন
একটি লাইন-আইটেম ফর্ম তখনই বিশ্বাসযোগ্য লাগে যখন সংখ্যা ও স্ট্যাটাসগুলো সঠিক সময়ে আপডেট হয়।
যদি একজন ব্যবহারকারী একটি পরিমাণ, মূল্য বা খরচের অ্যামাউন্ট বদলে, টোটালগুলো সেই পরিবর্তন অনুযায়ী পুনঃহিসাব করা উচিত। শেষ সাবমিশন পর্যন্ত অপেক্ষা করলে বিভ্রান্তি তৈরী হয়, বিশেষ করে ডিসকাউন্ট, ট্যাক্স বা অনুমোদন সীমা যুক্ত থাকলে। বেশিরভাগ ক্ষেত্রে প্যারেন্ট টোটাল হিসাবকৃত হওয়া উচিত, এডিটেবল নয়।
অনুমোদন নিয়মেও একই স্পষ্টতা দরকার। একবার রেকর্ড পুরোপুরি অনুমোদিত হলে সিদ্ধান্ত নিন সারিগুলো লক করা হবে কি না। যদি অনুমোদিত সারিগুলো এডিটেবল থাকে, তাহলে ডেটা ম্যানেজার যেটা সাইন করে ছিল তার থেকে বিচ্যুত হয়ে যেতে পারে।
কখনো কখনো অনুমোদন সারি ভিক্তিক হয়, সমস্ত একসাথে নয়। রিইম্বার্সমেন্ট এর উদাহরণে, ভ্রমণ অনুমোদিত হতে পারে, খাবার আংশিক প্রত্যাখ্যাত হতে পারে, আর অন্য খরচ স্পষ্টকরণে ফেরত পাঠানো হতে পারে। সেই ক্ষেত্রে প্রতিটি চাইল্ড সারির নিজস্ব স্ট্যাটাস লাগবে আর প্যারেন্ট সার্ভে সার্বিক অবস্থা রাখবে।
সংক্ষিপ্ত সার্বিক স্টেটগুলো সাধারণত যথেষ্ট:
- Draft
- Pending review
- Partially approved
- Approved
- Rejected
এই বিভাজন ফর্মটিকে নিরপেক্ষ রাখে। প্যারেন্ট বলে দেয় অনুরোধ সামগ্রিকভাবে কোথায় আছে, আর চাইল্ড সারিগুলো জানায় প্রতিটি আইটেমের সঙ্গে কী ঘটেছে।
কিছু গুরুত্বপূর্ণ ফিল্ড যেমন এমাউন্ট, স্ট্যাটাস, অ্যাপ্রুভার বা টোটালএর জন্য সরল পরিবর্তন ইতিহাস রাখা উপকারি। প্রথমদিন থেকেই পূর্ণ অডিট সিস্টেম দরকার নেই, কিন্তু প্রধান পরিবর্তনগুলো ব্যাখ্যা করার মতো পর্যাপ্ত ইতিহাস থাকা দরকার।
মুছে ফেলা সারির ক্ষেত্রেও একটি নিয়ম থাকা উচিত। রিভিউ শুরুর আগে হার্ড ডিলিট ঠিক থাকতে পারে। রিভিউ শুরু হওয়ার পরে আর্কাইভ করা সাধারণত পুরো রেকর্ড এবং অনুমোদন সিদ্ধান্তকে যৌক্তিক রাখতে নিরাপদ।
এমন ভুল যা বিশ্বাস খুঁলিয়ে দেয়
ভরসা দ্রুত কমে যখন একটি ফর্ম স্ক্রিনে পরিষ্কার দেখায় কিন্তু ডাটাবেসে এলোমেলো ডেটা স্টোর করে।
সবচেয়ে সাধারণ ভুলগুলোর একটি হলো প্যারেন্ট ফিল্ড এবং আইটেম ফিল্ড এক ফ্ল্যাট টেবিলে মিশিয়ে দেওয়া। একটি কোট, অর্ডার বা রিইম্বার্সমেন্ট রিকোয়েস্টের কিছু বিবরণ পুরো রেকর্ডের জন্য হয় যেমন রিকোয়েস্টার, তারিখ, অনুমোদন স্ট্যাটাস; আর সারিগুলোতে আলাদা ডিটেইল থাকে যেমন আইটেম নাম, পরিমাণ, অ্যামাউন্ট বা রশিদের তারিখ। এগুলো মিশলে এডিটিং জটিল হয়, রিপোর্ট ব্যবহার কষ্টকর হয় এবং ডুপ্লিকেট ডেটা ছড়িয়ে পড়ে।
আরেকটি সাধারণ সমস্যা হলো সিস্টেম যখন মোট হিসাব করা উচিত তখন মানুষদের হাতে মোট লিখতে দেয়া। কেউ তিনটি খরচ সারি এন্ট্রি করে এবং আলাদাভাবে গ্র্যান্ড টোটাল টাইপ করলে সংখ্যাগুলো মিলবে না। একবার এমন পরিস্থিতি কয়েকবার ঘটলে রিভিউয়াররা ফর্মে বিশ্বাস করা বন্ধ করে দেয়।
একটি বড় ফ্রি-টেক্সট বক্সও একই ধরনের সমস্যা করে। ব্যবহারকারীদের সব আইটেম কপি-পেস্ট করে এক ফিল্ডে পেতে বলা দ্রুত মনে হতে পারে, কিন্তু অস্ট্রাকচারড টেক্সট ভ্যালিডেট, সোর্ট, ফিল্টার বা অনুমোদন করাটা কঠিন করে তোলে। স্ট্রাকচার্ড সারি পরিকল্পনা বেশি লাগে, কিন্তু পরে পরিচালনা করা অনেক সহজ হয়।
সারি-স্তরের চেকগুলোও প্রভাবশালীভাবে বাদ পড়তে পারে। ফাঁকা সারি, অবৈধ তারিখ, ডুপ্লিকেট এন্ট্রি, নেগেটিভ অ্যামাউন্ট এবং অর্ধ-সম্পূর্ণ আইটেমগুলো ফর্মটি এগোবার আগে ধরা উচিত। বাস্তব ত্রুটিগুলো প্রধানত চাইল্ড সারিগুলোর ভিতরেই ঘটে, না হেডারের ভিতরে।
ডিলিশন আরেক দুর্বল পয়েন্ট। যদি ব্যবহারকারীরা এক ক্লিকে সারি মুছে ফেলতে পারে এবং কোনো কনফার্মেশন না থাকে, গুরুত্বপূর্ণ ডেটা দুর্ঘটনাবশত হারিয়ে যেতে পারে। আরও খারাপ হয় যখন পরিবর্তনকারীর রেকর্ড নেই।
নিরাপদ উপায়টি সহজ: সারি মুছে ফেলার আগে কনফার্ম করুন, হিসাব করা ফিল্ডগুলো লক রাখুন, এবং মানুষের করা মূল পরিবর্তনগুলো রেকর্ড করুন।
লঞ্চের আগে পরীক্ষা করুন
পুনরাবৃত্ত সারি যুক্ত একটি ফর্ম পাবলিশ করার আগে এটাকে বাস্তব ব্যবহারকারীদের মতো করে পরীক্ষা করুন।
মৌলিক থেকে শুরু করুন। নিশ্চিত করুন একজন ব্যবহারকারী সারি যোগ, এডিট, ডুপ্লিকেট এবং রিমুভ করতে পারে কোনো অন্য ডেটা হারানো ছাড়াই। টেস্ট করুন ফর্মটি দশটি সারি সহ কেমন আচরণ করে, তারপর পঞ্চাশ বা একশো সারি সহ। ত্রুটিগুলো ঠিক সেই সারিতেই দেখা উচিত যেখানে খারাপ আছে, শুধুমাত্র পেজের শীর্ষে নয়।
তারপর পরীক্ষা করুন পরিবর্তনগুলোর পরে কী হয়। একটি পরিমাণ আপডেট করুন, একটি লাইন মুছে ফেলুন, একটি আইটেম ডুপ্লিকেট করুন, এবং স্ট্যাটাস বদলান। প্রতিটি অ্যাকশনের পরে নিশ্চিত করুন যে প্যারেন্ট রেকর্ডটি সঠিক টোটাল, কাউন্ট এবং সারাংশ স্টেট দেখায়।
এছাড়া সেই এজ কেসগুলো পরীক্ষা করুন যা সাধারণত দুর্বলতা ফাঁস করে: সব সারি মুছে ফেলা, অনেক সঠিক সারির মাঝে একটি ভুল সারি, ডুপ্লিকেট এন্ট্রি, শূন্য পরিমাণ, দীর্ঘ নোট, এবং সাবমিশনের পরে করা এডিট।
একটি ফর্ম তখনই প্রস্তুত যখন তা সাধারণ ব্যবহারে পরিষ্কার থাকে এবং বিশৃঙ্খল, দৈনন্দিন পরিস্থিতিতেও প্রত্যাশানুযায়ী আচরণ করে।
একটি no-code অ্যাপে তৈরি করুন
যদি আপনি এটি একটি no-code অ্যাপে তৈরি করছেন, তাহলে এমন একটি ওয়ার্কফ্লো থেকে শুরু করুন যা মানুষ ইতিমধ্যে বুঝে, যেমন রিইম্বার্সমেন্ট বা কোট। প্রথমে ডেটা স্ট্রাকচার বানান, তারপর প্যারেন্ট রেকর্ডকে তার চাইল্ড সারির সঙ্গে যুক্ত করে এমন নিয়ম যোগ করুন, এবং তার পরেই লেআউট পরিশোধন করুন।
বাস্তব নমুনা ডেটা ব্যবহার করা নিখুঁত টেস্ট ডেটার চেয়ে অনেক বেশি সাহায্য করে। ডুপ্লিকেট, অনুপস্থিত নোট, সংশোধিত পরিমাণ এবং অসম্পূর্ণ সারি দিয়ে প্রবেশ করুন। এসব কেস আপনাকে দেখাবে কোথায় ফর্ম বিভ্রান্তিকর হয় এবং কোথায় বিশ্বাস কমতে শুরু করে।
AppMaster এই ধরনের বিল্ডের জন্য ভাল উপযুক্ত কারণ প্যারেন্ট-চাইল্ড স্ট্রাকচার আলাদা ডেটা মডেল, রিলেটেড ফর্ম এবং বিজনেস লজিক হিসেবে সহজে ম্যাপ করা যায়। যদি পরে প্রক্রিয়া বড় হয়, AppMaster সেই একই কোর মডেলকে ব্যাকএন্ড, ওয়েব অ্যাপ এবং নেটিভ মোবাইল অ্যাপে পরিণত করতেও সহায়তা করে, পুনর্নির্মাণ ছাড়াই।
প্রধান লক্ষ্য যেকোন টুলেই একরকম থাকে: প্যারেন্ট রেকর্ড পরিষ্কার রাখুন, প্রতিটি সারি আলাদাভাবে এডিটেবল রাখুন, এবং টোটাল ও স্ট্যাটাসগুলো বাস্তব ডেটা থেকে আসে। এই অংশটি সঠিক হলে লাইন-আইটেম ফর্মগুলো ব্যবহার করা অনেক সহজ এবং বিশ্বাসযোগ্য হয়ে ওঠে।
প্রশ্নোত্তর
কারণ এক রেকর্ড সাধারণত শেয়ার করা বিবরণ এবং পুনরাবৃত্তি হওয়া আইটেমের বিবরণ মিশিয়ে দেয়। প্যারেন্ট-চাইল্ড মডেল হেডারকে পরিষ্কার রাখে এবং প্রতিটি সারিকে আলাদা করে যোগ, এডিট, ভ্যালিডেট বা মুছে ফেলতে দেয় যাতে পুরো ফর্ম ভেঙে না যায়।
প্যারেন্টে রাখুন যেগুলো পুরো ডকুমেন্টকে বর্ণনা করে, যেমন রিকোয়েস্টার, কাস্টমার, তারিখ, ডিপার্টমেন্ট বা সার্বিক স্ট্যাটাস। চাইল্ডে রাখুন যেগুলো প্রতিটি সারিতে ভিন্ন হতে পারে, যেমন পরিমাণ, মূল্য, ক্যাটাগরি, নোট বা ডেডলাইন।
যখন একটি ফর্মে একটিকেই হেডার আছে এবং তার নিচে বহু এডিটেবল সারি আছে তখন ব্যবহার করুন। কোট, অর্ডার, রিইম্বার্সমেন্ট আর চেকলিস্টগুলো সাধারণ উদাহরণ কারণ প্রতিটি সারির আলাদা ফিল্ড ও অ্যাকশন লাগে।
হ্যাঁ। প্রতিটি চাইল্ড সারিকে আলাদা একটি আইডি দিন—শুধু পজিশনের ওপর নির্ভর করবেন না। এতে নির্দিষ্ট আইটেম এডিট করা, পরিবর্তন ট্র্যাক করা, ডিলিট করা আইটেম রিস্টোর করা এবং সিঙ্কিং অনেক সহজ হয়।
সাধারণত না। নিরাপদ ডিফল্ট হলো চাইল্ড সারি থেকে মোট গঠন করা এবং প্যারেন্ট মোটকে রিড-অনলি রাখা। এতে মিশম্যাচ এড়ানো যায় এবং অনুমোদন আরও বিশ্বাসযোগ্য হয়।
ত্রুটিটি ঠিক সেই সারি ও ফিল্ডেই দেখান যেটা সমস্যা করেছে। যদি একটি আইটেম ভুল হয়, মানুষটিকে সম্পূর্ণ ফর্ম হারিয়ে না দিয়ে সেই সারিটিই তৎক্ষণাৎ ঠিক করার সুযোগ দিন।
সবসময় নয়। যদি রিভিউ কোন আইটেম একেকটা করে অনুমোদন করে, তাহলে প্রতিটি চাইল্ড সারির নিজস্ব স্ট্যাটাস থাকা উচিত, আর প্যারেন্ট সার্ভে সার্বিক অবস্থা রাখবে। রিইম্বার্সমেন্টে এটা কার্যকর যখন কিছু খরচ অনুমোদিত আর কিছু প্রত্যাখ্যাত হয়।
রিভিউ শুরুর আগ পর্যন্ত পুরো ডিলিট করা ঠিক থাকতে পারে। একবার রিভিউ শুরু হলে আর্কাইভ করা অধিক নিরাপদ কারণ অতীতের মোট ও অনুমোদনের সিদ্ধান্তগুলো ঠিক থাকা প্রয়োজন।
হেডার ডিটেইলস এবং এডিটেবল সারিগুলো সম্ভব হলে এক স্ক্রিনেই রাখুন। আইটেম যোগ, ডুপ্লিকেট এবং ডিলেট করার বোতাম ভালভাবে দেখা যাবে এমন করে রাখুন, এবং লম্বা ফর্মে ড্রাফট সেভ করার সুবিধা দিন।
প্যারেন্ট এবং চাইল্ডের জন্য আলাদা ডেটা মডেল থেকে শুরু করুন, তারপর লিঙ্ক, টোটাল এবং স্ট্যাটাসের নিয়মগুলো যোগ করুন। AppMaster এই কাজের জন্য ভালো কারণ একই কোর মডেল থেকে ব্যাকএন্ড, ওয়েব এবং মোবাইল অ্যাপ বানাতে সুবিধা দেয়।


