Quem nunca precisou executar um processo PL/SQL pelo JavaScript no Oracle Apex?
Essa é uma função que mesmo que possa parecer complexa é algo realmente simples de se fazer.
Caso você ainda não esteja familiarizado com o conceito de Ajax Callback e Promisses recomendo a leitura deste artigo aqui antes de prosseguir.
Para executar um processo com Ajax Callback, iremos utilizar o namespace apex.server.process.
Segundo a documentação da Oracle,
Essa função chama um processo PL/SQL sob demanda (retorno de chamada Ajax) definido no nível da página ou do aplicativo. Essa função é um wrapper da função jQuery.ajax que suporta um subconjunto das opções jQuery.ajax, além de opções adicionais específicas do Application Express.
apex.server.process( pName, pData, pOptions ) → Promise
Recomendo muito a leitura da documentação para compreender a capacidade total dessa função 👍.
Neste exemplo irei demonstrar a utilização do apex.server.process.
Primeiramente crio uma função JavaScript, que passo um código de um item através do parametro X01 e chamo a função callback "PUBLICA_ITEM":
async function publicaItem() {
let waitPopup = apex.widget.waitPopup();
await apex.server.process("PUBLICA_ITEM", {
x01: row.find('td').eq('4').text(),
dataType: "json"
}, {
success: function (data) {
waitPopup.remove();
var region = apex.region("regItens");
region.refresh();
apex.message.clearErrors();
apex.message.showPageSuccess("Publicação realizada com sucesso!");
},
error: function (jqXHR, textStatus, errorThrown) {
waitPopup.remove();
apex.message.clearErrors();
apex.message.showErrors([
{
type: apex.message.TYPE.ERROR,
location: ["page"],
message: "Erro ao publicar itens: " + errorThrown,
unsafe: false
}
]);
}
});
}
É possível utilizar os parâmetros x01 - x10 (String) que podem ser acessados no PL/SQL utilizando apex_application.G_X01 - apex_application.G_X10.
Agora crio um novo item Ajax Callback dentro da aba "Processing" com o nome "PUBLICA_ITEM":
begin
if apex_application.G_X01 is not null then
UPDATE ITEM
SET ITEM.ST_PUBLICADO = 'S'
WHERE ITEM.ID = apex_application.G_X01;
commit;
end if;
apex_json.open_object;
apex_json.write('success', true);
apex_json.close_object;
exception
when others then
apex_json.open_object;
apex_json.write('success', false);
apex_json.write('message', sqlerrm);
apex_json.close_object;
END;
É importante salientar que é esperado um retorno da função, nesse exemplo retorno um JSON com o valor success = true, significando que o processamento foi realizado e finalizado com sucesso, ou false quando houver algum erro.
Caso não houver um retorno irá dar um erro SyntaxError: Unexpected end of JSON input.
Por enquanto é apenas isso.
Um passo de cada vez 😄...
Comentários
Postar um comentário