Criando Custom Pipeline Disassembler - Quebra de FF em N Registros. Parte 1
terça-feira, 31 de janeiro de 2012
|
|
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: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
- using Microsoft.BizTalk.Component;
using Microsoft.BizTalk.Component.Interop;
- :FFDasmComp, IBaseComponent, IDisassemblerComponent, IPersistPropertyBag
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
- COMPONENTNAME
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.
- Coloque os seguintes atributos logo acima da classe:
[ComponentCategory(CategoryTypes.CATID_PipelineComponent)]Esse GUID deve ser o mesmo criado pelo Create GUID.
[ComponentCategory(CategoryTypes.CATID_DisassemblingParser)]
[System.Runtime.InteropServices.Guid("38BE89A3-F855-449e-8E23-C46D92660D51")]
- Por último na Propriedades do projeto, clique no botão Assembly e altere o GUID que aparece ali também.
É 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