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!
 
 



 
Postar um comentário