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
Siga os passos na tela do instalador.
Utilizando o Biztalk Server Pipeline Component Wizard.
- Abra uma instancia do Visual Studio 2005 e clique em File -> New -> Project.
- Em Biztalk Projects clique na opção Biztalk Server Pipeline Component Project.
- Escolha um diretório e um nome para o projeto. Clique em OK.
- Aparecerá a tela de Boas Vindas “Pipeline Component Project Wizard”. Clique em Next.
- Na próxima tela preencha os dados do componente. Clique em Next.
- Preencha o nome, versão e descrição do componente. Clique em Next.
- 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.
- Clique duas vezes em ReplaceString.resx e altere o nome do Componente para “ReplaceString decoder”.
- 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”.
Adicionando Código ao Projeto
- Expanda o region IComponent members e, no método Execute, coloque o código abaixo.
- 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
- Clique em File -> New -> Project e escolha “Empty Biztalk Server Project”
- Na aba do Toolbox, clique com o botão direito e em “Choose Items”.
- Na aba Biztalk Pipelines Component, procure o componente criado.
- Marque-o e clique em OK.
- Adicione um novo “Receive Pipeline” ao Projeto.
- Na área Decode arraste o novo “Receive Decoder”.
- Clique no componente, e em propriedades coloque os valores requeridos. Pode-se montar qualquer Expressão Regular.
No exemplo será alterado os caracter especial “&” para “e”.
Testando o Receive Pipeline
- Abra o Bloco de notas, digite o código abaixo e salve como xml em C:\test.xml.
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
- 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
Ao executar o comando deve aparecer o seguinte resultado:
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