Користење на барање во класа на договор за SysOperation податоци во Dynamics AX 2012
Објавено: 5 март 2025, во 19:54:22 UTC
Оваа статија ги обработува деталите за тоа како да додадете барање кое може да се конфигурира и филтрира во класата на договор за податоци SysOperation во Dynamics AX 2012 (и Dynamics 365 за операции)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Информациите во овој пост се засноваат на Dynamics AX 2012 R3. Може или не може да важи за други верзии. (Ажурирање: можам да потврдам дека ова функционира и на Dynamics 365 for Operations)
Се чини дека секогаш ги заборавам деталите за тоа како да специфицирам и иницијализирам барање во рамката SysOperation. Претпоставувам дека повеќето од сериските задачи што ги правев не се засноваат на барања што може да се конфигурираат од страна на корисникот, но одвреме-навреме треба да направам таква сериска работа, така што овој пост е исто така за моја сопствена референца.
Прво, во класата на договор за податоци, барањето ќе биде зачувано спакувано во низа. Нејзиниот парм метод мора да биде украсен со атрибутот AifQueryTypeAttribute, како и така (во овој пример го користев барањето SalesUpdate, но можете да го замените ова со кое било барање AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Ако сакате барањето да биде одлучено од класата на контролорот наместо тоа, можете да користите и празна низа. Во тој случај, треба да имплементирате неколку помошни методи (кои веројатно треба да ги имплементирате во секој случај за ваша сопствена погодност кога треба да пристапите до барањето):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Ако треба да го иницијализирате барањето (на пример, да додадете опсези), треба да имплементирате метод initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Треба да се погрижите да го повикате овој метод од класата на контролорот.