Miklix

Dynamics AX 2012 SysOperation Framework სწრაფი მიმოხილვა

გამოქვეყნებულია: 15 თებერვალი, 2025, 22:38:42 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:40:18 UTC

ეს სტატია იძლევა სწრაფ მიმოხილვას (ან ინსტრუქციას) იმის შესახებ, თუ როგორ უნდა განვახორციელოთ დამუშავების კლასები და პაკეტური დავალებები SysOperation ჩარჩოში Dynamics AX 2012-სა და Dynamics 365 for Operations-ში.


ეს გვერდი მანქანურად ითარგმნა ინგლისურიდან, რათა რაც შეიძლება მეტი ადამიანისთვის ხელმისაწვდომი ყოფილიყო. სამწუხაროდ, მანქანური თარგმანი ჯერ კიდევ არ არის სრულყოფილი ტექნოლოგია, ამიტომ შეიძლება მოხდეს შეცდომები. თუ გსურთ, შეგიძლიათ ნახოთ ორიგინალური ინგლისური ვერსია აქ:

Dynamics AX 2012 SysOperation Framework Quick Overview

ამ პოსტში მოცემული ინფორმაცია ეფუძნება Dynamics AX 2012 R3-ს. ის შეიძლება იყოს ან არ იყოს ვალიდური სხვა ვერსიებისთვის. (განახლება: შემიძლია დავადასტურო, რომ ამ სტატიაში მოცემული ინფორმაცია ასევე ვალიდურია Dynamics 365 for Operations-ისთვის)


ეს პოსტი მხოლოდ მოკლე მიმოხილვასა და ინსტრუქციად არის განკუთვნილი. თუ SysOperation ფრეიმვორკში ახალი ხართ, გირჩევთ, წაიკითხოთ Microsoft-ის ოფიციალური დოკუმენტი ამ თემაზე. აქ მოცემული ინფორმაცია შეიძლება სასარგებლო იყოს, თუ უბრალოდ გჭირდებათ ამ ფრეიმვორკით ოპერაციების შემუშავებაში ჩართული სხვადასხვა კლასების სწრაფი გაცნობა.

არსებობს ვარიაციები, მაგრამ როდესაც ჩარჩოს ვიყენებ, როგორც წესი, სამ კლასს ვახორციელებ:

  • მონაცემთა კონტრაქტი (უნდა გაგრძელდეს 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
{
}

მეთოდით, სახელწოდებით run:

[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 კლასის main მეთოდი შეიძლება იყოს ისეთივე მარტივი, როგორც

public static void main(Args _args)
{
    ;

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

და ფაქტობრივად, დაასრულეთ. ზემოთ მოყვანილი მაგალითი აშკარად ძალიან მარტივი მაგალითია და ჩარჩო სხვა ვარიანტებისა და შესაძლებლობების სიმრავლესაც შეიცავს, თუმცა ეს მოკლე მიმოხილვაა, თუ ჩარჩოს დიდი ხნის განმავლობაში არ იყენებთ, განახლება დაგჭირდებათ.

დამატებითი საკითხავი

თუ ეს პოსტი მოგეწონათ, შეიძლება ეს რჩევებიც მოგეწონოთ:


გააზიარე Bluesky-ზეგააზიარეთ Facebook-ზეგააზიარეთ LinkedIn-ზეგააზიარეთ Tumblr-ზეგააზიარეთ X-ზეგააზიარეთ LinkedIn-ზეPinterest-ზე დამაგრება

მიკელ კრისტენსენი

ავტორის შესახებ

მიკელ კრისტენსენი
მაიკლ არის miklix.com-ის შემქმნელი და მფლობელი. მას აქვს 20 წელზე მეტი გამოცდილება, როგორც პროფესიონალი კომპიუტერული პროგრამისტი/პროგრამული უზრუნველყოფის შემქმნელი და ამჟამად მუშაობს სრულ განაკვეთზე დიდ ევროპულ IT კორპორაციაში. როდესაც ბლოგს არ წერს, თავისუფალ დროს ატარებს ინტერესების, ჰობიებისა და აქტივობების უზარმაზარ სპექტრზე, რაც შეიძლება გარკვეულწილად აისახოს ამ ვებსაიტზე გაშუქებულ თემებზე.