cancel
Showing results for 
Search instead for 
Did you mean: 

NTB2B XML Namespace Conteúdo

Former Member
0 Kudos

Bom dia pessoal,


Quando o  GRC gera XML para parceiros B2B o cabeçalho começa assim:


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

<nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">

<NFe xmlns="http://www.portalfiscal.inf.br/nfe"> ...

Observe como ambos os elementos nfeProc e NFe  têm namespace idênticos.

Quando esta mensagem é enviada para PI , por algum motivo este namespace “redundante” de NFe é descartado e chega ao PI dessa forma::

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

<nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">

<NFe> ...


Mesmo que este XML seja validado corretamente pelo  SEFAZ um dos nossos clientes está exigindo a namespace “redundante” no elemento NFe (xmlns =" http://www.portalfiscal.inf.br/nfe). Tentei adicionar com um mapeamento XSLT no PI , mas como o nome é redundante o sistema resiste em adicionar. Exemplo de mapeamento XSLT. :


<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes"/>

<xsl:strip-space elements="*"/>

<xsl:template match="@*|node()">

<xsl:copy>

<xsl:apply-templates select="@*|node()"/>

</xsl : copy >

</xsl : template>

<xsl:template match="*[local-name() = 'NFe']" priority="1">

<xsl:element name="{local-name()}" namespace="http://www.portalfiscal.inf.br/nfe">

<xsl:apply-templates select="@*|node()"/>

</xsl: element>

</xsl : template>

</xsl: stylesheet>


Este exemplo só funciona se eu mudar o namespace para ser ligeiramente diferente do namespace do elemento raiz nfeProc

Alguém tem o mesmo problema? Como você trabalha em torno dele?

Muito obrigado,


Aaron

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Oi Aaron

Resolveu? Se for o caso por favor encerre a thread.

Grato

Eduardo Chagas

Former Member
0 Kudos

Oi Eduardo,

Eu não tenho realmente resolveu esse problema, mas trabalhou em torno dele temporariamente. Quando acrescentamos um passo mapeamento extra para o mapeamento Operation substitui essa condição. Mesmo que a NFE Espaço nominal Cleaner é o último mapa da cadeia, este namespace é removido. Se a operação do mapa tem apenas o limpador de Namespace (sem degraus mapeamento extras) o namespace redundante é mantida.

Mantemos um passo de mapeamento para trazer os endereços corretos de GRC usando RFC Lookup. 😞

Nós não temos sido felizes com a dificuldade em manter mapeamentos de Java para que evitá-los.

Parece SP16 pode resolver este problema através do envio de alguns campos extras que podem ser usados ​​para o endereço de e-mail?

Vou fechar a fio agora e obrigado a todos por suas idéias.

-Aaron

Former Member
0 Kudos

Oi Aaron

Entendo. Na verdade como a tag que identifica o processo B2B já contém o namespace seria uma informação redundante manter ela na tag nfe consumindo mais bytes no arquivo!

Pela lógica o parceiro deveria identificar o processo pelo namespace da tag nfeProc e somente olhar a tag nfe sem olhar os atributos.

Enfim... é assim mesmo que ocorre no standard.

Abraço

Eduardo Chagas

Answers (1)

Answers (1)

Former Member
0 Kudos

Eu encontrei esta discussão e SAP relacionado nota 1730363. Estamos no GRC Conteúdo 14 e este ProxyNamespaceCleanerNFE Java Mapping já está em uso para o Mapeamento de Operação. Por alguma razão, parece não fazer seu trabalho. Alguma ideia?

Former Member
0 Kudos

Agora eu vejo, qualquer outro programa de mapeamento colocado na operação de mapeamento NTB2B_procNFe_TO_procNFeNS elimina a declaração de namespace extra que o arquivo ProxyNamespaceCleanerNFE tenta adicionar. Eu tentei fazer o ProxyNamespaceCleanerNFE último na cadeia, mas isso não ajuda. Esse é um problema muito frustrante!

Former Member
0 Kudos

Aaron

após o mapping sap/com/xi/nfe/map/ProxyNamespaceCleaner vc pode adicionar um java mapping ou uma UDF (se for um mapping grafico) e colocar o seguinte código

public String transformXml(String nfe, Container container) throws StreamTransformationException{

nfeProc = nfe.replaceAll("<NFe>" , "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">") ;

return nfeProc;

Fiz isso no meu e funcionou

abs

Felipe MArtin

Former Member
0 Kudos

Obrigado Felipe. Hmmm, pensei UDF só afetaria informações entre as tags <NFe>, e não a estrutura / próprio namespace. Eu acho que a UDF teria de agir sobre todo o fluxo de mensagens de uma só vez. Tentou-lo desta maneira ou apenas como Java Mapping?

Former Member
0 Kudos

Aaron,

Você pode tentar alterar as informações de namespace utilizando graphical mapping com o blog abaixo:

Abraços,

Former Member
0 Kudos

Aaron

No meu caso, foi usando como external message:  govprocnfe => external messge: mail.

Passo a estrutura inteira do xml para o content do (external messge: mail)

sendo assim, consigo criar uma UDF entre a estrutura e tratar o xml inteiro " <NFe>".

Você pode tambem criar um java mapping usando como exemplo um mapping da SAP!

Procure por:

SAP SLL-NFE 10.0 -> http://sap.com/xi/nfe/006 -> inported archive ->BATCH_NFeTagEnhancement

creio que voce pode usar como exemplo para criar seu javamapping.

veja que dentro dele, existe uma codificação que voce pode usar como exemplo.

public void execute(InputStream in, OutputStream out) throws StreamTransformationException {

  try {

   // transform the incoming data to a String object
   int c;
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   while ((c = in.read()) != -1)
    baos.write(c);
   String inStr = baos.toString("UTF-8");
   inStr = inStr.replaceAll("<NFe>", "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
   out.write(inStr.getBytes("UTF-8"));

  } catch (IOException ioe) {
   throw new StreamTransformationException("Exception in Java mapping occured while reading the InputStream. The exception is: " + ioe.getMessage());

at

Felipe Martin


Former Member
0 Kudos

Na realidade, estava assim antes aqui conforme o lucas falou, ai troquei para uma UDF pois tive que tratar mais campos.