on 04-24-2009 3:45 PM
Pessoal, Bom Dia!
Estou desenvolvendo no PI um funcionalidade que depois do Envio do E-mail automático, será gravado em um determinado diretório o XML.
Só que me peguei na seguinte situação, no Mapping eu precisaria colocar cada vez um nome de arquivo no XML, senão sempre irá sobregravar. Pensei em colocar nfe_numero.xml, porem no Mapping do E-mail não tenho referencias da NFE.
Teria como eu colocar alem da Definição Externa NTB2B_NFeToB2BReceiver + alguma outra Definição que tem o NFE juntos no mesmo Mapping, ou algo assim?
Alguem poderia me ajudar?
Obrigado
Abraço,
Bruno
Bruno,
utilize os parametros standard do Receiver File Adapter p/ geracao do nome do arquivo.
Se vc quiser a solucao + simples, utilize a opcao "Add timestamp".
Se quiser por algum dado da NFe no nome do arquivo, utilize a funcionalidade de Variable Substitution. Para a chave de acesso, vc pode ler do campo (nao dah pra ler o Id da NFe mesmo, pois o variable substitution nao suporta ler o valor de attributes, só dos nodes XML mesmo).
Mais detalhes em: http://help.sap.com/saphelp_nw2004s/helpdata/en/bc/bb79d6061007419a081e58cbeaaf28/frameset.htm
Abs,
Henrique.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Bom dia Bruno,
Não sei se é isto que você está precisando. O Henrique fez um artigo e nele demonstra como preencher via UDF a chave de acesso no subject do email.
Além disto, pode-se utilizar algo parecido para alterar o nome do anexo para um personalizado (acho que usando as mesmas técnicas). Veja em: Adapter Module PI 7.0 Set Attachment Name
Abraços,
Fernando Da Ró
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Fernando,
utilizar dynamic configuration + enhancement do mapping para isso é como utilizar uma bazuca para matar formiga. Nao precisa, o variable substitution ou mesmo o timestamp atende.
E o Set attachment name nao se aplica a esse caso, apenas quando se tem email (pois ele seta o Content Disposition, que só faz sentido em msgs MIME).
Abs,
Henrique.
Henrique,
Criei uma função no Mapping:
...
InputStream in = new ByteArrayInputStream(xml.getBytes("utf-8"));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(in);
Node node = (Node) doc.getElementsByTagName("infNFe").item(0);
if (node.hasAttributes() && !node.getAttributes().getNamedItem("Id").equals(""))
{
String strFileName = node.getAttributes().getNamedItem("Id").getNodeValue();
String strNf = doc.getElementsByTagName("nNF").item(1).getFirstChild().getNodeValue();
strFileName += "NF" + "-" + strNf;
DynamicConfiguration conf = (DynamicConfiguration) container
.getTransformationParameters()
.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
conf.put(key, strFileName);
}
...
porem na SXMB_MONI, está com a seguinte mensagem
The Adapter Message Property 'FileName' was configured as mandatory element, but was not supplied in the XI Message header: com.sap.aii.adapter.file.configuration.DynamicConfigurationException: The Adapter Message Property 'FileName' was configured as mandatory element, but was not supplied in the XI Message header
No message monitoring: Error Category XI_J2EE_ADAPTER_FILE
Error Code PROCESSING_ERROR
Em resumo está com erro..rs rs porem ainda estou correndo atras de como resolver, será que você conseguiria me ajudar? Ou alguma dica para clarear...
Obrigado!
Abraço,
Bruno
Eu falei outras solucoes mais simples mas vc preferiu usar a mais complicada. 😛
De qq maneira, verifique se seu codigo está sendo executado mesmo.
Vc criou esse message mapping mas adicionou ele a um Interface Mapping?
Colocou esse Interface Mapping no Interface Determination (no Directory)?
Veja na SXMB_MONI se ele está alimentando o dynamic configuration (ele deveria mostrar outro XML embaixo do payload). Para ver isso, vc precisa estar com o parametro LOGGING = 1 na SXMB_ADM.
Abs,
Henrique.
Henrique,
É realmente criei da forma mais complicada, mas o cliente quer assim...
Criei o Message Mapping e associei na Interface Mapping NTB2B_procNFe_TO_procNFe
No Mapping Program está na seguinte ordem:
1 - MM de Enviar E-mail
2 - MM de Gerar no Diretório
3 - Java Class
Coloquei sim, só que coloquei associando a um outro Party e Receiver com Channel do tipo File.
Configurei tudo no Integration Scenario..
Na SXMB_MONI, não tem nada do Dynamic Configuration para esse erro... única coisa que achei que pode ajudar é
- <SAP:Ack xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:Status>Error</SAP:Status>
<SAP:Category>transient</SAP:Category>
</SAP:Ack>
Não está passando na código executado, agora está me faltando experiencia para encontrar um pq disso.
Agradeço muito pela ajuda!
Abraço,
Bruno
Bruno,
ele está reclamando que o atributo "FileName" é requerido no adapter (vc deve ter marcado o flag, correto?) mas nao está preenchido.
Aparentemente seu codigo nao está sendo executado.
Como vc associou ao Interface Mapping?
Vc fez o que está explicado no artigo do B2B ou vc modificou o standard?
Se sim, confirme se o Interface Determination está executando o standard (SWCV = SAP SLL-NFE 1.0) ou se está referenciando o SWCV Z que vc criou.
Outra coisa, vc testou seu codigo?
Ele está funcionando?
Eu colocaria uma string fixa primeiro e depois faria a leitura do XML.
Att.
Henrique.
Henrique,
Correto está com Flag no Adapter.
O FileName estou tentando configurar pelo Dynamic Configuration no MM.
No Interface Determination está referenciando o B2B que eu criei para envio de e-mail, você me falando isso estou pensando que o erro pode estar por ai... Teria que criar mais um SWCV Z para fazer essa funcionalidade de gravação do XML na rede, ou estou errado?
Mais uma vez obrigado!
Bruno
Bruno,
para vc ter incluido seu MM no Interface Mapping, ou vc modificou o Interface Mapping standard ou vc criou um novo dentro de um SWCV Z criado por vc.
O que perguntei foi qual metodo vc usou?
E se vc usou a criacao de um novo, pedi pra vc checar qual interface mapping que está referenciado no Interface Determination, nao qual party vc está usando.
Verifique isso novamente:
- vc modificou o IM standard ou criou um novo?
- qual interface mapping está referenciado no interface determination?
Henrique.
Henrique,
Dentro do SWCV Z para B2B, foi criado um namespace onde criei o Message Mapping e dentro desse mesmo SWCV Z nos Objetos Basicos namespace http://sap.com/xi/NFE/005a, modifiquei a IM NTB2B_procNFe_TO_procNFe, apenas adicionando mais um Message Mapping no Mapping Program, ficando da seguinte forma:
1 - MM de Enviar E-mail namespace criado Z
2 - MM de Gerar no Diretório namespace idem ao 1
3 - Java Class http://sap.com/xi/NFE/005a
(tirei com base seu artigo do e-mail, que já tinha feito e deu certinho)
IM referenciado no Interface Determination
Name.: NTB2B_procNFe_TO_procNFe
Namespace: http://sap.com/xi/NFE/005a
SWCV.: B2B of Cliente
Obrigado,
Bruno
Vc testou seu codigo?
Funciona corretamente?
Vc pode adicionar traces para ver se ele está executando como esperado.
Está tudo ativado, no IR e no ID?
Se estiver tudo ok, há sempre a possibilidade de ser cache...
Tente um full cache refresh na SXI_CACHE e, se nao resolver, um CPA full Cache refresh.
Abs,
Henrique.
Não sei se vc fez este teste que o Henrique comentou.
Isole seu problema, teste apenas se está setando o filename com um código bem simples, depois vc personaliza o nome.
Fora do IF relacionado a leitura da tag NFe.
conf.put(key, "arquivo.xml");
Ou seja bem radical, provoque um null pointer acess para "provar" que seu código foi executado.
Henrique e Fernando,
Nada como a simplicidade... 😛
No Mapping fiz a funçao Java ligando procNfeStr -> Função -> procNfeStr
AbstractTrace trace = container.getTrace();
try
{
DynamicConfiguration conf = (DynamicConfiguration) container
.getTransformationParameters()
.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
conf.put(key, "NFE_.xml");
DynamicConfigurationKey key1 = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","Directory");
conf.put(key1, "C:/temp");
}
catch (Exception e)
{
trace.addWarning("Failed Message Mapping SAVE_IN_DIRECTORY" + e);
}
return xml;
No Canal de Comunicação:
File Construction Mode = Add Time Stamp (vlw Henrique)
Adapter-Specific Message Attributes
X - use adapter-specific Message Attributes
X - Fail if specific Message Attributes Missing
X - File Name
X - Directory
O resto sem Flag.
Agradeço muito pela ajuda, as vezes melhor simplificar!
E mais um desenvolvimento para NFE, feito.
Abraço,
Bruno
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.