Χρήση ενός ερωτήματος σε μια κλάση συμβάσεων δεδομένων SysOperation στο Dynamics AX 2012
Δημοσιεύθηκε: 16 Φεβρουαρίου 2025 στις 1:21:40 π.μ. UTC
Τελευταία ενημέρωση: 12 Ιανουαρίου 2026 στις 8:47:06 π.μ. UTC
Αυτό το άρθρο εξετάζει τις λεπτομέρειες σχετικά με τον τρόπο προσθήκης ενός ερωτήματος που μπορεί να ρυθμιστεί από τον χρήστη και να φιλτραριστεί σε μια κλάση σύμβασης δεδομένων SysOperation στο Dynamics AX 2012 (και στο Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Οι πληροφορίες σε αυτήν την ανάρτηση βασίζονται στο Dynamics AX 2012 R3. Μπορεί να ισχύουν ή όχι για άλλες εκδόσεις. (Ενημέρωση: Μπορώ να επιβεβαιώσω ότι αυτό λειτουργεί και στο Dynamics 365 for Operations)
Πάντα φαίνεται να ξεχνάω τις λεπτομέρειες σχετικά με τον τρόπο καθορισμού και αρχικοποίησης ενός ερωτήματος στο πλαίσιο SysOperation. Υποθέτω ότι οι περισσότερες από τις μαζικές εργασίες που έχω κάνει δεν βασίζονται σε ερωτήματα που μπορούν να ρυθμιστούν από τον χρήστη, αλλά πού και πού χρειάζεται να κάνω μια τέτοια μαζική εργασία, οπότε αυτή η ανάρτηση είναι και για δική μου αναφορά.
Αρχικά, στην κλάση σύμβασης δεδομένων, το ερώτημα θα αποθηκευτεί συσκευασμένο σε μια συμβολοσειρά. Η μέθοδος parm του πρέπει να διακοσμηθεί με το χαρακτηριστικό AifQueryTypeAttribute, ως εξής (σε αυτό το παράδειγμα χρησιμοποίησα το ερώτημα SalesUpdate, αλλά μπορείτε να το αντικαταστήσετε με οποιοδήποτε ερώτημα AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Αν θέλετε το ερώτημα να αποφασίζεται από την κλάση ελεγκτή, μπορείτε επίσης να χρησιμοποιήσετε μια κενή συμβολοσειρά. Σε αυτήν την περίπτωση, πρέπει επίσης να εφαρμόσετε μερικές βοηθητικές μεθόδους (τις οποίες πιθανώς θα πρέπει να εφαρμόσετε ούτως ή άλλως για δική σας ευκολία όταν χρειάζεται να αποκτήσετε πρόσβαση στο ερώτημα):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Εάν χρειάζεται να αρχικοποιήσετε το ερώτημα (για παράδειγμα, να προσθέσετε εύρη), θα πρέπει να εφαρμόσετε μια μέθοδο initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Πρέπει να βεβαιωθείτε ότι θα καλέσετε αυτήν τη μέθοδο από την κλάση ελεγκτή.
Περαιτέρω ανάγνωση
Αν σας άρεσε αυτή η ανάρτηση, ίσως σας αρέσουν και αυτές οι προτάσεις:
- Κλήση υπηρεσιών εγγράφων AIF απευθείας από την X++ στο Dynamics AX 2012
- Η διαφορά μεταξύ data() και buf2Buf() στο Dynamics AX 2012
- Γρήγορη επισκόπηση του Dynamics AX 2012 SysOperation Framework
