on 02-27-2014 9:30 PM
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
Oi Aaron
Resolveu? Se for o caso por favor encerre a thread.
Grato
Eduardo Chagas
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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!
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
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
User | Count |
---|---|
16 | |
4 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.