Flat File Hierarquico

Já foi postado aqui no blog anteriormente, como fazer um schema para aceitar flat file hierarquico, mas decidi postar novamente sobre o assunto pois precisei fazer algumas alterações a mais no schema para poder funcionar.
É bem intererssante a solução..
Entao, imagine que vamos receber varios pedidos que contem varios produtos no mesmo flat file.. Assim:

PED123 CLIENTE1 PROD12 PROD1 CLIENTE1 PROD13 PROD2 CLIENTE1 PROD14 PROD3 CLIENTE1 PROD15 PROD4 CLIENTE1 PROD16 PROD5 CLIENTE1 PED123 CLIENTE2 PROD12 PROD1 CLIENTE2 PROD13 PROD2 CLIENTE2 PROD14 PROD3 CLIENTE2

Entao como podemos perceber o registro que representa os dados do pedido esta identificado pela tag PED e os produtos pela tag PROD. O desafio é fazer o Biztalk olhar essas duas tags com dependencia entre si. Se somente usarmos o Flat File Wizard ele vai achar q as tags sao idenpendentes…

Como fazer isso: alterando algumas propriedades no schema..

Criando o schema Flat File

Vamos executar o Flat File Schema então:

image

Na próxima tela vou selecionar apenas os registros referentes aos dados do Pedido e aos dados do Produto, e vou clicar em Next..

image

Vou deixar a opção By delimiter symbol marcada e clicar em Next

Na Tela Delimited Record não altero nenhuma opção e vou clicar no botão Next.

Na tela Child Elements vou alterar o Element Type para Repeting Record.

image

Na próxima tela irei definir os registros:

image

Na tela seguinte irei selecionar o primeiro registro, e irei clicar em Next.

image

Aqui vou delimitar os campos por posição, então vou marcar a opção By relative positions

image

Na próxima tela vou deixar o Tag Identifier como PED, e posicionar o cursor nos numeros, 3 e 8

image

Vou digitar os nomes dos campos:

image

Vai ficar assim:

image

Na próxima tela vou deixar selecionado a segunda linha:

image

Vou marcar a opção By relative positions

image

Na próxima tela vou colocar o tag identifier como PROD, e posicionar o cursor nos numeros: 4, 8 e 14

image

Vou definir os campos e tipos na próxima tela.

image

O resultado final do Wizard será esse:

image

Só que desse jeito ainda nao tem dependencia entre os registros caso venha mais de um pedido no mesmo arquivo.. Entao vou acrescentar mais um registro PEDIDOS logo abaixo do nivel do Root.

Assim:

image

Agora no registro Pedido vou deletar o valor que esta na propriedade Max Occurs e Tag Identifier

image

Vou clicar no registro PEDIDOS e alterar as propriedade

Nome PropriedadeValor
Max Occurs unbounded
Tag Identifier PED
Child OrderInfix
Child Delimiter Type Hexadecimal
Child Delimiter 0x0D 0x0A


image

Vou deletar o campo Type do Registro Pedido, pois como foi alterado o tag identifier ele nao gera mais o campo com o identifier PED

image

Agora vou clicar no nó <Schema> e alterar a propriedade Parser Optimization para Complexity e a propriedade Allow Early Termination para Yes, que evita o erro na hora de testar a instancia:
 Unexpected data found while looking for:'\r\n'

image

E agora testando o schema o resultado é esse:


<Root xmlns="http://SampleFlatFile.schSampleFF2"> <PEDIDOS xmlns=""> <Pedido> <NumPedido>123</NumPedido> <Cliente>CLIENTE1</Cliente> </Pedido> <Produtos> <Type>PROD</Type> <CodProd>12</CodProd> <DescProd>PROD1</DescProd> <Cliente>CLIENTE1</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>13</CodProd> <DescProd>PROD2</DescProd> <Cliente>CLIENTE1</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>14</CodProd> <DescProd>PROD3</DescProd> <Cliente>CLIENTE1</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>15</CodProd> <DescProd>PROD4</DescProd> <Cliente>CLIENTE1</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>16</CodProd> <DescProd>PROD5</DescProd> <Cliente>CLIENTE1</Cliente> </Produtos> </PEDIDOS> <PEDIDOS xmlns=""> <Pedido> <NumPedido>123</NumPedido> <Cliente>CLIENTE2</Cliente> </Pedido> <Produtos> <Type>PROD</Type> <CodProd>12</CodProd> <DescProd>PROD1</DescProd> <Cliente>CLIENTE2</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>13</CodProd> <DescProd>PROD2</DescProd> <Cliente>CLIENTE2</Cliente> </Produtos> <Produtos> <Type>PROD</Type> <CodProd>14</CodProd> <DescProd>PROD3</DescProd> <Cliente>CLIENTE2</Cliente> </Produtos> </PEDIDOS> </Root>

Agora é só criar um receive pipeline e colocar o componente Flat File disassemble e pronto!
Então é isso! Quero dedicar esse post especialmente ao pessoal da Penske, pois fizemos o treinamento de Biztalk essa semana, e eles me pediram uma solução pra esse problema. Como estava na hora do treinamento, não tive tempo pra parar e analisar direitinho! Agora ta ai. Galera muito obrigada pela paciencia.. E espero de coração que voces tenham gostado do treinamento.


Vlw Até a próxima. :)

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog