Miklix

Utilizzo di una query in una classe di contratto dati SysOperation in Dynamics AX 2012

Pubblicato: 16 febbraio 2025 alle ore 01:22:26 UTC
Ultimo aggiornamento: 12 gennaio 2026 alle ore 08:47:10 UTC

Questo articolo illustra nei dettagli come aggiungere una query filtrabile e configurabile dall'utente a una classe di contratto dati SysOperation in Dynamics AX 2012 (e Dynamics 365 for Operations).


Questa pagina è stata tradotta automaticamente dall'inglese per renderla accessibile al maggior numero di persone possibile. Purtroppo, la traduzione automatica non è ancora una tecnologia perfezionata, quindi possono verificarsi degli errori. Se preferite, potete consultare la versione originale in inglese qui:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

Le informazioni contenute in questo post si basano su Dynamics AX 2012 R3. Potrebbero essere valide anche per altre versioni. (Aggiornamento: posso confermare che funziona anche su Dynamics 365 for Operations)

Mi sembra sempre di dimenticare i dettagli su come specificare e inizializzare una query nel framework SysOperation. Immagino che la maggior parte dei batch job che ho creato non si basino su query configurabili dall'utente, ma ogni tanto mi capita di dover creare un batch job di questo tipo, quindi questo post è anche per mio riferimento.

Innanzitutto, nella classe del contratto dati, la query verrà memorizzata in una stringa. Il suo metodo parm deve essere decorato con l'attributo AifQueryTypeAttribute, in questo modo (in questo esempio ho utilizzato la query SalesUpdate, ma è possibile sostituirla con qualsiasi query AOT):

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

    packedQuery = _packedQuery;
    return packedQuery;
}

Se si desidera che la query venga decisa dalla classe controller, è possibile utilizzare anche una stringa vuota. In tal caso, è necessario implementare anche un paio di metodi helper (che probabilmente è consigliabile implementare comunque per comodità quando si ha bisogno di accedere alla query):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

Se è necessario inizializzare la query (ad esempio, aggiungere intervalli), è necessario implementare un metodo initQuery:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

È necessario assicurarsi di chiamare questo metodo dalla classe controller.

Ulteriori letture

Se ti è piaciuto questo post, potrebbero piacerti anche questi suggerimenti:


Condividi su BlueskyCondividi su FacebookCondividi su LinkedInCondividi su TumblrCondividi su XCondividi su LinkedInAggiungi su Pinterest

Mikkel Christensen

Sull'autore

Mikkel Christensen
Mikkel è il creatore e proprietario di miklix.com. Ha oltre 20 anni di esperienza come programmatore di computer/sviluppatore di software ed è attualmente impiegato a tempo pieno in una grande azienda IT europea. Quando non scrive sul blog, dedica il suo tempo libero a una vasta gamma di interessi, hobby e attività, che in qualche modo si riflettono nella varietà di argomenti trattati in questo sito.