Como Inserir Pedido e seus Items com o SQL Adapter

Olá Pessoal.
Eu sei que agora só se fala em WCF, Cloud Computing, etc. Mas ainda uso em alguns clientes o Biztalk 2006 e o SQL Adapter antigo, e é sempre bom aprender como fazer certas tarefas.
Alguns dias atrás precisei inserir um Pedido e seus Items no SQL Server, que compartilhavam uma chave estrangeira entre as tabelas. Pela regra da normalização, a tabela de PedidosItems deve conter a chave da tabela de Pedido. Pra quem quiser saber mais sobre Normalização de Tabelas recomendo esse webcast da Socorro Vieira e da Andressa Martins.
Mas como fazer isso com Updategram no Biztalk? Ou seja, sem usar procedure? Pesquisando, descobri a seguinte técnica:

1 – Criar as Tabelas de Pedido e PedidoItem.

  • Criar um Database no SQL server e as tabelas Pedido e PedidoItem.
image

2 – Criar o Projeto do Biztalk e os schemas.

  • Ao criar os schemas, escolher a opção Updategram e marcar a opção Insert.
  • Depois escolher a tabela Pedido e selecionar todos os campos no painel direito.
image
  • Fazer o mesmo com a tabela PedidoItem.
image
  • Criar um schema XML de Entrada, conforme a seguinte figura.
image

3 – Configurar os schemas

  • Editar o arquivo schPedido.xsd clicando com o botão direito sobre o arquivo e em Open With –> XML Editor
  • Fazer o mesmo para o arquivo schPedidoItem.xsd
  • Selecionionar e copiar todo o nó do Elemento <xs:element minOccurs="0" maxOccurs="unbounded" name="PedidoItem"> até encontrar o próximo </xs:element>
image
  • Colar no arquivo schPedido.xsd, logo abaixo do final do Elemento <xs:element minOccurs="0" maxOccurs="unbounded" name="Pedido">
image
  • Salvar o arquivo schPedido.xsd e abri-lo normalmente. Deve ficar assim:
image
Dessa forma o Biztalk vai ser capaz de inserir o Pedido e seus Items em suas respectivas tabelas.

4 – Adicionar a propriedade updg:at-identity

  • Clicar com o botão direito sobre o projeto e em Add –> New Item.
  • Adicionar um novo schema e renomear para UpdateGram_identity.xsd
  • Selecionar o Root node e deleta-lo.
  • Com o botão direito em cima do <Schema> clicar em Insert Schema Node –> Child Field Attribute.
  • Nomear o atributo para at-identity. Alterar a propriedade data type para xs:int.
  • Alterar a propriedade Target Namespace para urn:schemas-microsoft-com:xml-updategram e salvar o schema.
image

5 – Importar a propriedade updg:at-identity para o schema schPedido.xsd

  • Abrir o schema schPedido.xsd
  • Selecionar o node <Schema> e na propriedade Imports clicar no botão […]
  • Clicar no botão Add e procurar o UpdateGram_identity.xsd
  • Alterar o prefixo ns0 para updg e clicar em OK.
image
  • Clicar com o botão direito no node de Pedido e em Insert Schema Node –> Child Field Attribute
  • Alterar a propriedade Data Type para updg:at-identity(Reference) e salvar o schema.
image

6 – Criar o mapeamento

  • Criar um mapa com o botão direito em cima do projeto e clicar em Add –> New Item –> Map Files –> Map
  • Adicionar os schemas relevantes e fazer as ligações pertinentes.
image
  • Adicionar o functoid de String Concatenate.
  • Ligar o campo updg:at-identity ao functoid.
Esse campo fará a função da chave estrangeira.
  • Adicionar uma nova constante ao functoid de valor 1.
  • Ligar o mesmo functoid ao campo Id_Pedido da tag PedidoItens.
image
Ok. Agora é finalizar com a criação da orchestration ou executar o mapeamento na Receive Port no velho modelo de Publish-Subscribe
Conclusão:
É uma tecnica bem interessante quando não precisamos usar procedures para fazer Inserts em tabelas dependentes.
Dessa forma economizamos tempo, pois criamos apenas uma send port ao inves de criar uma chamada no sql para cada tabela.
É isso. Até a próxima.

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog