Γρήγορη επισκόπηση του Dynamics AX 2012 SysOperation Framework
Δημοσιεύθηκε: 15 Φεβρουαρίου 2025 στις 10:33:07 μ.μ. UTC
Τελευταία ενημέρωση: 15 Φεβρουαρίου 2025 στις 10:34:30 μ.μ. 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), αλλά αυτό είναι απαραίτητο μόνο εάν το παράθυρο διαλόγου για κάποιο λόγο πρέπει να είναι πιο προηγμένο από αυτό που δημιουργεί αυτόματα το πλαίσιο.
Σύμβαση δεδομένων
Η σύμβαση δεδομένων περιέχει τα μέλη δεδομένων που απαιτούνται για τη λειτουργία σας. Μπορεί να συγκριθεί με την τυπική μακροεντολή CurrentList που ορίζεται στο πλαίσιο RunBase, αλλά εφαρμόζεται ως κλάση. Η σύμβαση δεδομένων θα πρέπει να επεκτείνει το SysOperationDataContractBase, αλλά θα λειτουργήσει ακόμα κι αν δεν το κάνει. Το πλεονέκτημα της επέκτασης της super class είναι ότι παρέχει ορισμένες πληροφορίες συνεδρίας που μπορεί να είναι χρήσιμες.
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, αν και υπάρχουν και άλλες επιλογές.
{
}
Ο κατασκευαστής της super class παίρνει ως παραμέτρους ένα όνομα κλάσης, όνομα μεθόδου και (προαιρετικά) τρόπο εκτέλεσης. Τα ονόματα κλάσεων και μεθόδων πρέπει να είναι το όνομα της κλάσης υπηρεσίας και η μέθοδος που πρέπει να εκτελείται σε αυτήν. Έτσι, μπορείτε να εφαρμόσετε τη μέθοδο κατασκευής του ελεγκτή σας ως εξής:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Τότε η κύρια μέθοδος της κλάσης MyController μπορεί να είναι τόσο απλή
{
;
MyController::construct().startOperation();
}
Και ουσιαστικά τελείωσες. Το παραπάνω είναι προφανώς ένα πολύ απλό παράδειγμα και το πλαίσιο περιέχει μια πληθώρα άλλων επιλογών και δυνατοτήτων, αλλά αυτό χρησιμεύει ως μια γρήγορη επισκόπηση εάν χρειάζεστε ένα πινέλο όταν δεν έχετε χρησιμοποιήσει το πλαίσιο για λίγο.