ParamBox, Validar um XML

Olá Pessoal,

Queria um exemplo de como posso validar um arquivo XML usando o ParamBox.

Abaixo está as validações que preciso fazer.

  • Validar se o arquivo existe;
    • Validar se é um XML;
    • Validar se é um XML de uma nota fiscal;

Tenho uma função que tem que fazer as validações

User function zParBox()

Local cError := ""

Local cWarning := ""

Local oXml := NIL Local cXmlFile := "nfe.xml" // Arquivo XML

Local cDirect := GetTempPath()

//Se o arquivo existir

IF File(cDirect+cXmlFile)

//Gera o Objeto XML

oXml := XmlParserFile(cXmlFile,"_", @cError, @cWarning)

If (oXml == NIL )

MsgStop("Falha ao gerar Objeto XML : "+cError+" / "+cWarning)

Endif

// Mostrando a informação do Node

MsgInfo(oXml:_IDE:_cUFE:Text,"Cliente")

ENDIF

Return oXml

Eduarda, pelo que vi é porque você buscou o arquivo usando cDirect+cXmlFile e na hora de abrir usou só cXmlFile. Deve ter sido só isso.

Olá Cirilo, obrigada pelo toque, eu tenho uma dúvida, caso eu queira colocar um diretório diferente do Parser(system) do protheus. Exemplo:
Local cXmlFile := “nfe.xml”
Local cDirect := "D:\PastaXml"
If File(cDirect+cXmlFile)
Dessa forma vai funcionar?, ou o arquivo sempre tem que estar na pasta do Protheus?

Pode sim ser colocado qualquer diretório que o smartclient tenha acesso (se você estiver executando via smartclient). Agora se estiver executando via Job no appserver realmente somente as pastas dentro do Protheus_Data estarão acessíveis.

Ah entendi. Muito Obrigada,
Abraço.

Eduarda,

Para validar se um arquivo existe, você usa a função File. Já para validar se é um XML, você pode efetuar o parse do arquivo via função XmlParserFile. Por fim, para validar se é uma nota fiscal, você deverá validar o objeto que a função XmlParserFile retornará, aqui já entraria regras de negócio que podem variar conforme sua lógica e necessidade.

Documentações:

https://tdn.totvs.com.br/display/tec/File

https://tdn.totvs.com.br/display/tec/XmlParserFile

Olá Daniel muito obrigada pela ajuda. teria algum exemplo simples que como posso fazer. eu usei exemplo do link do XmlParserFile porem no meu caso não retorna nada. vou mandar como está o código.