2012-08-27 7 views
5

Ich bin ziemlich verwirrt, wie Orakel apex_application.gfnn funktioniert und ob es funktioniert nur für Standard-SQL-Berichte in Oracle ApEx oder nur mit SQL (Updateable Berichte, d. H. Tabellenformulare).Verständnis von Oracle Apex_Application.G_Fnn und wie man es verwendet

Grundsätzlich versuche ich, die folgende Verwendung dieser Probe SQL, die nur ein Standard-SQL-Bericht ist zu erreichen, aber nicht sicher, ob das, was ich mit dieser Art möglich ist, oder ein Bericht, dh zu erreichen versuchen:

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 

Nehmen Sie an, dass diese SQL-Abfrage 10 Zeilen zurückgibt, basierend auf dem obigen SQL. Jetzt setze ich Checkbox als meine treibende ID ein, hake das Kontrollkästchen aller ungeraden Datensätze/Zeilen, dh Zeilen 1,3,5,7,9, und für jede dieser Zeilen gebe ich auch einen Datumswert (f20) zusammen mit einem Kommentar ein (f30)

In diesem Sinne möchte ich dann einen Seitenprozess erstellen, der aufgerufen wird, wenn der Benutzer die Schaltfläche "Speichern" drückt, die diese geprüften Zeilen durchlaufen und für jeden Datensatz, mein Datum und meinen Kommentar speichern wird aber nur für die Zeilen, die ich ausgewählt habe.

auf der oben So basiert, würde ich erwarten, mit den folgenden Spalten in meiner Tabelle 5 Nachrichten Reihen haben:

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 

Leider, wie ich bin nicht sicher, diese

apex_application.G_F10.COUNT mit erreichen

Ich möchte auf den Inhalt jedes dieser Array-Elemente (f20) und f (f30) für jede Zeile zugreifen können, die ich das Kontrollkästchen mit aktiviert habe.

Ist das möglich oder habe ich missverstanden, wie apex_application.G_Fnn funktioniert?

Wenn das oben nicht möglich ist, lassen Sie mich wissen, wie ich das erreichen kann?

Benötige ich einen tabellarischen Bericht?

Jede Hilfe würde sehr geschätzt werden.

Danke.

+0

Tonsils, deine neue Frage http://Stackoverflow.com/q/12163564/814048 ließ mich erkennen, dass ich einen sehr dummen Fehler in meinem Code gemacht habe. Ich habe meine Antwort geändert. Das tut mir leid. – Tom

+0

Hallo Tom - keine Probleme. Schätze, dass du deine Antwort geändert hast, jetzt auch viel klarer. Ich werde diesen Gedanken behalten, wenn ich wieder ein Checbox-Szenario brauche. BTW, bezieht sich diese geänderte Antwort auf einen tabellarischen SQL Updateable SQL-Bericht oder nur einen Standardbericht? – tonyf

+0

Hängt davon ab, was Sie mit Standardbericht meinen! Für eine tabellarische Form: auf jeden Fall ja, da wir mit der hier arbeiten. – Tom

Antwort

8

Sie sind sehr nah dran.

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 

Ich verkette das versteckte Element, da ich es nicht in einer eigenen Spalte haben möchte. Vermisse mit dem Layout.
Auch das versteckte Element ist da, weil die Checkboxen funktionieren. Kontrollkästchen geben nur ihre Werte für geprüfte Elemente ein. Dies würde bedeuten, dass das Feld 10 drei Werte aufweist. Die anderen Arrays würden immer noch die Werte für alle Zeilen enthalten.
Aus diesem Grund habe ich das versteckte empno wieder hinzugefügt: so können wir die überprüften Werte den anderen Zeilen zuordnen.

Auf einreichen Prozess:

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; 

Run Seite, aktivieren Sie Debug, wählen Sie Datensätze 2, 4 und 6 vor.

record selection and query output

Debug-Ausgabe:

debug output: BLAKE, JONES, FORD

Alles, was Sie jetzt tun müssen, ist Ihre Verarbeitung in der Schleife stellen.

+0

Danke nochmal Tom aber will nur etwas bestätigen und darf einen Schraubenschlüssel in die Werke werfen, aber in Bezug auf f20 und f30 nehme man an, dass f20 ein Datumsfeld ist, das ein Benutzer tatsächlich eingibt und nicht aus einer Datenbanktabellenspalte, zusammen mit f30 Dies ist ein Textfeldfeld, in das ein Benutzer einen Kommentar eingeben kann und der wiederum nicht aus einer Datenbanktabellenspalte stammt. Funktioniert Ihre Verarbeitung noch für dieses Szenario oder sind Änderungen erforderlich? – tonyf

+0

Es hängt davon ab, was Sie eigentlich meinen: Wenn Sie die standardmäßige mehrzeilige Verarbeitung verwenden möchten, die Sie für ein Standard-Tabellenformular verwenden würden: Sie können nicht. Bei manuellen Tabellenformularen können Sie auch keine Tabellenformvalidierungen durchführen (die im Bearbeitungspunkt für Validierungen deklariert sind). Außerdem erhalten Sie keine Prüfsummen und optimale Sperren, die in Systemen mit gleichzeitigen Benutzern wichtig sind. – Tom

+0

Oh und hey, du könntest apex_item.date_popup2 für ein Datumsfeld verwenden! – Tom

Verwandte Themen