Podczas tworzenia aplikacji, w niektórych przypadkach zachodzi potrzeba dynamicznego usuwania danych z raportu. Implementuje się to głównie w raportach przedstawiających powiadomienia, nowe wiadomości lub w momentach kiedy strona jest za duża aby odświeżać ją całą. Przy wykorzystaniu i połączeniu odpowiednich komponentów Oracle APEX jesteśmy w stanie w dość prosty sposób wykonać tę operację.
Poniższy przykład oparty jest na domyślnych tabelach Oracle EMP i DEPT.
Niezbędne rzeczy do dynamicznego usuwania rekordu z raportu.
- Report – raport typu classic lub interactive będący listą pracowników
- Item typu Hidden– item przechowujący id usuwanego pracownika
- Application process - proces aplikacyjny, usuwający danego pracownika.
- Javascript function – odpowiada za wywołanie procesu aplikacyjnego i odświeżenie raportu
Krok 1. Tworzymy raport oparty na tabeli EMP
Następnie edytujemy kolumnę EMPNO na raporcie. Jako target wybieramy URL, w którym wpisujemy javascript:deleteEmp(#EMPNO#) , a w polu Link Text wpisujemy Usuń.
Po kliknięciu w Usuń wywoływana będzie funkcja javascript o nazwie „deleteEmp”.
Krok 2. Hidden item
Dodajemy Item typu Hidden (:P2_EMP_ID), który będzie przechowywać id usuwanego pracownika.
Krok 3. Application process
Shared components -> Application Processes -> Create
Tworzymy Application process, w którym jako wyzwalacz (Process Point) wybieramy
“On Demand: Run this application process when requested by a page process” i nazywamy go “AP_DEL_EMP”. Jako źródło podajemy poniższy kod PL/SQL odpowiadający usunięcie
pracownika.
begin
if :P2_EMP_ID is not null then
delete from emp
where empno = :P2_EMP_ID;
:P2_EMP_ID:=’’;
commit;
end if;
end;
Krok 4. Javascript
Ważne jest, aby dodać Static Id do naszego raportu, który wykorzystany zostanie do odświeżania raportu. Zrobimy to edytując Raport i w Region Definition w polu Static ID wpisując R_EMPLOYEES.
Finalnie, przechodzimy do edycji strony i w sekcji HTML Header dodajemy poniższy kod Javascript.
<script language="Javascript" type="text/javascript">
function deleteEmp(EMPID){
var sqlQuery = new htmldb_Get(null,&APP_ID., 'APPLICATION_PROCESS=AP_DEL_EMP',&APP_PAGE_ID.);
sqlQuery.add('P2_EMP_ID',EMPID);
var gReturn = sqlQuery.get();
$('#R_EMPLOYEES').trigger('apexrefresh');
}
</script>
var sqlQuery = new htmldb_Get(null,$APP_ID., 'APPLICATION_PROCESS=AP_DEL_EMP', &APP_PAGE_ID.); - wywołanie Ajax
sqlQuery.add('P2_EMP_ID',EMPID); - ustawia ukryty item (:P2_EMP_ID) wartością klikniętą w raporcie będącą ID pracownika
var gReturn = sqlQuery.get(); - wykonuje wcześniej zdefiniowany proces aplikacyjny
$('#R_EMPLOYEES').trigger('apexrefresh'); - odświeża raport o Static ID “R_EMPLOYEES”.
Jeśli wszystko zrobiliśmy zgodnie z powyższymi krokami to teraz możemy przejść do raportu i po kliknięciu w „Usuń” wybrany pracownik zostanie usunięty przy czym strona nie zostanie przeładowana.
Fajna sprawa z tym ajax i javascript.
OdpowiedzUsuńCzy da się też uruchomić z przycisku ?
OdpowiedzUsuń