Dynamics AX 2012 SysOperation Framework Vështrim i shpejtë
Publikuar: 15 shkurt 2025 në 10:37:30 e pasdites, UTC
Përditësimi i fundit: 12 janar 2026 në 8:40:07 e paradites, UTC
Ky artikull ofron një përmbledhje të shpejtë (ose një fletë këshillash) se si të implementohen klasat e përpunimit dhe punët në grup në kuadrin SysOperation në Dynamics AX 2012 dhe Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
Informacioni në këtë postim bazohet në Dynamics AX 2012 R3. Mund të jetë ose jo i vlefshëm për versione të tjera. (Përditësim: Mund të konfirmoj që informacioni në këtë artikull është i vlefshëm edhe për Dynamics 365 for Operations)
Ky postim është menduar vetëm si një përmbledhje e shpejtë dhe një udhëzues. Nëse jeni të rinj në kuadrin SysOperation, ju sugjeroj fuqimisht që të lexoni edhe dokumentin e Microsoft-it mbi këtë temë. Informacioni këtu mund të jetë i dobishëm nëse keni nevojë vetëm për një përditësim të shpejtë të klasave të ndryshme të përfshira në zhvillimin e operacioneve me këtë kuadr.
Ka variacione, por kur përdor kornizën zakonisht zbatoj tre klasa:
- Kontrata e të dhënave (duhet të zgjasë SysOperationDataContractBase)
- Shërbimi (duhet të zgjerojë SysOperationServiceBase)
- Kontrolluesi (duhet të zgjerohet SysOperationServiceController)
Përveç kësaj, mund të implementoj edhe një klasë UIBuilder (duhet të zgjerojë SysOperationUIBuilder), por kjo është e nevojshme vetëm nëse dialogu për ndonjë arsye duhet të jetë më i avancuar se ai që gjeneron automatikisht framework-u.
Kontrata e të dhënave
Kontrata e të dhënave përmban anëtarët e të dhënave të nevojshëm për operacionin tuaj. Mund të krahasohet me makron tipike CurrentList të përcaktuar në kornizën RunBase, por mund të zbatohet si një klasë. Kontrata e të dhënave duhet të zgjerojë SysOperationDataContractBase, por do të funksionojë edhe nëse nuk e bën. Avantazhi i zgjerimit të superklasës është se ofron disa informacione për sesionin që mund të jenë të dobishme.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
Në këtë shembull, itemId është një anëtar i të dhënave. Ju duhet të zbatoni një metodë parm për secilin anëtar të të dhënave dhe ta etiketoni atë me DataMemberAttribute në mënyrë që framework-u ta dijë se çfarë është. Kjo i mundëson framework-ut të ndërtojë automatikisht dialogun për ju.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
Shërbim
Klasa e shërbimit është klasa që përmban logjikën aktuale të biznesit. Nuk merret me shfaqjen e dialogëve, përpunimin në grup ose diçka të tillë - kjo është përgjegjësi e klasës së kontrolluesit. Duke e ndarë këtë, ka më shumë të ngjarë që ta dizajnoni mirë kodin tuaj dhe të krijoni kod më të ripërdorshëm.
Ashtu si klasa e kontratës së të dhënave, klasa e shërbimit nuk ka nevojë të trashëgojë nga asgjë në veçanti, por duhet të trashëgojë nga klasa SysOperationServiceBase, të paktën nëse prisni që shërbimi të ekzekutohet si një punë batch, pasi superklasa ofron disa informacione rreth kontekstit të batch. Metoda që fillon operacionin (domethënë ekzekuton logjikën e biznesit) duhet të marrë një objekt të klasës suaj të kontratës së të dhënave si input dhe duhet të dekorohet me [SysEntryPointAttribute]. Për shembull:
{
}
Me një metodë të quajtur run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
Kontrolluesi
Klasa kontrolluese merret me ekzekutimin dhe përpunimin në grup të operacionit tuaj. Gjithashtu sigurohet që kodi të ekzekutohet në CIL për performancë maksimale. Klasa kontrolluese zakonisht trashëgon nga klasa SysOperationServiceController, megjithëse ka edhe opsione të tjera.
{
}
Konstruktori i superklasës merr si parametra emrin e klasës, emrin e metodës dhe (opsionalisht) mënyrën e ekzekutimit. Emrat e klasës dhe të metodës duhet të jenë emri i klasës suaj të shërbimit dhe metoda që duhet të ekzekutohet në të. Pra, mund ta implementoni metodën e ndërtimit të kontrolluesit tuaj si kjo:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Atëherë metoda kryesore e klasës MyController mund të jetë aq e thjeshtë sa
{
;
MyController::construct().startOperation();
}
Dhe praktikisht mbaruat. Sa më sipër është padyshim një shembull shumë i thjeshtë dhe korniza përmban një mori opsionesh dhe mundësish të tjera, por kjo shërben si një përmbledhje e shpejtë nëse keni nevojë për një rifreskim kur nuk e keni përdorur kornizën për njëfarë kohe.
Lexime të mëtejshme
Nëse ju pëlqeu ky postim, mund t'ju pëlqejnë edhe këto sugjerime:
- Konvertoni një real në varg me të gjithë numrat dhjetorë në Dynamics AX 2012
- Thirrja e Shërbimeve të Dokumenteve AIF direkt nga X++ në Dynamics AX 2012
- Fshini një ent juridik (llogaritë e kompanisë) në Dynamics AX 2012
