• Save
Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos

on

  • 2,159 views

 

Statistics

Views

Total Views
2,159
Views on SlideShare
2,149
Embed Views
10

Actions

Likes
1
Downloads
0
Comments
0

4 Embeds 10

http://us-w1.rockmelt.com 6
http://www.linkedin.com 2
http://www.slideshare.net 1
http://10.15.84.61 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos Presentation Transcript

  • 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
  • 12. Regra para os nomes / Naming convention - Métodos
    Público
    Mé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/ Privado
    Método READ_<<attrib>> – Instance Private;
    Método CONSTRUCTOR – Instance Private;
  • 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
  • 16. Inheritance (?)
    ZCL_MMDOCUMENT
    Atributos:
    • NUMBER
    • 17. HEADER (EKKO)
    • 18. ITEMS (EKPO)
    Métodos:
    • CREATE
    • 19. READ
    • 20. FLAG_FOR_DELETION
    ZCL_PURCHASEORDER
    ZCL_STO
    Atributos:
    • NUMBER
    • 21. HEADER (EKKO)
    • 22. ITEMS (EKPO)
    • 23. INBOUND DELIVERIES
    Atributos:
    • NUMBER
    • 24. HEADER (EKKO)
    • 25. ITEMS (EKPO)
    • 26. OUTBOUND DELIVERIES
    Métodos:
    • CREATE
    • 27. READ
    • 28. FLAG_FOR_DELETION
    • 29. SIMULATE_DISTRIBUTION
    • 30. CREATE_DELIVERY
    Métodos:
    • CREATE
    • 31. READ
    • 32. FLAG_FOR_DELETION
    • 33. SIMULATE_DISTRIBUTION
    • 34. CREATE_DELIVERY
  • Classes Utilitárias - Utility Classes (UC)
    Vantagens principais:
    Implementa OO
    “Build once and used everywhere”- Reutilização
    Exemplos:
    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çã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 …)
  • 39. Hierarquia de Pacotes de desenvolvimento
  • 40. Exemplos
    Classes de Negócio em SAP ERP:
    • ZCL_SALES_ORDER
    • 41. ZCL_PURCHASE_ORDER
    • 42. ZCL_PURCHASE_REQUISITION
    • 43. ZCL_CUSTOMER
    • 44. ZCL_VENDOR
    • 45. ZCL_MATERIAL
    • 46. ZCL_HANDLING_UNIT
    • 47. ZCL_STORAGE_UNIT
    • 48. ZCL_TRANSFER_ORDER
    • 49. ZCL_SHIPMENT
    • 50. ZCL_MATERIAL_DOCUMENT
    • 51. ZCL_INBOUND_DELIVERY
    • 52. ZCL_OUTBOUND_DELIVERY
    • 53. ZCL_ALLOCATION_TABLE (RETAIL)
    • 54. …
  • Como utilizá-las – Exemplo – Process flow
    Report ZZZTEST123.
    Parameters: p_order type vbeln.
    Data: o_order type zcl_salesorder,
    o_del type zcl_outbounddelivery.
    ...
    * Ler instancia da ordem de venda
    o_order = zcl_salesorder=>read( p_order ).
    * Criar o fornecimento para a ordem de venda
    o_del = o_order->deliver( ).
    * Post GI
    o_del->post_GI( ).
    ...
    Method deliver. (class zcl_salesorder)
    ...
    r_del = zcl_outbounddelivery=>create( key )
    ...
    Endmethod.
  • 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.
    • Informações adicionais:
    • 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);
    • 61. PART 3: Instantiation;
    • 62. PART 4: Inheritance;
    • 63. PART 5: Database Access;
    • 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;
    • 68. SAP-PRESS Releases
    • 69. Next Generation ABAP Development
    • 70. ABAP Objects: ABAP Programming in SAP NetWeaver
    • 71. SAP Links
    • 72. http://www.sdn.sap.com
    • 73. http://help.sap.com
  • Q & A
    Obrigado!