Miklix

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)


Cette page a été automatiquement traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie au point, des erreurs peuvent donc survenir. Si vous préférez, vous pouvez consulter la version originale en anglais ici :

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) :

public Query getQuery()
{
    ;

    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 :

public void 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 :


Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Christensen

À propos de l'auteur

Mikkel Christensen
Mikkel est le créateur et propriétaire de miklix.com. Il a plus de 20 ans d'expérience en tant que programmeur informatique/développeur de logiciels professionnel et est actuellement employé à temps plein pour une grande société informatique européenne. Lorsqu'il ne blogue pas, il consacre son temps libre à une vaste gamme d'intérêts, de passe-temps et d'activités, qui peuvent dans une certaine mesure se refléter dans la variété des sujets abordés sur ce site Web.