Flat File Hierarquico
sábado, 2 de abril de 2011
|
|
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:
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:
Na próxima tela vou selecionar apenas os registros referentes aos dados do Pedido e aos dados do Produto, e vou clicar em Next..
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.
Na próxima tela irei definir os registros:
Na tela seguinte irei selecionar o primeiro registro, e irei clicar em Next.
Aqui vou delimitar os campos por posição, então vou marcar a opção By relative positions
Na próxima tela vou deixar o Tag Identifier como PED, e posicionar o cursor nos numeros, 3 e 8
Vou digitar os nomes dos campos:
Vai ficar assim:
Na próxima tela vou deixar selecionado a segunda linha:
Vou marcar a opção By relative positions
Na próxima tela vou colocar o tag identifier como PROD, e posicionar o cursor nos numeros: 4, 8 e 14
Vou definir os campos e tipos na próxima tela.
O resultado final do Wizard será esse:
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:
Agora no registro Pedido vou deletar o valor que esta na propriedade Max Occurs e Tag Identifier
Vou clicar no registro PEDIDOS e alterar as propriedade
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
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:
E agora testando o schema o resultado é esse:
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. :)
É 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:
Na próxima tela vou selecionar apenas os registros referentes aos dados do Pedido e aos dados do Produto, e vou clicar em Next..
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.
Na próxima tela irei definir os registros:
Na tela seguinte irei selecionar o primeiro registro, e irei clicar em Next.
Aqui vou delimitar os campos por posição, então vou marcar a opção By relative positions
Na próxima tela vou deixar o Tag Identifier como PED, e posicionar o cursor nos numeros, 3 e 8
Vou digitar os nomes dos campos:
Vai ficar assim:
Na próxima tela vou deixar selecionado a segunda linha:
Vou marcar a opção By relative positions
Na próxima tela vou colocar o tag identifier como PROD, e posicionar o cursor nos numeros: 4, 8 e 14
Vou definir os campos e tipos na próxima tela.
O resultado final do Wizard será esse:
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:
Agora no registro Pedido vou deletar o valor que esta na propriedade Max Occurs e Tag Identifier
Vou clicar no registro PEDIDOS e alterar as propriedade
Nome Propriedade | Valor |
Max Occurs | unbounded |
Tag Identifier | PED |
Child Order | Infix |
Child Delimiter Type | Hexadecimal |
Child Delimiter | 0x0D 0x0A |
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
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'
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