Miklix

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)


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 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):

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);
}

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:


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

Mikkel Christensen

O autorze

Mikkel 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.