25 de junho de 2014

Relatório de request

Fala pessoas.

Nada melhor do que a necessidade (ou a falta de paciência para atividades repetitivas) para nos forçar a achar outras soluções.

Atualmente estou em um projeto onde há várias frentes de trabalho distintas (que não se comunicam, diga-se de passagem) atuando em um mesmo processo ao mesmo tempo, ou seja, vários e vários ABAPs atualizando o mesmo código durante um determinado tempo. Com isso, é comum que esse processo ora tenha a regra que A + B = 10, ora A + B = 17 ou ainda A + B = (12 * 3,14) + √42.

Isso acaba gerando uma situação onde um processo, validado em ambiente QAS há dois dias, não apresente o resultado esperado e validado, e a primeira necessidade é realizar uma verificação de versão de objetos, para verificar quem foi o último ABAP que alterou a regra, para depois disso descobrir o porquê (viu como uma boa comunicação e um processo de documentação centralizado são úteis?!).

Bom, mas você pode dizer que realizar uma verificação de versão de objetos é simples, e eu concordo com isso, mas com uma ressalva: verificar a versão de um objeto é simples, verificar a versão de 5 objetos é simples, mas verificar a versão de mais de 40 objetos distintos espalhados entre mais de 15 requests (e o cenário pode piorar cada vez mais) é um trabalho oneroso (para não dizer um puta saco).

Pensando que isso tem se tornado uma constante no meu dia-a-dia, fui forçado a desenvolver uma solução inteligente (mas não tão quanto eu gostaria por falta de tempo) para esse problema: um relatório de requests, contendo objetos e comparação de transporte, onde eu possa obter de forma simples qual a última request transportada para determinado objeto. Simples não?



Como vou postar o fonte para quem tenha interesse, vou analisar os pontos interessantes desse processo:

Para iniciar o processo, me baseei em duas premissas: 1 - preciso obter essa informação de transporte partindo de DEV e sem me conectar a outros ambientes; 2 - preciso me basear na request (ou requests) para pontos inicial da minha busca.

Logo no início, me vi com algumas dúvidas quanto aos ambientes: quantos são os ambientes (nesse cliente eu sei quantidade, mas e em um próximo), qual a rota de transporte? 
Para isso utilizei uma function muito útil: TMW_GET_TARGET_SYSTEMS. Essa function fornece uma lista de ambiente, numerando a rota de transporte. As descrições dos ambientes, que não são fornecidas por essa função, consegui obter na tabela TMSCSYS. Esse é o ponto onde o processo não ficou interessante, pois, por questões de tempo, acabei restringindo o número máximo de ambiente (feio, eu sei), mas logo vou atualizar o fonte. 

Após resolver as informações sobre ambientes e rotas, utilizei as tabelas E070, E07T e E071 para obter as informações de objetos de cada request. Para evitar informações não necessárias nesse momento, acabei excluindo as informações de objetos CORR (textos) e TABU (TVDIR e TDDAT).

Bom, já tinha as informações dos ambientes e dos objetos das request, hora de obter os dados cruzados. Obtendo as mesmas tabelas acima, fiz uma busca inversa verificando quais outras request possuem os mesmo objetos. De posso de todos os dados, usei a function STRF_READ_COFILE para me fornecer o log de transporte de cada request e usando para comparação de datas de transporte as seguintes regras:
Para ambiente 0 (DEV comumente) obtive a data da função E (Criação de versões após exportação)
Para demais ambientes obtive a data da função G (Geração Abaps e telas) ou A (Ativação de objetos de data dictionary).

Com todas as informações foi somente realizar o cruzamento de informações, verificando se determinado objeto possui uma data de transporte posterior à data presente na minha request e pronto. Para facilitar a visualização coloquei alguns ícones. Acabei realizando todo o desenvolvimento sem objetos, para permitir uma fácil migração entre ambiente.

Às vezes a sua necessidade mais banal pode gerar alguns resultados interessantes. Ainda pretendo atualizar o relatório para conter mais algumas informações, mas por enquanto está me atendendo e espero que possa auxilia-los. 

Caso queiram baixar o fonte (e atualizar para inserir maiores informações - me mandem a versão atualizada depois), vou deixar o link aqui: fontes.

Até mais e obrigado pelos peixes.

13 comentários:

  1. O arquivo que você solicitou não existe.

    Certifique-se de que possui o URL correto e que o proprietário do arquivo não o excluiu.

    ResponderExcluir
    Respostas
    1. Paulo, tdo bem?
      Vc conseguiu desenvolver/ baixar um relatorio de requests?
      Caso sim, poderia me enviar, pois estou procurando/desenvolvendo, mas está dificil.
      Abc.
      Rodrigo.

      Excluir
  2. Boa tarde. Pode me passar o codigo fonte?
    teixeira_engenheiro@hotmail.com
    Obrigado.

    ResponderExcluir
  3. Boa Tarde Renato, poderia me passar o código fonte, pelo link eu não consegui.Obrigado. e-mail --> sansevero.ppz@gmail.com

    ResponderExcluir
  4. Boa Tarde. Teria como me enviar o código fonta no email carlostd82@gmail.com ?

    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde, enviei para o seu e-mail, vou corrigir os links.
      Obrigado pelo aviso

      Excluir
    2. Boa tarde. Pode me enviar também?

      allan.camargo@gmail.com

      Excluir
  5. boa tarde podem por favor me enviar o codigo fonte ? no email: engenheirojunilson@hotmail.com e junilson_pregador@outlook.com

    ResponderExcluir
  6. Prezados,
    poderiam por favor me enviar o código fonte. E-mail: dcc.cruz88@gmail.com

    ResponderExcluir
  7. Olá Tudo Bem...
    Consegue compartilhar o codigo fonte
    Muito Obrigado
    alison.martins@me.com

    ResponderExcluir
  8. Poderia encaminhar o código por favor, amigo ?

    email: juliowschleich@outlook.com

    ResponderExcluir