Miklix

Χρήση ενός ερωτήματος σε μια κλάση συμβάσεων δεδομένων 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;
}

Αν θέλετε το ερώτημα να αποφασίζεται από την κλάση ελεγκτή, μπορείτε επίσης να χρησιμοποιήσετε μια κενή συμβολοσειρά. Σε αυτήν την περίπτωση, πρέπει επίσης να εφαρμόσετε μερικές βοηθητικές μεθόδους (τις οποίες πιθανώς θα πρέπει να εφαρμόσετε ούτως ή άλλως για δική σας ευκολία όταν χρειάζεται να αποκτήσετε πρόσβαση στο ερώτημα):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Εάν χρειάζεται να αρχικοποιήσετε το ερώτημα (για παράδειγμα, να προσθέσετε εύρη), θα πρέπει να εφαρμόσετε μια μέθοδο initQuery:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Πρέπει να βεβαιωθείτε ότι θα καλέσετε αυτήν τη μέθοδο από την κλάση ελεγκτή.

Περαιτέρω ανάγνωση

Αν σας άρεσε αυτή η ανάρτηση, ίσως σας αρέσουν και αυτές οι προτάσεις:


Μοιραστείτε το στο BlueskyΚοινή χρήση στο FacebookΚοινοποίηση στο LinkedInΜοιραστείτε το στο TumblrΚοινοποίηση στο XΚοινοποίηση στο LinkedInΚαρφιτσώστε στο Pinterest

Mikkel Christensen

Σχετικά με τον συγγραφέα

Mikkel Christensen
Ο Μιχαήλ είναι ο δημιουργός και ιδιοκτήτης του miklix.com. Έχει πάνω από 20 χρόνια εμπειρίας ως επαγγελματίας προγραμματιστής υπολογιστών/προγραμματιστής λογισμικού και σήμερα εργάζεται με πλήρη απασχόληση σε μια μεγάλη ευρωπαϊκή εταιρεία πληροφορικής. Όταν δεν ασχολείται με το ιστολόγιο, αφιερώνει τον ελεύθερο χρόνο του σε ένα ευρύ φάσμα ενδιαφερόντων, χόμπι και δραστηριοτήτων, τα οποία μπορεί σε κάποιο βαθμό να αντικατοπτρίζονται στην ποικιλία των θεμάτων που καλύπτονται σε αυτόν τον ιστότοπο.