Já precisou criar uma personalização que dependesse do retorno de uma função de banco no Form Personalization?
Essa é uma dúvida recorrente que recebo, inclusive esse artigo foi escrito com base em e-mails trocados com um dos meus alunos do treinamento Oracle EBS Personalization.
Como não canso de falar aqui no blog, o Form Personalization é muito poderoso. Com ele podemos criar soluções incríveis sem precisar mexer no código-fonte dos programas.
Ele é muito completo e oferece várias possibilidades, mas quando precisamos criar uma personalização com base no retorno de uma função (ou parâmetro de retorno de uma procedure), a solução pode não parecer tão clara.
Nesse artigo vou demonstrar como isso é possível utilizando como exemplo o recurso de mensagens.
Então se você quer saber como personalizar com base no retorno de uma função de banco no Form Personalization, acompanhe esse artigo para saber mais sobre os seguintes pontos:
- Entendendo o problema
- Solução #01: Uma regra para cada retorno
- Solução #02: DECODE
- Solução #03: CASE
Entendendo o problema
Com o Form Personalization é possível chamar uma procedure pela Builtin “Execute a Procedure”:
Nela você pode escrever um bloco PL/SQL e chamar uma procedure normalmente.
O problema é quando essa procedure tem parâmetros de retorno (OUT) e você precisa saber o conteúdo desse retorno.
Infelizmente não é possível obter esse retorno por essa builtin, mas podemos contornar esse impasse de outras maneiras.
Como mencionado no começo do artigo, vou utilizar como exemplo para demonstração o recurso de mensagens do personalization, mas você pode utilizar o mesmo conceito e adaptar para as suas necessidades.
Mostrarei mensagens específicas de acordo com o retorno de uma função de banco no Form Personalization, nesse caso não é possível a utilização de procedures.
Solução #01: Uma regra para cada retorno
Como as personalizações são ativadas de acordo com as condições definidas, faremos a verificação do retorno da função na caixa de condições:
Essa caixa é muito versátil e permite condições desde as mais simples até as mais complexas, faremos o uso de SQL.
O cenário será o seguinte:
Será chamada uma função onde será passado um parâmetro com o número de uma ordem de venda do OM, a função verificará se o pedido está registrado ou não:
- Quando a função retornar ‘Y', uma mensagem será mostrada avisando que o pedido está registrado
- Quando retornar ‘N', uma mensagem avisando que o pedido não está registrado
Para essa solução, será necessário criar duas personalizações:
- Uma para mostrar a mensagem quando o retorno for ‘Y'
- Outra quando for ‘N'
O código da função é esse:
CREATE OR REPLACE FUNCTION check_order_f (p_header_id NUMBER) RETURN VARCHAR2 IS l_booked_flag oe_order_headers_all.booked_flag%TYPE; -- BEGIN SELECT OOH.BOOKED_FLAG INTO l_booked_flag FROM oe_order_headers_all OOH WHERE OOH.header_id = p_header_id; -- RETURN l_booked_flag; -- END check_order_f; |
#01. Primeira personalização: Retorno ‘Y'
Código da condição:
É feita a validação se o retorno é igual a ‘Y'.
Então para esse cenário, mostramos a mensagem correspondente:
#02. Segunda personalização: Retorno ‘N'
Código da condição:
Agora a validação verifica se o retorno é igual a ‘N'.
Mensagem é a mesma, exceto pelo “não”:
E está feito.
Criamos uma solução que mostra mensagens com base no retorno de uma função de banco no Form Personalization.
Solução #02: DECODE
Na segunda solução vamos deixar nossa personalização mais inteligente e, consequentemente, reduzir as configurações necessárias.
Será necessário criar apenas uma personalização e sem a necessidade de condições.
A inteligência ficará toda no texto da mensagem, utilizando o comando DECODE:
Essa caixa é muito flexível e também permite o uso de SQL, assim é possível utilizar o comando DECODE para validar o retorno e mostrar o texto correspondente.
Solução #03: CASE
A terceira solução utiliza o mesmo conceito da anterior, só difere pelo uso do comando CASE (Essa foi a solução sugerida e adotada pelo aluno, eu tinha fornecido os dois exemplos anteriores).
Dependendo da situação, eu até prefiro o CASE no lugar do DECODE.
Conclusão sobre a personalização baseada numa função de banco no Form Personalization
Mais uma vez, o Form Personalization mostrando seu potencial.
Como sempre digo, quando conhecemos apenas o básico de uma ferramenta, fica difícil visualizarmos soluções interessantes para nossos problemas.
Esse foi um dos motivos que me motivaram a criar o curso Oracle EBS Personalization, percebi que muitos profissionais tinham dificuldades com alguns gaps que poderiam ser resolvidos facilmente com personalização.
Se ainda não baixou o eBook gratuito “11 incríveis usos de Oracle EBS Personalization que você precisa conhecer”, fica a dica.