cancel
Showing results for 
Search instead for 
Did you mean: 

B2B - Problemas UDF - Envio e-mail

former_member187533
Participant
0 Kudos

Boa tarde!

Fiz a configuração do B2B seguindo o doc desenvolvido pelo Henrique Pinto "Using SAP PI Lookup API and Dynamic Configuration in SAP GRC NFE Outbound B2B Interface for Dynamic E-mail Determination" e estou com um problema.

Se eu não coloco nada no campo "TO" do channel MAIL, ocorre o seguinte problema no RWB:

Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: java.io.IOException: no receiver address specified.

Se eu coloco um e-mail no campo TO, ele envia o XML para o e-mail do campo "TO", porem não busca as informações da função desenvolvida no ECC(não manda e-mail para o cliente).

No sxi_monitor, não consta nenhuma informação relevante a primeira vista, só o status de ponto de interrogação no akn.

Gostaria de saber quais testes poderia fazer para identificar o problema? Pois executo a função no ECC e retorna o e-mail, o UDF do mapping está igual ao do doc aprincípio.

Fico no aguardo.

Obrigado!

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Lucas,

Vc está setando em tempo de execução o campo TO, ok??

Se sim,vc precisa marcar a seguinte opção no canal de comunicação: Use Adapter-Specific Message Attributes, na guia Advanced.

Somente assim ele permitirá a alteração via DynamicConfiguration.

Abs

Douglas

former_member187533
Participant
0 Kudos

Douglas, muito obrigado pela ajuda!

Quando digo setar o campo "TO" é ir no channel e botar meu email, ativar e testar a interface. Dessa maneira ele envia o XML para o meu e-mail, porem não para os outros e-mails dos clientes, ou seja, não está buscando as informações lá da função criada do ECC.

Henrique, sempre me ajudando hehe valeu!

Exatamente, pelo que parece a função simplismente não é chamada, não sei se falta setar alguma coisa, a relação entre o configuration e o design se resumo no interface mapping criado e depois anexo no cenário do configuration certo?

Tu diz para adicionar o código:

AbstractTrace trace;
String headerField;
java.util.Map map;

trace = container.getTrace();

// get constant map
map = container.getTransformationParameters();

headerField = (String) map.get(
        StreamTransformationConstants.INTERFACE_NAMESPACE);
trace.addInfo("INTERFACE_NAMESPACE:" + headerField);

return headerField;

Com esse código vou ter um controle no pipeline?

Obrigaaado!

Former Member
0 Kudos

Lucas,

Mais algumas verificações para ver ajudar:

1.

...

...

String email = "lucas(a)teste.com";

DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/Mail","THeaderTO");

conf.put(key, email);

...

...

(lembre-se de limpar o TO do C.Channel)

Forçar o e-mail no Java ou colocar vários trace para você monitorar no Audit Log do PI depois e saber onde realmente deu erro.

2.

Na integração do cenário NTB2B outbound na Interface Determination, você alterou SWCV para o seu?

3.

Importou a RFC para o Design?

4.

Colocou o Message Mapping criado no mapping program do Interface Mapping NTB2B_procNFe_TO_procNFe da namespace 006/005a ?

5.

Verifique no C.Channel Sender type Mail se os dois flag na aba Advanced estão marcados.

- Set Adapter-Specific Message Attibutes

- Variable Transport Binding

Espero que lhe ajude nas possibilidades para encontrar este erro.

Abraço,

Bruno Lima

former_member187533
Participant
0 Kudos

Bruno, grande ajuda!

Estou usando no UDF o seguinte código:

Channel channel = null;
RfcAccessor accessor = null;
//send the NFe to an admin in case the retrieve fails
String email = "nfe_admin(a)company.com";
AbstractTrace trace = container.getTrace();
try {
// Retreive the communication channel
channel = LookupService.getChannel(busSystem, commChannel);
// Get a RFC accessor for the channel
accessor = LookupService.getRfcAccessor(channel);
// Define the RFC Request Message
String req = "<ns0:ZNFE_READ_EMAIL xmlns:ns0='urn:sap-com:document:sap:rfc:functions'><CNPJ>" + cnpj + "</CNPJ></ns0:ZNFE_READ_EMAIL>";
// Create the xml inputstream
InputStream inputStream = new ByteArrayInputStream(req.getBytes("UTF-8"));
// Create xml payload
XmlPayload payload = LookupService.getXmlPayload(inputStream);
// Execute lookup
XmlPayload result = accessor.call(payload);
// Get the response
InputStream resp = result.getContent();
// Parse the response
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(resp);
Node node = (Node) doc.getElementsByTagName("EMAIL_ADDRS").item(0);
if (node.hasChildNodes() && !node.getFirstChild().getNodeValue().equals("")) {
email = node.getFirstChild().getNodeValue();
}
} catch (Exception e) {
trace.addWarning("RFC Lookup Failed: " + e);
} finally {
// Close the accessor in order to free resources.
if (accessor!=null) {
try {
accessor.close();
} catch (Exception e) {
trace.addWarning("Error while closing accessor: " + e);
}
}
}
//Fill the dynamic configuration for the u201Ctou201D field in the mail adapter
DynamicConfiguration conf = (DynamicConfiguration) container
.getTransformationParameters()
.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create(
"http://sap.com/xi/XI/System/Mail", "THeaderTO");
conf.put(key, email);
//Since this is a dummy mapping, return the same value from input
trace = container.getTrace();
return cnpj;

Acredito que o problema não esteja ai... o que acha?

Sobre as outras questões, todas estão corretas, somente o item 4, eu não adicionei na interface mapping ja existente, criei uma outra com a mesma classe java... isso pode interferir?

Obrigado!

former_member187533
Participant
0 Kudos

Acho que estou chegando ao problema, acho que está na Interface Mapping.

Eu havia criado uma IM ao invés de utilizar a já existente, no caso a importada junto no namespace 006. Deletei a que tinha criado e passei a utilizar a importada. Adicionei o mapping e agora não está mais ocorrendo erro no channel, apenas na sxi_monitor fica com um ponto de interrogação(tentei olhar tudo, mas não localizei maiores informações sobre o problema).

Acredito que o problema esteja relacionado a esse cara... No Source Interface e no Target Interface utiliza-se a interface NTB2B_procNFe_OB. Ambos do namespace 006 e do softwarecomponente Z... Logo a Sourge Message e a Target message fica procNFe. Feito isso é importar o message mapping criado e colocalo acima da classe java.

Certo?

Former Member
0 Kudos

Lucas,

Pela sua descrição, agora só vejo mais um detalhe:

O interface Mapping a ser alterado é o que fica dentro do SAP SLL-NFE

SAP SLL-NFE 1.0

- http://sap.com/xi/NFE/006

- Mapping Object

- Interface Mapping

NTB2B_procNFe_TO_procNFe

Pelo que entendi no que você falou, você alterou o que foi referenciado no seu SWCV correto?

Falta pouco..

Abraço,

Bruno Lima

former_member187533
Participant
0 Kudos

Fala Bruno!

Então, recriei o cenário, ajustei alguns problemas que tinha... e funcionou! hehe Na verdade é que faltavam detalhes, tipo, no mapping IM a ordem das informações tem uma ordem, primeiro o MM depois o java e estava incorreto.

Minha única dúvida que resta, é que a interface está enviando, CC sem erro, porem na sxi_monitor o akn fica com um simbolo de ponto de interrogação em um círculo verde. Por que será que isso ocorre?

Forte abraço e obrigado pela ajuda!

Former Member
0 Kudos

Fala Lucas,

Essa interrogação você está vendo do client do GRC ou PI?

Client PI -Se você clicar 2x na mensagem da bolinha verde com interrogação, acredito que ele lhe mostrará algum linha com status vermelho que podemos lhe ajudar melhor.

E veja tambem se não há filas paradas na SmQ2(client * ), SMQ1.

Abraço,

Bruno Lima

henrique_pinto
Active Contributor
0 Kudos

Lucas,

vc poderia sem problemas criar um novo interface mapping, mas daí vc teria q fazer tudo do zero, e no configuration, teria q por esse novo mapping no interface determination. Modificando o standard (dentro de "Basis" no repository) fica mais facil...

E a ordem importa sim...

Que bom que vc conseguiu resolver.

Quanto aos traces, eu tinha falado de vc adicionar mais linhas do tipo

trace.addWarning("Error while closing accessor: " + e);

pq daí vc poderia acompanhar de fato passo a passo do código.

Quanto à bolinha verde com interrogacao, isso quer dizer que o PI ainda nao recebeu de volta o acknowledgement (de sucesso ou erro) do adapter engine. Vc recebeu o XML com sucesso no email cadastrado no cliente? E no message monitoring? A mensagem está como success?

E verifique tb o que o Bruno falou, se não há filas paradas. Os acks geralmente são processados pelas filas XBTB, XBTX &

XBTY*, no caso de Exactly Once (assíncrona).

http://help.sap.com/saphelp_nw70ehp2/helpdata/en/7b/94553b4d53273de10000000a114084/frameset.htm

O ideal é sempre registrar todas as filas: tx SXMB_ADM -> Manage Queues -> marca todas e clica em register queues.

Abs,

Henrique.

former_member187533
Participant
0 Kudos

Boa tarde!

Obrigado pela ajuda!

Então, olhei as filas e todas estão ok, nada trancado ou travado.

Henrique, sim, recebo o e-mail normalmente sem problemas, usando o dinamic. CC sem erros no RWB, na sxi_monitor não aparece nenhum item vermelho, só um com uma seta preta para a direita...

Muuuito obrigado pela ajuda!

pedro_baroni3
Active Contributor
0 Kudos

Oi Lucas, boa tarde.

A respeito dos Acknowledgments, dê uma olhada na SAP Note 1559582 - Problem with negative acknowledgments for B2B messages.

Abs.

Pedro Baroni

henrique_pinto
Active Contributor
0 Kudos

Lucas,

não seria o caso de ter erro no CC, mas de a mensagem no message monitoring aparecer com um outro status que não delivered (e.g. scheduled, to be delivered, delivering, etc.).

Abs,

Henrique.

Answers (2)

Answers (2)

henrique_pinto
Active Contributor
0 Kudos

Olá Lucas,

me parece que a funcao RFC simplesmente não está sendo chamada a partir do mapping...

Uma boa prática quando utilizando UDFs mais complexas como essa é incluir diversas linhas de trace, de maneira q vc pode ir acompanhando se cada passo foi executado com sucesso.

Para adicionar traces, veja o exemplo no codigo no fim desta página:

http://help.sap.com/saphelp_nw70ehp2/helpdata/en/78/b4ea10263c404599ec6edabf59aa6c/frameset.htm

Vc acompanha os traces do mapping no step execute message mapping no pipeline do PI.

Abs,

Henrique.

Former Member
0 Kudos

Lucas,

No Mapping o nome do C.Channel que você passa como constante é o mesmo nome que você criou no Integration?

As configuraçoes deste C.Channel type RFC está apontando para o NW ou para ECC?

Talvez você consiga ver algo no monitoramento do C.Channel no RWB, se estiver com erro de login da rfc no c.channel por exemplo ele irá acusar.

Abraço,

Bruno Lima

former_member187533
Participant
0 Kudos

Bruno, muito obrigado pela ajuda!

Sim, o CC tem o mesmo nome, criei um BS para o ECC e dentro dele esse CC, essas são as constantes do meu mapping, o BS e este CC.

O CC do tipo RFC está apontando para o ECC, mesmo cliente da comunicação das notas.