SlideShare uma empresa Scribd logo
Melhores práticas em desenvolvimento de classes de negócio em ABAP orientado a objetosLeonardo De Araujo
AgendaO que são classes de negócio?Por que precisamos delas? Regras de desenvolvimentoExemplosComo utilizá-lasScopoPróximos passos
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 !);
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;
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;
Por que precisamos de classes de negócio? (cont.)Tecnica Procedural(?)Necessidade (Business)Objetos de desenvolvimentoProgramasExemplo:Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery)Tabelas (?) TablesTelas (?) ScreensComocriar a especificaçãotecnica?Por onde comecar?
Por que precisamos de classes de negócio? (cont.)TecnicaOrientada a ObjetosBusiness RequirementObjetos de desenvolvimentoExemplo:Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery)CLASS ZCL_PURCHASE_ORDERMétodoRELEASEMétodoCREATE_DELIVERY
Regras de desenvolvimentoRegra 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;
Regra para os nomes - GeralUse inglêsUse “glossary terms” (não MARA)No case de nomes compostos, use separador “_”
Regra para os nomes / Naming convention - AtributosAtributo KEY (Chave) – Instance Público (ONLY!); ex: Number(vbeln)Atributo HEADER (if applicable) – Instance Private; ex: VBAKAtributo ITEMS (if applicable) – Instance Private; ex: table of VBAPOutras opcoes(SCHEDULE LINES, PARTNERS, etc…)Sem prefixos (ex: GS_HEADER)Constantes ; use prefixo CO_
Regra para os nomes / Naming convention - MétodosMomes 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 recomendadosIM_ for IMporting parametersEX_ for EXporting parametersCH_ for CHanging parametersRE_ for REturning parameters
Regra para os nomes / Naming convention - MétodosPúblicoMétodo READ – Static Public;Método DISPLAY – Instance Public;Método GET_<<attrib>> – Instance public;Lifecycle Métodos CRUD (Create, Read, Update* and Delete*)Protegido/ PrivadoMétodo READ_<<attrib>> – Instance Private;Método CONSTRUCTOR – Instance Private;
InstanciaçãoInstantiation as Private or Protected. NOT PUBLIC;Ofereca Métodos para instanciar sua classe de negócio:SearchRead / FactoryExemplo:PARAMETERS pa_vbeln TYPE vbeln_vl OBLIGATORY.DATA lo_delivery TYPE REF TO zcl_outbound_delivery.lo_delivery = zcl_outbound_delivery=>read( pa_vbeln ).
Utilização de Buffers – Otimização de PerformanceUsando 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;
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
Inheritance (?)ZCL_MMDOCUMENTAtributos:NUMBER
HEADER (EKKO)
ITEMS (EKPO)Métodos:CREATE
READ
FLAG_FOR_DELETIONZCL_PURCHASEORDERZCL_STOAtributos:NUMBER
HEADER (EKKO)
ITEMS (EKPO)
INBOUND DELIVERIESAtributos:NUMBER
HEADER (EKKO)
ITEMS (EKPO)
OUTBOUND DELIVERIESMétodos:CREATE
READ
FLAG_FOR_DELETION

Mais conteúdo relacionado

PPTX
DevTalk Zoox 04/2016
DOCX
Usando o i report como gerador de relatórios para php
PDF
PL/SQL - Conceitos Básicos
PDF
Cadastro de clientes em c#
ODP
Php 05 Mvc
PDF
Introdução a Banco de Dados (Parte 3)
PPT
Aula2
PDF
Introdução a Banco de Dados (Parte 2)
DevTalk Zoox 04/2016
Usando o i report como gerador de relatórios para php
PL/SQL - Conceitos Básicos
Cadastro de clientes em c#
Php 05 Mvc
Introdução a Banco de Dados (Parte 3)
Aula2
Introdução a Banco de Dados (Parte 2)

Mais procurados (20)

ODP
Java Fx Guia De IntroduçãO
PPTX
C# 6.0 - Novos Recursos (Agosto/2015)
KEY
CakePHP e o desenvolvimento rápido
PPT
Python e Django
PPTX
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
PDF
Curso de Java (Parte 3)
PDF
PPTX
PPTX
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
PPT
Produtividade com JavaServer Faces
PDF
Slide Aula - Curso CakePHP
PPTX
Desenvolvimento Web com PHP - Aula 3
PPTX
Programação Dinâmica para Web - Aula 2
PDF
GURU SP - Design de aplicações orientadas a objeto
PPT
Linguagens de programação 12º M11
PDF
Palestra - Symfony Framework MVC PHP 5
PDF
Java Primeiros Passos - Cap 7
PDF
Dev401 novos recursos do microsoft visual basic 2010
Java Fx Guia De IntroduçãO
C# 6.0 - Novos Recursos (Agosto/2015)
CakePHP e o desenvolvimento rápido
Python e Django
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
Curso de Java (Parte 3)
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Produtividade com JavaServer Faces
Slide Aula - Curso CakePHP
Desenvolvimento Web com PHP - Aula 3
Programação Dinâmica para Web - Aula 2
GURU SP - Design de aplicações orientadas a objeto
Linguagens de programação 12º M11
Palestra - Symfony Framework MVC PHP 5
Java Primeiros Passos - Cap 7
Dev401 novos recursos do microsoft visual basic 2010
Anúncio

Destaque (7)

PDF
Sap Inside Track Sao Paulo 2010 - SAP Business Objects
PDF
Sap Inside Track Sao Paulo 2010 - keynote
KEY
SAP Inside Track Sao Paulo '09 Keynote
PDF
SAP Inside Track Sao Paulo 09 Enterprise Architecture
DOC
SAP Inside Track Sao Paulo 09 - Output Message
KEY
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
DOC
Academia ABAP
Sap Inside Track Sao Paulo 2010 - SAP Business Objects
Sap Inside Track Sao Paulo 2010 - keynote
SAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo 09 Enterprise Architecture
SAP Inside Track Sao Paulo 09 - Output Message
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
Academia ABAP
Anúncio

Semelhante a Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos (20)

PPT
Diagrama de classes1.1
PDF
Projeto Integrador Transdisciplinar em Banco de Dados II
PDF
Projeto Integrador Transdisciplinar em Banco de Dados II
PDF
Projeto Integrador Transdisciplinar em Banco de Dados II.pdf
PPT
Aula 6 14042011 sii
PPT
Análise Orientada a Objetos - Objetos E Classes
DOCX
PPT
Java aula 2
DOC
Portfólio ADS- sem 4 - atividade em grupo
PDF
Análise de sistemas oo 1
PPTX
Code Smells
PPT
DDD > Experiências
PPTX
Qualidade de Código
PDF
padrao de projeto3
PDF
Php Conf08 Refactoring
PPTX
As vantagens e desvantagens da aplicação de padrões de projeto
PPTX
Programando com prazer com DDD
PDF
Diagramadeclassesal
PDF
Tópico 10 - Padrões GRASP_De Análise ao Projeto.pdf
PPTX
ZeroBugsProject - Técnicas de programação efetivas
Diagrama de classes1.1
Projeto Integrador Transdisciplinar em Banco de Dados II
Projeto Integrador Transdisciplinar em Banco de Dados II
Projeto Integrador Transdisciplinar em Banco de Dados II.pdf
Aula 6 14042011 sii
Análise Orientada a Objetos - Objetos E Classes
Java aula 2
Portfólio ADS- sem 4 - atividade em grupo
Análise de sistemas oo 1
Code Smells
DDD > Experiências
Qualidade de Código
padrao de projeto3
Php Conf08 Refactoring
As vantagens e desvantagens da aplicação de padrões de projeto
Programando com prazer com DDD
Diagramadeclassesal
Tópico 10 - Padrões GRASP_De Análise ao Projeto.pdf
ZeroBugsProject - Técnicas de programação efetivas

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 objetosLeonardo De Araujo
  • 2. AgendaO que são classes de negócio?Por que precisamos delas? Regras de desenvolvimentoExemplosComo utilizá-lasScopoPró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 desenvolvimentoProgramasExemplo:Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery)Tabelas (?) TablesTelas (?) ScreensComocriar a especificaçãotecnica?Por onde comecar?
  • 7. Por que precisamos de classes de negócio? (cont.)TecnicaOrientada a ObjetosBusiness RequirementObjetos de desenvolvimentoExemplo:Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery)CLASS ZCL_PURCHASE_ORDERMétodoRELEASEMétodoCREATE_DELIVERY
  • 8. Regras de desenvolvimentoRegra 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 - GeralUse inglêsUse “glossary terms” (não MARA)No case de nomes compostos, use separador “_”
  • 10. Regra para os nomes / Naming convention - AtributosAtributo KEY (Chave) – Instance Público (ONLY!); ex: Number(vbeln)Atributo HEADER (if applicable) – Instance Private; ex: VBAKAtributo ITEMS (if applicable) – Instance Private; ex: table of VBAPOutras opcoes(SCHEDULE LINES, PARTNERS, etc…)Sem prefixos (ex: GS_HEADER)Constantes ; use prefixo CO_
  • 11. Regra para os nomes / Naming convention - MétodosMomes 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 recomendadosIM_ for IMporting parametersEX_ for EXporting parametersCH_ for CHanging parametersRE_ for REturning parameters
  • 12. Regra para os nomes / Naming convention - MétodosPúblicoMétodo READ – Static Public;Método DISPLAY – Instance Public;Método GET_<<attrib>> – Instance public;Lifecycle Métodos CRUD (Create, Read, Update* and Delete*)Protegido/ PrivadoMétodo READ_<<attrib>> – Instance Private;Método CONSTRUCTOR – Instance Private;
  • 13. InstanciaçãoInstantiation as Private or Protected. NOT PUBLIC;Ofereca Métodos para instanciar sua classe de negócio:SearchRead / FactoryExemplo: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 PerformanceUsando 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
  • 19. READ
  • 27. READ
  • 31. READ
  • 34. CREATE_DELIVERYClasses Utilitárias - Utility Classes (UC)Vantagens principais:Implementa OO“Build once and used everywhere”- ReutilizaçãoExemplos:ZCL_FTP (FTP - File Transfer Protocol)ZCL_APPLICATION_LOG (SAP LOG - Business Application Log)ZCL_ADDRESS (SAP Address - Business Address Repository)ZCL_EMAIL (BCS - Business Communication Service)ZCL_BDC (BDC - Batch Data Communication)
  • 35. Utilização de Classes de exceçãoIntroduzido com SAP BASIS BASIS versão 6.10Criado atravez do Class Builder (SE24)Gerenciamento de Textos de ExceçãoClasse 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.)AtributosDefina atributo KEY da classe de negócioMarque Atributos publicos como “read-only”BAPIRET2_T(opcional)MétodosLog & display messagens de exceção no BALMensagens 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çãoExemplos:ZCL_DISTRIBUTION (Process de Distribuição …)ZCL_PICKING (Picking …)ZCL_PACKING (Packing Station …)
  • 39. Hierarquia de Pacotes de desenvolvimento
  • 40. Exemplos Classes de Negócio em SAP ERP:ZCL_SALES_ORDER
  • 54. …Como utilizá-las – Exemplo – Process flowReport ZZZTEST123.Parameters: p_order type vbeln.Data: o_order type zcl_salesorder, o_del type zcl_outbounddelivery....* Ler instancia da ordem de vendao_order = zcl_salesorder=>read( p_order ).* Criar o fornecimento para a ordem de vendao_del = o_order->deliver( ).* Post GIo_del->post_GI( )....Method deliver. (class zcl_salesorder)... r_del = zcl_outbounddelivery=>create( key )...Endmethod.
  • 55. ScopoImplementaçã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 passosConsolidação dos padrões de programação junto a SCNCriação de um Wizard para automatizar o process de criação da classe de negócio
  • 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);
  • 64. PART 6: Exceptions (Exception Classes);
  • 65. PART 7: Model Classes
  • 66. PART 8: Others (Package Hierarchy, performance optimization);
  • 67. PART 9: Community content and collaboration;
  • 69. Next Generation ABAP Development
  • 70. ABAP Objects: ABAP Programming in SAP NetWeaver