Miklix

Korzystanie z zapytania w klasie kontraktu danych SysOperation w systemie Dynamics AX 2012

Opublikowano: 16 lutego 2025 01:23:01 UTC

W tym artykule omówiono 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)


Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

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

Informacje w tym poście są oparte na Dynamics AX 2012 R3. Mogą być lub nie być ważne dla innych wersji. (Aktualizacja: Mogę potwierdzić, że to działa również w Dynamics 365 for Operations)

Zawsze zapominam szczegółów dotyczących określania i inicjowania zapytania w ramach SysOperation. Podejrzewam, że większość zadań wsadowych, które tworzę, nie opiera się na konfigurowalnych przez użytkownika zapytaniach, ale od czasu do czasu muszę wykonać takie zadanie wsadowe, więc ten post jest również dla mojego własnego odniesienia.

Najpierw w klasie kontraktu danych zapytanie zostanie zapisane spakowane w ciągu. Jego metoda parm musi być ozdobiona atrybutem AifQueryTypeAttribute, tak jak tutaj (w tym przykładzie użyłem zapytania SalesUpdate, ale możesz 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 zostało określone przez klasę kontrolera, możesz również użyć pustego ciągu. W takim przypadku musisz również zaimplementować kilka metod pomocniczych (które prawdopodobnie powinieneś zaimplementować w każdym razie dla własnej wygody, gdy będziesz potrzebować dostępu do zapytania):

public Query getQuery()
{
    ;

    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:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Należy pamiętać o wywołaniu tej metody z klasy kontrolera.

Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Bang Christensen

O autorze

Mikkel Bang Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.