*&---------------------------------------------------------------------*
* Eaiii pessoal tudo bão ? Seguinte hoje eu vim renovar um post antigo do
* Mauro(Mestre ABAPssauro) do nosso coração, e o respectivo post é o do
* translate upper/ to lower case. A gente gosta de coisa vintage mas não da
* para ficar usando velharia em código moderno meus jovens, bora fazer
* aquela moral com o Senior e colocar as nossas queridas built-in functions
* na jogada !!
* Então vamo lá a premissa é a mesma, "Felipão estou controlando um parametro
* de entrada direto por uma variavel porém se ela não for maíuscula/minúscula
* vou ter vários problemas para cair nos meus CASES/WHEN/SWITCHS, o que
* fazer ? " Não temas, como o Mauro ja nos ensinou no passado, temos os
* comandos do TRANSLATE, se quiser saber mais da uma olhada nesse link
* abaixo:
TRANSLATE ... TO LOWER / UPPER CASE e USING
* Porem chegou a hora de modernizar a parada e trazer uma cara mais atual
* ao seu código abap.
REPORT ZFELIPE_UPPER_TO_LOWER_V2.
* Primeiro vamos criar uma variavel de texto digamos que ela será usada para
* controlar uma maquina de refrigerante. E meus cases utilizam tudo em Upper
* Case.
DATA(saboor_refrigerante) = |laranja|.
* Agora preciso convertela para upper case de forma rápida.Criarei mais uma
* variável para manter um fluxo mais visível para que voce possa visualizar
* depois.
DATA(saboor_maisculo) = to_upper( saboor_refrigerante ).
WRITE: saboor_maisculo.
* Viu só nem doeu, "Aaaa Felipe o outro tambem era só uma linha pra que vou
* usar assim ? " Agora que te explico jovem, esse carinha você pode usar
* de maneira mais dinâmica e durante execuções de outros comandos.
* Exemplo:
* vou criar uma tabela simples apenas para demonstrar e claro vamos deixar
* nossa sintaxe cada vez mais moderna.
data(tabela_de_sabores) = VALUE string_table( ( |uva| )
( |cola| )
( |limao| ) ).
* Caso não esteja acostumado a criar tabelas assim, elas vieram com abap
* 7.5+ voce passa o VALUE e o tipo da tabela/estrutura e dentro
* dela preencherá as colunas e linhas com o que deseja, faremos um post
* mais detalhado logo logo , mas ja falo isso salva muito tempo em teste
* hahah.
LOOP AT tabela_de_sabores INTO DATA(sabor).
WRITE: /, to_upper( sabor ). "Lembre de respeitar o espaço dentro dos
"parenteses.
ENDLOOP.
* viu ? não precisei colocar o translate, criar uma variável e por fim
* escrever o valor na tela, aqui fazemos tudo ao vivo e a cores
* "Tabeleza Felipão agora vi que da para usar o upper mas e o lower ? Mesma
* lógica rapaziada, apenas o nome muda usaremos o to_lower( ).
DATA(tabela_de_sabores_em_upper) = VALUE string_table( ( |GUARANA| )
( |ABACAXI| )
( |FRAMBOESA| ) ).
LOOP AT tabela_de_sabores INTO DATA(saboor).
WRITE: / , to_lower( saboor ). "Lembre de respeitar o espaço dentro dos
"parenteses e as piadas.
ENDLOOP.
* "OKAYYY mas e o translate using que substituia as parada?" Então pessoal
* esse carinha não tem um substituto 1:1 mas a função não morreu calma,
* vamos usar um cara que vou apresentar aqui e focar mais em outro post.
* Esse cara é o replace( ) na tradução clara ja diz ele vai subtituir o valor
* por outro, e como usar ele é bem simples.
DATA(linha_toda_errada) = |betete|.
DATA(linha_certa) = replace( val = linha_toda_errada "origem
sub = |e| " valor a ser substituído
with = |a| " valor a ser inserido
occ = 0 ). " occ é a ocorrencia
WRITE: /, linha_certa.
* Seguinte galera essa é versão 2.0 do uso do translate e ai ? o que acharam
* nos digam ai nos comentários, digam se faz sentido essa "inovação" da SAP
* e quais outros exemplos de uso existem para esses caras
*
* Um abraço pessoal, bebam água e comam frutas !! tmj.
quarta-feira, 15 de abril de 2026
TRANSLATE 2.0 - Traduzindo velhos hábitos (ABAP 7.4+)
quinta-feira, 2 de abril de 2026
Introdução a Built-In Functions REVERSE - Here it comees a new Challeengeerrr
*--------------------------------------------------------------------*
* Fala galera!!O Mauro(Membro raiz do Clã) foi lá na minha casa me chamar
* para ajudar com os posts aqui no blog, Prazer a todos meu nome é Felipe
* estou no ABAP a cerca de 4 anos e um dos meus hobbies favoritos é
* quebrar os programinhas Z dos colegas. Brincadeiras a parte, adoro
* ensinar e ajudar as pessoas por isso devo estar participando de
* posts futuros !Vamo junto nessa jornada.
* OBS: Gosto de animes e games então quaisquer referência é apenas
* coincidência.
* Galera alguma vez você ja se encontrou na situação de fazer achar uma
* posição de um delimitador, letra ou caractere porem ele se repete várias
* vezes e voce só quer a ultima vez que ele da as caras ?
* então com a versão 7.4+ o abap trouxe algo muito popular em outras
* linguagens que é BUILT-IN functions
* Felipão, nunca toquei em outra linguagem o que é uma built-in function ?"
* Então as built-in's functions
* são a salvação dos DEV's pois elas agilizam o que antes tinha classes,
* plugins ou funções que precisavam
* de pacotes ou serviços especificos mas que foram imbutidas diretamente
* na linguagem.
* Hoje vamos usar a funcionalidade REVERSE.
*--------------------------------------------------------------------*
REPORT zfelipe_domi_reverse.
DATA(uma_string) = |Laranja;Maca;Banana;Tomate;Picles|.
* Se voce ainda não se acostumou com string templates relaxa pois elas
* são bem simples os 'PIPES' ou barras verticais dão inicio tudo que fica
* dentro delas serão strings."e claro a declaração inline é algo que já
* devemos começar a introduzir no dia a dia
DATA(uma_string_invertida) = reverse( uma_string ).
* Não esquece dos espaços porque o reverse é como um metodo
BREAK-POINT.
* Nesse momento da uma olhada na variavel string invertida e
* repare que ela literalmente inverte no melhor estilo Stranger Things.
* Vamos agora encontrar o OFFSET "Felipão, o que é OFFSET?" - É a posição de
* index ou seja a posição colunar exata do caractere na string
FIND ';' IN uma_string_invertida MATCH OFFSET
DATA(ultima_aparicao_do_cara).
BREAK-POINT.
* Repare que eu crio o OFFSET inline para trazer as boas práticas e claro
* facilitar minha vida. - Da um duplo clique nesse cara.Voce vai notar
* que o numero 6 é exatamente a posição do ultimo ";"
* Mas Felipão para que eu uso isso ? - Muitas coisas vocepode garantir que
* o ultimo cara seja deletado ou o ponto de partida.
* Exemplo vou usar ele para deletar o que vem depois para
* isso vou fazer um calculo simples
DATA(delimitador_final) = strlen( uma_string ) - ultima_aparicao_do_cara.
BREAK-POINT.
* Usei o string length outra built-in para calcular o
* tamanho da string, da um duplo clique voce vai ver que ele é um INT e
* se eu subtrair o valor que eu achei no reverse vou deletar o que vem
* depois
write uma_string(delimitador_final).
* Essa variavel é um INT então posso jogar ele aqui.
* Legal Ne ? isso pode ser útil quando voce não quer fazer um contador
* com um loop de while = true. Por favor deem sugestões de uso para esse
* recurso e claro deixem os comentários de dúvidas e dicas.
* Valeu Galera até a proxima.
quarta-feira, 28 de janeiro de 2026
BPA - Trabalhando com BAPI ( Action Group )
* Inteligencia artificial e DataSphere. Automatização de processos usando
* uma ferramenta low / no code pode ser usados para equipes não técnicas também
* e isso entregaria valor em um tempo mais curto para o negocio, sendo que
* o próprio analista pode desenvolver algo e entregar algo, que as vezes
* pode representar uma boa porcentagem do tempo do time, assim sobrando
* tempo para fazer outras coisas, não só a SAP como o mercado espera isso.
* Já tínhamos conversado sobre BPA anteriormente fazendo um projeto simples
* em dois passos.
https://abapjuniores.blogspot.com/2023/11/bpa-criando-o-primeiro-projeto-do-zero.html
https://abapjuniores.blogspot.com/2023/11/bpa-criando-o-primeiro-projeto-do-zero_01276228367.html
* Hoje vou mostrar a aplicabilidade do BPA para processos massivos, acredito
* que saibam que SHDB não é mais suportado pela SAP e durante a migração de
* dados de um ambiente ECC para S/4 Hana tivemos que fazer vários projetos
* migrando todos os SHDB ( O business usava pra varias coisas ) para
* projetos em BPA, migramos todos para o processo que eu passei aqui, igual
* aos dos links acima, fazendo mapping de telas, cliques, ações, com o SAP
* aberto e reservando a maquina para processar a massa.
* Resolvemos a migração e centralizamos todos os processos em massa no BPA,
* mas acabou gerando outros problemas, erros não previstos nas telas de load,
* reposicionamento de certos campos conforme telas anteriores, timeout,
* sem contar os problemas procedurais pois o usuário tinha que reservar a
* sua própria maquina para executar as massas, e não conseguiam trabalhar em
* assunto pois a maquina estava rdando o BPA, execuções que acabaram depois
* de um tempo ficando bem maiores conforme a confiabilidade na ferramenta
* ia crescendo.
* Percebendo esses problemas foi considerado o inicio de uma nova versão do
* do produto, além de usar a tela aberta, migramos para a execução de BAPI's
* da massa de dados.
* Nesse post vamos aprender a criar a conexão do nosso projeto do BPA com
* o ambiente SAP que vocês querem acessar, vamos criar nosso primeiro
* 'Action Group', relacionar uma BAPI. Depois faremos mais post sobre como
* testar e relacionar ele no seu projeto em massa.
* Então bora lá, primeiramente vamos criar um projeto novo.
* Depois de ter criado o projeto já vamos direto criar um 'Action Group'
* isso permitirá criar uma conexão com o ambiente que vai rodar a BAPI
* Para alimentar os parâmetros listados abaixo é necessário entrar no
* SAPGui e clicar em 'Variable Logon' selecionar o ambiente que você
* gostaria de acessar e replicar os dados nos parâmetros do Pop-up do
* 'Action Group' usando o 'Next' do Logon do SAPgui para ver todos os
* valores necessários.
* Ficando dessa forma, se tiver com algum problema sobre isso chama o
* pessoal de Basis pra ajudar vocês.
terça-feira, 20 de janeiro de 2026
ABAP juniores Voltou !!!!!
* de posts ainda continuavam sendo listados, sem muito tempo pra fazer algo
* ainda, mas agora estamos passando por reformulações e uma equipe
* qualificada estará nos ajudando, não vou apresentar eles aqui pois eles
* mesmos irão fazer isso nos respectivos posts futuros.
* Esse post é mais para informar que voltamos com tudo, muitos planos,
* ideia e vontade de mostrar as coisas novas que estão acontecendo sem
* esquecer o ABAP Raiz que somos rsrs.
* Além dos time ter aumentado agora também estamos com novos parceiros
* para entrega de currículo e indicação, portanto estão querendo trocar de
* emprego ou estão procurando algo, nosso time irá ajudar vocês nesse processo
* também.
* Contamos com a colaboração e engajamento nas conversas do post e
* pontos a serem conversados que possivelmente podem virar um Post.
* Como eu disse antes, estamos voltando com tudo mas a equipe tem muita
* coisa pra alinhar, mas o mais importante, estamos preparando e alinhando
* muitas novidades para o Blog.
* Voltamos e contamos com todos, iremos criar posts periódicos igual
* fazíamos anteriormente.