2012-12-19 23 views
5

Zmodyfikowałem formularz InventTable, aby użytkownicy mogli filtrować elementy w zależności od statusu "Zatrzymano" w formularzu ustawień domyślnych ustawień zamówień . Dostają listę "kupowalnych" przedmiotów, "nadających się do sprzedaży" przedmiotów, wszystkich przedmiotów lub zablokowanych przedmiotów do sprzedaży lub zakupu w zależności od wartości dwóch pól wyboru.Dynamika AX: Wyłącz źródło danych z formularza w kodzie przy jednoczesnym użyciu zaawansowanej opcji filtrowania/sortowania

Dodałem źródła danych InventItemSalesSetup i InventItemPurchSetup w kodzie i włączam je lub wyłącza, gdy użytkownik zaznaczy lub odznacza pole wyboru.

Wszystko działa poprawnie, chyba że jedno z źródeł danych jest wyłączone. Następnie opcja "Zaawansowane filtrowanie/sortowanie" przestaje działać. Pojawia się błąd: "Źródło danych nie jest włączone".

Błąd pochodzi z metody "saveCueEnabled" formularza SysQueryForm. Kiedy to nazywa:

if (!CueRun::canSaveQueryAsCue(this.args().caller())) 
    return false; 

który wzywa:

static boolean canSaveQueryAsCue(QueryRun qr) 
{ 
    int numOfDataSources, i; 
    QueryBuildDataSource ds; 
    Query q; 
    Common cursor; 
    ; 

    if (!qr) 
    return false; 

    q = qr.query(); 
    if (!q) 
     return false; 

    numOfDataSources = q.dataSourceCount(); 
    for(i = 1; i <= numOfDataSources; i++) 
    { 
     ds = q.dataSourceNo(i); 
     if(ds.dynalinkCount() > 0) 
      return false; 

     // Check if it is temp 
     cursor = qr.getNo(i); 
     if (cursor.dataSource() && cursor.isTmp()) 
      return false; 
    } 

    return true; 
} 

Kiedy robi się numer kodu źródłowego w kwerendzie „dataSourceCount” metoda zwraca również liczyć z niepełnosprawnymi źródeł danych, a gdy Otrzymuje QueryBuildDataSource z wyłączonych źródeł danych w pętli otrzymasz pusty DS i ulega awarii, gdy sprawdza, czy jest to tabela tymczasowa.

Rozwiązałem problem, dodając dodatkowe, jeśli w kodzie "saveCueEnabled", ale zastanawiam się, czy istnieje sposób, aby włączyć/wyłączyć źródła danych bez uzyskania tego błędu.

Mam nadzieję, że wyjaśniłem się dobrze, dziękuję!

Odpowiedz

4

Jedyne rozwiązanie, jakie mogę wymyślić, wymaga modyfikacji canSaveQueryAsQue().

Ta aktualizacja pętli for jest prosta i powinna rozwiązać problem.

for(i = 1; i <= numOfDataSources; i++) 
{ 
    ds = q.dataSourceNo(i); 
    if(ds && ds.dynalinkCount() > 0) 
     return false; 

    // Check if it is temp 
    cursor = qr.getNo(i); 
    if (cursor.dataSource() && cursor.isTmp()) 
     return false; 
} 

Nie testowałem tego kodu, ale użyłem podobnego kodu w innych sytuacjach. Mam nadzieję, że pomaga!

+0

Myślę, że to powinno zadziałać. Dzięki, spróbuję, jeśli jeszcze raz pojawię się z tym problemem. –

0

Sugerowana edycja w rzeczywistości nie działa, ponieważ zmienna "ds" jest nadal "prawdą" podczas testowania.

Poniższa wydaje się działać:

for(i = 1; i <= numOfDataSources; i++) 
{ 
    ds = q.dataSourceNo(i); 
    if(ds.enabled() && ds.dynalinkCount() > 0) 
     return false; 

    // Check if it is temp 
    if(ds.enabled()) 
    { 
     cursor = qr.getNo(i); 
     if (cursor.dataSource() && cursor.isTmp()) 
      return false; 
    } 
} 

Dodanie „.enabled()” właściwość testu pozwala kod przeskoczyć niepełnosprawnych źródeł danych na żądanie.