Zapewne wielokrotnie byliście w sytuacji, gdy użytkownik widząc raport, chciał wykonać pewne operacje na wielu wierszach w tym raporcie, typu usuwanie czy zatwierdzanie. Przeważnie z pomocą szedł tutaj Tabular Form, jednak ze względu na jego CRUDowy charakter nie pozwalał na wszystko co sobie zaplanowaliście.
Postanowiliśmy rozwinąć zagadnienie opisane w poście Checkbox na raporcie i paginacja. Nagraliśmy film, który krok po kroku pokazuje jak utworzyć taką funkcjonalność na różnym stopniu zaawansowania.
select dat.DAT_ID, dat.DAT_SYMBOL,
APEX_ITEM.CHECKBOX2( p_idx => 2, p_value => dat.DAT_ID,
p_checked_values => c.n001 ) checkbox
from DEL_ACTION_TEMPLATES dat
left join apex_collections c on dat.DAT_ID = c.n001
and c.collection_name = 'P5_CHECKBOX_02'
var id = [];
var checked = [];
$("input[name='f02']").each(function(){
if (this.checked != $("#checkall")[0].checked) {
id.push(this.value);
checked.push($("#checkall")[0].checked);
this.checked = $("#checkall")[0].checked;
}
});
apex.server.process("UpdateAllCheckboxCollection",{
f01: id,
f02: checked
});
Process Show submited:
select listagg(n001,':') within group (order by n001) into :P5_SUBMITED
from apex_collections where collection_name = 'P5_CHECKBOX_02';
for x in (select n001 from apex_collections where collection_name = 'P5_CHECKBOX_02')
loop
dat_pkg.operation(
p_dat_id => x.n001
);
end loop;
apex_collection.delete_collection (
p_collection_name => 'P5_CHECKBOX_02');
Proces UpdateCheckboxCollection:
declare
l_seq number;
begin
if apex_collection.collection_exists( p_collection_name => 'P5_CHECKBOX_02') = FALSE
then apex_collection.create_collection (p_collection_name => 'P5_CHECKBOX_02');
end if;
if :APP_AJAX_X02 = 'true'
then
apex_collection.add_member(
p_collection_name => 'P5_CHECKBOX_02',
p_n001 => :APP_AJAX_X01);
else
select seq_id into l_seq from apex_collections
where collection_name = 'P5_CHECKBOX_02' and n001 = :APP_AJAX_X01;
apex_collection.delete_member(
p_collection_name => 'P5_CHECKBOX_02',
p_seq => l_seq);
end if;
htp.p('{"ret":"OK"}');
exception
when OTHERS then
htp.p('{"ret":"Error"}');
end;
Proces UpdateAllCheckboxCollection:
declare
l_seq number;
begin
if apex_collection.collection_exists( p_collection_name => 'P5_CHECKBOX_02') = FALSE
then apex_collection.create_collection (p_collection_name => 'P5_CHECKBOX_02');
end if;
for x in 1..apex_application.g_f01.count
loop
if apex_application.g_f02(x) = 'true'
then
apex_collection.add_member(
p_collection_name => 'P5_CHECKBOX_02',
p_n001 => apex_application.g_f01(x));
else
select seq_id into l_seq from apex_collections
where collection_name = 'P5_CHECKBOX_02' and n001 = apex_application.g_f01(x);
apex_collection.delete_member(
p_collection_name => 'P5_CHECKBOX_02',
p_seq => l_seq);
end if;
end loop;
htp.p('{"ret":"OK"}');
exception
when OTHERS then
htp.p('{"ret":"Error"}');
end;
Jeśli masz swoje sposoby na operacje na wielu wierszach jednocześnie podziel się tym w komentarzu pod artykułem.
Brak komentarzy:
Prześlij komentarz