Infra - BizTalk Server

Convertendo arquivos texto em xml com BizTalk Server 2006

Guiaremos você através do BizTalk Server 2006 e Visual Studio 2005 com o objetivo de criarmos um projeto simples e eficiente para transformarmos um arquivo texto posicional em um arquivo xml com validação de informações.

por Douglas Mello



Hoje em dia a utilização de arquivos texto (também chamados de Flat Files) para troca de informações é muito comum, visto que este padrão é utilizado desde os primódios dos sistemas de computador.

Porém a adoção do padrão XML (Extensible Markup Language) é uma tendência mundial. Este tipo de arquivo abre possibilidades infinitas de tratamento de dados, que vão desde a utilização de schemas para definição e validação de dados até utilização de outros padrões para interagir com este formato.

Guiaremos você através do BizTalk Server 2006 e Visual Studio 2005 com o objetivo de criarmos um projeto simples e eficiente para transformarmos um arquivo texto posicional em um arquivo xml com validação de informações. Teremos os seguintes passos:

1. Configurações iniciais

2. Criação do Schema para reconhecer o arquivo texto

3. Criação do Pipeline para recebimento do arquivo texto

4. Criação de Receive Port, Receive Location e Send Port para transporte dos arquivos

5. Criação do arquivo texto para teste e execução do processo de conversão

Parabéns pela iniciativa de aprendizado e boa sorte em seu projeto.

1. Configurações iniciais

Abra o Visual Studio 2005, vá em File, New, Project, em BizTalk Projects, selecione o template Empty BizTalk Server Project, coloque o nome do projeto, localização física no disco e o nome da solução. No caso apresentado abaixo utilizamos TXTtoXML, C:\Tutorial\TXTtoXML, TXTtoXML respectivamente.

Logo após será apresentado o Visual Studio, onde no lado esquerda da tela existe o Solution Explorer, onde ficarão armazenados todos os artefatos que criarmos neste projeto. Para darmos continuidade ao trabalho precisamos executar um procedimento no prompt de comando do Visual Studio. Vá em Start, All Programs, Microsoft Visual Studio 2005, Visual Studio Tools, Visual Studio Command Prompt. Vai aparecer uma tela igual ao prompt do MS-DOS. Vá até o caminho onde criamos o projeto (C:\Tutorial\TXTtoXML) e digite o seguinte comando: sn -k "C:\tutorial\TXTtoXML\TXTtoXML.snk" e prescione ENTER como mostra a próxima tela:

Agora devemos criar duas pastas no sistema de arquivos que iremos utilizar para o processo de conversão de dados. Crie a pasta C:\Entrada onde colocaremos os arquivos flat file para conversão e a pasta C:\Saida onde o BizTalk irá colocar os arquivos após ter convertido:

Devemos conectar a solução criada no Visual Studio ao arquivo que criamos no rompt de comando. Para isso vá até o Visual Studio, clique com o botão direito em cima do projeto TXTtoXML no Solution Explorer e clique em Propriedades. Irá aparecer uma tela, no menu ao lado clique em Assembly e role a tela para baixo até o final. Existirá um campo chamado Assembly Key File e neste você deve colocar o arquivo criado no passo anterior (C:\tutorial\TXTtoXML\TXTtoXML.snk) conforme mostra a próxima tela:

Agora poderemos criar os objetos do BizTalk para conversão do arquivo.

2. Criação do Schema para reconhecer o arquivo texto

Um Schema é um arquivo com extensão .XSD que serve como "manual" para um arquivo de dados. Ele define os campos que um arquivo irá possuir, tamanho e tipo de dados, entre outros atributos. Iremos criar um Schema que mapeia um arquivo texto (.TXT) de tal forma que consigamos visualizar seus campos dentro do BizTalk. Este arquivo possui as seguintes características:

  • 1 registro por linha, separado pelo caracter (CR+LF)
  • Primeiro campo é Nome, do tipo String, com tamanho de 20 posições
  • Segundo campo é Empresa, do tipo String, com tamanho de 30 posições
Para criarmos o Schema, abra o Vistual Studio, clique em cima com botão direito do projeto TXTtoXML no solution explorer, clique em Add, New Item... Irá aparecer a seguinte tela onde deverá ser selecionado o menu Schema Files, nos templates Flat File Schema, e no nome do arquivo TXTtoXML.xsd:

O Schema está criado. Agora precisamos configurá-lo da forma correta para entendimento do arquivo pelo BizTalk. É criado um registro por default chamado Root no Schema. Podemos renomeá-lo para Arquivo, para melhor entendimento. Clique com o botão direito em cima de Root vá em Rename e altere o nome.

Agora é necessário alterarmos a forma com que os dados serão identificados. Como definimos que neste arquivo cada registro será separado por <ENTER> (CR+LF), devemos especificar isto para o BizTalk. Clicando no registro Arquivo, suas propriedades serão apresentadas no menu Properties no lado esquerdo do Visual Studio. Existe uma propriedade chamada Structure que deve estar setada como Delimited. Outra propriedade importante é Child Delimiter Type que deve ser setada para Hexadecimal. Na propriedade Child Delimiter deve ser setada para 0x0D 0x0A (número zero, letra x, número zero, letra D, espaço, número zero, letra x, número zero, letra A). Este é o código hexadecimal do caracter ENTER (CR+LF).

Também iremos criar um outro registro dentro do registro Arquivo. Para isto clique com o botão direito em cima de Arquivo, clique em Insert Schema node e clique em Child Record. Será criado um novo registro, renomeie para Registro. Verifique se a propriedade Structure está para Posicional e coloque um sinal de asterisco (*) dentro da propriedade Max Occurs. Irá aparecer a palavra unbounder após clicar enter no campo.

Por fim iremos criar os campos do arquivo que serão chamados de Nome e Empresa. Clique em cima do registro com botão direto chamado Registro e Insert Schema node e clique em Child Field Element, coloque o nome deste campo como Nome. Também defina o tamanho do campo na propriedade Positional Length que será 20. Siga o mesmo passo anterior só que coloque o nome Empresa e o tamanho do campo será 10.

As propriedades dos registros Arquivo e Registro e dos campos Nome e Empresa devem ficar desta forma:

E no Visual Studio:

3. Criação do Pipeline para recebimento do arquivo texto

O Pipeline é um componente do BizTalk utilizado para executar tarefas de pré e pós-processamento como por exemplo criptografia/descriptografia, conversão de dados, entre outras atividades. Após a mensagem pelo Pipeline ela é encaminhada para o Orchestration onde pode conter toda a lógica do negócio sendo possível enviá-la para outro Pipeline. Como o processo que estamos executando não é complexo, não iremos usar Orchestration. Existem dois tipos de Pipeline: Pipeline de recebimento (utilizado para receber mensagens) e Pipeline de envio (utilizado para envio de mensagens). Agora iremos criar um Pipeline de recebimento para processar os arquivos textos que serão enviados. Vamos no Visual Studio, no solution explorer clique com botão direto em cima do projeto TXTtoXML, cliqeu em Add, New Item... Na janela que abriu clique em em Pipeline Files, selecione nos templates o Receive Pipeline e coloque o nome do arquivo TXTtoXML.btp como mostra a figura a seguir:

Vai aparecer a tela do Pipeline Designer, onde poderá ser visualizado alguns campos como Decode, Disassemble, Validade e ResolveParty. No canto superior direito do Visual Studio existe um menu na vertical chamado Toolbox que contém os componentes que podem ser associados ao Pipeline, basta arrastá-los para dentro dos campos citados anteriormente.

Neste caso o Pipeline de recebimento que iremos criar será responsável por receber um arquivo texto através de uma porta e convertê-lo para XML. Para isso, iremos utilizar o componente Flat File Disassembler que está disponível no Toobox à esquerda do Visual Studio. Arráste-o para dentro do Pipeline no campo Disassemble. Agora iremos utilizar o schema criado anteriormente para transformar o arquivo texto em XML. Clique em cima do componente Flat File Disassembler, nas propriedades deste componente, na opção Document Schema selecione o Schema criado anteriormente, no caso o TXTtoXML. Pronto, seu pipeline de disassemble de texto para xml foi criado conforme mostra a próxima figura:

Os componentes criados até o momento devem ser instalados no BizTalk Server 2006 como Assemblies. Para isso devemos fazer o Build e Deploy no Visual Studio. Clique com o botão direito em cima do projeto criado (TXTtoXML) no Solution Explorer e selecione a opção Build. Caso ocorra algum erro, verifique as mensagens no menu erros list e output que encontram-se na parte inferior do Visual Studio. Após resolução, clique no projeto com botão direito novamente e selecione a opção Deploy, com isso o Schema e o Pipeline criado será instalados no BizTalk.

4. Criação de Receive Port, Receive Location e Send Port para transporte dos arquivos

Agora iremos criar os componentes de entrada e saída de dados do BizTalk. Iremos começar pela Receive Port responsável pela entrada de dados. Para isso abra o BizTalk Server Administration através do menu Iniciar, Programas, Microsoft BizTalk Server 2006. Procure no menu Applications a aplicação chamada BizTalk Application 1 e verifique se o Schema e o Pipeline criados estão presentes. Após clique com botão direito em cima de Receive Port e selecione New e One-Way Receive Port... Aparecerá uma nova tela, na guia General defina o nome da receive port como ReceiveTXTtoXML. Na guia Receive Locations clique em new e defina o nome como Receive Location 1, selecione o tipo como FILE clique em configure e em Receive Folder coloque a pasta criada anteriormente C:\Entrada\. No campo File Mask coloque *.txt para definirmos que só será lido pelo BizTalk arquivos com a extensão .TXT, e clique em Ok. Voltando ao menu anterior devemos selecionar o Pipeline que criamos no Visual Studio (TXTtoXML) selecionando ele na opção Receive Pipeline. Para terminar este processo clique em ok.

Os passos acimas foram necessários para criarmos uma Receive Port e uma Receive Location. Agora iremos criar uma Send Port para enviar os dados uma vez transformados pelo BizTalk. No BizTalk Server 2006 Administration, selecione a aplicação BizTalk Application 1, clique com o botão direito em Send Ports, selecione New, e clique em Static One-way Send Port... onde irá uma nova tela. Na guia General defina o nome da Send Port como SendPortTXTtoXML. No campo Type selecione a opção FILE e clique em configure. No campo Destination folder coloque a pasta criada anteriormente C:\Saida\, e no campo File name coloque a seguinte informação: %MessageID%.xml. Isso irá definir que o nome de cada arquivo lido será o identificador da mensagem dado pelo BizTalk. Clique em Ok e volte para a tela anterior. Clique na guia Filters para definirmos quando uma mensagem será encaminhada para esta porta que estamos configurando. Coloque a seguinte expressão:

BTS.ReceivePortName == ReceiveTXTtoXML And

Ou como mostra a seguinte figura:

Esta configuração irá definir que cada mensagem recebida pela Receive Port com o nome ReceiveTXTtoXML será encaminhada para a Send Port que estamos acabando de criar. Clique em Ok para terminar a configuração da Send Port.

6. Criação do arquivo texto para teste e execução do processo de conversão

Neste passo precisamos criar um arquivo texto exatamente com os campos e tamanhos definidos no Schema TXTtoXML.xsd. Para isso iremos utilizar um editor de textos qualquer. No caso utilizamos o notepad, e criamos um arquivo com um registro contendo os dois campos definidos, sendo o primeiro chamado nome (no caso Douglas Mello) e o segundo chamado empresa (no caso Microsoft). Tenha o cuidado para que o primeiro campo possua 20 posições e o segundo 10, conforme definimos no schema e apresentado abaixo:

Coloque este arquivo na pasta C:\Entrada\, verifique se as portas de envio e recebimento estão iniciadas e se a instância do BizTalk Server está com status Running. É comum acontecer erros de definição de arquivo, acompanhe o Event Viewer para verificar possíveis problemas.

Caso não tenha ocorrido nenhum problema, verifique a pasta C:\Saída Que deve conter o seguinte arquivo XML:

Se você conseguiu visualizar o arquivo acima parabéns! Está concluído este pequeno tutorial de como o BizTalk pode converter arquivos texto em xml com poucos passos e sem nenhum tipo de programação ou desenvolvimento de código.

Douglas Mello

Douglas Mello