Miklix

Verwenden einer Abfrage in einer SysOperation-Datenvertragsklasse in Dynamics AX 2012

Veröffentlicht: 16. Februar 2025 um 01:21:39 UTC

In diesem Artikel erfahren Sie, wie Sie einer SysOperation-Datenvertragsklasse in Dynamics AX 2012 (und Dynamics 365 for Operations) eine benutzerkonfigurierbare und filterbare Abfrage hinzufügen.


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

Die Informationen in diesem Beitrag basieren auf Dynamics AX 2012 R3. Sie können für andere Versionen gültig sein oder nicht. (Update: Ich kann bestätigen, dass dies auch mit Dynamics 365 for Operations funktioniert)

Ich scheine immer die Details zu vergessen, wie man eine Abfrage im SysOperation-Framework angibt und initialisiert. Ich vermute, dass die meisten Batch-Jobs, die ich erstellt habe, nicht auf benutzerkonfigurierbaren Abfragen basieren, aber ab und zu muss ich einen solchen Batch-Job erstellen, daher dient dieser Beitrag auch zu meiner eigenen Referenz.

Zunächst wird die Abfrage in der Datenvertragsklasse in einem String gepackt gespeichert. Dessen parm-Methode muss mit dem Attribut AifQueryTypeAttribute dekoriert werden, wie folgt (in diesem Beispiel habe ich die SalesUpdate-Abfrage verwendet, aber Sie können diese durch jede beliebige AOT-Abfrage ersetzen):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

Wenn Sie möchten, dass die Abfrage stattdessen von der Controller-Klasse entschieden wird, können Sie auch eine leere Zeichenfolge verwenden. In diesem Fall müssen Sie auch einige Hilfsmethoden implementieren (die Sie wahrscheinlich sowieso implementieren sollten, wenn Sie auf die Abfrage zugreifen müssen):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Wenn Sie die Abfrage initialisieren müssen (z. B. Bereiche hinzufügen), sollten Sie eine initQuery-Methode implementieren:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Sie müssen sicherstellen, dass diese Methode von der Controllerklasse aus aufgerufen wird.

Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.