Miklix

Dynamics AX 2012 SysOperation Framework দ্রুত ওভারভিউ

প্রকাশিত: ১৫ ফেব্রুয়ারী, ২০২৫ এ ১০:৩৬:৩৯ PM UTC
সর্বশেষ আপডেট: ১২ জানুয়ারী, ২০২৬ এ ৮:৩৯:৫৩ AM UTC

এই প্রবন্ধটি Dynamics AX 2012 এবং Dynamics 365 for Operations-এ SysOperation ফ্রেমওয়ার্কে প্রসেসিং ক্লাস এবং ব্যাচ জব কীভাবে বাস্তবায়ন করতে হয় তার একটি সংক্ষিপ্ত সারসংক্ষেপ (অথবা চিট শিট) প্রদান করে।


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

Dynamics AX 2012 SysOperation Framework Quick Overview

এই পোস্টের তথ্য Dynamics AX 2012 R3 এর উপর ভিত্তি করে তৈরি। এটি অন্যান্য সংস্করণের জন্য বৈধ হতে পারে আবার নাও হতে পারে। (আপডেট: আমি নিশ্চিত করতে পারি যে এই নিবন্ধের তথ্য Dynamics 365 এর অপারেশনের জন্যও বৈধ)


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

বিভিন্নতা আছে, কিন্তু যখন আমি ফ্রেমওয়ার্ক ব্যবহার করি তখন আমি সাধারণত তিনটি ক্লাস বাস্তবায়ন করি:

  • ডেটা চুক্তি (SysOperationDataContractBase প্রসারিত করা উচিত)
  • পরিষেবা (SysOperationServiceBase প্রসারিত করা উচিত)
  • কন্ট্রোলার (SysOperationServiceController প্রসারিত করতে হবে)

অতিরিক্তভাবে, আমি একটি UIBuilder ক্লাসও বাস্তবায়ন করতে পারি (SysOperationUIBuilder প্রসারিত করতে হবে), তবে এটি কেবল তখনই প্রয়োজনীয় যখন কোনও কারণে ডায়ালগটি ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে তৈরি হওয়া থেকে আরও উন্নত হতে হয়।


ডেটা চুক্তি

ডেটা কন্ট্রাক্ট আপনার অপারেশনের জন্য প্রয়োজনীয় ডেটা মেম্বার ধারণ করে। এটিকে RunBase ফ্রেমওয়ার্কে সংজ্ঞায়িত সাধারণ CurrentList ম্যাক্রোর সাথে তুলনা করা যেতে পারে, কিন্তু এটি একটি ক্লাস হিসেবে বাস্তবায়িত। ডেটা কন্ট্রাক্টটি SysOperationDataContractBase-কে প্রসারিত করবে, তবে এটি কাজ না করলেও কাজ করবে। সুপার ক্লাসটি প্রসারিত করার সুবিধা হল এটি কিছু সেশন তথ্য প্রদান করে যা কাজে লাগতে পারে।

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

এই উদাহরণে, itemId হল একটি ডেটা সদস্য। আপনাকে প্রতিটি ডেটা সদস্যের জন্য একটি parm পদ্ধতি প্রয়োগ করতে হবে এবং এটি DataMemberAttribute দিয়ে ট্যাগ করতে হবে যাতে ফ্রেমওয়ার্কটি জানতে পারে যে এটি কী। এটি ফ্রেমওয়ার্ককে স্বয়ংক্রিয়ভাবে আপনার জন্য ডায়ালগ তৈরি করতে সক্ষম করে।

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


সেবা

সার্ভিস ক্লাস হলো সেই ক্লাস যেখানে প্রকৃত ব্যবসায়িক যুক্তি থাকে। এটি ডায়ালগ, ব্যাচ প্রসেসিং বা এই ধরণের কিছু দেখানোর সাথে সম্পর্কিত নয় - এটি কন্ট্রোলার ক্লাসের দায়িত্ব। এটি আলাদা করে, আপনি আপনার কোডটি ভালভাবে ডিজাইন করার এবং আরও পুনঃব্যবহারযোগ্য কোড তৈরি করার সম্ভাবনা বেশি।

ডেটা কন্ট্রাক্ট ক্লাসের মতো, সার্ভিস ক্লাসের কোনও নির্দিষ্ট জিনিস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হওয়ার প্রয়োজন নেই, তবে এটি SysOperationServiceBase ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া উচিত, অন্তত যদি আপনি আশা করেন যে পরিষেবাটি ব্যাচ জব হিসাবে চালানো হবে, কারণ সুপার ক্লাস ব্যাচের প্রসঙ্গ সম্পর্কে কিছু তথ্য সরবরাহ করে। যে পদ্ধতিটি অপারেশন শুরু করে (অর্থাৎ ব্যবসায়িক লজিক চালায়) তাকে অবশ্যই আপনার ডেটা কন্ট্রাক্ট ক্লাসের একটি অবজেক্ট ইনপুট হিসাবে নিতে হবে এবং [SysEntryPointAttribute] দিয়ে সজ্জিত করা উচিত। উদাহরণস্বরূপ:

class MyService extends SysOperationServiceBase
{
}

রান নামক একটি পদ্ধতি ব্যবহার করে:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


নিয়ামক

কন্ট্রোলার ক্লাস আপনার অপারেশনের এক্সিকিউশন এবং ব্যাচ প্রসেসিং পরিচালনা করে। এটি নিশ্চিত করে যে কোডটি CIL-তে সর্বাধিক কর্মক্ষমতার জন্য কার্যকর করা হয়েছে। কন্ট্রোলার ক্লাসটি সাধারণত SysOperationServiceController ক্লাস থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, যদিও অন্যান্য বিকল্পও রয়েছে।

class MyController extends SysOperationServiceController
{
}

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

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

তাহলে MyController ক্লাসের মূল পদ্ধতিটি এত সহজ হতে পারে

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

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

আরও পড়ুন

যদি আপনি এই পোস্টটি উপভোগ করেন, তাহলে আপনার এই পরামর্শগুলিও পছন্দ হতে পারে:


ব্লুস্কাইতে শেয়ার করুনফেসবুকে শেয়ার করুনলিংকডইনে শেয়ার করুনটাম্বলারে শেয়ার করুনX-এ শেয়ার করুনলিংকডইনে শেয়ার করুনপিন্টারেস্টে পিন করুন

মিকেল ক্রিস্টেনসেন

লেখক সম্পর্কে

মিকেল ক্রিস্টেনসেন
মিকেল হলেন miklix.com এর স্রষ্টা এবং মালিক। একজন পেশাদার কম্পিউটার প্রোগ্রামার/সফ্টওয়্যার ডেভেলপার হিসেবে তার ২০ বছরেরও বেশি অভিজ্ঞতা রয়েছে এবং বর্তমানে তিনি একটি বৃহৎ ইউরোপীয় আইটি কর্পোরেশনে পূর্ণকালীন কর্মরত। ব্লগিং না করার সময়, তিনি তার অবসর সময় বিভিন্ন আগ্রহ, শখ এবং কার্যকলাপে ব্যয় করেন, যা কিছুটা হলেও এই ওয়েবসাইটে কভার করা বিভিন্ন বিষয়ের মধ্যে প্রতিফলিত হতে পারে।