Criando Pipeline Receiver Decoder Customizado

Como prometido, aqui esta o artigo publicado na revista Biztalk HotRod em português.

Neste artigo vamos abordar a customização de um Receive Decoder Pipeline, que tem como objetivo tratar caracteres especiais de uma mensagem, recebendo como parâmetro uma Expressão Regular e o valor ao qual deverá substituir os caracteres. Por exemplo: Buscar em toda a mensagem o caractere “&” e trocar pelo “e”.

Expressão Regular é uma poderosa técnica para identificar caracteres em um texto. Para saber mais sobre Expressão Regular visite http://www.regular-expressions.info/.

Para facilitar o nosso código, recomendo baixar um add-in para o Visual Studio que nos permite criar o Custom Pipeline com um wizard.

Pode ser encontrado no link: http://btsplcw.codeplex.com

Baixe a versão 2.0 para Biztalk Server 2006 e a versão 2.1 para Biztalk Server 2009.

Aqui utilizaremos a versão 2.0 e Biztalk Server 2006.

Para Instalar o wizard, descompacte o arquivo zip, e na pasta \PipelineComponentWizard Setup\Debug execute o Setup.exe

image

Siga os passos na tela do instalador.

Utilizando o Biztalk Server Pipeline Component Wizard.

  1. Abra uma instancia do Visual Studio 2005 e clique em File -> New -> Project.
  2. Em Biztalk Projects clique na opção Biztalk Server Pipeline Component Project.

    image

  3. Escolha um diretório e um nome para o projeto. Clique em OK.
  4. Aparecerá a tela de Boas Vindas “Pipeline Component Project Wizard”. Clique em Next.
  5. Na próxima tela preencha os dados do componente. Clique em Next.

    image

  6. Preencha o nome, versão e descrição do componente. Clique em Next.

    image

  7. Na próxima tela, adicione 2 propriedades do tipo String que serão passadas para o Receive Decoder, a primeira receberá a Expressão Regular e a segunda o Valor à ser substituído. Clique em Next e Finish.

    image

  8. Clique duas vezes em ReplaceString.resx e altere o nome do Componente para “ReplaceString decoder”.

    image

  9. Em propriedades do projeto, para acessar clique com o botão direito em cima do projeto e em Properties, altere o “Assembly Name” para ficar igual ao “Default Namespace”.

    image

    Adicionando Código ao Projeto

  10. Expanda o region IComponent members e, no método Execute, coloque o código abaixo.

    image

    • public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc,

    • Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)

    • {

    •    try

    •    {

    •      if (inmsg.BodyPart != null) //Verifica se a mensagem é diferente de nulo

    •      {

    •        MemoryStream memStrm = new MemoryStream();

    •  

    •        Stream originalStrm = inmsg.BodyPart.GetOriginalDataStream();

    •        StreamReader sReader = new StreamReader(originalStrm, System.Text.Encoding.Default);

    •  

    •        if (_RegularExpression != null)

    •        {

    •          if (_ReplacedValue == null || _ReplacedValue == "")

    •             _ReplacedValue = " ";

    •  

    •          //Alterar a expressão regular para o valor especificado

    •          string strReplace = System.Text.RegularExpressions.Regex.Replace(sReader.ReadToEnd(), _RegularExpression, _ReplacedValue);

    •  

    •          StreamWriter swriter = new StreamWriter(memStrm, System.Text.Encoding.Default); //Recupera a mensagem modificada

    •          swriter.Write(strReplace);

    •          swriter.Flush();

    •          memStrm.Seek(0, System.IO.SeekOrigin.Begin);

    •  

    •          inmsg.BodyPart.Data = memStrm;

    •          pc.ResourceTracker.AddResource(memStrm);

    •  

    •          swriter.Dispose();

    •        }

    •        sReader.Dispose();

    •      }

    •    }

    •    catch (Exception ex)

    •    {

    •      System.Diagnostics.EventLog.WriteEntry("ITGroup.Biztalk.Pipeline.Components",

    • "Ocorreu um erro modificando a mensagem: " + ex.Message + "\n" + ex.StackTrace,                                                     System.Diagnostics.EventLogEntryType.Error);

    •      throw (ex);

    •    }

    •    return inmsg;

    • }       

Compile o projeto e copie a DLL gerada para a pasta \Microsoft BizTalk Server 2006\Pipeline Components

Usando Componente Criado

  1. Clique em File -> New -> Project e escolha “Empty Biztalk Server Project”
  2. Na aba do Toolbox, clique com o botão direito e em “Choose Items”.

    image

  3. Na aba Biztalk Pipelines Component, procure o componente criado.

    image

  4. Marque-o e clique em OK.
  5. Adicione um novo “Receive Pipeline” ao Projeto.
  6. Na área Decode arraste o novo “Receive Decoder”.

    image

  7. Clique no componente, e em propriedades coloque os valores requeridos. Pode-se montar qualquer Expressão Regular.

image

No exemplo será alterado os caracter especial “&” para “e”.

Testando o Receive Pipeline

  1. Abra o Bloco de notas, digite o código abaixo e salve como xml em C:\test.xml.

    image

    O Biztalk fornece um utilitário que nos permite testar o pipeline e verificar o seu funcionamento sem a necessidade de criar send/receive ports. Esta ferramenta pode ser encontrado em \Microsoft BizTalk Server 2009\SDK\Utilities\PipelineTools\pipeline.exe

  2. Execute o utilitário, irá abrir um prompt de comando, então digite:

pipeline -pt "[Nome completo do Assembly criado em ‘Usando Componente Criado’]" -d C:\test.xml –c

image

Ao executar o comando deve aparecer o seguinte resultado:

image

O projeto para Biztalk Server 2006 pode ser baixado em http://custompipeline.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36180

Até a próxima!

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog