Algumas vezes precisamos obter dados de bases de dados externas, principalmente se você trabalha com interfaces entre o SAP e outros sistemas. É possível fazer isso utilizando Native SQL
O Native SQL permite que você utilize comandos SQL do próprio banco de dados ao invés do OPEN SQL, mas você deve usá-lo somente para acessar tabelas que não estão declaradas no dicionário.
Nesse post vou ensinar como se conectar a uma base de dados Oracle. Vamos Lá.
A primeira coisa a fazer é configurar a conexão com o banco de dados. Solicite ao Basis para incluir os dados de conexão da base Oracle externa no tnsnames do do servidor SAP.
MY_DATABASE é um ID que vamos atribuir a base que vamos conectar, DOMAIN é o domínio configurado no servidor, 0.0.0.0 e 1111 devem ser substituidos pelo IP e porta do servidor Oracle e DBSID deve ser substituido pelo SID do banco de dados.
Acesse a transação DBCO e inclua uma nova entrada conforme abaixo:
Conexão BD: o ID que será passado para o comando CONNECT.
SABD: O tipo de bando de dados, nesse caso Oracle.
Nome usuário: O usuário registrado no Oracle.
Senha-BD: A senha do usuário Oracle.
Info lig: O ID atribuido a conexão no tnsnames do servidor SAP.
Agora que a conexão está configurada, vamos ao código ABAP. O programa abaixo é bastante simples, ele se conecta a base externa, obtem o conteudo do campo xml_field a partir do documento da NF e escreve o conteudo XML na tela.
Exemplo completo
domingo, 22 de janeiro de 2012
Instanciando uma classe pelo nome
Se você tiver várias classes implementando uma mesma interface e deseja instancia-las a partir de uma string com o nome da classe, então você pode utilizar o trecho de código abaixo.
Validando expressões regulares em ABAP com javascript
As expressões regulares são a melhor forma de validar strings, aos invés de substrings e instruções IF. Infelizmente as versões anteriores ao Netweaver não dispoem de rotinas validação de expressões regulares, mas podemos contornar isso utilizando javascript.
O SAP contém uma classe chamada cl_java_script que permite executar códigos javascript dentro ABAP, mais do que isso, permite trocar dados entre o ABAP e o javascript.
Dentre os métodos dessa classe podemos destacar dois principais, o BIND que permite associar variavés ABAP a variáveis JS e o EVALUATE que permite executar o código JS.
Nesse post vou mostrar como utilizar o processador javascript do SAP para validar um CEP através de expressão regular.
Primeiro inclua a chamada da rotina que faz a validação do CEP dentro do local apropriado do seu programa:
Onde P_CEP deve ser substituido pelo campo que contém o CEP a ser validado.
Após a execução da rotina lv_match vai estar com o valor true se o CEP for válido ou false se for inválido.
Agora inclua o form para validação de CEP.
O código javascript utiliza o método match da classe RegExp para fazer a validação, se ocorrer algum erro durante a execução do código javascript, a mensagem de erro vai estar em l_return.
Agora você pode adaptar o código para outros tipos de vlidações como CPF, CNPJ, etc.
O SAP contém uma classe chamada cl_java_script que permite executar códigos javascript dentro ABAP, mais do que isso, permite trocar dados entre o ABAP e o javascript.
Dentre os métodos dessa classe podemos destacar dois principais, o BIND que permite associar variavés ABAP a variáveis JS e o EVALUATE que permite executar o código JS.
Nesse post vou mostrar como utilizar o processador javascript do SAP para validar um CEP através de expressão regular.
Primeiro inclua a chamada da rotina que faz a validação do CEP dentro do local apropriado do seu programa:
Onde P_CEP deve ser substituido pelo campo que contém o CEP a ser validado.
Após a execução da rotina lv_match vai estar com o valor true se o CEP for válido ou false se for inválido.
Agora inclua o form para validação de CEP.
O código javascript utiliza o método match da classe RegExp para fazer a validação, se ocorrer algum erro durante a execução do código javascript, a mensagem de erro vai estar em l_return.
Agora você pode adaptar o código para outros tipos de vlidações como CPF, CNPJ, etc.
Abrindo uma URL no navegador padrão
Para abrir uma url no navegador padrão do usuário, basta utilizar o método execute da classe cl_gui_frontend_services passando a url no parâmetro document. Veja um exemplo prático abaixo.
Imagine que seu relatório tem um campo com o número de um objeto dos Correios (Sedex, PAC, etc) e você gostaria que quando o usuário desse um duplo clique sobre esse objeto fosse a aberto a página de rastreamento de objetos dos Correios.
Dentro do sua rotina de duplo clique inclua a seguinte chamada:
Obviamente lv_num_objeto pode ser substituida pelo campo do seu relatório que contém o número do objeto dos Correios.
Agora inclua o seguinte form no seu programa.
Pronto, agora quanto o usuário der um duplo clique no campo com o número do objeto dos Correios abrir uma janela do navegador com a tela de rastreamento do objeto no site dos correios.
Imagine que seu relatório tem um campo com o número de um objeto dos Correios (Sedex, PAC, etc) e você gostaria que quando o usuário desse um duplo clique sobre esse objeto fosse a aberto a página de rastreamento de objetos dos Correios.
Dentro do sua rotina de duplo clique inclua a seguinte chamada:
Obviamente lv_num_objeto pode ser substituida pelo campo do seu relatório que contém o número do objeto dos Correios.
Agora inclua o seguinte form no seu programa.
Pronto, agora quanto o usuário der um duplo clique no campo com o número do objeto dos Correios abrir uma janela do navegador com a tela de rastreamento do objeto no site dos correios.
Criando um ALV OO Fullscreen
Um problema que já deparei desenvolvendo um ALV OO, foi o tamanho da tela, ora ficava muito grande e usuário tinha que rolar a tela, ora ficava muito pequeno ocupando apenas metade da tela, eu até usei o docking_container, mas o problema dele é que o usuário consegue redimensioná-lo.
Eu encontrei esse post que ensina como fazer isso utilizando o custom_container mesmo. Basicamente para fazer um ALV OO Fullscreen basta você deixar o seu container bem grande e marcá-lo como redimensionável.
Abra a tela do seu relatório no screen painter, então redimensione a tela e o custom control. De um duplo clique no custom control e marque as opções redimensionamento vertical e horizontal, informe o número linhas e colunas mínimas que seu ALV deve ter e ative sua tela. Pronto, agora na próxima vez que seu relatório for executado o ALV vai se ajustar ao tamanho da tela do usuário.
Eu encontrei esse post que ensina como fazer isso utilizando o custom_container mesmo. Basicamente para fazer um ALV OO Fullscreen basta você deixar o seu container bem grande e marcá-lo como redimensionável.
Abra a tela do seu relatório no screen painter, então redimensione a tela e o custom control. De um duplo clique no custom control e marque as opções redimensionamento vertical e horizontal, informe o número linhas e colunas mínimas que seu ALV deve ter e ative sua tela. Pronto, agora na próxima vez que seu relatório for executado o ALV vai se ajustar ao tamanho da tela do usuário.
Lendo um arquivo Excel
Nesse post vou mostrar como fazer a leitura de um arquivo excel (*.xls ou *.xlsx) diretamente, sem a necessidade de convertê-lo para CSV ou qualquer outro formato de arquivo texto. É possível fazer isso através da função ALSM_EXCEL_TO_INTERNAL_TABLE.
Nosso programa exemplo faz a leitura de um arquivo excel com três colunas, material, unidade de medida e quantidade, em seguida imprime os dados na tela.
A primeira coisa a fazer é ler o arquivo excel para a tabela t_excel_tmp, cada linha corresponde a uma célula da planilha excel.
No parâmetro i_begin_row deve ser informada a linha onde começam os dados.
Agora é preciso ordenar a tabela por linha e coluna, em seguida percorrê-la dando um append a cada mudança de linha.
O loop está ciurcandado com try catch para evitar um dump devido a possíveis incompatibilidades entre o formato dos dados no excel e as colunas da tabela interna.
Exemplo completo:
Nosso programa exemplo faz a leitura de um arquivo excel com três colunas, material, unidade de medida e quantidade, em seguida imprime os dados na tela.
A primeira coisa a fazer é ler o arquivo excel para a tabela t_excel_tmp, cada linha corresponde a uma célula da planilha excel.
No parâmetro i_begin_row deve ser informada a linha onde começam os dados.
Agora é preciso ordenar a tabela por linha e coluna, em seguida percorrê-la dando um append a cada mudança de linha.
O loop está ciurcandado com try catch para evitar um dump devido a possíveis incompatibilidades entre o formato dos dados no excel e as colunas da tabela interna.
Exemplo completo:
sábado, 3 de dezembro de 2011
Buscando BADI por transação
As BADIs são uma ótima forma de incluirmos nossos códigos dentro de transações standard, mas antes de qualquer implementação você precisa encontrar as BADIs que são executadas na transação e suas respectivas definições.
Nesse post eu vou mostrar como encontrar essas definições apenas executando a transação desejada.
Primeiro inclua um break-point na linha 10 da função SXV_GET_CLIF_BY_NAME (SE37).
Execute a transação desejada e toda a vez que uma BADI for chamada o sistema irá parar no break-point acima e no campo name você pode visualizar o nome da definição
Localizando uma BADI na transação XD02
Execute a transação XD02 com um cliente qualquer, faça uma modificação no endereço e salve, o sistema irá parar no break-point e você poderá visualizar ADDRESS_CHECK no campo name.
Acesse a transação SE18, informe ADDRESS_CHECK e clique em exibir. Pronto agora você tem uma BADI para implementar uma validação de endereço, é só acessar a SE19 e fazer a sua implementação.
Nesse post eu vou mostrar como encontrar essas definições apenas executando a transação desejada.
Primeiro inclua um break-point na linha 10 da função SXV_GET_CLIF_BY_NAME (SE37).
Execute a transação desejada e toda a vez que uma BADI for chamada o sistema irá parar no break-point acima e no campo name você pode visualizar o nome da definição
Localizando uma BADI na transação XD02
Execute a transação XD02 com um cliente qualquer, faça uma modificação no endereço e salve, o sistema irá parar no break-point e você poderá visualizar ADDRESS_CHECK no campo name.
Acesse a transação SE18, informe ADDRESS_CHECK e clique em exibir. Pronto agora você tem uma BADI para implementar uma validação de endereço, é só acessar a SE19 e fazer a sua implementação.
Assinar:
Postagens (Atom)