Algumas vezes quando estamos implementando alguma exit, nos deparamos com uma situação em que precisamos de dados que estão declarados globalmente no programa principal mas que não estão disponíveis na interface da exit.
Para acessar basta você fazer uma referencia no formato (AAA)BBB onde AAA é o nome do programa e BBB o nome da tabela, estrutura ou campo a ser acessado, utilize field-symbols para fazer as referências.
Teste simples
Acesse a transação VA03 e ative o debug.
Na tela de debug insira o campo (SAPMV45A)XVBPA[] e você conseguirá visualizar os dados da tabela.
Acesse esse post para informações mais detalhadas a respeito.
Esse outro post também pode te ajudar bastante.
sábado, 25 de fevereiro de 2012
Cuidados com a formatação de emails HTML
No post anterior eu ensinei como enviar emails em formato HTML, mas há alguns cuidados que você deve tomar com relação a formatação da mensagem, pois o suporte a css não é o mesmo entre os diferentes clientes de email e pode ser que o belo design da sua mensagem não fique tão belo assim quando chegar ao destinatário.
Nesse post há um guia completo de suporte CSS em vários clientes de email.
Nesse post há um guia completo de suporte CSS em vários clientes de email.
Importando self-certificate para o servidor
Nesse post eu ensinei como configurar um certificado SSL no PSE, mas quando estamos trabalhando no ambiente de testes os servidores podem utilizar certificados selfssl, para economizar grana é claro. Como o certificado não foi emitido por AC autorizada, são necessários alguns passos adicionais para importá-lo para o PSE.
Volte ao post anterior e após clicar em confirmar na tela de importação do certificado e antes de clicar no botão incluir faça o seguinte.
Certifique se que os dados do certificado estão visíveis no quadro certificados.
Clique no botão exportar ao lado do botão importar.
Na tela de exportação clique na guia BD, informe um nome breve começando com Z, selecione CA usuário, informe uma descrição e confirme.
Agora você pode clicar em incluir e continuar com as demais etapas do post anterior.
Volte ao post anterior e após clicar em confirmar na tela de importação do certificado e antes de clicar no botão incluir faça o seguinte.
Certifique se que os dados do certificado estão visíveis no quadro certificados.
Clique no botão exportar ao lado do botão importar.
Na tela de exportação clique na guia BD, informe um nome breve começando com Z, selecione CA usuário, informe uma descrição e confirme.
Agora você pode clicar em incluir e continuar com as demais etapas do post anterior.
Resolvendo o problema de histórico do SAP GUI
Por uma ou duas vezes eu tive um problema com relação ao histórico do meu SAP Gui, e nada do que digitava era gravado no histórico, assim o SAP Gui não fazia nenhum sugestão para preenchimento de campos.
Parece ser um problema relacionado ao MDAC, já que o SAP Gui utiliza uma base access para gravar o histórico local. Eu consegui resolver o problema através desse post.
Parece ser um problema relacionado ao MDAC, já que o SAP Gui utiliza uma base access para gravar o histórico local. Eu consegui resolver o problema através desse post.
Importando um certificado SSL para o servidor
Nesse post eu ensinei como consumir um webservices através de http_client, na ocasião o endpoint estava acessível através de http, mas e se fosse https?
Nesse post vou mostrar como importar um certificado SSL para que você possa fazer uma conexão através de HTTPS.
Antes de mais nada é preciso que a biblioteca SAP Cryptographic Library esteja instalada no servidor, converse com o BASIS a respeito.
Exportando o certificado do servidor
Primeiro precisamos exportar o certificado ssl do servidor para X509 codificado em Base64, se você estiver utilizando windows faça o seguinte:
Configurando o PSE e o ICM
Acesse a transação STRUST e clique em Cliente SSL (standard)
No quadro certificado clique no botão importar certificado
Na tela de importação de certificado, clique em Base64 e informe o caminho para o arquivo exportado na primeira etapa e confirme.
Será exibido os dados do certificado, verifique se está tudo ok e clique no botão incluir
Acesse o menu PSE, em seguida distribuir todos ou pressione F6
Agora o certificado foi importado para o PSE, precisamos reiniciar o ICM antes de poder utilizar o certificado. Para isso acesse a transação SMICM, clique no menu Administração, ICM e encerrar soft.
Aguarde o ICM ser reiniciado e a configuração SSL estará ok.
Nesse post vou mostrar como importar um certificado SSL para que você possa fazer uma conexão através de HTTPS.
Antes de mais nada é preciso que a biblioteca SAP Cryptographic Library esteja instalada no servidor, converse com o BASIS a respeito.
Exportando o certificado do servidor
Primeiro precisamos exportar o certificado ssl do servidor para X509 codificado em Base64, se você estiver utilizando windows faça o seguinte:
- Execute o internet explorer como adimistrador
- Acesse o endereço do servidor que você você pretende acessar pelo SAP
- Clique no cadeado da barra de endereços, em seguida em exibir certificados
- Clique na guia detalhes e em seguida copiar para arquivo
- Clique em avançar e na proxima tela selecione X509 codificado na base 64 e clique em avançar novamente.
- Indique onde deseja salvar o arquivo.
Configurando o PSE e o ICM
Acesse a transação STRUST e clique em Cliente SSL (standard)
No quadro certificado clique no botão importar certificado
Na tela de importação de certificado, clique em Base64 e informe o caminho para o arquivo exportado na primeira etapa e confirme.
Será exibido os dados do certificado, verifique se está tudo ok e clique no botão incluir
Acesse o menu PSE, em seguida distribuir todos ou pressione F6
Agora o certificado foi importado para o PSE, precisamos reiniciar o ICM antes de poder utilizar o certificado. Para isso acesse a transação SMICM, clique no menu Administração, ICM e encerrar soft.
Aguarde o ICM ser reiniciado e a configuração SSL estará ok.
Marcadores:
abap,
base64,
certificado,
https,
icm,
pse,
smicm,
ssl,
strust,
trustmanager,
webservcies,
x509
Usando eventos para iniciar um job
Uma das formas de iniciar o processamento de um job é através de eventos. Você define esses eventos e toda vez que um programa dispará-los os jobs associados a eles serão executados.
Primeiro acesse a transação SM62, selecione atualizar em definições evento usuário e pressione enter. Em sguida clique em criar ou pressione F5.
Agora é só chamar a função BP_EVENT_RAISE para disparar os eventos.
Acesse a SM36 para criar um novo job.
Clique em condição de execução, em seguida após eventos e informe o nome do evento criado no primeiro passo.
Conclua as demais configurações comuns e libere seu job.
Agora toda vez que o evento for disparado o job será executado.Nesse link ensina como disparar eventos a partir de programas externos.
Primeiro acesse a transação SM62, selecione atualizar em definições evento usuário e pressione enter. Em sguida clique em criar ou pressione F5.
Agora é só chamar a função BP_EVENT_RAISE para disparar os eventos.
Acesse a SM36 para criar um novo job.
Clique em condição de execução, em seguida após eventos e informe o nome do evento criado no primeiro passo.
Conclua as demais configurações comuns e libere seu job.
Agora toda vez que o evento for disparado o job será executado.Nesse link ensina como disparar eventos a partir de programas externos.
Conectando um http_client através de um destino http externo
Nesse post eu mostrei como consumir um webservice usando http_client, no exemplo eu instanciei o http_client a partir do endpoint do webservice, mas é possível fazer isso a partir de um destino http, dessa forma você não precisa se preocupar com atualização do endpoint, ssl e proxy.
A primeira coisa a fazer é acessar a transação SM59 e definir um novo destino http externo.
As configurações SSL estão inativas porque o endpoint não utiliza https.
Agora precisamos substituir o método create pelo método create_by_destination para instanciar o http_client.
A primeira coisa a fazer é acessar a transação SM59 e definir um novo destino http externo.
As configurações SSL estão inativas porque o endpoint não utiliza https.
Agora precisamos substituir o método create pelo método create_by_destination para instanciar o http_client.
Importando um arquivo CSV
Uma das formas de fazer upload de um arquivo CSV no ABAP, é fazendo a leitura através das funções de upload, percorrer a tabela e fazer a separação dos campos utilizando o comando SPLIT AT.
Mas é possível fazer isso de uma forma mais simples utilizando a função TEXT_CONVERT_TEX_TO_SAP.Nesse post vou mostrar como usar essa FM, no exemplo abaixo abaixo é feito a leitura de uma arquivo de contatos em formato CSV separado por ";" com dois campos nome e email, em seguida os dados carregados são escritos na tela.
Primeiro fazemos a leitura do arquivo CSV:
Em seguida convertemos o conteudo lido para a nossa tabela com os campos do CSV
Exemplo completo:
Mas é possível fazer isso de uma forma mais simples utilizando a função TEXT_CONVERT_TEX_TO_SAP.Nesse post vou mostrar como usar essa FM, no exemplo abaixo abaixo é feito a leitura de uma arquivo de contatos em formato CSV separado por ";" com dois campos nome e email, em seguida os dados carregados são escritos na tela.
Primeiro fazemos a leitura do arquivo CSV:
Em seguida convertemos o conteudo lido para a nossa tabela com os campos do CSV
Exemplo completo:
Enviando email em formato HTML com PDF em anexo utilizando a classe CL_BCS
No post anterior eu ensinei como enviar mensagens html com anexo usando a FM SO_SEND_DOCUMENT_API, agora vou mostrar como fazer a mesma coisa utlizando a classe cl_bcs.
Esse é o meio preferido de enviar emails, pois é muito mais fácil anexar arquivos, o código fica bem limpo e o melhor de tudo está dentro do meu modo preferido de programar, orientado a objetos.
Para enviar as mensagem precisaremos de objetos das seguintes classes e interface :
cl_bcs: responsável pelo envio da mensagem
cl_document_bcs: que é a mensagem a ser enviada
cl_cam_address_bcs: que será o remetente
if_recipient_bcs: será o destinatário da mensagem
Agora instanciamos a request, o sender e recipient
Montamos a mensagem em formato HTML e criamos o documento a ser enviado
Agora fazemos o upload do arquivo e anexamos ao documento
Finalmente passamos o document e o destinátio para a request, confguramos a mensagem para ser enviada imediatamente e o email de status para ser enviado em caso de erros e enviamos a mensagem.
Exemplo completo:
Esse é o meio preferido de enviar emails, pois é muito mais fácil anexar arquivos, o código fica bem limpo e o melhor de tudo está dentro do meu modo preferido de programar, orientado a objetos.
Para enviar as mensagem precisaremos de objetos das seguintes classes e interface :
cl_bcs: responsável pelo envio da mensagem
cl_document_bcs: que é a mensagem a ser enviada
cl_cam_address_bcs: que será o remetente
if_recipient_bcs: será o destinatário da mensagem
Agora instanciamos a request, o sender e recipient
Montamos a mensagem em formato HTML e criamos o documento a ser enviado
Agora fazemos o upload do arquivo e anexamos ao documento
Finalmente passamos o document e o destinátio para a request, confguramos a mensagem para ser enviada imediatamente e o email de status para ser enviado em caso de erros e enviamos a mensagem.
Exemplo completo:
Enviando email HTML com PDF em anexo através da função SO_SEND_DOCUMENT_API
No post de hoje vou mostrar como enviar mensagems de email no formato HTML e com um arquivo PDF em anexo, obviamente vocês poderão adaptar para outros tipos de anexo.
Nesse exemplo eu estou utilizando a função SO_SEND_DOCUMENT_API, essa a forma mais antiga de enviar mensagens de email através de ABAP, atualmente você pode fazer isso através da classe BCS.
Antes de enviar qualquer mensagem cetifique-se junto ao BASIS se o sistema está configurado para enviar emails (ver SCON).
Exemplo completo:
Entendendo o exemplo:
Rotina de envio
Nessa rotina eu defini duas macros, new_line e
add_receiver, para adicionar o conteudo da mensagem em formato html e para adicionar destinatários respectivamente.
Na linha 50 é adicionado o email do destinatário.
Na linha 51 é adicionado o email ou lista da equipe de suporte em cópia oculta.
Da linha 53 a 55 é adicionado o conteudo da mensagem.
Da 59 a 66 o corpo da mensagem é adicionado ao packing list.
Da linha 68 a 72 é configurado o assunto e o tamanho da mensagem
Na linha 74 é chamada a rotina para anexar o PDF, passando o packing list, a tabela onde conteudo binário do PDF deve ser colocado e o nome do arquivo a ser lido.
Na linha 78 é chamada a função para envio da mensagem, atenção especial aos seguintes parâmetros:
put_in_outbox: Coloque X se você deseja visualizar a mensagem pela SOST
sender_address: Aqui você informa um email ou nome do usuário SAP, dependendo do que for configurado em sender_address_type.
sender_address_type: Informe SMTP se deseja que o remetente seja um email ou deixe o valor padrão B quando o remetente for um usuário SAP.
sender_address: Aqui você informa um email ou nome do usuário SAP, dependendo do que for configurado em sender_address_type.
sender_address_type: Informe SMTP se deseja que o remetente seja um email ou deixe o valor padrão B quando o remetente for um usuário SAP.
Se você omitir esses dois parâmetros, será utilizado o email do usuário que está executando o programa (ver SU01)
Rotina para anexar PDF
Na linha 122 o arquivo PDF é lido em formato binário através do método GUI_UPLOAD da classe cl_gui_frontend_services.
Na linha 131 o conteudo binário é ajustado para 255 caracteres. Sem esse trecho talvez você enfrente o erro MESSAGE TYPE X.
Na linha 144 o conteúdo binário é adicionado a tabela de conteúdo binário que será passada para a função.
Da linha 146 a 156 o conteúdo binário é configurado no packing list.
Assinar:
Postagens (Atom)