Ús d'una consulta en una classe de contracte de dades SysOperation al Dynamics AX 2012
Publicat: 5 de març del 2025, a les 19:30:08 UTC
Última actualització: 12 de gener del 2026, a les 8:47:44 UTC
Aquest article explica els detalls sobre com afegir una consulta configurable i filtrable per l'usuari a una classe de contracte de dades SysOperation al Dynamics AX 2012 (i al Dynamics 365 for Operations).
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
La informació d'aquesta publicació es basa en el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions. (Actualització: puc confirmar que això també funciona al Dynamics 365 for Operations)
Sempre m'oblido dels detalls sobre com especificar i inicialitzar una consulta al framework SysOperation. Suposo que la majoria de les tasques per lots que he estat fent no es basen en consultes configurables per l'usuari, però de tant en tant necessito fer una tasca per lots d'aquest tipus, així que aquesta publicació també és per a la meva pròpia referència.
Primer, a la classe de contracte de dades, la consulta s'emmagatzemarà empaquetada en una cadena. El seu mètode parm ha d'estar decorat amb l'atribut AifQueryTypeAttribute, així (en aquest exemple he utilitzat la consulta SalesUpdate, però podeu substituir-la per qualsevol consulta AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Si voleu que la consulta la decideixi la classe controladora, també podeu utilitzar una cadena buida. En aquest cas, també heu d'implementar un parell de mètodes auxiliars (que probablement hauríeu d'implementar de totes maneres per a la vostra pròpia comoditat quan necessiteu accedir a la consulta):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Si necessiteu inicialitzar la consulta (per exemple, afegir rangs), heu d'implementar un mètode initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Cal assegurar-se de cridar aquest mètode des de la classe controlador.
Lectures addicionals
Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:
- Suprimir una entitat jurídica (comptes d'empresa) al Dynamics AX 2012
- Error "No s'ha definit cap classe de metadades per a l'objecte del contracte de dades" al Dynamics AX 2012
- La diferència entre data() i buf2Buf() a Dynamics AX 2012
