Eu tenho uma grade interativa baseada nesta consulta:
select id_no,
TESTID,
UNITID ,
result,
MEAN,
SD,
ROUND(((result - mean) / sd),2) AS SDI ,
LOW_LIMIT,
HIGH_LIMIT,
PERF_ID,
VALIDATED
FROM HAJJ_QC_RESULTS
where sample_id = :P13_SAMPLE
AND hospital_no = :P13_HOSPITAL
AND approved_date = :P13_FROMDATE
Então criei um botão com ação dinâmica ao clicar no botão preciso calcular a coluna PERF_ID este é o código java script e o botão funciona quando clicar no botão está calculando os dados na grade este é o código executado com ação dinâmica
var widget = apex.region('validate').widget();
var grid = widget.interactiveGrid('getViews','grid');
var model = grid.model;
var v_amount = 0;
model.forEach(function (r) {
v_amount = 0;
model.setValue(r,'VALIDATED',2)
if (model.getValue( r , "SDI") >= 0 && model.getValue( r , "SDI") <= 1 )
{
v_amount += 1
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") <= 0 && model.getValue( r , "SDI") >= -1 )
{
v_amount += 1
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") >= 1.01 && model.getValue( r , "SDI") <= 1.5 )
{
v_amount += 2
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") <= -1.01 && model.getValue( r , "SDI") >= -1.5 )
{
v_amount += 2
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") >= 1.6 && model.getValue( r , "SDI") <= 2 )
{
v_amount += 3
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") <= -1.6 && model.getValue( r , "SDI") >= -2 )
{
v_amount += 3
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") > 2 )
{
v_amount += 4
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
else if
(model.getValue( r , "SDI") < -2 )
{
v_amount += 4
model.setValue(r,'PERF_ID',v_amount)
//$s("PERF_ID",v_amount)
}
v_amount = 0;
})
o problema quando clico no botão Salvar não está salvando os dados da coluna PERF_ID. Verifiquei o processo DML. Tenho apenas uma região editável. Qual é o motivo pelo qual não salvamos os dados?
Nota: se eu digitar os dados na coluna PERF_ID um por um para cada linha e salvar seu salvamento, mas quando os dados forem preenchidos pelo código java script, ele não será salvo?
Usar:
De https://docs.oracle.com/en/database/oracle/apex/23.2/aexjs/model.html :
'O modelo tem muito poucas restrições nos valores dos campos. No entanto, normalmente, quando os dados do modelo apoiam itens APEX ou controles de formulário HTML, os valores serão todos strings.'
Do lado do servidor, o APEX irá converter para um número, levando em consideração qualquer máscara de formato.
Resolvi usando CASE na query dinâmica e sem necessidade do botão