Um das Beispiel zu vereinfachen wird hier mit der Tabelle Kette gearbeitet. Die verschiedenen Farben veranschaulichen die Anlagen:
create table Kette
(Position number,
Farbe varchar2(10));
insert into Kette (Position, Farbe) values (1, 'weiß');
insert into Kette (Position, Farbe) values (2, 'rosa');
insert into Kette (Position, Farbe) values (3, 'rot');
insert into Kette (Position, Farbe) values (4, 'orange');
insert into Kette (Position, Farbe) values (5, 'gelb');
insert into Kette (Position, Farbe) values (6, 'grün');
insert into Kette (Position, Farbe) values (7, 'blau');
insert into Kette (Position, Farbe) values (8, 'lila');
insert into Kette (Position, Farbe) values (9, 'braun');
insert into Kette (Position, Farbe) values (10, 'schwarz');
commit;
wird ein interaktiver Bericht mit folgender SQL-Abfrage benutzt:
select Position,
Farbe,
APEX_ITEM.CHECKBOX2( p_idx => 1,
p_value => Position,
p_attributes => 'class="boxes"') "Auswählen"
from Kette
order by Position;
Die Funktion APEX_ITEM.CHECKBOX2 legt in der Spalte “Auswählen” Kontrollkästchen an.
In den Filtereigenschaften dieser Spalte wird bei „Sicherheit: Escape bei Sonderzeichen“ Nein eingestellt.
Für Nachrichten gibt es das Element P26_MOVE_MESSAGE vom Typ „Nur anzeigen“ ohne Label.
Es werden zwei Schaltflächen benötigt, um die Datensätze nach oben oder nach unten zu verschieben.
Die Schaltfäche „NachObenVerschieben“ hat eine dynamisch Aktion „NachOben“:
Die 1. True Aktion ist „JavaScript-Code“ ausführen:
var f01_array = [];
/* Die Werte der einzelnen Kontrollkästchen im obigen Array forcieren: */
$('.boxes:checked').each(function() {
f01_array.push($(this).val());
});
/* AJAX-Prozess ausführen, um die Zeilen zu verschieben und das F01-Array zu übergeben:*/
apex.server.process( "MOVE_UP",
{ f01 : f01_array },
{dataType: 'text'}
);
Die 2. True Aktion ist „Seite weiterleiten“ (Submit Page), damit der Bericht die geänderten Datensätze anzeigt.
Equivalent dazu gibt es auf der Schaltfläche „NachUntenVerschieben“ die dynamische Aktion
"NachUnten“ mit 2 True Aktionen:
Die 1. True Aktion ist wieder „JavaScript-Code“ ausführen:
var f01_array = [];
/* Die Werte der einzelnen Kontrollkästchen im obigen Array forcieren: */
$('.boxes:checked').each(function() {
f01_array.push($(this).val());
});
/* AJAX-Prozess ausführen, um die Zeilen zu verschieben und das F01-Array zu übergeben:*/
apex.server.process( "MOVE_DOWN",
{ f01 : f01_array },
{dataType: 'text'}
);
Die 2. True Aktion ist wieder „Seite weiterleiten“ (Submit Page).
Dann gibt es die „Ajax Callback“-Prozesse, die durch den jeweiligen JavaScript Code aufgerufen werden:
Um den Datensatz nach oben zu verschieben:
Name: MOVE_UP
Type: PL/SQL Code
Source:
declare
v_count number := 0;
v_pos number := 0;
v_farbe varchar2(32);
begin
:P26_MOVE_MESSAGE := NULL;
for i in 1..apex_application.g_f01.count
loop
v_count := v_count+1;
select Position, Farbe
into v_pos, v_farbe
from Kette
where Position = apex_application.g_f01(i);
end loop;
if v_pos = 1 then
:P26_MOVE_MESSAGE := 'Sie können den ersten Datensatz nicht nach oben verschieben!';
else
if v_count = 1 then
update Kette
set Position = 0
where Position = (v_pos-1);
update Kette
set Position = (v_pos-1)
where Position = v_pos;
update Kette
set Position = (v_pos)
where Position = 0;
else
if v_count > 1 then
:P26_MOVE_MESSAGE := 'Um zu verschieben können Sie nur einen Datensatz auswählen!';
end if;
end if;
end if;
end;
Um den Datensatz nach unten zu verschieben:
Name: MOVE_DOWN
Type: PL/SQL Code
Source:
declare
v_count number := 0;
v_pos number := 0;
v_pos_max number;
v_farbe varchar2(32);
begin
:P26_MOVE_MESSAGE := NULL;
for i in 1..apex_application.g_f01.count
loop
v_count := v_count+1;
select Position, Farbe
into v_pos, v_farbe
from Kette
where Position = apex_application.g_f01(i);
end loop;
select max(Position)
into v_pos_max
from Kette;
if v_count > 1 then
:P26_MOVE_MESSAGE := 'Um zu verschieben können Sie nur einen Datensatz auswählen!';
else
if v_pos = v_pos_max then
:P26_MOVE_MESSAGE := 'Sie können den letzten Datensatz nicht nach unten verschieben!';
else
if v_count = 1 then
:P26_MOVE_MESSAGE := NULL;
update Kette
set Position = 0
where Position = (v_pos+1);
update Kette
set Position = (v_pos+1)
where Position = v_pos;
update Kette
set Position = (v_pos)
where Position = 0;
end if;
end if;
end if;
end;
Jetzt können im Bericht die Datensätze verschoben werden, hierzu im Kontrollkästchen den Datensatz markieren und die Schaltfläche „Nach Oben Verschieben“ oder „Nach Unten Verschieben“ benutzen.
Wird versucht, den ersten Datensatz nach oben oder den letzten Datensatz nach unten zu verschieben, werden Mitteilungen ausgeben wie:
'Sie können den ersten Datensatz nicht nach oben verschieben!'
Und
'Sie können den letzten Datensatz nicht nach unten verschieben!'
Achtung, es kann immer nur ein Datensatz zum Verschieben ausgewählt werden, ansonsten erscheint die Mitteilung:
'Um zu verschieben können Sie nur einen Datensatz auswählen!'
Um diese Nachrichten hervorzuheben, kann der Text rot anzeigt werden.
Dazu wird in den Filtereigenschaften der Seite bei CSS, Inline folgendes mitgegeben:
.rot {
color: red !important;
}
und in den Filtereigenschaften des Elements P26_MOVE_MESSAGE bei Erweitert und CSS-Klassen: rot.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.