Korzystanie z zapytania w klasie kontraktu danych SysOperation w systemie Dynamics AX 2012
Opublikowano: 16 lutego 2025 01:23:01 UTC
Ostatnia aktualizacja: 12 stycznia 2026 08:47:14 UTC
W tym artykule opisano szczegółowo sposób dodawania konfigurowalnego przez użytkownika i filtrowalnego zapytania do klasy kontraktu danych SysOperation w systemie Dynamics AX 2012 (i Dynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Informacje w tym poście dotyczą systemu Dynamics AX 2012 R3. Mogą być lub nie być aktualne dla innych wersji. (Aktualizacja: Potwierdzam, że działa to również w Dynamics 365 for Operations)
Zawsze zapominam szczegółów dotyczących określania i inicjowania zapytania w środowisku SysOperation. Domyślam się, że większość zadań wsadowych, które wykonuję, nie opiera się na zapytaniach konfigurowalnych przez użytkownika, ale od czasu do czasu muszę wykonać takie zadanie wsadowe, więc ten post jest również dla mnie.
Najpierw w klasie kontraktu danych zapytanie zostanie zapisane w postaci spakowanego ciągu znaków. Jego metoda parm musi być oznaczona atrybutem AifQueryTypeAttribute, jak na poniższym przykładzie (w tym przykładzie użyłem zapytania SalesUpdate, ale można je zastąpić dowolnym zapytaniem AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Jeśli chcesz, aby zapytanie było rozstrzygane przez klasę kontrolera, możesz również użyć pustego ciągu znaków. W takim przypadku musisz zaimplementować kilka metod pomocniczych (które prawdopodobnie i tak powinieneś zaimplementować dla własnej wygody, gdy będziesz potrzebować uzyskać dostęp do zapytania):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Jeśli zachodzi potrzeba zainicjowania zapytania (na przykład dodania zakresów), należy zaimplementować metodę initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Musisz upewnić się, że wywołujesz tę metodę z klasy kontrolera.
Dalsza lektura
Jeśli podobał Ci się ten wpis, mogą Cię zainteresować również poniższe sugestie:
- Błąd „Brak zdefiniowanej klasy metadanych dla obiektu kontraktu danych” w systemie Dynamics AX 2012
- Usuwanie jednostki prawnej (kont firmowych) w systemie Dynamics AX 2012
- Identyfikowanie klasy dokumentu i zapytania dla usługi AIF w systemie Dynamics AX 2012
