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, მაგრამ იმუშავებს მაშინაც კი, თუ ასე არ მოხდება. სუპერკლასის გაფართოების უპირატესობა ის არის, რომ ის იძლევა სესიის შესახებ გარკვეულ ინფორმაციას, რომელიც შეიძლება სასარგებლო იყოს.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
ამ მაგალითში, itemId არის მონაცემთა წევრი. თქვენ უნდა განახორციელოთ parm მეთოდი თითოეული მონაცემთა წევრისთვის და მონიშნოთ იგი DataMemberAttribute-ით, რათა ჩარჩომ იცოდეს, რა არის ეს. ეს საშუალებას აძლევს ჩარჩოს, ავტომატურად შექმნას თქვენთვის დიალოგური ფანჯარა.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
სერვისი
სერვისის კლასი არის კლასი, რომელიც შეიცავს ფაქტობრივ ბიზნეს ლოგიკას. ის არ არის დაკავშირებული დიალოგების ჩვენებასთან, პაკეტურ დამუშავებასთან ან მსგავს საკითხებთან - ეს კონტროლერის კლასის პასუხისმგებლობაა. ამის გამოყოფით, თქვენ უფრო მეტად შეძლებთ თქვენი კოდის კარგად შემუშავებას და უფრო მრავალჯერადი გამოყენების კოდის შექმნას.
მონაცემთა კონტრაქტის კლასის მსგავსად, სერვისის კლასს არ სჭირდება რაიმე კონკრეტულისგან მემკვიდრეობით მიღება, მაგრამ ის უნდა მემკვიდრეობით მიიღოს SysOperationServiceBase კლასიდან, სულ მცირე, თუ თქვენ ელით, რომ სერვისი გაშვებული იქნება როგორც პაკეტური დავალება, რადგან სუპერკლასი გვაწვდის გარკვეულ ინფორმაციას პაკეტური კონტექსტის შესახებ. მეთოდი, რომელიც იწყებს ოპერაციას (ანუ ამუშავებს ბიზნეს ლოგიკას), უნდა იღებდეს თქვენი მონაცემთა კონტრაქტის კლასის ობიექტს, როგორც შეყვანას და უნდა იყოს გაფორმებული [SysEntryPointAttribute]-ით. მაგალითად:
{
}
მეთოდით, სახელწოდებით run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
კონტროლერი
კონტროლერის კლასი ახორციელებს თქვენი ოპერაციის შესრულებას და პაკეტურ დამუშავებას. ის ასევე უზრუნველყოფს, რომ კოდი შესრულდეს CIL-ში მაქსიმალური შესრულებისთვის. კონტროლერის კლასი, როგორც წესი, მემკვიდრეობით იღებს SysOperationServiceController კლასისგან, თუმცა არსებობს სხვა ვარიანტებიც.
{
}
სუპერკლასის კონსტრუქტორი პარამეტრებად იღებს კლასის სახელს, მეთოდის სახელს და (სურვილისამებრ) შესრულების რეჟიმს. კლასისა და მეთოდის სახელები უნდა იყოს თქვენი სერვისის კლასის და მასზე გასაშვებად განკუთვნილი მეთოდის სახელი. ამგვარად, შეგიძლიათ თქვენი კონტროლერის კონსტრუქტის მეთოდი შემდეგნაირად განახორციელოთ:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
შემდეგ MyController კლასის main მეთოდი შეიძლება იყოს ისეთივე მარტივი, როგორც
{
;
MyController::construct().startOperation();
}
და ფაქტობრივად, დაასრულეთ. ზემოთ მოყვანილი მაგალითი აშკარად ძალიან მარტივი მაგალითია და ჩარჩო სხვა ვარიანტებისა და შესაძლებლობების სიმრავლესაც შეიცავს, თუმცა ეს მოკლე მიმოხილვაა, თუ ჩარჩოს დიდი ხნის განმავლობაში არ იყენებთ, განახლება დაგჭირდებათ.
დამატებითი საკითხავი
თუ ეს პოსტი მოგეწონათ, შეიძლება ეს რჩევებიც მოგეწონოთ:
- როგორ გავამეოროთ Enum ელემენტები X++ კოდიდან Dynamics AX 2012-ში
- დოკუმენტის კლასის და მოთხოვნის იდენტიფიცირება AIF სერვისისთვის Dynamics AX 2012-ში
- დარეკვა AIF დოკუმენტის სერვისებზე პირდაპირ X++-დან Dynamics AX 2012-ში
