poniedziałek, 26 kwietnia 2010

Przekazanie wartości do Filtra Raportu Interaktywnego

Witam

Niedawno miałem proste zadanie stworzenia linku do raportu interaktywnego, który ma być poddany filtrowaniu. Zazwyczaj zadanie takie wykonuje się poprzez utworzenie nowego Items'a na stronie raportu i następnie podpięcie Items'a do źródła raportu interaktywnego. Powstało by zatem coś takiego:

Select name, addres, street
from customers
where name like :P1_NAME

Wszystko fajnie ale co kiedy nasz użytkownik będzie chciał wrócić do podstawowego działania raportu - bez filtrowania ? Należałoby stworzyć przycisk kasujący cache lub wartości sesji dla Items'a P1_NAME. Zakładając, że mamy już całe środowisko raportu interaktywnego to dodawanie kolejnych przycisków wydaje się być mało eleganckie. Dlatego lepiej jest zastosować wbudowaną możliwość linkowania do Raportu interaktywnego z zadaniem filtrowania.

Jak to działa ?

Zacznijmy od przypomnienia składnia adresu URL w APEX:

f?p=APP:PAGE:SESSION:REQUEST:DEBUG:ClearCache:itemNames:itemValues

Aby przekazać wartości filtra do raportu interaktywnego na stronie wystarczy w miejscu itemNames podać odpowiednią nazwę "zmiennej", która będzie odpowiadała za wprowadzenia filtra.

W moim przypadku adres będzie wyglądał następująco:

f?p=2000:1:&SESSION.:::CIR:IRLIKE_NAME:dbe

Jako Items'a użyłem specjalnego ciągu, który składa się z trzech członów:
1. IR
2. LIKE
3. NAME

IR to skrót od interactive Report. LIKE to typ filtrowania natomiast NAME to alias kolumny, która ma być filtrowana.
W polu itemValues umieszczono wartość dla filtra (w tym przypadku dbe).

Dodatkowo możecie zauważyć ze w miejscu ClearCache gdzie zazwyczaj umieszcza się strony, dla których wartości sesji mają być wyczyszczone wpisałem CIR. Wpis ten informuje silnik APEX, że ma wyczyścić wszelkie ustawienia na raporcie interaktywnym - wyczyścić jego stan sesji.

Dodatkowe informacje o filtrach dla Interaktywnych raportów znajdziecie w dokumentacji Oracle tutaj.

0 komentarze:

Prześlij komentarz