on 06-02-2014 2:33 PM
Bom dia Pessoal,
estamos configurando o B2B de saída para o PI 7.31.
Fizemos os seguintes passos:
-> Implementamos a BADI -> /XNFE/EMAIL_B2B_OUT método "GET_EMAIL";
->Fizemos o Java Mapping com a nossa classe herdando da "AbstractTransformation"(Nova API).
->Modificamos o Operation Mapping para usar o xsd Mail(ver imagem abaixo) e marcamos a opção "Read Attchaments"
No Java Mapping conseguimos pegar os e-mail com sucesso do arquivo texto(Communication Parameter), porém não estamos conseguimos elimina-lo e o resultado é que ele acaba indo como anexo no e-mail recebido pelo cliente junto como o xml da nota.
Abaixo temos alguns trechos do Java Mapping:
public void transform(TransformationInput input, TransformationOutput output)
throws StreamTransformationException {
.....
.....
OutputAttachments outAtt = output.getOutputAttachments();
output.getOutputAttachments().removeAttachment(attachId);
outAtt.removeAttachment(attachId);
Ao testar o cenário NTB2B, recebemos com sucesso o xml da nota, porém o arquivo texto que contém os e-mail(Communication Parameter) não é eliminado e vem junto com o e-mail....
Alguma ideia do que pode ser?.....
Grato
Ortiz
Bom dia Ortiz,
verifique se a nota 1641548 é relevante para você. Ela corrige um bug do método removeAttachments da interface OutputAttachments.
[]'s
JN
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Ortiz, bom dia.
Está linha não é necessária: output.getOutputAttachments().removeAttachment(attachId);
Como você está populando os campos <Content_Type> e <Content> do Mail ?
Abs,
André Canalles
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Boa tarde André,
retirei a linha: output.getOutputAttachments().removeAttachment(attachId);
porém o erro continua.
Segue o trecho do código de como populo as tags CONTENT_TYPE e CONTENT
//Cria elemento Content Type
Element contentType = docout.createElement("Content_Type");
root.appendChild(contentType);
Text contentTypeText = docout.createTextNode("application/xml"); //Cria valor campo
contentType.appendChild(contentTypeText);
//Cria elemento Content Type
Element content = docout.createElement("Content");
root.appendChild(content);
Text contentText = docout.createTextNode(inptxml.replaceAll("<nm:", "<").replaceAll("</nm:", "</")); //Cria valor campo
content.appendChild(contentText);
Segue também em anexo o código inteiro do JavaMapping.
Att,,
Ortiz
Ortiz, bom dia.
O problema está na montagem do seu <Content>. Tente utilizar o código Java abaixo:
import sun.misc.BASE64Encoder;
// Field Content Type
Element contentType = docout.createElement("Content_Type");
root.appendChild(contentType);
Text contentTypeText = docout.createTextNode("multipart/mixed; boundary=\"--AaZz\"");
contentType.appendChild(contentTypeText);
// Field Content
Element content = docout.createElement("Content");
root.appendChild(content);
Text contentText = docout.createTextNode(getContent(StreamTOString(in)));
content.appendChild(contentText);
public String StreamTOString(InputStream Stream)
throws UnsupportedEncodingException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String payload = new String("");
int c;
try {
while ((c = Stream.read()) != -1)
baos.write(c);
payload = baos.toString("UTF-8");
} catch (Exception e) {
getTrace().addWarning(e.getMessage());
}
return payload;
}
public String getContent(String xml) throws UnsupportedEncodingException {
String CRLF = System.getProperty("line.separator");
String boundary = new String("--AaZz");
String filename = new String("Nome_Anexo.xml");
String body = new String("Corpo_Email");
String payload = new String("");
xml = xml.replaceAll("<nm:", "<").replaceAll("</nm:", "</");
// String to BASE64
BASE64Encoder encoder = new BASE64Encoder();
xml = encoder.encode(xml.getBytes("UTF-8"));
payload = "--" + boundary + CRLF
+ "Content-Type: text/html; charset=UTF-8" + CRLF
+ "Content-Disposition: inline" + CRLF + CRLF + body + CRLF
+ "--" + boundary + CRLF
+ "Content-Type: application/xml; charset=UTF-8 ; name="
+ filename + CRLF
+ "Content-Disposition: attachment; filename=" + filename
+ CRLF + "Content-Transfer-Encoding: base64" + CRLF + CRLF
+ xml + CRLF;
return payload;
}
Não utilize os campos <Content_Description> e <Content_Disposition>.
Abs,
André Canalles
Bom dia André,
substitui o trecho que monta as tags "CONTENT_TYPE" e "CONTENT" pelo seu código porém o erro continua....
O "Communication Parameter" que contém o e-mail do cliente não foi eliminado e o xml veio em branco(sem conteudo).
Veja o print da estrutura do e-mail:
Alguma outra sugestão?....
Att,,
Ortiz
Boa tarde André,
verifiquei o código do java mapping e estou passando o xml para o content(veja trecho abaixo):
InputStream in = null;
in = input.getInputPayload().getInputStream();
......
......
Element content = docout.createElement("Content");
root.appendChild(content);
Text contentText = docout.createTextNode(getContent(streamTOString(in)));
content.appendChild(contentText);
Segue em anexo o código inteiro do Java mapping, caso queira dar uma olhada.
Uma pergunta: Se não há necessidade de eliminar o "Comunication Parameter", como faço para que ele não saia no e-mail enviado ao cliente?.... devo no comunication channel desmarcar a opção "Keep Attchaments"?.....
Obrigado pela ajuda.
Att,,
Ortiz
User | Count |
---|---|
16 | |
3 | |
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.