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.
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):
{
;
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:
{
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:
- Der Unterschied zwischen data() und buf2Buf() in Dynamics AX 2012
- Fehler „Keine Metadatenklasse für Datenvertragsobjekt definiert“ in Dynamics AX 2012
- AIF Document Services direkt aus X++ in Dynamics AX 2012 aufrufen
