Criando Custom Pipeline Disassembler - Quebra de FF em N Registros. Parte 1

E ae Pessoal? Td bem?

Nesse post vou falar como criar um Disassembler component no Biztalk 2010, e quebrar o Flat File em uma quantidade N de registros.

O Biztalk ele faz o split automático do Flat File quebrando o arquivo em 1 registro por vez. Isso significa que se um arquivo chegar com 200 registros o Biztalk abrirá 200 instancia de orchestration para tratar esse arquivo.

Agora vamos supor que a necessidade seja quebrar o arquivo em 50 registros por vez. E agora? A solução é criar um componente customizado pra tratar o Flat File porque o Biztalk nativamente não está preparado pra isso.

O primeiro passo é criar um projeto Class Library e herdar as classes do Biztalk:

1 – Criar projeto e Adicionar Referencias

Então ao criar o projeto Class Library e renomear a classe para TrataFlatFile vai ficar assim:

image

Adicione as Seguintes dlls
  • Microsoft.BizTalk.Pipeline.Components, que fica no diretório <Diretório de Instalação>\Microsoft BizTalk Server 2010\Pipeline Components\Microsoft.BizTalk.Pipeline.Components.dll
  • Microsoft.BizTalk.Pipeline – que fica na pasta C:\Windows\assembly\GAC_MSIL\Microsoft.BizTalk.Pipeline\3.0.1.0__31bf3856ad364e35\Microsoft.BizTalk.Pipeline.dll
  • Microsoft.Biztalk.Messaging – pode ser encontrado na pasta C:\Windows\assembly\GAC_MSIL\Microsoft.Biztalk.Messaging\3.0.1.0__31bf3856ad364e35\Microsoft.Biztalk.Messaging.dll
Utilize as seguintes bibliotecas
  • using Microsoft.BizTalk.Component;
    using Microsoft.BizTalk.Component.Interop;
Faça sua classe herdar as propriedades das seguintes interfaces:
  • :FFDasmComp, IBaseComponent, IDisassemblerComponent, IPersistPropertyBag
Se tudo der certo, o nosso projeto vai ficar assim: image

  2 - Adicionar Nome, Descrição e Versão ao Componente
  • Clique com o botão direito em cima do projeto e clique em Propriedades.
  • Na aba Resource clique para criar um arquivo de configuração.
  • Adicione três variáveis correspondendo a Nome, Descrição e Versão do componente. No meu caso adicionei:
    • COMPONENTNAME
    • COMPONENTDESCRIPTION
    • COMPONENTNAME

image

Implemente a Interface IBaseComponent inserindo o código abaixo:

   1:  string IBaseComponent.Description
   2:  {
   3:        get { return resourceManager.GetString("COMPONENTDESCRIPTION",       
System.Globalization.CultureInfo.InvariantCulture);}
   4:  }
   5:   
   6:  string IBaseComponent.Name
   7:  {
   8:       get { return resourceManager.GetString("COMPONENTNAME",      
System.Globalization.CultureInfo.InvariantCulture); }
   9:  }
  10:   
  11:  string IBaseComponent.Version
  12:  {
  13:      get { return resourceManager.GetString("COMPONENTVERSION",     
System.Globalization.CultureInfo.InvariantCulture); }
  14:  }
  15:   
  16:  #endregion


3 - Adicionar um GUID para o Componente.
  • Implemente a Interface IPersistPropertyBag.
   1: #region IPersistPropertyBag members
   2:          
   3:          public void GetClassID(out System.Guid classid)
   4:          {
   5:              classid = new System.Guid("38BE89A3-F855-449e-8E23-C46D92660D51");
   6:          }
   7:   
   8:          public void InitNew()
   9:          {
  10:              base.InitNew();
  11:          }
  12:   
  13:          public virtual void Load(Microsoft.BizTalk.Component.Interop.IPropertyBag pb, int errlog)
  14:          {
  15:              base.Load(pb, errlog);
  16:          }
  17:   
  18:          public virtual void Save(Microsoft.BizTalk.Component.Interop.IPropertyBag pb, bool fClearDirty, bool fSaveAllProperties)
  19:          {
  20:              base.Save(pb, fClearDirty, fSaveAllProperties);
  21:   
  22:          }
  23:   
  24:  #endregion

No método GetClassID é necessário que seja um GUID único que irá identificar o seu componente.

Podemos utilizar o gerador de GUID do próprio Visual Studio 2010. Em Tools –> Create GUID. Escolha a opção 4.

image
  • Coloque os seguintes atributos logo acima da classe:
    [ComponentCategory(CategoryTypes.CATID_PipelineComponent)]
    [ComponentCategory(CategoryTypes.CATID_DisassemblingParser)]
    [System.Runtime.InteropServices.Guid("38BE89A3-F855-449e-8E23-C46D92660D51")]
Esse GUID deve ser o mesmo criado pelo Create GUID.
  • Por último na Propriedades do projeto, clique no botão Assembly e altere o GUID que aparece ali também.
image

É importante que o GUID seja igual em todos os lugares.

No próximo post vamos implementar a última Interface a IDisassemblerComponent.


Até lá.

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog