on 11-29-2012 1:20 PM
Fala pessoALL,
Criei esse wiki depois que tive essa situação no cliente que estou e resolvi compartilhar com vocês.
Envio de e-mail com XML em anexo e corpo de texto.
Com essa solução você não precisa fazer, o que varias pessoas fizeram de utilizar um javamapping para converter o XML aberto para String novamente e utilizar o layout antigo que era CNPJRC - procNFeString, basta adicionar ele no interface mapping. Simples assim
Fiz uma adaptação de algumas wikis do Henrique Pinto e um código disponibilizado pelo Carlos Rodrigo.
Nesse caso o corpo de texto é dinâmico sem module adapter customizado.
http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=315524420
Em breve o link deve estar adicionado as wikis de NF-e.
Abracos.
Ricardo Viana.
Show de bola..vou tentar no próximo cliente
Obrigada,
Érica
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Oi Érica,
So um ajuste final, acabei de testar o cancelamento por evento e esse código java não atende enviar XML de nota cancelada por evento e sim apenas processo normal.
Fiz uma singela adaptação e funcionou o envio de CCe - Cancelamento por Evento e NF-e (XML + Email).
Se caso você ou outros for utilizar essa condificação, favor inserir o trecho abaixo:
if ( inptxml.indexOf("infEvento") > 0){
cancelEvento = inptxml.substring(inptxml.indexOf("<descEvento>")+12,inptxml.indexOf("</descEvento>"));
if("Cancelamento".equals(cancelEvento)){
this.setPrefixoDocumento(this.getPrefixoDocumento().replaceAll("NFE", "CancNFe"));
this.setPrefixoSubject(this.getPrefixoSubject().replaceAll("NFE AUTORIZADA", "NFE CANCELADA COMO EVENTO"));
}
else{
this.setPrefixoDocumento(this.getPrefixoDocumento().replaceAll("NFE", "CCE"));
this.setPrefixoSubject(this.getPrefixoSubject().replaceAll("NFE AUTORIZADA", "CARTA DE CORREÇÃO ELETRÔNICA"));
}
}
Esse código nao é o mais performatico, porém, atende tranquilo.
Atenciosamente,
Viana
So adicionando mais informação.
Você pode fazer a comparação entre o Cancelamento por Evento e Carta de Correção eletrônica pelo texto que está dentro da tag descEvento, como está no código acima, ou no início da chave de acesso.
Nesse caso o código abaixo é pegando via UDF, pois desenvolvi duas soluções para B2B dinamico utilizando java mapping e UDF + MessageMapping, basta apenas fazer uma adaptação caso você esteja utilizando java mapping:
UDF :
try {
InputStream in = new ByteArrayInputStream(stringXML.getBytes("UTF-8"));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(in);
//Pegando a tag InfEvento o valor do attributo Id - Chave de acesso
Node node = (Node) doc.getElementsByTagName("infEvento").item(0);
Node id = node.getAttributes().getNamedItem("Id");
nfeId = id.toString().substring(6,58);
//trace.addWarning("Chave de acesso completa: "+ nfeId);
acao = nfeId.substring(0,6);
//trace.addWarning("Ação " + acao);
numeroNFe = nfeId.substring(31,40);
//trace.addWarning("numeroNFe "+ numeroNFe);
serieNFe = nfeId.substring(26,28);
//trace.addWarning("Série " + serieNFe);
dataNFe = nfeId.substring(8,12);
//trace.addWarning("DataNFe " + dataNFe);
/*OUTRA SOLUÇÃO PARA BUSCAR O TEXTO INTERNO DA TAG DESCEVENTO
Pegando a tag descEvento, convertendo para string e depois pegando o valor interno da string.
Node node2 = (Node) doc.getElementsByTagName("descEvento").item(0);
cancel = node2.toString().substring(12,29);
trace.addWarning(cancel);
*/
} catch (Exception e) {
trace.addWarning("Error parsing XML: using default values...");
}
return "";
No javamapping, basta você buscar :
String cancelEvento = inptxml.substring(inptxml.indexOf(
"<descEvento>")+12,inptxml.indexOf("</descEvento>"));
Ou
String idNFe = inptxml.substring(inptxml.indexOf(
"<chNFe>")+7,inptxml.indexOf("</chNFe>"));String acao = idNFe.substring(0,6);
if ("110110".equals(acao))
"Carta de correcao eletronica"
else
"Cancelamento por evento"
É isso galera, abraços,
Ricardo Viana.
User | Count |
---|---|
6 | |
5 | |
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.