Utilisation d'une requête dans une classe de contrat de données SysOperation dans Dynamics AX 2012
Publié : 16 février 2025 à 01 h 28 min 00 s UTC
Dernière mise à jour : 12 janvier 2026 à 08 h 47 min 48 s UTC
Cet article explique les détails sur la façon d’ajouter une requête configurable et filtrable par l’utilisateur à une classe de contrat de données SysOperation dans Dynamics AX 2012 (et Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Les informations contenues dans ce billet sont basées sur le Dynamics AX 2012 R3. Cela peut être valide ou non pour d’autres versions. (Mise à jour : je peux confirmer que cela fonctionne aussi sur Dynamics 365 for Operations)
J’ai toujours l’impression d’oublier les détails sur la façon de spécifier et d’initialiser une requête dans le cadre SysOperation. Je suppose que la plupart des tâches batch que j’ai faites ne sont pas basées sur des requêtes configurables par l’utilisateur, mais de temps en temps, j’ai besoin de créer ce type de batch, donc ce post est aussi pour ma propre référence.
D’abord, dans la classe de contrat de données, la requête sera stockée dans une chaîne. Sa méthode parm doit être décorée avec l’attribut AifQueryTypeAttribute, ainsi (dans cet exemple, j’ai utilisé la requête SalesUpdate, mais vous pouvez la remplacer par n’importe quelle requête AOT) :
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Si vous voulez que la requête soit décidée par la classe contrôleur à la place, vous pouvez aussi utiliser une chaîne vide. Dans ce cas, vous devez aussi mettre en place quelques méthodes d’assistance (que vous devriez probablement mettre en place de toute façon pour votre commodité lorsque vous devez accéder à la requête) :
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Si vous devez initialiser la requête (par exemple, ajouter des plages), vous devriez implémenter une méthode initQuery :
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Vous devez vous assurer d’appeler cette méthode depuis la classe contrôleur.
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Aperçu rapide de Dynamics AX 2012 SysOperation Framework
- Utilisation du cadre SysExtension pour savoir quelle sous-classe instancier dans Dynamics AX 2012
- Appel des services de documents AIF directement depuis X++ dans Dynamics AX 2012
