2012-08-27 10 views
5

Jestem bardzo zdezorientowany tym, jak działa apex_application.gfnn oracle i czy działa tylko dla standardowych raportów SQL w Oracle ApEx lub tylko z SQL (Raporty do aktualizacji, tj. Formularze tabelaryczne).Zrozumienie Oracle Apex_Application.G_Fnn i jak z niego korzystać

Zasadniczo staram się osiągnąć następujące przy użyciu tej próbki SQL, który jest po prostu Zgłoś SQL standard ale nie wiem, czy to, co próbuję osiągnąć to możliwe z tego typu lub raportu, tj:

select id, 
     name, 
     telephone, 
     apex_item.checkbox2(10,id) as "Tick when Contacted", 
     apex_item.text(20,my_date) as "Date Contacted", 
     apex_item.textarea(30,my_comment,5,80) as "Comment" 
from my_table 

Na podstawie powyższego sql, załóżmy, że zapytanie sql zwraca 10 wierszy. Teraz przy użyciu checkboxa jako mojego identyfikatora jazdy zaznaczam pole wyboru wszystkich nieparzystych rekordów/wierszy, tj. Wierszy 1,3,5,7,9 i dla każdego z tych wierszy, wprowadzam również wartość daty (f20) wraz z komentarzem (f30)

Mając to na uwadze, chcę utworzyć proces strony, który jest wywoływany, gdy użytkownik naciśnie przycisk "Zapisz", który przejdzie przez te zaznaczone wiersze i zapisze dla każdego rekordu, mojej daty i mojego komentarza ale tylko dla wierszy, które wybrałem.

Zatem na podstawie powyższego, spodziewałbym się ma 5 wiadomości wierszy w moim tabeli z następującymi kolumnami:

ID  MY_DATE  MY_COMMENT 
1  26/08/2012 Comment A 
3  27/08/2012 Comment B 
5  28/08/2012 Comment C 
7  29/08/2012 Comment D 
9  30/08/2012 Comment E 

Niestety jestem pewien jak to osiągnąć stosując apex_application.G_F10.COUNT

Chcę mieć dostęp do zawartości każdego z tych elementów tablicy (f20) i f (f30) dla każdego wiersza, w którym zaznaczyłem pole wyboru.

Czy to możliwe, czy też źle zrozumiałem, jak działa apex_application.G_Fnn?

Jeśli powyższe nie jest możliwe, proszę dać mi znać, w jaki sposób mogę to osiągnąć?

Czy potrzebuję raportu tabelarycznego?

Każda pomoc będzie mile widziana.

Dzięki.

+0

Migdałki, twoje nowe pytanie http://stackoverflow.com/q/12163564/814048 uświadomiło mi, że popełniłem bardzo głupi błąd w moim kodzie. Poprawiłem moją odpowiedź. Przepraszam za to. – Tom

+0

Cześć Tom - bez problemów. Doceniam to, że zmieniłeś swoją odpowiedź, również o wiele jaśniejszą. Będę o tym pamiętać, kiedy będę musiał ponownie użyć scenariusza checbox. BTW, czy ta poprawiona odpowiedź odnosi się do tabelarycznego SQL Updateable SQL lub raportu standardowego? – tonyf

+0

Zależy, co masz na myśli ze standardowym raportem! Dla formularza tabelarycznego: zdecydowanie tak, ponieważ jest to rodzaj, z którym tutaj pracujemy. – Tom

Odpowiedz

8

Jesteś bardzo blisko.

select apex_item.checkbox2(10, empno) select_me, 
apex_item.text(20, empno) empno, 
apex_item.text(30, ename)||apex_item.hidden(50, empno) ename 
from emp 

Łączę ukryty przedmiot, ponieważ nie chcę go w osobnej kolumnie. Mesy z układem.
Również ukryty przedmiot jest ze względu na działanie pól wyboru. Pola wyboru tylko przesyłają wartości dla zaznaczonych elementów. Oznaczałoby to, że tablica 10 ma 3 wartości. Pozostałe tablice nadal zawierają wartości dla wszystkich wierszy.
Właśnie dlatego dodałem ukryte empno: dzięki temu możemy dopasować sprawdzone wartości do innych wierszy.

Na przedstawić proces:

DECLARE 
    v_empno emp.empno%TYPE; 
    v_ename emp.ename%TYPE; 
BEGIN 
    --f10: checkbox 
    --f20: empno 
    --f30: ename 
    --f50: empno again 
    for i in 1..apex_application.g_f10.count 
    loop 
     for j in 1..apex_application.g_f50.count loop 
     if apex_application.g_f10(i) = apex_application.g_f50(j) 
     then   
      -- access values for the selected rows in the other arrays 
      v_empno := apex_application.g_f20(j); 
      v_ename := apex_application.g_f30(j); 

      apex_debug_message.log_message('Employee: '||v_empno||' - '||v_ename); 
     end if; 
     end loop; 
    end loop; 
END; 

stronę Run, pozwalają Debug wybrać rekordy 2, 4 i 6, kliknij.

record selection and query output

wyjście Debug:

debug output: BLAKE, JONES, FORD

Wszystko, co teraz trzeba zrobić, to umieścić przetwarzanie w pętli.

+0

Jeszcze raz dziękuję Tomowi, ale chcę tylko coś potwierdzić i mogę rzucić klucz w prace, ale jeśli chodzi o f20 i f30, załóżmy, że f20 to pole daty, które użytkownik wpisuje, a nie z kolumny tabeli bazy danych, wraz z f30 , który jest polem pola tekstowego, w którym użytkownik może wprowadzić komentarz i ponownie nie jest z kolumny tabeli bazy danych. Czy przetwarzanie będzie nadal działało w tym scenariuszu lub czy wymagane są zmiany? – tonyf

+0

To zależy od tego, co masz na myśli: jeśli planujesz używać standardowego przetwarzania wielorzędowego, którego używasz do standardowej postaci tabelarycznej: nie możesz. Ponadto w przypadku ręcznych formularzy tabelowych nie można uzyskać walidacji formularza tabelarycznego (zadeklarowane w punkcie przetwarzania sprawdzania poprawności). Nie masz również kontroli i optymalnego blokowania, które są ważne w systemach z równoczesnymi użytkownikami. – Tom

+0

Och i hej, możesz użyć apex_item.date_popup2 dla pola daty! – Tom

Powiązane problemy