Posted by: sapr3abap | November 18, 2009

Adicionar objetos em uma request liberada

O que vou falar hoje é sobre como adicionar objetos em uma request SAP ja liberada e não transportada.

As veses agente libera uma request para o transporte e descobre que ou a descrição esta errada, ou faltou um objeto.

O correto seria criar uma nova request e adicionar os obejtos da liberada, corrigir a falha e então liberar para transporte. Mas as veses ja enviamos o numero via email para o time de basis e causariamos um stress para trocar o numero, certo ?

Então, ai vai uma gambiarra das boas:

 

Pegue o numero da request e da task ao qual deseja adicionar o objeto ou alterar a descrição.

Para adicionar objeto: Va na SE16 e coloque no nome da tabela E070. No campo TRKORR coloque o numero da task e o numero da request. Selecione os registros para edição via /h,  altere a coluna TRSTATUS para D ( Modificavel )  e salve. Pronto a request junto da Task estão modificaveis novamente.

Se voce quiser alterar somente a descrição, a tabela é a E07t.

 

 

 

 

 

Posted by: sapr3abap | November 17, 2009

Serviço Java

Recentemente desenvolvi um aplicativo em java que efetua a criptografia de dados do SAP para envio há sistemas legados, acessando uma DLL que fica instalada em um servidor windows na rede.

O probleminha que estava enfrentando nos testes é que toda vez que ia iniciar, tinha que acessar o prompt de comando do windows e executar minha aplicação deixando a Janela de emulação do DOS aberta ao qual as vezes fechava sem querer, me gerando um certo stress.

Pesquisando na internet descobri um aplicativo muito bom chamado JavaService que possibilita a criação de um serviço no windows. Com isso toda vez que iniciar o sistema operacional, automaticamente o serviço será iniciado e nenhuma janela ficará na minha barra de tarefas.

A instalação é muito simples bastando executar 1 arquivo bat ( voce precisa editar esse aquivo com as configurações do seu projeto Java )

Segue link para download:

JavaService – Download

Recomendo. :-)

 

 

Titulo

Pessoal, nesse post vou tratar de um assunto que, apesar de divulgado em vários sites pela web, não é tão simples quanto parece e também não tão claro na minha opnião.

É o uso de Java para conexão com os sistemas SAP.

As maiores dificuldades que encontrei para implementar é que na web os programas exemplos não estão escritos de forma completa, gerando erros de sintax e também não esta claro as reais premissas para implementar tal código.

Então este post é para você, que como eu, é iniciante no mundo Java, e suas respectivas ferramentas.

Vamos aos tópicos do post:

1)      Instalação do ambiente de desenvolvimento

2)       Trabalhando com o Eclipse

3)      Configurações e programação no SAP

4)       Testes Finais

Read More…

Posted by: sapr3abap | August 3, 2009

CRM – ICwebClient Introdução

“Sap web interaction center”  é a nova aposta da SAP  na versão do CRM, que a partir da CRM 2007, a iteração do usuário foi totalmente atualizada para a WEB.

O desenvolvimento no WEB-IC é muito similar ao web dynpro,  com as diferenças que você não pode usar todos os elementos que estão disponíveis no web dynpro e possue um ambiente especifico de desenvolvimento.

Para acessar esse ambiente, no GUI voce deve usar a transação  “bsp_wd_cmpwb” (bsp web dynpro component work bench) para visualizar, modificar e criar componentes web-ic.

Na maioria das veses, voce precisa apenas trabalhar com melhorias ou “Enhancement” em inglês, em um componente standard. Todas as telas são configuráveis sendo possíveis através de configurações ou pequenas codificações.

Encontrando detalhes técnicos de uma página WEBIC:

Dentro da tela WEB-IC você deve selecionar o campo que deseja ver as informações e precionar F2.  Com isso o sistema irá retornar uma janela com as informações técnicas do componente, similar ao F1 no GUI. Veja tela abaixo.

ic1

Criando um ” Enhancement” de um componente standard:

Voce pode melhorar qualquer componente do IC-WEB. Dentro do workbench, voce deve criar um “set de melhorias” ou “Enhancement Set” Z e quando voce for modificar o componente basta indicar em qual  Enhancement Set voce ira organizar sua melhoria. Quando voce associa o componente há um Enhancement Set, voce passa a ter controle sobre o componente e pode ir atualizando conforme sua necessiada.

Todo componente possue uma classe controladora. Quando voce cria a ampliação, o sistema cria uma nova classe Z referenciada a classe standard como “hierarquia filho”.  Então todos os metodos vem como herança e voce pode ir modificando somente os métodos que lhe interessar. Os métodos que sofreram alguma modificação fica em destaque. Assim, fica facil identificar qual método esta modificado e qual continua com a rotina standard. E mesmo que voce deseje chamar a rotina standard do método voce pode chamar-la atraves do uso de hierarquia “super” e em seguida acrescentar a sua rotina.

Exemplo:

method SET_MODELS.

super->set_models( view ).

* A partir deste ponto acrestentado pelo projeto

move zab to zc.
clear zc.

endmethod.

Posted by: sapr3abap | November 18, 2008

Apresentação MBA USP

Aos alunos do professor Carlos Hulot, segue os slides da mini-aula ministrada no dia 17/11/2008 no curso de MBA da escola Politécnica da USP.

Obrigado ao professor pelo espaço e aos alunos pela atenção.

Para os demais o PPT consiste basicamente em apresentar uma iniciação no mercado SAP.

apresentacao-sap

Rodolfo Mião

Posted by: sapr3abap | July 18, 2008

Erro HTTP_NO_MEMORY no processamento ABAP

O Erro acima eu peguei no seguinte cenário:

23000 registros de clientes para serem enviados ao sistema de webservice via SOAP.

Quando chegava por volta do registro 15000 dentro do loop, o processo em background cancelava e um unico erro era gerado com a mensagem do título do post.

A solução que encontrei esta na nota SAP – erro-http_no_memory

Na nota o que a SAP quer dizer com relação a instanciação do proxy é relacionado ao codigo abaixo:

  CALL METHOD cl_http_client=>create
    EXPORTING
      host          = v_value
      service       = ’80′
      scheme        = ’1′
      proxy_host    = wf_proxy  
      proxy_service = wf_port   
    IMPORTING
      client        = http_client.

Como eu estava colocando esse codigo dentro da função que efetuava o consumo do WS, entao era instanciado 23000 vezes. Mesmo eu colocando o metodo close, não era suficiente para o SAP liberar memória. 

 Então, eu retirei da função esse codigo e inserí no inicio do programa chamador. E passei a referencia no import da função. Com isso, eu instanciava apenar uma vez a classe e efetuava varios consumos de WS para a mesma instância.

No post anterior, comentei sobre trabalhando codepage ISO-8859-1 e UTF-8 para troca de arquivos XML.

Agora encontrei um outro desafio que foi fazer a troca de arquivos XML entre sistemas UTF-8 e UTF-16 e estudando mais afundo, voce verá que existe dois tipos, o UTF-16LE e o UTF-16BE. Não vou entrar em detalhes sobre essas variáveis, pois basta procurar no google que tem varios sites falando sobre eles.

O importante que aprendi aqui é que para conseguir mandar um arquivo XML que esta em UTF-16 para um sistema de webservice que entende UTF-8 é necessário fazer uma conversão para string binária e executar alguns métodos diferentes.

Depois de montar a string XML, que no meu caso esta armazenada na variavel wf_string_envio que é do tipo string normal,  voce vai precisar chamar a função abaixo:


CALL FUNCTION ‘TREX_TEXT_TO_UTF8′
EXPORTING
text = wf_string_envio
IMPORTING
buffer = wf_xstring_envio
EXCEPTIONS
conversion_error = 1
OTHERS2.

A Variavel wf_xstring_envio é do tipo xstring que irá receber o arquivo XML convertido para UTF8.

Agora voce deverá se basear nessa nova variavel para executar os metodos http:

CLEAR :rlength , txlen .
*  rlength = STRLEN( wf_string_envio ) .
rlength = XSTRLEN( wf_xstring_envio ).
MOVE: rlength TO txlen .

CALL METHOD http_client->request->set_header_field
EXPORTING
name  = ‘Content-Length’
value = txlen.

CALL METHOD http_client->request->set_data
EXPORTING
data = wf_xstring_envio
offset = 0
length = rlength.

O restante do processo é igual ao post anterior que comentei sobre consumindo um webservice.

Trabalhar com codepage é um parto. Ainda mais quando agente descobre que o conteúdo do XML criado pelo .NET não aceita outro tipo de enconding a não ser UTF-8.

Depois de muito estudo, descobri que não é necessário modificar o sistema de enconding da aplicação externa para o utilizado pelo SAP – ISO8859-1, para que o SAP e o sistema legado consigam trocar informações que contenham caracteres especiais.

O que é necessário fazer é :

No XML existem 2 momentos que você informa o encoding. O primeiro momento é no header do SOAP, ou seja:

POST /ikcwebservice/Produto.asmx HTTP/1.1

Host: whldev-b2c

Content-Type: text/xml; charset=ISO-8859-1

Content-Length: length

SOAPAction: “http://tempuri.org/ExcluirCodigoInterno”

Perceba que no trecho acima, eu informei o codepage do SAP.

Agora no trecho abaixo, deve permanecer o encoding do .NET

<?xml version="1.0" encoding="utf-8"?>

Fazendo dessa forma minha aplicação no SAP conseguiu consumir e enviar dados para o sistema web via SOAP numa boa e consegue ler os caracteres especiais.

Codepage # um padr#ao complicado, n# n#o  ! Ops, to usando o encoding errado…

:-)

Posted by: sapr3abap | June 15, 2008

Boas práticas de documentação – Estudo de caso

Neste post estou publicando um trabalho em formato de artigo sobre Boas práticas de documentação para prover a gestão do conhecimento e apoiar a coleta de requisitos de software.

Resumo
Este trabalho descreve , de forma sucinta, o impacto das boas práticas de documentação para prover a gestão do conhecimento e apoiar a coleta de requisitos de software. Para a sua confecção foram realizadas pesquisas, a fim de definir o que são requisitos de software; além de definir, identificar boas práticas e citar o contexto econômico-social que promoveu a importância da gestão do conhecimento nas empresas. Ele contém um estudo de caso, onde a execução ineficiente da gestão do conhecimento, ocasionou na dificuldade na coleta de requisitos no projeto de atualização de sistema. Sua contribuição está na relação das boas práticas de documentação, uma das técnicas da gestão do conhecimento, como fonte de informação rápida e eficiente na coleta de requisitos de software.

artigo_t43212_080204300018

Boa Leitura.

Flw.

Posted by: sapr3abap | June 15, 2008

ABAP Performance – Experimento

Ola Leitores do Blog SAPR3ABAP.

Para o Post de Hoje, vou estar tratanto sobre o assunto performance em ABAP.

Instalei a versão demo do SAP R/3 e nela criei 6 programas que chegam no mesmo resultado, que é a impressão de uma lista contendo dois campos de duas tabelas distintas, só que percorrendo caminhos diferentes, ou melhor, lógicas diferentes.

Utilizei uma ferramenta de captura de tela e de audio para explicar o experimento. Desculpem por usar um software de captura trial…

No link abaixo encotra-se o arquivos deste post, que são os programas, uma apresentação em PPS, um arquivo HTML para apresentação do FLASH do experimento. É eu sei, é 10MB, mas não é tão grande assim, vai ?

performance ( renomear para zip ) ( Tive que gravar como extensão PDF pois o wordpress não aceita extensões zip, então salve o arquivo em um diretório na sua maquina e renomeie para .zip e depois descompacte tudo em um unico diretório para facilitar a navegação.

Espero que aproveitem.

[update]

A idéia central do experimento é trabalhar diversas lógicas de busca de registro com tabelas internas do tipo standards.

Se o leitor quiser melhorar a performance dos programas mudando a declaração das tabelas internas, ele poderia declarar a tabela interna de itens da seguinte forma:

types: begin of fs_ztinv_item,
groupid like ztinv_item-groupid,
itemid like ztinv_item-itemid,
end of fs_ztinv_item.

data itab_ztinv_item type HASHED TABLE OF fs_ztinv_item WITH UNIQUE key groupid itemid WITH HEADER LINE.

Ja que a chave é unica e no nosso experimento os dados não se alteravam durante o processamento.

Caso fosse feita alguma alteração de dados ainda assim poderia ser feita a declaração da seguinte forma.

types: begin of fs_ztinv_item,
groupid like ztinv_item-groupid,
itemid like ztinv_item-itemid,
end of fs_ztinv_item.

data itab_ztinv_item type SORTED TABLE OF fs_ztinv_item WITH UNIQUE key groupid itemid WITH HEADER LINE.

Dessa forma o primeiro programa que levou 8.518 segundos para ser executado, passou a gastar 7 segundos sem a necessidade do comando sort ou de field-symbols.

[update]

Flw…

Older Posts »

Categories