Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
1. Melhores práticas em desenvolvimento de classes de negócio em ABAP orientado a objetos Leonardo De Araujo
2. Agenda O que são classes de negócio? Por que precisamos delas? Regras de desenvolvimento Exemplos Como utilizá-las Scopo Próximos passos
3. O que são classes de negócio? Global Classes ABAP OO que representam objectos de negócio (ex: Ordem de compra, Ordem de venda, Forneciments, Materiais, etc); Na maior parte baseado em objetos standard SAP, mas não restrito apenas a eles (voce pode criar a duas proprias classes !);
4. Por que precisamos de classes de negócio? Reduzir TCO atravez da implementação e use de padrões de desenvolvimento, reutilização, código e supporte; Melhor representação de programas SAP; Implementação de ABAP OO; Suporte e promoção de MVC. Business classes = Model;
5. Por que precisamos de classes de negócio? (cont.) (Razões pelas quais OO promove reutilização de código) Abstração do codigo simplifica a comunicação entre times funcionais e tecnicos; Reutilização garante que a mesma regra de negócio nao e’ programada em varios differentes lugares, o que complica a manutenção e potencialmente ocasiona discrepancia nos resultados; Encapsulamento torna o programa mais robusto;
6. Por que precisamos de classes de negócio? (cont.) Tecnica Procedural(?) Necessidade (Business) Objetos de desenvolvimento Programas Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) Tabelas (?) Tables Telas (?) Screens Comocriar a especificaçãotecnica? Por onde comecar?
7. Por que precisamos de classes de negócio? (cont.) TecnicaOrientada a Objetos Business Requirement Objetos de desenvolvimento Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) CLASS ZCL_PURCHASE_ORDER MétodoRELEASE MétodoCREATE_DELIVERY
8. Regras de desenvolvimento Regra para os nomes / Naming convention; Instanciação (?) / Instantiation; Utilização de Buffers – Performance / Buffering - performance optimization; Inheritance (?); Classes Utilitárias; Utilização de Classes de exceção; Classes MODEL (MVC) / Model Class; Hierarquia de pacotes / Package Hierarchy;
9. Regra para os nomes - Geral Use inglês Use “glossary terms” (não MARA) No case de nomes compostos, use separador “_”
10. Regra para os nomes / Naming convention - Atributos Atributo KEY (Chave) – Instance Público (ONLY!); ex: Number(vbeln) Atributo HEADER (if applicable) – Instance Private; ex: VBAK Atributo ITEMS (if applicable) – Instance Private; ex: table of VBAP Outras opcoes(SCHEDULE LINES, PARTNERS, etc…) Sem prefixos (ex: GS_HEADER) Constantes ; use prefixo CO_
11. Regra para os nomes / Naming convention - Métodos Momes de Métodos devem comecar por um verbo (ingles); Métodos que retornam um boolean devem comecar por IS_ Métodos Handler de eventos devem comecar por ON_ Métodos que verificam ou validam um “estado” devem comecar por CHECK_ Nomes de Eventos devem ter a forma substantivo_participativoe (ex: ordem_criada) Parametros de Métodos recomendados IM_ for IMporting parameters EX_ for EXporting parameters CH_ for CHanging parameters RE_ for REturning parameters
13. Instanciação Instantiation as Private or Protected. NOT PUBLIC; Ofereca Métodos para instanciar sua classe de negócio: Search Read / Factory Exemplo: PARAMETERS pa_vbeln TYPE vbeln_vl OBLIGATORY. DATA lo_delivery TYPE REF TO zcl_outbound_delivery. lo_delivery = zcl_outbound_delivery=>read( pa_vbeln ).
14. Utilização de Buffers – Otimização de Performance Usando o Método READ, performance pode ser ameliorada atravez do use de buffers; Atributo BUFFERED_OBJECTS (Public Static) do type tabela com a seguinte estrutura: KEY type <<TYPE do atributo KEY>> DATA type ref to <<CLASSE>> Método READ checa existencia no Buffer ANTES da instanciação; Método READ atualiza o Buffer DEPOIS da method updates buffer DEPOIS da instanciação;
15. Utilização de Buffers – Otimização de Performance (cont.) Method READ. Data: wa_buffered_obj type <<< >>>. Read table BUFFERED_OBJECTS with key KEY = INPUT into wa_buffered_obj <<binary search>>. If sy-subrc eq 0. Return = wa_buffered_obj-data. Else. Create object Return exporting key = INPUT. wa_buffered_obj-key = Return-key. wa_buffered_obj-data = Return. Apppend wa_buffered_obj to buffered_obj. Endif. Endmethod READ. ** PS. FREE_ALL( ) ou parametro opcional bypass_buffer
35. Utilização de Classes de exceção Introduzido com SAP BASIS BASIS versão 6.10 Criado atravez do Class Builder (SE24) Gerenciamento de Textos de Exceção Classe de mensagens - Message Class (recommended)
36. Utilização de Classes de exceção (cont.) Have your own EC linked to your BC (1:1 if applicable) Example: ZCL_OUTBOUND_DELIVERY (Business Class) ZCX_OUTBOUND_DELIVERY (Exception Class) Assign a Message Class to the EC (1:n) Example: Z_LE_SHP_DL (for Delivery Processing)
37. Utilização de Classes de exceção (cont.) Atributos Defina atributo KEY da classe de negócio Marque Atributos publicos como “read-only” BAPIRET2_T(opcional) Métodos Log & display messagens de exceção no BAL Mensagens de exceção em transações RF para lidar com limitações do SAP Console.
38. Model Class (MC) Crie a sua logica de programa utilizando uma camada de abstração Exemplos: ZCL_DISTRIBUTION (Process de Distribuição …) ZCL_PICKING (Picking …) ZCL_PACKING (Packing Station …)
55. Scopo Implementação do Programação orientada a objetos (Até onde ir?) Acesso ao DB – Persistent classes or in-metodo? Items de uma Ordem de venda, subobjetos ou nao?
56. Próximos passos Consolidação dos padrões de programação junto a SCN Criação de um Wizard para automatizar o process de criação da classe de negócio
57.
58. SCN Blog series– Best Practice in Development of Business Classes in OO ABAP
59. PART 1: What are Business Classes and why do we need them?
60. PART 2: Naming convention and Class structure (Atributos and Métodos);