Skip to content
EfraimelmPublic

About

Sistema de academia em SAP ABAP: DDIC, ABAP OO, ALV, CDS, ABAP Unit (abapGit)

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

ZACADEMIA: gestão de academia em SAP ABAP

Sistema de gestão de academia (alunos, exercícios, modelos de treino e ficha de treino) escrito em ABAP, no padrão de um desenvolvimento Z de projeto SAP: dicionário de dados próprio, classes de negócio orientadas a objeto, classe de mensagens, relatórios ALV, CDS views, transações e testes unitários.

O projeto nasceu como um sistema de terminal em Python e foi reescrito para o ecossistema SAP. Está no formato abapGit, então pode ser importado direto em um sistema SAP.


Transações

Transação Programa O que faz
ZACAD01 ZACAD_MANUT_ALUNO Criar, modificar, exibir e inativar alunos
ZACAD02 ZACAD_MANUT_EXERCICIO Cadastro mestre de exercícios + lista ALV
ZACAD03 ZACAD_MANUT_TREINO Modelos de treino: cabeçalho e itens (exercícios, séries, repetições)
ZACAD04 ZACAD_ATRIBUIR_TREINO Atribui um treino ao aluno com data de início de vigência
ZACAD05 ZACAD_REL_ALUNOS Relatório ALV com idade, IMC colorido e treino vigente; duplo clique abre a ficha
ZACAD06 ZACAD_FICHA_TREINO Ficha de treino do aluno em uma data (ALV com cabeçalho)
SE38 ZACAD_CARGA_DEMO Carrega dados de exemplo: 20 exercícios, 3 treinos, 5 alunos

Modelo de dados

erDiagram
    ZACAD_ALUNO ||--o{ ZACAD_ALUNO_TR : "tem vigências"
    ZACAD_TREINO_H ||--o{ ZACAD_ALUNO_TR : "é atribuído em"
    ZACAD_TREINO_H ||--|{ ZACAD_TREINO_I : "possui itens"
    ZACAD_EXERC ||--o{ ZACAD_TREINO_I : "é usado em"

    ZACAD_ALUNO {
        NUMC8 MATRICULA PK
        CHAR60 NOME
        DATS DATA_NASC
        CHAR1 SEXO "M/F (domínio)"
        DEC5_2 PESO
        DEC3_2 ALTURA
        CHAR1 OBJETIVO "F/H/E/C (domínio)"
        CHAR1 STATUS "A/I (domínio)"
    }
    ZACAD_EXERC {
        NUMC6 EXERC_ID PK
        CHAR60 NOME
        CHAR10 GRUPO_MUSC "domínio"
    }
    ZACAD_TREINO_H {
        NUMC6 TREINO_ID PK
        CHAR60 NOME
        CHAR1 OBJETIVO
    }
    ZACAD_TREINO_I {
        NUMC6 TREINO_ID PK
        NUMC3 POSNR PK "10, 20, 30..."
        NUMC6 EXERC_ID FK
        NUMC2 SERIES
        CHAR10 REPETICOES
        NUMC3 DESCANSO
    }
    ZACAD_ALUNO_TR {
        NUMC8 MATRICULA PK
        DATS BEGDA PK
        DATS ENDDA
        NUMC6 TREINO_ID FK
    }
Loading

Todas as tabelas são dependentes de mandante (MANDT) e têm campos de auditoria (CRIADO_EM, CRIADO_POR, MODIF_EM, MODIF_POR). A atribuição de treino usa vigência por data (BEGDA/ENDDA, com fim aberto em 99991231), o mesmo conceito dos infotipos de HCM. Uma nova atribuição encerra a anterior, sem sobreposição de períodos.

Arquitetura

Programas (ZACAD_*)          tela de seleção, eventos, ALV, COMMIT/ROLLBACK
        │  chamam
        ▼
Classes de negócio           ZCL_ACAD_ALUNO · ZCL_ACAD_EXERCICIO · ZCL_ACAD_TREINO
        │                    validações, numeração, integridade, sem COMMIT
        │  usam
        ├── ZCL_ACAD_DOMINIO   valida valores fixos de domínio via RTTI
        ├── ZCL_ACAD_ALV       fábrica de CL_SALV_TABLE padronizado
        ├── ZCL_ACAD_F4        ajudas de pesquisa (F4IF_INT_TABLE_VALUE_REQUEST)
        └── ZCX_ACAD_ERROR     exceção baseada na classe de mensagens ZACADEMIA
        ▼
Tabelas Z + CDS views        ZACAD_I_TREINOVIGENTE → ZACAD_I_ALUNOTREINO
  • Regra de negócio fora da tela: os programas só cuidam de interface. Toda validação está nas classes, o que permite testá-las com ABAP Unit.
  • Controle de LUW pelo chamador: as classes nunca fazem COMMIT WORK. O programa confirma ou desfaz a transação inteira.
  • Mensagens SAP: todo erro é uma mensagem da classe ZACADEMIA (SE91), lançada com RAISE EXCEPTION ... MESSAGE e exibida com MESSAGE lx_erro.

Conceitos SAP demonstrados

  • Dicionário ABAP (SE11): tabelas transparentes, elementos de dados, domínios com valores fixos e com minúsculas
  • Classe de mensagens (SE91) e exceção com IF_T100_DYN_MSG
  • ABAP OO: classes globais, classes locais nos programas, eventos (FOR EVENT double_click)
  • ABAP moderno (7.40+): VALUE, COND, FOR ... IN, LET, NEW, CONV, declarações inline, string templates, Open SQL com @
  • Tela de seleção: radio buttons com USER-COMMAND, MODIF ID, LOOP AT SCREEN, listbox, SELECT-OPTIONS, F4 próprio
  • ALV com CL_SALV_TABLE: cores por célula, títulos de coluna, layout salvo, cabeçalho (CL_SALV_FORM_LAYOUT_GRID), duplo clique com SUBMIT ... AND RETURN
  • CDS view entities com variável de sessão ($session.system_date) e LEFT OUTER JOIN
  • Lista clássica (WRITE, FORMAT COLOR) na exibição do aluno
  • POPUP_TO_CONFIRM antes de ações destrutivas
  • ABAP Unit com OSQL Test Double Framework (CL_OSQL_TEST_ENVIRONMENT): os testes não tocam o banco real
  • Itens numerados de 10 em 10 (POSNR), como em documentos SD/MM
  • Integridade referencial em código: não exclui exercício em uso nem treino vigente
  • Transações (SE93) e pacote versionados com abapGit
  • CI com abaplint no GitHub Actions

Do Python para o SAP

Versão Python Versão SAP ABAP
Menus no terminal com input() Transações ZACAD01…ZACAD06 com tela de seleção
Arquivos alunos.json, exercicios.json, modelos.json Tabelas transparentes ZACAD_*
Login com usuário e senha em administrador.csv (texto puro) Login e autorização do próprio SAP (SU01 / PFCG / S_TCODE)
"tipo" do exercício em texto livre Domínio ZACAD_D_GRUPO_MUSC com valores fixos
Objetivo e sexo como texto Domínios com valores fixos + listbox na tela
Matrícula 1000 + len(alunos) Próxima matrícula a partir do maior número gravado no banco
Pastas dados/ × caminhos data/ no código (arquivos nunca encontrados) Acesso ao banco via Open SQL, sem caminhos de arquivo
Exercícios copiados dentro do treino Itens referenciando o cadastro mestre (EXERC_ID)
"Atribuir treino ao aluno" em desenvolvimento Implementado com vigência por data e histórico
print() de listas ALV com filtro, ordenação, exportação para Excel e layouts
Sem testes ABAP Unit com test doubles + abaplint no CI

Como instalar

Requisitos: SAP NetWeaver / ABAP Platform 7.55 ou superior (S/4HANA 2020+), por causa das CDS view entities. O ABAP Platform Trial (Docker, gratuito) atende.

  1. Instale o abapGit no sistema (programa ZABAPGIT_STANDALONE).
  2. Crie o pacote ZACADEMIA na SE80/SE21 (ou deixe o abapGit criar).
  3. No abapGit: New Online → URL https://github.com/Efraimelm/academia → pacote ZACADEMIA → Pull.
  4. Ative os objetos que ficarem inativos (o abapGit mostra a lista).
  5. Rode ZACAD_CARGA_DEMO na SE38 para ter dados de exemplo.

O idioma original dos objetos é português (P). Se o seu sistema não tiver PT instalado, faça logon em PT ou altere MASTER_LANGUAGE no .abapgit.xml antes do pull.

Roteiro de demonstração

  1. SE38 → ZACAD_CARGA_DEMO: carrega exercícios, treinos e alunos.
  2. ZACAD05: lista os alunos com IMC colorido (verde = normal, amarelo = atenção, vermelho = obesidade).
  3. Duplo clique em um aluno: abre a ficha de treino (ZACAD06) com os exercícios do treino vigente.
  4. ZACAD03: crie um treino, inclua exercícios (F4 no campo do exercício) e veja os itens 010, 020, 030…
  5. ZACAD04: atribua o novo treino a um aluno. Na ZACAD05, ele aparece como vigente.
  6. ZACAD01 → Inativar: o aluno some do relatório padrão (filtro de status) e a vigência é encerrada.

Testes

Os testes unitários estão em ZCL_ACAD_ALUNO e ZCL_ACAD_TREINO (aba Test Classes / arquivos *.testclasses.abap). Para rodar: SE24/SE80 → Testar → Teste unitário (Ctrl+Shift+F10) ou, no Eclipse ADT, Ctrl+Shift+F10.

O que é coberto: cálculo e classificação de IMC, idade, validações de cadastro, geração de matrícula, nome duplicado, inativação, numeração de itens, exercício repetido no treino, troca de vigência e bloqueio de exclusão de treino em uso.

A verificação estática roda a cada push pelo GitHub Actions. Para rodar localmente:

npx @abaplint/cli abaplint.json

Próximos passos

  • Intervalo de numeração (SNRO) e objeto de bloqueio (ENQUEUE_EZACAD_ALUNO) para concorrência
  • Objeto de autorização próprio (ZACAD_ACT) com AUTHORITY-CHECK por atividade
  • Versão RAP (RESTful ABAP Programming) com app Fiori Elements sobre as mesmas tabelas
  • Ajudas de pesquisa (SE11) no lugar do F4 programado

About

Sistema de academia em SAP ABAP: DDIC, ABAP OO, ALV, CDS, ABAP Unit (abapGit)

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages