Criar portas dinâmicas de envio Biztalk 2010 [pt-BR]

Através da definição de portas dinâmicas em BizTalk é possivel fazer reencaminhamento de mensagens sem definir portas fisicas, isto porque estas são configuradas em runtime, através da sua definição dentro do workflow do BizTalk.

Para mostrar a facilidade e utilidade deste tipo de configurações vou recorrer a um pequeno exemplo, temos uma mensagem que chega à nossa orquestração, não sofre qualquer tipo de mapeamento e é automáticamente enviada para um determinado email. Este email terá um corpo de texto e a mensagem de chegada (XML) como anexo. Para enviar os emails utilizaremos as potencialidades do adaptador SMTP que o Biztalk Server 2010 nos fornece.

Assim para implementar um sistema deste tipo começamos por na nossa orquestração definir uma porta virtual como dinâmica:

O próximo passo é criar as mensagens que serão utilizadas no nosso processo de negócio. No exemplo que vou aqui demonstrar necessitaremos de duas, uma que será a mensagem que entra na orquestração (Schema de Origem) e uma outra que será a constituição do nosso email. Como decidi que o email teria um anexo e um corpo de texto criamos um tipo especial ara esta mensagem de email.

Assim, a primeira mensagem, Receive é criada da seguinte forma:

Ou seja, definida com o tipo de mensagem correspondente ao nosso schema de entrada. A segunda mensagem será do tipo multipart message pois queremos que esta mensagem esteja dividida em corpo do email e anexo. Asua definição é a seguinte:

Com as mensagens e os seus tipos definidos, chega a parte de criar a orquestração completa. Para o exemplo que vos descrevi no inicio do post, necessitamos do seguinte processo de negócio:

Como podemos ver, temos uma porta de recepção dos ficheiros xml, um elemento de construcção da mensagem de saida (onde vamos aplicar todo o código para criar a mensagem de email com base na mensagem de recepção e definir toda a estrutura do SMTP), uma mensagem de saida que será o resultado final da construção da mensagem de email, e duas portas, uma de recepção e uma outra de envio. Esta porta de envio tem de ser configurada nas propriedades da seguinte forma:

Com a porta bem definida chega a parte mais complexa, a construçaão da expressão que vamos colocar no elemento de construcção de mensagens, isto porque temos de definir o body e o anexo da mensagem de saida e construir toda definição do SMTP. O código a aplicar é o seguinte para este exemplo:

MsgEmail.Attachment = Receive;

MsgEmail.Attachment(Microsoft.XLANGs.BaseTypes.ContentType) = “text/xml”;

 

MsgEmail.Body = “Consegui por isto a funcionar!!”;

       

MsgEmail(SMTP.EmailBodyText) = MsgEmail.Body;

MsgEmail(SMTP.Subject) = “Já funciona!!!”;

MsgEmail(SMTP.From) = “email do emissor”;

MsgEmail(SMTP.MessagePartsAttachments) = 2;

MsgEmail(SMTP.SMTPHost) = “vosso servidor smtp”;

MsgEmail(SMTP.SMTPAuthenticate) = 1;

MsgEmail(SMTP.EmailBodyTextCharset) = “UTF-8”;

MsgEmail(SMTP.Username) = “o vosso username”;

MsgEmail(SMTP.Password) = “passwrod”;

 

PortSend(Microsoft.XLANGs.BaseTypes.Address) = “mailto:alguem@iol.pt”;

A explicação do código é simples, as duas primeiras linhas defininem o anexo da mensagem de email como a mensagem xml que chega à orquestração e também definem o tipo de conteúdo do anexo, neste caso é um xml.

A terceira linha define o texto do email com uma determinada string (podemos utilizar uma propriedade promovida do xml de chegada).

O resto das linhas é a definição do SMTP, começando por atribuir o corpo do texto à parte do body da mensagem de email construida, passando pela definição do assunto do email (“Já funciona”), em terceiro definimos o email do emissor, depois dizemos quantas partes da mensagem de envio (MsgEmail) são enviadas como anexo. Neste caso envio as duas partes da mensagem. A quinta linha define o servidor smtp que querem utilizar, depois indicamos se o smtp utiliza autenticação (0  não/ 1 sim), caso digamos que a autenticação é 1 temos de definir o username e a password como podemos ver no código. É obrigatório definir o charset do conteudo do email se não queremos ter um erro de execução. Em último lugar vem a linha talvez mais importante pois é a que invoca a porta dinâmica que criamos na orquestração (PortSend é o nome da porta, devem substituir pelo nome da vossa porta dinâmica de envio), chamando a propriedade do endereço para onde enviar o email.

Guardamos o projecto, publicamos, no biztalk admininstrator temos de criar apenas a porta fisica de recpção e associá-la à porta virtual da orquestração de recepção. Não criamos nenhuma porta fisica de envio neste exemplo pois já o fazemos do código criado. Se virmos na biztalk administration console a orquestração está lá uma porta fisica criada (automáticamente).

Só falta por o projecto a correr e testar. Se tudo foi bem feito temos uma porta de envio criada dinâmicamente.

Obrigado,

Rui Machado

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s