"
Etiqueta > OO
Apoiado por

Obtém o texto mais profundo de cadeia de excepções

Nos dias que correm se não estás a usar objectos és totó.

Se usas objectos, espero que estejas a seguir a boa práctica de usar classes de excepções.

E se usas classes de excepção é bom que entendas a melhor forma de as usar, particularmente as vantagens de as encadear.

Com tudo isto esclarecido, chegamos ao que nos traz aqui hoje. No artigo sobre cadeias de excepções mostrei como, para obter o texto da excepção mais profunda, a que foi inicialmente espoletada, se pode fazer um DO WHILE:

Ler o resto do artigo! »

Converte classe de excepção numa BAPIRET2

Há uns tempos escrevi um artigo a explicar uma forma de converter automaticamente excepções clássicas em classes de excepção. Hoje uso esta técnica em quase todas as classes de excepção que crio (e até já melhorei a coisa mas noutro dia falo disso).

Esta dica explica exactamente o contrário.

Ler o resto do artigo! »

Padrões de projecto de software em ABAP

Estamos em constante aprendizagem. Mas volta não volta aprendemos algo que nos obriga a dar um salto paradigmático na forma como olhamos para o que fazemos.

A última vez que isso me tinha acontecido foi quando comecei a usar OO em ABAP. OO não era novo para mim pois sempre programei em Java, C#, C++, etc. Mas poder finalmente aplicar os conceitos de OO em ABAP foi um alívio e um salto quântico na qualidade, flexibilidade e velocidade do meu trabalho.

Sinto-me neste momento a dar mais um salto. Porque estou finalmente a aprender a usar padrões de projecto (software design patterns). Desde sempre que ouvi falar neles mas nunca lhes dei a devida atenção. Por exemplo, o site de ABAP ZEVOLVING há muitos anos que fala neles e lembro-me de ter lido vários destes artigos. Mas de alguma forma ainda não tinha encontrado um texto que, para além de os explicar, mostrasse de forma clara as vantagens da sua utilização.

Agora, graças ao Miguel Jorge, encontrei: Head First Design Patterns. Além de cómico, explica de forma clara e simples as limitações dos paradigmas OO e como é que a utilização de padrões de projecto podem ajudar a contorná-las.

Este site tem links para vários textos interessantes, inclusive para o que parece ser uma versão PDF do livro acima referido. E também para esta página que os descrever e até critica.

A partir de hoje sempre que desenhar soluções OO tentarei ter presentes os vários padrões existentes e aplicá-los sempre que tiverem cabimento.

Obrigado Miguel Jorge!

O Abapinho saúda-vos.

Converter excepção em classe de excepção

Se ainda não usas classes de excepção fazes mal. Porque são muito boas para a saúde do código. Além de nutritivas, emagrecem-no e tornam-no mais resistente a doenças.

Mas há casos em que ainda é preciso lidar com as antigas excepções. Por exemplo quando se invoca um módulo de função.

Neste artigo apresento uma sugestão um bocado rebuscada mas que funciona muito bem para integrar as excepções antigas com classe de excepção de uma forma simples. A solução é rebuscada mas só tem de ser feita uma vez. Uma vez feita, a forma como se a usa não tem nada de rebuscado.

Ler o resto do artigo! »

Cadeias de excepções

Hoje vou ensinar-te a encadear excepções. É uma solução muito práctica para um problema complicado mas pouco óbvio.

Começo por descrever o problema.

Imagina que estás na aplicação BANANA.
É uma aplicação bastante complexa.
Tem, aliás, três módulos. São eles BANANA1, BANANA2 e BANANA3.
Cada um tem a sua classe de excepção ZCX_BANANA1, ZCX_BANANA2 e ZCX_BANANA3.
E como a aplicação até está bem desenhada, todas as classes de excepção herdam da mesma ZCX_BANANA.
Agora imagina o seguinte cenário.
Estás no módulo BANANA1 a fazer não sei o quê.
E lá tens de chamar uma classe do módulo MORANGO
Ora essa classe lança, claro, excepções, do tipo ZCX_MORANGO.
Este é o contexto.

Tens várias hipóteses:

Ler o resto do artigo! »

Boas prácticas
Usarás classes de excepção

Nas classes, considera usar classes de excepção tipificadas em vez das excepções antigas. As novas têm imensas vantagens e, uma vez compreendidas, permitem produzir um código mais simples e robusto.
http://www.slideshare.net/pruebaedublog/exceptions-handling-concept-in-abap
http://www.scribd.com/doc/86551830/26/Lesson-Exception-Handling-in-ABAP-Objects
http://zevolving.com/2011/12/class-based-exception/

Pacotes 2.0

O repositório do R/3 é uma coisa maravilhosa. Um vasto armazém de elementos de dados, estruturas, tabelas e muito mais, prontamente disponíveis a todos. Como programadores, é fácil e conveniente escolher estes objectos e puxa-los para os nossos programas à medida das necessidades sem que a preciosa linha de pensamento seja interrompida.
Mas nem tudo é sol e flores. Se não tiveres cuidado com os cogumelos que apanhas podes dar por ti com um envenenado entre mãos.

Ler o resto do artigo! »

Boas prácticas
Não implementarás código em user-exits

Todo o código que colocares em user-exits (BADIs, enhancements, SMOD, etc.) deverá ser encapsulado.

  • É comum incluir num user-exit múltiplas partes independentes. Cada uma destas partes deverá ser encapsulada no seu próprio método. Mesmo que seja constituída por apenas uma linha de código;
  • Isto deve ser aplicado tanto a implementações novas como a alterações a código existente;
  • A necessidade de alteração de código existente deverá ser vista sempre como uma oportunidade para reorganizar em métodos código clássico existente, uma vez que este terá necessariamente de ser testado de novo;
  • Se uma classe associada com um determinado user-exit ainda não existir, deverás criar-lhe uma;
  • O nome da classe deve estar claramente relacionado com o nome do user-exit: Ex: no user-exit ZXF01U01 usa a classe ZCL_ZXF01U01;

https://abapinho.com/2012/03/metodos-privados-em-badis/
https://abapinho.com/2009/03/melhorar-os-melhoramentos/

Boas prácticas
Não implementarás blocos de processamento clássico

Official ABAP Programming Guidelines (page 34): [Quando um bloco de processamento clássico for necessário], deves imediatamente delegar a execução para um método apropriado (ver a regra 6.37, Não implementes código dentro de Módulos de Função nem dentro de Subrotinas, e a regra 6.44, Não implementes código dentro de Módulos de Diálogo nem de Blocos de Evento).

Boas prácticas
Usarás ABAP OO sempre que possível

Deverás implementar todos os novos desenvolvimentos usando ABAP Objects excepto quando isso se reveler impossível (RFC, IN UPDATE TASK, ecrãs, etc).
Quando tiverem de ser alterados, deverás também tentar converter em OO os desenvolvimentos existentes, se isso se mostrar realista.
Official ABAP Programming Guidelines (página 32) regra 3.1: Usa ABAP Objects sempre que possível para desenvolvimentos novos ou existentes. Blocos de processamento clássicos podem ser criados só em casos excepcionais.

Usa sempre classes de mensagens nas classe de excepção

As classes de excepção permitem declarar múltiplos textos que descrevem os diferentes erros possíveis que elas podem representar.

Há no entanto uma opção para a associar a uma classe de mensagens (SE91). Isto permite que, em vez de os textos serem definidos directamente ali na classe de excepção, sejam antes definidos como clássicas mensagens da SE91. E tem vantagens.

Ler o resto do artigo! »

Partilhar constantes entre várias classes

Imagina que tens uma manada de classes relacionadas as quais partilham entre elas uma manada de constantes. Dizendo a mesma coisa de outra forma, gostavas que todas as classes da manada tivessem acesso de forma simples à manada de constantes.

(Se estás baralhado, fica sabendo que a manada era só para baralhar)

Continuando.

Ler o resto do artigo! »

Se ainda não usas ABAP Objects és mariquinhas pé-de-salsa

A SAP tem um livro chamado Official ABAP Programming Guidelines que descreve regras e boas práticas de como programar em ABAP. E lá diz assim (dizia em estrangeiro, eu traduzi):

Pág. 42: Regra 3.1: Usa ABAP Objects sempre que possível para novos desenvolvimentos. Só podes criar blocos de processamento clássicos em casos excepcionais.

Pág. 45: Num bloco de processamento clássico, deverás delegar imediatamente a execução para um método apropriado (ver Regra 6.37, Não implementes código em Módulos de Função e subrotinas, e Regra 6.44, Não implementes código em Módulos de Diálogo nem Blocos de Evento).

Portanto, se ainda usas ABAP clássico és um mariquinhas pé-de-salsa.

Obrigado a dawnhops pela foto.

O Abapinho saúda-vos.

Pesquisar por atributos de objectos em tabelas internas

Há cada vez mais objectos em ABAP, cada vez menos medo deles e, vê só!, cada vez mais gente a escrevê-los e a usá-los. Ora, se começam a aparecer objectos por todo o lado, é normal e desejável que comecem a enfiá-los também dentro de tabelas internas. Também eu guardei há uns tempos um monte de objectos dentro de tabelas mas infelizmente na altura não sabia disto que vou ensinar aqui. Tinha-me dado jeito.

Mas afinal o que vou eu ensinar aqui?

Ler o resto do artigo! »

Implementar métodos privados em BADIs

Há uns tempos tive uma ideia meio estrambólica meio fantástica que hoje decidi partilhar aqui: criar métodos privados nas classes das BADIs.

Passo a explicar.

Ler o resto do artigo! »


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).