Você está na página 1de 46

Desenvolvimento Pessoal

Agenda

 Exercício 9: Supply Function.

 Exercício 9: Lead Selection.

 Internacionalização.

 Mensagens.

 Exercício 11: Mensagens de validação.

 Ajuda (search help).

 Exercício 12: Listagem de possíveis entradas.


Internacionalização

 Tornar uma aplicação WebDynpro disponível em mais de uma língua.

 Requer a definição de todos os literais que serão utilizados na aplicação como


passíveis de tradução.

 Em tempo de execução o literal será lido de acordo com a língua estabelecida no


logon.

 Existem algumas maneiras de tornar um literal passível de tradução:


• Definindo o texto no OTR (Online Text Repository);
• Como um texto em uma classe ABAP;
• Definindo o texto no dicionário ABAP.
Internacionalização
 Como a palavra “internationalization”, no inglês, é muito extensa, é comum
encontrarmos a abreviação I18N para a mesma.

 I18N: “A primeira letra, I, a última letra, N, e não se preocupe com as 18 que ficam
entre estas.”

 Entidades dependentes de idioma podem ser: rótulos, textos de botões, dicas de


imagens, mensagens enviadas ao usuário, etc.
Internacionalização
Usando textos definidos no dicionário ABAP

 Para elementos do tipo label, podemos associar os textos de duas maneiras:

1. Configurando a propriedade “labelFor” para o elemento ao qual o label faz referência.

 Neste caso, se elemento referenciado estiver associado a um elemento de dados, o texto


(médio) deste será utilizado .
Internacionalização
Usando textos definidos no dicionário ABAP
Internacionalização
Usando textos definidos no dicionário ABAP
2. Configurando a propriedade “text” para um outro elemento de dados.

 Obs: Títulos de colunas de tabelas se


comportam da mesma maneira.
Internacionalização
Usando textos definidos no dicionário ABAP

 A propriedade “valor” dos elementos também pode ser referenciada a um elemento


de dados do dicionário.

 Percebemos que de acordo com o elemento a ligação com o elemento de dados do


dicionário pode ser realizada em propriedades diferentes.

 O módulo de função DDIF_FIELDINFO_GET pode ser utilizado no código fonte para a


recuperação destes textos.
Internacionalização
Definindo e utilizando o repositório online de textos (OTR).

 O OTR é um repositório central de textos que podem ser utilzados em todo o ambiente,
incluindo aplicações Web Dynpro, BSPs, programas ABAP, etc.

 Podemos definir no OTR três diferentes tipos de texto:


• Longo: Não existe limitação de tamanho, mas de utilização.
• Curto sem alias: Limitado a 255 caracteres.
• Curto com alias: Limitado a 255 caracteres, podendo ser associado a um alias.

 Devemos utilizar no WebDympro a terceira opção:


• Fácil reutilização;
• Tradução ocorre somente uma vez
Internacionalização
Definindo e utilizando o repositório online de textos (OTR).
 Através do OTR podemos acessar os textos em tempo de execução, assim como as
respectivas traduções.

 OTR browser: Menu Goto.

 O alias de um texto OTR consiste no nome do pacote e na identificação:


(<package>/<alias>).

 Criamos uma nova entrada através da transação SOTR_EDIT.


Internacionalização
 Podemos acessar os textos do OTR no código de um controlador, através da classe
CL_WD_UTILITIES.
Internacionalização
Textos definidos em classes
 Podemos definir “Text Symbols” em uma classe e utilizá-los para o processo de
tradução.

 Ao criarmos uma classe assistente, herdando da classe


CL_WD_COMPONENT_ASSISTANCE, o método get_text() fornece o acesso
necessário aos textos definidos.

 Se não herdarmos desta, temos que definir os métodos getters manualmente.

 Vale lembrar que ciclo de vida da instância da classe assisntente é o mesmo do


componente.

 Ao invés do exercício 10, da apostila, verificar o exemplo YCWD_TEXTOS


Mensagens
 Mensagens são utilizadas para fornecer ao usuário informações sobre o status da
aplicação.

 Existem diferentes tipos de mensagens (sucesso, erro, aviso...), cada um podendo


ser associado a um ícone, que aparecerá à esquerda do texto.

 Em casos de erros críticos, mensagens podem ser utilizadas para informar e cancelar
a navegação.

 Podemos associar o texto da mensagem a um campo de formulário:


• Neste caso, o mesmo ficará destacado quando da exibição da mesma.
• Ao clicar na mensagem, o cursor será posicionado no campo asociado.
Mensagens
 Se a mensagem for associada a múltiplios campos de um formulário, o cursor será
posicionado no primeiro visível, da esquerda para a direita, do topo para a base da visão.

 O conteúdo deste campo será marcado.

 Todos os campos envolvidos serão marcados.


Mensagens
 Se o usuário entrar com um valor em um campo e este diferir do tipo determinado no
contexto, o sistema irá retornar uma mensagem de erro de validação.

 A navegação será cancelada, retornando à última view assembly.

 A mensagem de erro será exibida e o campo será destacado.


Mensagens
Definindo a posição da área de mensagem...
 Existem duas maneiras para definirmos onde a mensagem será exibida:
 Por padrão, a mesma será exibida no topo da visão.
 Definindo um elemento de UI MessageArea, podendo este estar contido em qualquer
container da visão.
Mensagens
 Para cada aplicação, podemos definir se a área de mensagens estará sempre
visível ou somente sob demanda.
Mensagens
 Devemos utilzar os métodos da interface IF_WD_MESSAGE_MANAGER para
reportar uma mensagem.

 O mecanismos de runtime do WebDynpro automaticamente instancia uma classe


implementando esta.

 Podemos obter uma referência para esta instância através do atributo WD_THIS:

lo_api_ctrl = wd_this->wd_get_api().
lo_message_manager = lo_api_ctrl->get_message_manager().

 O wizard também pode ser utilizado.


Mensagens
Categorias de métodos para
definição de mensagens

Textos Exceção T100

 Textos: Qualquer texto pode ser utilizado como mensagem.

 Exceção: Podemos utilizar uma classe de exceção, capturando e


exibindo a mensagem (try/catch)

 T001: Reutilização de textos da T100.

 Obs: Ver quadro resumo da página 178


Mensagens
 Como vimos, o código fonte para a manipulação de mensagens pode ser gerado
através do wizard.

 O mesmo será composto por duas partes:


• Obtenção da referência ao gerenciador de mensagens.
• O método a ser chamado, que irá variar de acordo com a situação.
Mensagens
 Uma boa prática é a obtenção da referência ao gerenciador de mensagens uma única
vez.
Mensagens
 O texto de uma mensagem pode ser construído com a utilização de placeholders.
Mensagens
 Mensagens que utilizam textos definidos na T100 também podem possuir
placeholders. Para utilizá-las temos que informar parâmetros que definam o texto
a ser utilizado.
Mensagens
 Podemos capturar exceções em tempo de execução. Para isto utilizamos o código
sensível envolvido pelas instruções TRY/CATCH.
Mensagens
 Podemos colocar o código de validação em qualquer método a ser processado pelo
runtime do WebDynpro (hook ou custom).

 Caso a navegação tenha que ser cancelada, devemos colocar o código


correspondente em um dos seguintes métodos:
*wddobeforeaction( )
*wddoafteraction( )
*action handler method onaction<action>
**wddobeforenavigation( )

* Métodos da visão
* *Método do controlador do componente.
Mensagens
 As verificações relativas aos campos de determinada visão devem estar contidas
nos métodos desta.

 A utilização do método wddobeforeaction( ) possui algumas vantagens em


relação aos demais:

• Se uma mensagem de erro fatal, que irá sempre cancelar uma navegação, é
disparada neste método, somente esta mensagem será exibida na próxima
view assembly. Mensagens adicionais (validação de campos) não serão
exibidas.

• Trechos de código que não devam ser executados em caso de erro podem
ser então isolados dos que sempre devem ser executados.

• Se as mesmas validações são disparadas por eventos diferentes, estas podem


estar definidas uma única vez neste método.
Mensagens

Somente controladores de visão possuem este método.

Processado antes de qualquer handler de ação.

Deve ser utilizado para validação de dados e mensagens informativas.


Mensagens
 Através do código demonstrado abaixo, podemos descobrir qualação foi disparada
pelo usuário.

 Este código vem comentado no método quando criamos uma visão...


Mensagens
 Mensagens de sucesso, aviso e até mesmo de erro não têm por padrão interromper
a navegação.

 Entretanto, uma mensagem do tipo Fatal, imediatamente interrompe a navegação.


Todos os hook métodos subsequentes não serão executados, à exceção do
wddomodifyview().

 Mensagens relacionadas à atributos do contexto têm seu comportamento afetado


pelo método que a contém e também pela propriedade ActionType da ação
disparada.
Mensagens
 Por padrão, a propriedade ActionType possui o valor “dependente de validação”
(abap_false).

 Neste caso a navegação será interrompida caso a mensagem seja disparada em um


dos seguintes métodos: wddobeforeaction( ), onaction<action>( ) or
wddoafteraction( ).

 Ainda com esta configuração, o método wddomodifyview( ) não será executado.

 Se a mensagem for disparada no método wddobeforeaction( ), os métodos


onaction<action>( ) and wddoafteraction( ) não serão executados.
Mensagens
 O comportamento padrão pode ser alterado através do parâmetro
IS_VALIDATION_INDEPENDENT, presente em todos os métodos de disparo de
mensagens (relacionados à atributos de contexto).

IF_WD_MESSAGE_MANAGER -> REPORT_ATTRIBUTE_EXCEPTION

 Se configurarmos o parâmetro para abap_true a navegação não será cancelada,


sendo processados todos os demais métodos.
Mensagens
Ajuda de valores (value help)
 Em uma aplicação que contenha um formulário, alguns campos destes podem ser
preenchidos com valores arbitrários, enquanto outros devem ser inseridos de acordo
com determinado critério.

 Neste último caso, temos duas situações para o preenchimento do campo:


• Uma lista de sugestões com valores que podem ser inseridos
• Uma lista com valores que devem ser inseridos.

 Na primeira opção estamos ajudando, mas não limitando o usuário. Enquanto na


segunda estamos restringindo as possibilidade de preenchimento do campo.
Ajuda de valores (value help)
 Se o campo não estiver limitado a uma restrição de valores, ou se a gama de opções
for muito extensa, devemos utilizar um campo de input (input field).

 Podemos definir durante o desenvolvimento qual o tipo de ajuda que iremos


oferecer para este tipo de campo, sendo esta de cinco diferentes tipos:

1. Desativada: Nenhuma ajuda será oferecida.


2. Automática: Deixamos para o framework a decisão de qual ajuda exibir.
3. Baseada no dicionário: A ajuda será baseada na definição presente no dicionário
ABAP.
4. Baseado em um objeto: Um componente WebDynpro pré-definido, que implemente
as funções de ajuda, será utilizado. Ex: “Date Picker”.
5. Baseado em um objeto livre: Um componente WebDynpro desenvolvido pelo
usuário, que implemente as funções de ajuda, será utilizado.
Ajuda de valores (value help)
Ajuda de valores (value help)
Ajuda de valores (value help)
 Se a propriedade do campo de input for definida como automática, o mecanismos
de runtime do framework irá decidir qual o tipo de ajuda será exibida ou até mesmo
se irá existir uma.

 O algoritmo irá depender do tipo do atributo da seguinte maneira:

1. Se o atributo estiver relacionado a um campo de uma estrutura definida no


dicionário e uma ajuda estiver relacionada a este, esta ajuda será exibida.
2. Senão, se o campo for uma chave estrangeira para outra estrutura e a tabela de
verificação possuir uma ajuda, esta será exibida.
3. Caso a tabela de verificação não possua uma ajuda relacionada, os campos de chave
primária serão exibidos.
4. Não sendo um dos casos anteriores, será verificado se existe ajuda para o elemento
de dados.
5. Finalmente se o domínio possuir valores fixados estes serão exibidos como ajuda.
Ajuda de valores (value help)
 Caso nenhum dos critérios seja atendido, nenhuma ajuda será disponibilizada.
Ajuda de valores (value help)
Algumas vezes a determinação automática gera resultados insatisfatórios. Podemos
então definir a propriedade como dependente do dicionário.
Ajuda de valores (value help)
Campos seletores permitem que o usuário escolha um ou mais valores previamente
definidos, ficando restrito à estes.

Exemplos: caixas de drop down, grupos radio, etc.

Recomenda-se o uso destes para casos em que a lista de possibilidades não ultrapasse
30 elementos.

Os valores exibidos pelos seletores podem ser de dois tipos:


1. Amazenados no contexto
2. Relativos ao tipo definido no contexto.
Ajuda de valores (value help)
1. Armazenados no contexto

 O elemento de UI deve estar ligado a um atributo de cardinalidade máxima n.

 Antes da visão ser exibida, o contexto deve ser populado.

 Todos os valores exibidos estão armazenados no contexto.

 A seleção de um valor ocasionará um roud trip caso alguma ação esteja


associada.

 A seleção de um valor não muda o contexto.

 A seleção de um valor somente altera o índice da seleção conduzida (lead


selection).
Ajuda de valores (value help)
1. Armazenados no contexto
Ajuda de valores (value help)
2. Relativos ao tipo definido no contexto.

 O elemento de UI deve estar associado a um atributo do contexto, possuindo


este:
A. Um tipo definido.
B. Um tipo indefinido que será designado em tempo de execução.

 A seleção de um elemento leva a um roud trip caso alguma ação esteja


associada ao mesmo.

 A seleção de um elemento não altera o índice da seleção conduzida (lead


selection).

 A seleção de um elemento irá alterar o valor do contexto.


Ajuda de valores (value help)
2. Relativos ao tipo definido no contexto.
Ajuda de valores (value help)
2. Relativos ao tipo definido no contexto.
 Podemos definir o tipo em tempo de execução, através da manipulação dos
metadados do elemento de UI.
Ajuda de valores (value help)

Você também pode gostar