Miklix

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

Veröffentlicht: 16. Februar 2025 um 01:21:39 UTC
Zuletzt aktualisiert: 12. Januar 2026 um 08:47:06 UTC

Dieser Artikel beschreibt detailliert, wie Sie in Dynamics AX 2012 (und Dynamics 365 for Operations) eine benutzerkonfigurierbare und filterbare Abfrage zu einer SysOperation-Datenvertragsklasse 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 gelten möglicherweise nicht für andere Versionen. (Update: Ich kann bestätigen, dass dies auch mit Dynamics 365 for Operations funktioniert.)

Ich vergesse immer wieder die Details zur Spezifizierung und Initialisierung von Abfragen im SysOperation-Framework. Die meisten meiner Batch-Jobs basieren zwar nicht auf benutzerkonfigurierbaren Abfragen, aber hin und wieder benötige ich doch einen solchen Job. Daher dient dieser Beitrag auch meiner eigenen Dokumentation.

Zunächst wird die Abfrage in der Datenvertragsklasse als Zeichenkette gespeichert. Ihre `parm`-Methode muss mit dem Attribut `AifQueryTypeAttribute` versehen werden, wie folgt (in diesem Beispiel habe ich die `SalesUpdate`-Abfrage verwendet, Sie können diese aber durch eine beliebige AOT-Abfrage ersetzen):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Soll die Abfrage stattdessen von der Controller-Klasse entschieden werden, können Sie auch einen leeren String verwenden. In diesem Fall müssen Sie außerdem einige Hilfsmethoden implementieren (die Sie wahrscheinlich ohnehin implementieren sollten, um später bequem auf die Abfrage zugreifen zu können):

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 Sie diese Methode von der Controller-Klasse aus aufrufen.

Weitere Informationen

Wenn Ihnen dieser Beitrag gefallen hat, könnten Ihnen auch diese Vorschläge gefallen:


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

Mikkel Christensen

Über den Autor

Mikkel 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.