BrSilverlight

Tutoriais e dicas sobre Silverlight

Sobre o autor

Sou Breno Ferreira, desenvolvedor em um Centro de Tecnologia em Petrópolis especializado em Silverlight. Criei este site com o objetivo de postar dicas, tutoriais e artigos sobre Silverlight, WPF e tecnologias Microsoft.

 

Novidades do Silverlight 4 – Parte III: COM Interop

Introdução

Nos posts anteriores, iniciei uma série de tutoriais que cobre algumas das novas features do Silverlight 4, e escrevi especificamente sobre Elevated Trust em aplicações Out-of-Browser e como ler o feed RSS dos webcasts no MSDN.

Hoje, irei explicar como iremos podemos acessar recursos disponíveis na máquina do usuário através de interfaces COM.

Voce pode baixar o código deste tutorial no link abaixo:

http://cid-1498c467c14dc20b.skydrive.live.com/self.aspx/BrSilverlight/Tutoriais/MsdnWebcastsCalendar.zip

O que é COM?

COM, ou Component Object Model, é uma tecnologia desenvolvida pela Microsoft na década de 90 para facilitar o desenvolvimento de componentes (bibliotecas). Esses componentes podem ser usados por vários processos independentes, através de interfaces que abstraem a funcionalidade por debaixo dos panos. Assim, chamadas a objetos COM são feitas sem necessariamente saber-se da implementação, bastando chamar os métodos especificados na interface.

Voce pode pensar em COM como serviços que podem ser chamados (através dessas interfaces) por processos rodando na máquina do usuário. Um método é chamado, que irá fazer alguma tarefa, e devolver, se necessário, alguma resposta.

Obs: note que COM é uma tecnologia presente somente em ambientes Windows. Por isso, quando tentarmos acessar bibliotecas COM em nossas aplicações Silverlight, devemos checar, primeiramente, se estamos rodando fora do browser com Elevated Trust e também se a aplicação está rodando em um ambiente Windows. Para saber mais sobre COM, acesse o artigo na Wikipedia e a documentação na MSDN 

Usando COM no Silverlight 4

Para acessar as interfaces COM disponíveis na máquina do usuário, usamos a classe ComAutomationFactory, que possui métodos para acessar e retornar referências de interfaces COM.

Primeiramente, antes de tentarmos acessar qualquer objeto COM, devemos saber se é possível acessá-la (somente é possível acessar bibliotecas COM se estivermos rodando Out-of-Browser com Elevated Trust e em ambiente Windows). Para isso, a classe ComAutomationFactory possui uma propriedade chamada IsAvailable, que já verifica isso para nós.

Para acessarmos uma referência a uma interface COM, devemos chamar o método CreateObject, passando o ProgrammaticID da biblioteca COM que desejamos acessar. Esse método nos retorna um IDisposable, pois depois de feitas todas as operações necessárias, devemos liberar as referências ao objeto COM, chamando o método Dispose().

Como o Silverlight não tem como saber quais são os métodos e propriedades da interface, não é possível ter um objeto estaticamente tipado, e assim termos o adorado Intellisense no Visual Studio. As variáveis que guardam as referências das interfaces COM deverão ser do tipo Object em VB ou dynamic em C#. Assim, os tipos serão determinados em tempo de execução.

Utilizando a API do Outlook

Sem mais teoria, vamos a prática. No projeto Silverlight, adicione uma classe chamada OutlookApplication. Essa classe irá ter um método, que irá criar um item no calendário do Outlook, e uma propriedade que irá determinar se a aplicação tem as permissões necessárias para fazer COM Interop.

Adicione o seguinte código a classe OutlookApplication:

Code Snippet
  1. public static Boolean IsAvailable { get { return ComAutomationFactory.IsAvailable; } }
  2.  
  3. public static void CreateCalendarItem ( FeedItemModel feedItem )
  4. {
  5.     try
  6.     {
  7.         using ( dynamic outlook = ComAutomationFactory.CreateObject ( ( "Outlook.Application" ) ) )
  8.         {
  9.             dynamic appointment = outlook.CreateItem ( 1 ); //1 - AppointmentItem on calendar. More info: http://msdn.microsoft.com/en-us/library/bb208104.aspx
  10.             appointment.Subject = feedItem.Title;
  11.             appointment.Body = feedItem.Description;
  12.             appointment.Duration = feedItem.Duration;
  13.             appointment.Start = feedItem.Date;
  14.             appointment.End = feedItem.Date.AddMinutes ( feedItem.Duration );
  15.             appointment.Location = "Live Meeting";
  16.             appointment.ReminderSet = true;
  17.             appointment.ReminderMinutesBeforeStart = 15;
  18.             appointment.Save ( );
  19.             appointment.Send ( );
  20.         }
  21.     }
  22.     catch ( Exception )
  23.     {
  24.         throw;
  25.     }
  26. }

Snippet 1

Primeiramente, definimos a propriedade IsAvailable, que verifica se a aplicação possui privilégios para chamar objetos COM.

O método CreateCalendarItem, recebe um objeto que guarda um item do RSS dos Webcasts com as informações sobre título, data, duração, etc…

O objeto outlook, guarda a referência da interface COM. Com esse objeto, podemos chamar os métodos e propriedades expostos pela interface. Note que usamos um bloco using. Com isso garantimos que no final da operação, todos os recursos e memória serão liberados.

Em seguida, chamamos o método CreateItem, que irá criar um objeto referente a um item no calendário do Outlook. Setamos algumas propriedades, como

  • Subject (assunto)
  • Body(descrição)
  • Duration(duração)
  • Start e End (data de início e fim, respectivamente)
  • Location (local)
  • ReminderSet (se um aviso é mostrado ao usuário antes do evento começar)
  • ReminderMinutesBeforeStart (quanto tempo antes do evento começar, o aviso é mostrado ao usuário)

Finalmente, chamamos os métodos Save e Send, que salvam o item no calendário do Outlook.

No próximo post, iremos juntar tudo o que fizemos até agora e aplicar o pattern MVVM utilizando a interface ICommand. Até lá

Breno Ferreira


Permalink | Comentários (0) | Post RSSRSS comment feed

Comentários

Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading