Automação comercial com VB, VB.NET e C# - Parte IV
Sem duvida o protocolo XML
hoje é um padrão entre os desenvolvedores .NET o que permite em muito a
utilização de vários tipos de dados e uma “Typeficação” mais livre no momento
de acessar aos dados, passar parâmetros e tratar a informação, oferecendo maior
liberdade ao programa aplicativo em suas decisões, navegabilidade e porte dos
dados. Hoje existem vários protocolos XML para cada segmento em especifico –
Floricultura, Cálculos Matemáticos, Informações médias, tudo o que você
necessita para troca de dados em XML, porem até o momento não existia o XML
para Acesso a periféricos de automação comercial e troca de dados entre os
mesmos.
Desde Outubro do ano
passado estive pessoalmente envolvido na aprovação de um protocolo XML para
Automação Comercial o que já está acontecendo e aos poucos estamos vendo o
protocolo nascer e se tornar um padrão de acesso aos periféricos de Automação
Comercial. Com isso analisaremos aqui a estrutura do Arquivo XML pra Automação
Comercial, seu protocolo e o objetivo de cada TAG XML.
Uma rápida introdução ao XML
Primeiramente vamos antes
de mais nada preparar nosso ambiente para a validação de nosso arquivo XML.
Você poderá faze-lo usando o próprio Browser.
Instale o Arquivo os
aplicativos que permitem a validação do XML utilizando o próprio Internet
Explorer, para isso certifique-se de estar utilizando a ultima versão do IE com
seus respectivos Service Packs, nada melhor do que utilizar Windows UpDate para
isso.
Após isso instale os
pacotes de utilitários para validação de XML no próprio Browser iexmltls.exe e o msxml3msms.EXE
que permitira que com um click no
botão direito do Browser apareça a opção “XML VALIDATE” e “XSL OutPut”.
OBS: estes aquivos de instalação você poderá baixar também no site www.daruma.com.br na área de downloads
exclusiva para desenvolvedores ou uma rápida procura no site da
microsoft.com/xml
Após isso certifique-se que
estas opções estejam aparecendo
O Arquivo XML para ser
utilizado em seu destino final, que em nosso caso é a comunicação com o ECF
através de um Protocolo XML, existe a necessidade de passar por dois tipos de
verificação, vamos chamar assim.
1) Se o Documento é Valido
– Um documento Válido é aquele que segue as normas do Padrão XML estabelecidas
pelo Órgão w3c (www.w3c.org) com Tags Root,
com Tags mães e filhas todas abrindo e
fechando, gerando o que chamamos de nós do Arquivo XML. Um Exemplo de um
Arquivo XML Valido é o arquivo abaixo, vamos imaginar que estamos montando um
arquivo XML onde irá trafegar os dados de um Veiculo:
<VEICULO>
<MODELO>GOL</MODELO>
<PLACA>AGP1298</PLACA>
<ANO>1998</ANO>
</VEICULO>
Este documento acima é
valido e obedece as regras XML não somente pela formatação mas pelos tipos de
letras e números que são utilizados uma vez que o Padrão XML também possui
palavras reservadas e as mesmas devem ser obedecidas. Por exemplo não se pode
utilizar “<” dentro de valores das TAGs uma vez que este símbolo serve para
indicar o inicio de uma tag. Para o uso de palavras reservadas e símbolos
especiais dentro de valores de uma TAG existe a necessidade de utilizar-se de
símbolos como # e &. Mas não vamos entrar aqui neste detalhe, o objetivo é
mostrar o que é um Arquivo XML Válido.
Um Arquivo XML não válido é
o seguinte arquivo:
<VEICULO>
<MODELO>GOL
<PLACA>AGP1298
<ANO>1998</ANO>
</MODELO>
<VEICULO>
2) Um segundo nível de
validação do Arquivo XML é se o mesmo está BEM-FOMATADO, ou seja, se o arquivo
foi formatado e construído de acordo com um “manual”, “fôrma” ou Template que
você define, neste caso não entra em jogo as regras definidas pelo W3C e sim as
que você definir que devem ser, claro que sempre obedecendo aos padrões de TAGS
definidos pelo W3C, mas a questão é que seu arquivo de formatação é livre para
que você decida como o usuário deve escrever o XML final. Fazendo uma pequena
analogia este processo é parecido aos processo de um Documento Word com um
Template definido de documento, o usuário
- uma vez aberto o arquivo .DOC baseado
O Mesmo se dá com o arquivo
XML ele é o .DOC e o Template do arquivo .XML é o DTD(Definição de Tipo de
Documento) ou um outro tipo de Template XML chamado de SCHEMA.
Se o Arquivo XML estiver
construído com base no DTD, de forma correta e obedecendo a suas regras, o
mesmo será considerado um XML BEM-FORMATADO.
Lembrando sempre que no começo
do Arquivo XML é indicado onde está o Template para que o XML seja Validado.
Um Exemplo de Documento Bem
formatado:
Imagine o exemplo anterior
da concessionária:
O DTD de tal XML seria o
seguinte
Nome do Arquivo:
Concessionária.DTD
<!--Elemento
DTD para validacao do Consessionaria.XML-->
<!--Daruma
Automacao - Patente requerida e Direitos Autorais reservados-->
<!--Autor
- Claudenir C. Andrade
claudenir@daruma.com.br-->
<!--Direitos
de Uso reservados para DARUMA TELECOMUNICAcoes A AUTOMACAO-->
<!--*********************************************************************************************-->
<!ELEMENT
CONSESSIONARIA ANY>
<!ELEMENT VEICULO (MODELO,PLACA,ANO)>
<!ELEMENT MODELO (#PCDATA)>
<!ELEMENT PLACA (#PCDATA)>
<!ELEMENT ANO (#PCDATA)>
O DTD acima indica que
temos uma TAG Root Chamada VEICULO e abaixo dela, ou dentro dela com tags
filhas, as tags MODELO, PLACA e ANO que aceitam texto como tipo de dados.
O Arquivo XML
bem-formatado, baseando-se e levando em consideração as regras do DTD será o
seguinte arquivo abaixo:
<?xml
version="1.0" encoding="ISO8859-1"?>
<!DOCTYPE CONSESSIONARIA SYSTEM
"CONSESSIONARIA.DTD">
<CONSESSIONARIA>
<VEICULO>
<MODELO>GOL</MODELO>
<PLACA>AGP1298</PLACA>
<ANO>1998</ANO>
</VEICULO>
</CONCESSIONARIA>
Note que na segunda linha
do cabeçalho de nosso arquivo XML está sendo indicando onde está o Arquivo DTD
que irá Validar nosso XML.
DPOSXMLBR - Daruma Point Of Sales
XML BRasil
DPOSXMLBR, este é o nome
com que está sendo homologado o padrão XML para acesso a periféricos de
Automação Comercial aqui no Brasil.
A Estrutura, ou nós, de
Tags do Cupom Fiscal dentro do DPOSXMLBR sou a seguinte.
<?xml
version="1.0" encoding="ISO8859-1"?>
<!DOCTYPE
DPOSXMLBR SYSTEM "DPOSXMLBR.DTD">
<DPOSXMLBR>
<ECF>
<CUPOMFISCAL>
<ABRECUPOM>
</ABRECUPOM>
<VENDEITEM>
</VENDEITEM>
<FECHACUPOM>
<INICIAFECHAMENTO>
</INICIAFECHAMENTO>
<EFETUAFORMA>
</EFETUAFORMA>
<CONSUMIDOR>
</CONSUMIDOR>
</FECHACUPOM>
</CUPOMFISCAL>
</ECF>
</DPOSXMLBR>
Esta é a estrutura
principal de uma das primeiras seqüências de comandos homologadas, a seqüência
de comandos do Cupom Fiscal!! Claro que cada TAG acima tem suas tags filhas,
que baseado no que explicamos anteriormente sobre o XML, observando o DTD
abaixo (que será usado para Validar nosso Comando de Cupom Fiscal para o ECF)
você poderá identificar as tags filhas que deve conter nosso XML. Observe que
também na segunda linha de nosso Arquivo XML esta contido o DTD que irá validar
nosso Arquivo de Cupom XML.
<!--Elemento
DTD para validação do DPOSXML-->
<!--Daruma
Automação - Patente requerida e Direitos Autorais reservados-->
<!--Autor
- Claudenir C. Andrade
claudenir@daruma.com.br-->
<!--Direitos
de Uso reservados para DARUMA TELECOMUNICACOES E AUTOMACAO-->
<!--*********************************************************************************************-->
<!ELEMENT
DPOSXMLBR ANY>
<!ELEMENT ECF ANY>
<!ELEMENT CUPOMFISCAL
(ABRECUPOM?,VENDEITEM?,FECHACUPOM?)*>
<!ELEMENT ABRECUPOM (ABRECUPOMID?)>
<!ELEMENT ABRECUPOMID
(#PCDATA)>
<!ELEMENT VENDEITEM
(CODIGO,DESCRICAO,ALIQUOTA,QUANTIDADE?,VALORUNITARIO,CUPOMVALORAD?)>
<!ELEMENT CODIGO (#PCDATA)>
<!ELEMENT DESCRICAO (#PCDATA)>
<!ELEMENT ALIQUOTA (#PCDATA)>
<!ELEMENT QUANTIDADE (#PCDATA)>
<!ATTLIST QUANTIDADE tipoquantidade
(I|F|i|f) "I">
<!ELEMENT VALORUNITARIO (#PCDATA)>
<!ATTLIST VALORUNITARIO casasdecimais
(2|3) "2">
<!ELEMENT CUPOMVALORAD (#PCDATA)>
<!ATTLIST CUPOMVALORAD ad (A|D|a|d) "D"
tipoad (P|V|p|v)
"v" >
<!ELEMENT FECHACUPOM
(INICIAFECHAMENTO?,EFETUAFORMA?,CONSUMIDOR?,MSGPROMO?)*>
<!ELEMENT INICIAFECHAMENTO
(FECHAVALORAD)>
<!ELEMENT FECHAVALORAD (#PCDATA)>
<!ATTLIST FECHAVALORAD ad
(A|D|a|d) "D"
tipoad (P|V|p|v)
"v">
<!ELEMENT EFETUAFORMA
(FORMA+,VALORFORMA+)*>
<!ELEMENT FORMA (#PCDATA)>
<!ATTLIST FORMA descricao CDATA
"">
<!ELEMENT VALORFORMA (#PCDATA)>
<!ELEMENT CONSUMIDOR
(CONSUMIDORID+)>
<!ELEMENT CONSUMIDORID (#PCDATA)>
<!ELEMENT MSGPROMO (#PCDATA)>
Vamos então construir nosso
primeiro comando de comunicação com o ECF, onde será abertura de um Cupom Fiscal, a Venda de um
Item e o Fechamento de um cupom fiscal.
Vamos verificar como fazer
isso em C#.
Passo 1 - Abra
um novo projeto no C#, Windows Application
Passo 2 - Vamos criar um Botão com o Caption “DPOSXMLBR”
Passo 3 - Faça dois clicks no Botão e adicione no
cabeçalho do código fonte (área dos NameSpaces) o seguinte namespace “Using
System.XML;”
Passo 4- Adicione ao Evento Click do Botão o seguinte
código abaixo
private void button1_Click(object
sender, System.EventArgs e)
{
//Claudenir Campos Andarde - XML
para Automacao Comercial
//01/01/2004 -
claudenir@daruma.com.br
//Cria o Aquivo XML e indica o Encoding do Arquivo que neste caso será
NULL
XmlTextWriter
Daruma_Xml = new
XmlTextWriter("CUPOMFISCAL.XML",null);
Daruma_Xml.Formatting
= Formatting.Indented;
Daruma_Xml.WriteStartDocument();
Daruma_Xml.WriteStartElement("DPOSXMLBR");//<DPOSXMLBR>
Daruma_Xml.WriteStartElement("ECF");//<ECF>
Daruma_Xml.WriteStartElement("CUPOMFISCAL");//<CUPOMFISCAL>
Daruma_Xml.WriteStartElement("ABRECUPOM");//<ABRECUPOM>
Daruma_Xml.WriteStartElement("ABRECUPOMID");//<abrecupomid>
Daruma_Xml.WriteString("1234567890");
Daruma_Xml.WriteEndElement();//</abrecupomid>
Daruma_Xml.WriteEndElement();//</ABRECUPOM>
Daruma_Xml.WriteStartElement("VENDEITEM");//<VENDEITEM>
Daruma_Xml.WriteStartElement("CODIGO");//<Codigo>
Daruma_Xml.WriteString("1234");
Daruma_Xml.WriteEndElement();//</codigo>
Daruma_Xml.WriteStartElement("DESCRICAO");//<Descricao>
Daruma_Xml.WriteString("Leite");
Daruma_Xml.WriteEndElement();//</Descricao>
Daruma_Xml.WriteStartElement("ALIQUOTA");//<Aliquota>
Daruma_Xml.WriteString("FF");
Daruma_Xml.WriteEndElement();//</Aliquota>
Daruma_Xml.WriteStartElement("QUANTIDADE");//<Quantidade>
Daruma_Xml.WriteAttributeString("tipoquantidade","I");
Daruma_Xml.WriteString("10");
Daruma_Xml.WriteEndElement();//</Quantidade>
Daruma_Xml.WriteStartElement("VALORUNITARIO");//<ValorUnitario>
Daruma_Xml.WriteAttributeString("tipoquantidade","2");
Daruma_Xml.WriteString("1,00");
Daruma_Xml.WriteEndElement();//</ValorUnitario>
Daruma_Xml.WriteStartElement("CUPOMVALORAD");//<CupomValorAD>
Daruma_Xml.WriteAttributeString("ad","A");
Daruma_Xml.WriteAttributeString("tipoad","V");
Daruma_Xml.WriteString("0");
Daruma_Xml.WriteEndElement();//</CupomValorAD>
Daruma_Xml.WriteEndElement();//</VENDEITEM>
Daruma_Xml.WriteEndElement();//</CUPOMFISCAL>
Daruma_Xml.WriteEndElement();//</ECF>
Daruma_Xml.WriteEndElement();//</DPOSXMLBR>
Daruma_Xml.WriteEndDocument();
Daruma_Xml.Close();
}
Execute seu aplicativo.
Será criado o Arquivo
CUPOMFISCAL.XML no diretório BIN\DEBUG de seu projeto.
Passo 5 -
Copie o Arquivo DPOSXMLBR.DTD para o mesmo diretório
Passo 6 - Faça
dois clicks no Arquivo CUPOMFISCAL.XML que foi criado
Passo 7 - Faça
um click como Botão Direito do Mouse e escola a opção XML VALIDATE
E aparecera a seguinte
mensagem:
É claro que a codificação
do XML para automação comercial ainda esta engatinhando, porém a passos largos,
esperamos até o mês de MARÇO já ter o Padrão estabelecido e com classes e
métodos mais fáceis de serem utilizadas pelos programadores que fazem uso do
XML em vários pontos do código fonte.
Espero que você tenha
ficado animado com as possibilidades na Automação Comercial, agora com o XML,
na DARUMA32.DLL existe uma função chamada DARUMA_XML_SEND onde você passa como
parâmetro o Path do arquivo XML que você deseja enviar para o ECF e será criado
um Arquivo XML de retorno com seus respectivos ST1 e ST2, experimente!
Estamos montando grupos de
testes para o Padrão XML e aqueles que desejarem se candidatar, estamos a
disposição!!
Um abraço a todos!!
Claudenir Andrade é formado pela Academia de Sistemas Informáticos de
Madrid, trabalha com automação comercial há Nove Anos anos, foi responsável
pela Homologação e aprovação de ECFs Brasileiros em Paises como Equador e
Venezuela, gerencia a equipe de desenvolvimento da Daruma Automação, autor do
primeiro livro de automação comercial no Brasil – “Automação Comercial com
VB.Net e C#”. É MVP da Microsoft, Está criando e definindo o Modelo XML para
Automação Comercial, escreve artigos para o site MSDN e pode ser contatado pelo
e-mail – claudenir@daruma.com.br.