As surpreendentes verdades que nunca contaram a você sobre o Form Personalization

form-personalization-pic

Enfim, estou escrevendo sobre Form Personalization (FP para os íntimos)…

Será que é tarde?

Vou contar uma coisa pra você… Há muito tempo que penso em escrever sobre o Form Personalization.

E quando digo muito tempo, é muito tempo mesmo.

Desde o primeiro momento em que conheci esta ferramenta, fiquei simplesmente fascinado com todo o potencial que ela tinha e tudo o que eu poderia fazer com ela.

► Já baixou o eBook (Clique para baixar) com 11 incríveis usos para o EBS Personalization? São personalizações super úteis para Forms e WEB/OAF, todos com exemplos práticos. É Grátis!

Para um “fuçador” e alguém que sempre procura um meio de melhorar as coisas, aquilo era um prato cheio.

Testei a ferramenta de cabo a rabo, fiz de tudo nela.

Por isso, eu sempre quis compartilhar com os outros e falar do seu potencial.

Eu via que as pessoas não utilizavam nem 30% do que ela era capaz.

Mas sempre surgia algo para atrapalhar:

…alguma uma outra coisa para fazer…

…um pensamento que fazia eu acreditar que não era tão importante…

…um sentimento de procrastinação…

…ou simplesmente alguma crença limitante qualquer!

Pois bem, estamos em um momento onde o EBS já está com muitas telas WEB, cada vez mais temos menos telas desenvolvidas em forms.

Mas quer saber?

form-personalization-meme-table
Constantemente temos a convicção de que algo não é importante, que algo que pra você é tão simples e básico, não despertaria o interesse nos outros.

Mas o mundo não é assim. Pessoas têm visões e conhecimentos diferentes das coisas.

Vez ou outra um amigo ou conhecido me chama pra pedir ajuda, seja para coisas básicas, como coisas que eles nem sonham que é possível fazer.

E ainda tem as pessoas que estão começando com EBS.

Mas o fator mais importante para a minha decisão, é que aprendi que só existe um jeito de termos certeza de algo…

… que é:

Tentando!

Sem sombra de dúvidas este artigo será útil para alguém, então já me dou por satisfeito.

Nossa, que desabafo! 🙂

Agora chega de enrolação e vamos ao que interessa.

Como diria meu mentor Goffi:

BORA PRA ACTION!

Neste artigo você ficará sabendo sobre:

  • Como surgiu o Form Personalization
  • Form Personalization x CUSTOM.pll
  • Um passo-a-passo de como utilizar
  • Ele não é apenas para clientes e usuários, use a seu favor
  • Ele é muito mais que uma ferramenta para alterar nome de campos

Quer ver o Form Personalization com outros olhos?

Então continue lendo este artigo.

Como surgiu o Form Personalization

O Form Personalization (ou Forms Personalization) é um recurso do Oracle EBS que foi introduzido na release 11i com a finalidade de facilitar a personalização dos forms dentro do EBS.

Antes dele, se fosse necessário customizar um form, tínhamos três opções:

  1. Alterar diretamente o form nativo
  2. Criar uma cópia do form nativo e realizar as alterações nessa cópia
  3. Customizar a biblioteca CUSTOM.PLL

Vamos aos problemas de cada um deles:

1. Alterar diretamente o form nativo

Esta opção é a menos recomendada. Se você realizar alterações diretamente no form nativo, assim que uma melhoria disponibilizada via patch for aplicada no ambiente, todas as suas alterações serão perdidas.

A versão mais nova sobrescreverá a sua versão customizada.

2. Criar uma cópia do form nativo e realizar as alterações nessa cópia

Nesta segunda opção não temos o problema citado acima, já que o form nativo foi clonado e as alterações serão realizadas numa cópia.

Mas nessa opção teremos outro problema, o form ficará desatualizado. Assim que a Oracle disponibilizar um patch com melhorias, apenas o form nativo receberá as atualizações, só que ele não está mais sendo utilizado.

Uma solução seria monitorar essas atualizações e, quando ocorressem, replicá-las para o form customizado.

Trabalhoso, não acha?

3. Customizar a biblioteca CUSTOM.PLL

E a terceira opção é a melhor das três.

Nenhuma alteração é feita nos forms (tanto nativos como customizados).

Toda a programação é feita dentro da biblioteca CUSTOM.pll, que é uma biblioteca projetada pela Oracle exclusivamente para esse fim.

form-personalization-custom

Como todos os forms do EBS incorporam essa biblioteca automaticamente, qualquer alteração nela terá reflexo em todos os forms.

Mas nem tudo são flores.

Não é qualquer tipo de customização que pode ser realizada na CUSTOM.PLL.

Apenas alguns eventos podem ser customizados. Segundo o Oracle E-Business Suite Developer's Guide, a CUSTOM.pll recebe dois tipos de eventos, genéricos e específicos de cada produto.

Eventos genéricos são comuns para todos os forms do EBS, que são:

  • WHEN-FORM-NAVIGATE
  • WHEN-NEW-FORM-INSTANCE
  • WHEN-NEW-BLOCK-INSTANCE
  • WHEN-NEW-RECORD-INSTANCE
  • WHEN-NEW-ITEM-INSTANCE
  • WHEN-VALIDATE-RECORD
  • SPECIALn (onde n é um número de 1 até 45)
  • ZOOM
  • EXPORT
  • KEY-Fn (onde n é um número de 1 até 8)

Apesar da customização via CUSTOM.pll ser a melhor alternativa das três, ela também tem os seus problemas.

Como todos os forms são vinculados à ela, um pequeno descuido e uma implementação errada pode fazer com que todos os forms do EBS parem de funcionar.

Imagine isso em um ambiente de produção.

Já vi acontecer, a reação era mais ou menos essa:

form-personalization-custompll

Para facilitar esse cenário, a Oracle colocou em cena o Form Personalization.

Que surgiu com a tarefa de facilitar ainda mais essas customizações.

As possibilidades de personalização com ele são praticamente as mesmas via CUSTOM.pll, apenas com algumas restrições.

Mas a grande sacada do FP é maneira como as personalizações são desenvolvidas, liberadas e armazenadas.

Form Personalization x CUSTOM.pll

Vou listar as principais diferenças entre as duas, demonstrando as vantagens do FP e a razão pela qual a Oracle recomenda utilizar o FP sempre que possível.

Vamos lá?

Desenvolvimento

Para personalizar a CUSTOM.pll, só para começo de conversa, o responsável precisa ter conhecimentos de programação.

Como a personalização é realizada em um arquivo, é necessária a utilização da ferramenta Oracle Forms Builder, que é a mesma utilizada para desenvolver forms e bibliotecas.

Por isso, além da necessidade de ter a ferramenta instalada, precisa de conhecimento técnico e de programação para trabalhar com ela.

E não é só isso, como todas as customizações ficam concentradas em um único arquivo, apenas um desenvolvedor por vez pode realizar alterações.

No Form Personalization, você não precisa de nada disso.

A personalização é realizada diretamente dentro do EBS, em tempo de execução e não precisa de ferramenta externa.

E as personalizações não ficam em um arquivo, ficam armazenadas diretamente no banco de dados.

O conhecimento técnico necessário cai drasticamente, já que o FP tem uma interface própria que facilita muito a personalização.

Algumas personalizações mais simples podem ser feitas apenas com alguns cliques.

Liberação em produção (Deploy)

Depois de toda a codificação realizada na CUSTOM.pll, o arquivo deve ser colocado no servidor, substituindo a biblioteca existente.

Se algo der errado neste momento, dependendo do erro, os forms podem parar de funcionar.

Então é preciso correr e desfazer a operação.

No FP, como não é feito nada em arquivos, basta desabilitar a personalização que está com problemas, diretamente dentro do EBS.

Simples assim.

E como todas as personalizações ficam armazenadas em tabelas FND, para replicá-las em outros ambientes basta utilizar a ferramenta FNDLOAD.

Em um contexto geral, essas são as principais diferenças entre os meios de personalização e o motivo da existência do FP.

Agora que ele foi devidamente apresentado, farei um resumo da ferramenta.

Form Personalization: Um passo-a-passo de como utilizar

O FP nada mais é do que um próprio form.

Para acessá-lo, abra o form que você deseja personalizar e acesse o caminho abaixo pelo menu superior do EBS:

Help → Diagnostics → Custom Code → Personalize

A seguinte tela irá abrir (Utilizei como exemplo uma tela do INV):

OBS: Lembrando que para ter acesso ao FP, você precisa ter as seguintes profiles configuradas:

FND: Diagnostics (Yes)

Hide Diagnostics menu entry (No)

Componentes do cabeçalho

form-personalization-header

Uma visão geral de cada item da tela:

Seq

É a sequência em que a personalização será executada.

Description

Uma descrição para a personalização

Level

Temos duas opções: Form / Function

Todo form cadastrado no EBS precisa de uma função.

E essa função é associada ao menu da responsabilidade, para que o form possa ser chamado.

Para facilitar o entendimento, vou utilizar um exemplo:

Considere um form “X”:

Você quer ter a possibilidade de chamar esse form de duas responsabilidades diferentes e, em cada uma das chamadas, passar parâmetros diferentes.

Então você precisa criar duas funções, mas que chamam o mesmo form (o que vai mudar é o parâmetro da função).

Sendo assim, se quando você personalizar, escolher “Form” no Level, a personalização sempre vai ser executada para este form, independentemente da função escolhida, pois você personalizou o form diretamente, não a função.

Agora, se você entra em uma das duas responsabilidades, abre o form e personaliza no level “Function”, a personalização só vai ser executada para esta função que você está personalizando no momento.

Note que sempre que você abre a tela do FP, você tem o nome da função e o nome do form:

form-personalization-form-function

Enabled

Essa é fácil.

Esse checkbox habilita ou desabilita a personalização.

Se tiver qualquer problema com uma personalização, basta desmarcar esse flag.

Aba Condition

form-personalization-condition

Nesta aba você configura os eventos e objetos que receberão a personalização.

Assim como as condições para que a personalização seja executada.

Trigger Event

Aqui você define qual o evento que quer personalizar, os eventos padrões (que existem para todos os forms) são:

  • WHEN-NEW-FORM-INSTANCE (Quando o form abre)
  • WHEN-NEW-BLOCK-INSTANCE (Quando um bloco do form recebe o foco)
  • WHEN-NEW-RECORD-INSTANCE (Cada vez que um registro recebe o foco)
  • WHEN-NEW-ITEM-INSTANCE (Cada vez que um item recebe o foco)
  • WHEN-VALIDATE-RECORD (Toda vez que o foco sai de um registro que teve alterações)
  • MENU (1 ao 15) (Para criar itens no menu superior do EBS)
  • SPECIAL (1 ao 45) (Para definir ações para os itens de menu criados acima)
Nota
O que muita gente não sabe, é que é possível informar manualmente outros eventos aqui. Mas isso vai ficar para a próxima 😉

 

Trigger Object

É o objeto do form que receberá a personalização.

Vai depender do evento escolhido acima.

Ex.: Se você escolheu “WHEN-NEW-BLOCK-INSTANCE” (Evento de bloco), vai ter que informar o nome do bloco que desejará personalizar.

Condition

Uma condição que precisa ser verdadeira para que a personalização seja executada.

Ex.: Você deseja que uma determinada personalização só seja executada quando um campo da tela estiver preenchido.

Processing Mode

Você define como a personalização deve se comportar em modo pesquisa (F11):

Not in Enter-Query Mode: Não executar quando estiver no modo pesquisa
Only in Enter-Query Mode: Executar somente quando estiver em modo pesquisa
Both: Executar sempre, independentemente se está em modo pesquisa ou não

Context

form-personalization-context

Nessa parte você pode define os níveis de acesso para execução da personalização.

Level

Aqui você restringe em qual nível a personalização deve ser executada:

Industry
Site
Responsibility
User

Aba Actions

form-personalization-actions

Aqui você vai configurar as ações das suas personalizações, ou seja, o que elas vão fazer.

Seq

É a sequência em que a ação será executada.

Type

Tipo da ação, que pode ser:

  • Property: Define propriedades de objetos (Blocos, itens, canvas, janelas, etc)
  • Message: Mostra mensagens para o usuário
  • Builtin: Executa ações pré-determinadas
  • Menu: Habilita um item no menu superior do EBS

OBS: Os tipos serão explicados logo abaixo.

Description

Uma descrição para identificar a ação.

Language

Em qual idioma a ação deve ser executada.

Enabled

Habilita ou desabilita a ação.

Está gostando deste artigo?

Então informe seu e-mail abaixo para receber atualizações

Tipos de Ações

Cada tipo de ação, tem configurações específicas. Abaixo vou explicar cada uma delas:

Tipo #1: Property

Quando queremos alterar a propriedade de algum objeto, temos que configurar o seguinte:

Object Type

É o tipo de objeto que queremos modificar, pode ser um item, bloco, canvas, janela, parâmetro, lista de valores, variável global, etc).

Target Object

É o nome do objeto que vamos modificar.

Property Name

É a propriedade que será alterada do objeto selecionado acima. Pode ser o conteúdo de um campo na tela, o prompt de uma janela, se um bloco vai permitir alterações ou não, etc.

Value

Aqui você informa qual o novo valor da propriedade que está alterando.

Se o novo valor for um conteúdo “fixo”, ou seja, apenas texto, basta informá-lo no campo “Value”.

Ex.: Na tela abaixo, vou preencher o campo “Description com o valor “Descrição Teste”:

form-personalization-description-null

Para realizar esta personalização, preciso informar:

  • O nome do bloco que o campo pertence e o nome do campo, no formato <BLOCO>.<CAMPO>
  • O novo valor que será preenchido no campo

Ficaria assim:

form-personalization-desc-change

Mas se for um conteúdo dinâmico, por exemplo, o conteúdo de um outro campo, você precisa utilizar o ‘=' antes do nome do campo.

Ex.: Vamos copiar o conteúdo do campo “Transaction Quantities” (Início) para o campo “Transaction Quantities” (Fim):

form-personalization-transaction

Ficaria assim:

form-personalization-dynamicO conteúdo dinâmico, também pode ser uma query:

form-personalization-dynamic-query

Tipo #2: Message

Se você precisa mostrar uma mensagem para o usuário, é só escolher o tipo de mensagem desejado e informar o texto.

Os tipos são:

Show

Mostra uma mensagem simples.

Hint

Mostra apenas uma mensagem na barra de status, no canto inferior esquerdo.

Error

Mostra uma mensagem personalizada para sinalizar um erro.

Warn

Como esta mensagem é utilizada para alertar o usuário, são mostrados dois botões: “OK” e “Cancel”.

Se o botão “OK” for pressionado, as ações que foram configuradas logo após essa mensagem serão executadas normalmente.

Se o botão “Cancel” for pressionando, nenhuma ação configurada após a mensagem é executada.

Veja como apareceria cada uma:

form-personalization-message

Existe ainda uma quinta opção, do tipo “Debug”.

Esse tipo de mensagem é utilizado para fins de debug e só aparecerá se o “Debug Mode” for diferente de “Off”:

form-personalization-message-debug

Tipo #3: Builtin

No tipo “Builtin” você consegue realizar algumas ações pré-definidas, como:

Launch a Function

Permite chamar uma função cadastrada no EBS, por exemplo, você pode chamar uma função que chama um form e ainda passar parâmetros para esse form.

GO_ITEM

Permite colocar o foco em algum campo da tela.

Launch a URL

Você pode abrir o browser em determinado site.

RAISE FORM_TRIGGER_FAILURE

Esse é um comando que “barra” o usuário de continuar a operação.

Você pode utilizar em conjunto com uma mensagem de erro, por exemplo:

Você cria uma personalização para validar o conteúdo de algum campo que foi digitado pelo usuário, se esse conteúdo não estiver de acordo com as regras que você definiu, você pode mostrar uma mensagem de erro e, logo em seguida, lançar um RAISE para impedir que o usuário continue.

Assim ele só conseguirá prosseguir até que informe um valor válido.

Create Record Group from Query

Toda lista de valores de um form, é baseada em um “RECORD GROUP”, que por sua vez é definida por uma query.

Logo, com uma personalização você pode alterar a query de uma lista de valores.

Imagine a seguinte situação: Existe uma tela com uma lista de valores que precisa de uma nova condição de filtro na query, você não precisa pedir para um desenvolvedor abrir o form e realizar a alteração, basta criar um novo “RECORD GROUP” com a nova query e associar com a lista de valores.

Tipo #4: Menu

Você pode adicionar um novo item de menu para o seu form e, com isso, você pode adicionar uma nova funcionalidade.

Exemplo:

Você quer criar um novo item de menu que inicie um concurrent:

form-personalization-message-menu-concurrent

A configuração acima apenas cria o item de menu, que ficará assim:

form-personalization-message-menu-conc-preview

Depois você precisa criar uma outra personalização, com o evento “SPECIAL” e a mesma numeração utilizada no menu acima, que no caso foi 10 (MENU10):

form-personalization-message-special

Então para essa personalização do tipo “SPECIAL”, é só criar a ação que execute o concurrent.

Bom, esse foi um passo-a-passo geral de utilização do Form Personalization.

Existem muitos outros recursos para mostrar, mas o artigo ficaria muito grande e achei melhor deixar para um próximo momento.

Form Personalization é para todos, use a seu favor

Creio que a maioria dos profissionais que trabalha com FP, utiliza-o apenas para atender demandas de projetos e requerimentos do cliente.

Bom, eu não. 🙂

Como mencionei no começo deste artigo, sempre gostei de melhorar as coisas e utilizar todos os recursos disponíveis para esses fins.

Vi no FP uma excelente oportunidade de fazer isso. Comecei a utilizá-lo para aumentar a performance do meu trabalho como consultor.

Ou seja, comecei a criar pequenos hacks no FP, aumentando a minha produtividade.

Quer saber como?

Vou citar três exemplos:

#1 Mostrando o ID das ordens de venda

Em vários clientes já precisei consultar o ID de uma ordem de venda (HEADER_ID) no OM com bastante frequência, então em vez de toda vez ter que consultar pelo “EXAMINE” ou via SQL diretamente no banco, criei uma personalização que reutilizasse o prompt do campo com o número da ordem para mostrar o ID.

Fiz a personalização no evento “WHEN-NEW-RECORD-INSTANCE” do bloco ORDER:

form-personalization-hack-om

Com isso, toda vez que eu navegava para um registro, o ID era mostrado diretamente na tela:

form-personalization-hack-om-preview

Levei apenas alguns minutos pra fazer, e o ganho de tempo foi enorme.

#2 Facilitando a procura da execução de concurrents

Esse já foi publicado aqui no blog, você pode conferir aqui.

Nele eu mostro como utilizei o prompt de um campo da tela (a mesma coisa da dica acima do ID do OM), para mostrar a descrição completa dos concurrents.

Como na ocasião eu executava muitos concurrents com nomes parecidos, ficava difícil conferir, já que o campo de descrição era pequeno e não aparecia o nome inteiro.

#3 Visualizando a saída de concurrents de outros usuários

Esse também já foi publicado aqui.

Quando estamos atuando em projetos, geralmente precisamos verificar a saída de concurrents executados pelo usuário ou até mesmo de outros consultores, para identificar problemas.

Por padrão, somente o responsável pela execução consegue visualizar a saída.

Então criei uma personalização para habilitar o botão, assim eu mesmo verificava rapidamente a saída dos concurrents. 🙂

Nota
Lembrando que eu sempre fazia isso apenas para o meu usuário, é só configurar o “Level”.

Ele é muito mais que uma ferramenta para alterar nome de campos

Como mostrei durante o artigo, o Form Personalization é muito poderoso.

São inúmeras as possibilidades para construir personalizações robustas, hacks super produtivos e melhorias nos forms existentes.

Isso que nem falei da utilização de variáveis globais, variáveis de sistema, execução dinâmica de procedures, condições avançadas…

… enfim, muita coisa!

Basta ter uma noção completa de todo o potencial da ferramenta, ver alguns exemplos e usar a criatividade.  💡

Concluindo: Como ir para um próximo nível

Nesse artigo abordei apenas uma pequena parte do Form Personalization, como mostro no meu treinamento completo, ele tem muitos recursos e funcionalidades a serem explorados.

E se gostou desse artigo, não deixe de compartilhar com seus amigos.

Forte abraço e até o próximo artigo.