Páginas

sexta-feira, 1 de outubro de 2010

Ativando Log de Mensagens

Muitas vezes ativando o log de mensagens da Monitor, pode ajudar a resolver diversos problemas, por exemplo de Mapping.

Ativado o log, dentro da transação SXI_MONITOR em uma mensagem, você consegue visualizar a mensagem de origem, a transformação pela Message Mapping, e depois a nova mensagem de destino.

No caso de cenários síncronos você pode visualizar dentro de uma mensagem, a mensagem de ida e a mensagem de volta (request e response).

Obs: desative o log depois, isso gera muitas mensagens e a tabela acaba crescendo muito.

Para ativar os logs, você deve entrar na transação:
- SXMB_ADMIN
- Configuração
- "Configurar Integration Engine".













Clicar no Botão "Configuração específica".

Inserir as duas linhas marcadas abaixo com o valor igual a 1, valor 2 você desativa.


Cenário com mensagem Síncrona:

Entrando em uma mensagem Síncrona disparada por um BPM.

Dentro da mensagem CENTRAL ("envio"), você pode verificar dois MainDocument:

- o primeiro é a mensagem com a estrutura da Message Interface Abstract Síncrona do BPM;

- o segunda MainDocument já é depois que passou pela Interface Mapping, formando a mensagem de entrada da Message Interface Sincrona Inbound;













Na mensagem Response ("Retorno"), você pode observar que vai existir também dois MainDocument:

- o primeiro MainDocument é a mensagem de retorno da Message Interface Síncrona Inbound;

- o segundo MainDocument é a mensagem depois que passou pela Interface Mapping e gerou a mensagem de entrada da Message Interface Abstract Síncrona.

quarta-feira, 1 de setembro de 2010

Mapping JDBC campo data no Oracle

Pode existes diversos formatos de campos do tipo date em um banco, para resolver esse problema podemos utilizar a função TO_DATE() e definir o formato da data.

Exemplo:
UPDATE minha_tabela SET DATE = TO_DATE ('1987-05-08 ',' AAAA-MM-DD')

Para resolver esse caso, você deve criar um atributo ao campo data com o nome "hasQuot".

Quando for criar seu message mapping, você deve passar o valor "No" para o campo "hasQuot".





Para o campo date, será necessário criar o seguinte mapping:
Constant: TO_DATE('
Constant: ','DDMMYYYY')
Resultado: TO_DATE('01092010','DDMMYYYY')


Obs: se você testar o mapping, vai ter esse resultado:
TO_DATE('01092010','DDMMYYYY')





segunda-feira, 2 de agosto de 2010

Mensagem "Select Original Language"

Quando criamos um objeto, muitas vezes recebemos a mensagem abaixo:


Simples de resolver, entre no menu "Tools-->Personal Settings..."

Selecione um idioma de criação para o objeto e depois "Apply".

Lock de Objetos

Muitas vezes estamos desenvolvendo alguma interface no PI e nossa conexão cai, depois quando entramos novamente no objeto não conseguimos modificar.


Segue os passos para desbloquear o objeto.

1 - Entrar no link http://servidor:porta/rep e clicar em "Administration".

2 - Clicar em "Repository" ou "Directory" e depois em "Lock overview", isso depende de onde o seu objeto esta bloqueado.

3 - Selecionar o seu objeto e clique em "Remove selected locks", preste atenção para não desbloquear outros objetos, pois sempre que estamos criando ou modificando objetos eles vão estar em lock.

4 - Pronto, objeto desbloqueado.

segunda-feira, 19 de julho de 2010

Criando Filas

Você pode criar as filas na transação "SXMB_ADMIN" entrando no menu "Administration --> Manage Queues".

Marcar tudo e clicar em "Register Queues".

Clicar em "Activate Queues"

Pronto, agora você pode entrar na transação "SMQR" e verificar as filas.

Dica: criar as filas no client 000 também.

terça-feira, 13 de julho de 2010

Abap Proxy - criar um Technical System do R3 no SLD (Dica para Basis)

O Technical System corresponde ao software para o host físico no qual ele está instalado. As definições exatas para cada sistema dependerá do tipo de sistema.

1 - Criar as seguintes Destination na SM59 do R3.
a) Integration_Server_001 -- Tipo H -- Apontando para o Integration Server.




























b) Criar a Destination "LCRSAPRFC" -- Tipo "T".

c) Criar a Destination "SAPSLDAPI" -- Tipo T.

2 - Entrar na transação "SLDAPICUST", marcar Primár, inserir o host e a porta do Integration Server, colocar o usuário SLDDSUSER e sua senha.

3 - Entrar na transação "SXMB_ADMIN".
a) Configuração --> Configurar Integration Engine

b) Entrar no menu "Processar" --> "Modificar dados de configuração globais", isso vai deixar você selecionar "Sistema de aplicação"e depois digitar "dest://(destination tipo H criado na sm59) e salvar.

4 - Entrar na transação RZ70.
  1. Marcar "Destino RFC standard;
  2. Colocar o host e o service do Integration Server;
  3. Marcar todas os programas de coleta de dados;
  4. Verificar se a maquina do R3 esta conseguindo resolver o host name da maquina do PI;
  5. Clicar em executar;

Deve ser exibido essa mensagem de sucesso.

5 - Apos ter feito isso você pode executar a transação "SLDCHECK", ela vai exibir uma tela parecida com a figura abaixo e deve carregar seu navegado.
A transação "SLDCHECK" vai verificar diversas comunicações.

6 - No SLD você vai conseguir verificar a criação do seu Technical System Abap.

quinta-feira, 8 de julho de 2010

JavaMapping com NodeList

Existe algumas maneiras de fazer um mapa entre mensagens, uma delas é você utilizar um javaMapping.

1 - Criar dois DT, um para entrada e outra para saída.




2 - Criar dois Message Type.

3 - Criar duas Message Interface.


4 - Criar um Imported Archive e importar o .class compactado no formato ZIP.

Código do JavaMapping.

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;


public class JavaMappingBlog1 implements StreamTransformation{

private static final String EXCEPTION = "An exception occured: ";
private static final String CAB       = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
private static final String OrigBeg   = "<MT_Origem";
private static final String OrigEnd   = "</MT_Origem>";
private static final String MenBeg    = "<ns0:MT_Destino xmlns:ns0=\"http://javamapping.com\">";
private static final String MenEnd    = "</ns0:MT_Destino>";
private static final String RowBeg    = "<row>";
private static final String RowEnd    = "</row>";

// Método para buscar um valor em uma TAG dentro de um NodeList
public static String recuperaNode(Node node, String campo) {
String result="";
Element elmnt = (Element) node;
NodeList elmntLst = elmnt.getElementsByTagName(campo);
Element elmnt2 = (Element) elmntLst.item(0);
NodeList key = elmnt2.getChildNodes();
if (key.getLength()==0) result="";
else result = ((Node) key.item(0)).getNodeValue();
return result;
}
public void setParameter(Map arg0) {}
public void execute(InputStream in, OutputStream out) throws StreamTransformationException {
final String UTF8 = "UTF-8";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String inStr="", r1="";
String nome="", sobrenome="", idade="";
int c = -1, s = 0, e = 0;
try {
while ((c = in.read()) != -1)
baos.write(c);
inStr = baos.toString(UTF8);

// Remover alguns caracteres e substituir alguns.
// Coloquei uma imagem porque o HTML estava convertendo tudo

// procurando na string o inicio o e fim da mensagem
s = inStr.indexOf(OrigBeg);
e = inStr.indexOf(OrigEnd);

// pegando o inicio e o fim e convertendo para um InputStream
r1 = inStr.substring(s, e+OrigEnd.length());
InputStream row1 = new ByteArrayInputStream(r1.getBytes("UTF-8"));

// Gerar o NodeList
DocumentBuilderFactory dbf1 = DocumentBuilderFactory.newInstance();
DocumentBuilder db1 = dbf1.newDocumentBuilder();
Document doc1 = db1.parse(row1);
  doc1.getDocumentElement().normalize();
// Especificar o elemento para realizar o loop
  NodeList nodeLst1 = doc1.getElementsByTagName("row");
inStr = "";
if (nodeLst1!=null){
for (int cont = 0; cont < nodeLst1.getLength(); cont++) {
Node fstNode = nodeLst1.item(cont);

      if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

// busca o valor da TAG
nome = recuperaNode(fstNode, "nome");
sobrenome = recuperaNode(fstNode, "sobrenome");
idade = recuperaNode(fstNode, "idade");

// Monta o a TAG row de saída
inStr = inStr + RowBeg + "<nomeComleto>" + nome + " " + sobrenome +   "</nomeComleto>" + "<idade>" + idade  + "</idade>" + RowEnd;

      }
  }
}

// Monta a mensagem de saída
inStr = CAB + MenBeg + inStr + MenEnd;
 
out.write(inStr.getBytes(UTF8));

}
catch (Exception exception){
throw new StreamTransformationException(EXCEPTION + exception.getMessage());
}
}
public static void main(String[] args) {
final String INPUT  = "/Users/kaleokuntgen/Compartilhada/blog1.xml";
final String OUTPUT = "/Users/kaleokuntgen/Compartilhada/blog1_resp.xml";
try {
JavaMappingBlog1 JavaMappingBlog1 = new JavaMappingBlog1();

InputStream input = new FileInputStream(INPUT);
OutputStream output = new FileOutputStream(OUTPUT);
JavaMappingBlog1.execute(input, output);
input.close();
output.flush();
output.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

5 - Criar a Interface Mapping com as mensagens e o imported archive.

6 - Entre na aba "Test" para verificar o mapeamento.