Interaktywny raport w Apex – jak zrobić klikalny wiersz

apex

W projektach, w których liczy się wygląd aplikacji (czyli zdecydowanej większości z nich), czasem musimy implementować rozwiązania, których nie ma w APEX, chociaż wydawałyby się naturalnymi rozwiązaniami. Dobrym przykładem jest brak obsługi kliknięcia w cały wiersz raportu. Na szczęście w miarę łatwo da się obejść to ograniczenie. Wystarczy użyć załączonej do APEX biblioteki JQUERY, dynamicznej akcji oraz formatowania wierszy.

Aby zaprezentować to rozwiązanie, potrzebny nam jakikolwiek raport interaktywny. Dla każdej z kolumn trzeba ustawić „HTML Expression” tak, aby zawierało potrzebne nam dane w niewidocznej strukturze znacznika „span”. W poniższym przykładzie „#OBJECT_ID#” jest kolumną z identyfikatorem, a „#OBJECT_NAME#” to aktualna kolumna, czyli część zmienna.

ir_apex_clickrow_1

Przy większej liczbie kolumn bywa to uciążliwe, ale można wprowadzić zmiany w kolumnach wszystkich raportów na stronie za pomocą modyfikacji danych w tabeli APEX:

1
2
3
UPDATE apex_040200.wwv_flow_worksheet_columns a
SET a.column_html_expression='<span class="SpanId" id="#OBJECT_ID#"></span>#'||a.db_column_name||'#'
WHERE a.flow_ID=222 AND a.page_id=2 ;

Oczywiście SQL trzeba wykonać, używając konta z odpowiednim poziomem uprawnień.
Użycie „HTML Expression” jest potrzebne, bo użytkownik może ukryć potrzebną nam kolumnę lub kolumna z identyfikatorem może być zaznaczona jako ukryta. Przypadkiem nieobsłużonym jest stworzenie kolumny typu „Compute” i wybranie tylko jej jako zawartości raportu.
Kliknięcie w wiersz raportu najłatwiej obsłużyć za pomocą dynamicznej akcji, która używa „jQuery Selector” do wyboru elementów obsługujących zdarzenie. We wcześniejszym przykładzie podaliśmy elementy „TR” znajdujące się w elementach klasy „.apexir_WORKSHEET_DATA”. W przypadku znacznej ingerencji w szablon lub użycie zwykłego raportu należy dostosować wyrażenie.

ir_apex_clickrow_2

Należy poza tym pamiętać o zmianie parametru „Event Scope” na wartość „Dynamic”. Pozwala to na kontynuację działania dynamicznej akcji  po częściowym odświeżeniu regionu, np. poprzez użycie przycisku „Go” w interaktywnym raporcie.

Jako akcję możemy uruchomić kod JavaScript lub np. ustawić wartość pola na wybrany identyfikator jako „JavaScript Expression”, używając wyrażenia: „$(this.triggeringElement).children(‚td’).children(‚.SpanId’).attr(‚id’)”.

ir_apex_clickrow_3

Wartości w wypełnionym polu można używać np. jako filtru w innym raporcie.

Jeśli podobnie jak ja uważacie, że Apex powinien pozwalać na definiowanie obsługi kliknięcia na wiersz raportu, możecie zagłosować na „Feature Request” o identyfikatorze AG1M na stronie Oracle Application Express Feature Requests.

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *