Utilisation d'une requête dans une classe de contrat de données SysOperation dans Dynamics AX 2012
Publié : 16 février 2025 à 01:22:22 UTC
Dernière mise à jour : 12 janvier 2026 à 08:47:09 UTC
Cet article détaille la procédure d'ajout d'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 cet article sont basées sur Dynamics AX 2012 R3. Leur validité pour d'autres versions n'est pas garantie. (Mise à jour : Je confirme que cela fonctionne également avec Dynamics 365 for Operations.)
J'oublie toujours comment spécifier et initialiser une requête dans le framework SysOperation. Je suppose que la plupart des traitements par lots que je crée ne reposent pas sur des requêtes configurables par l'utilisateur, mais il m'arrive d'en avoir besoin ; ce billet me servira donc aussi de référence.
Tout d'abord, dans la classe du contrat de données, la requête sera stockée sous forme de chaîne de caractères. Sa méthode `parm` doit être décorée avec l'attribut `AifQueryTypeAttribute`, comme ceci (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 souhaitez que la requête soit déterminée par la classe du contrôleur, vous pouvez également utiliser une chaîne vide. Dans ce cas, vous devrez également implémenter quelques méthodes auxiliaires (que vous devriez probablement implémenter de toute façon pour plus de commodité lorsque vous aurez besoin d'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 devez implémenter une méthode initQuery :
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Vous devez veiller à appeler cette méthode depuis la classe du contrôleur.
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Supprimer une entité juridique (comptes d'entreprise) dans Dynamics AX 2012
- Présentation rapide de Dynamics AX 2012 SysOperation Framework
- Appel des services de documents AIF directement depuis X++ dans Dynamics AX 2012
