Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Exchange Online with SharePoint - Improve Your App.

1,335 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Exchange Online with SharePoint - Improve Your App.

  1. 1. 15ª Reunião Presencial Comunidade Portuguesa de SharePoint 10/12/2011
  2. 2. Exchange Online with SharePoint Improve your App! SharePoint work is something you do that nobody notices until you dont do itSource: http://www.paulswider.com
  3. 3. JOÃO TITO LÍVIO SharePoint Programmer MCTS - SharePoint 2010 Application Development Microsoft MVP Office Systems:Development (2002-present) C#, VB.NET, VSTO Windows Forms Development WebForms Development SharePoint Development SharePoint Administration Celebrating 10 Years as MVP
  4. 4. Sumário• Exchange Web Services API, o que é? – Introdução – Vantagens – Desvantagens – Evolução – Classes• EWS – Ligação ao Exchange Online – Item – Trabalhar com Mensagens – Folder – Trabalhar com Folders Exchange – Attachments – Trabalhar com Anexos• Integração com o SharePoint 2010 e SharePoint Online• Remote PowerShell e Microsoft Online Service Module para PowerShell• Office 365 UI para gestão de Licenças e Contas Exchange
  5. 5. Exchange Web Services Managed API
  6. 6. Introdução – EWS o que é? DLL fornecido pela Microsoft (Abstraction Layer) http://www.microsoft.com/download/en/details.aspx?id=13480 Comunicação Bidireccional com Exchange Usa mensagens EWS SOAP para comunicar Camada Developer Friendly que utiliza um ASMX A Microsoft encoraja os Developers a Utiliza-la Para gestão de domínio e gestão de contas tem de se utilizar obrigatoriamente PowerShell pois fica de fora da API Existe um PowerShell Toolkit disponível para Download http://archive.msdn.microsoft.com/psoutlooklive/Release/ProjectReleases.aspx?ReleaseId=4513
  7. 7. Vantagens What you see is what you get (Ready Made) Basta instanciar as classes do DLL Menos linhas de Código Em SharePoint facilita muito o Deploy A ter em atenção, mas SharePoint = ~ Máquinas Dedicadas, temos controlo do que está instalado To help prevent conflicts between different versions of the EWS Managed API installed by other applications, do not install the EWS Managed API assembly in the Global Assembly Cache (GAC).
  8. 8. Desvantagens Estamos limitados ao que a Microsoft Expõem no DLL Persistência de Objetos Não é serializável porque não tem construtor padrão.
  9. 9. Evolução05-06-2010Microsoft Exchange Web Services (EWS) Managed API 1.1 BetaTarget Exchange 2010 SP1Supported Operating Systems: Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows VistaNOTE: Requires Microsoft .NET Framework 3.5 and Microsoft Visual Studio 2008 or later15-11-2010Microsoft Exchange Web Services (EWS) Managed API 1.1Target Exchange 2010 SP1Supported Operating Systems: Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows VistaNOTE: Requires Microsoft .NET Framework 3.5 and Microsoft Visual Studio 2008 or laterDateTime.Parse(?)Microsoft Exchange Web Services (EWS) Managed API 1.2Target Exchange 2010 SP2Supported Operating Systems: Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows VistaNOTE: Requires Microsoft .NET Framework 3.5 and Microsoft Visual Studio 2008 or laterhttp://msdn.microsoft.com/en-us/library/dd633710(v=exchg.80).aspxDownload? Ainda não está disponível
  10. 10. Classes – Folder
  11. 11. Classes – ItemItens e pastas no Exchange são identificados exclusivamente. No EWS Managed API, itens e pastas têmuma propriedade ID que mantém a sua identidade única. O ID de um item é do tipo ItemId, o ID deuma pasta é do tipo FolderId.
  12. 12. Comunicar com o ExchangeOn Premises (na vossa empresa)Na Cloud
  13. 13. EWS – Autodisovery Service
  14. 14. EWS Autodiscovery Service 0 – Resolve Utilizador 1 – Vai à procura do Web Service 2 – Encontra o Servidor 4 – Estabelece Ligação 5 – Transporta Definições 6 – Configura Outlook
  15. 15. EWS Autodiscovery Service TRACE dominio.pt > outlook.com > server.outlook.com• Trace ? (Find or discover) Temos de Ativar?• Trace para a CLOUD – Credenciais (Caixa Correio e Password) • Ativar o Trace TraceEnable = true (ou não) – Prevenir que não vamos à nossa AD • Definir a propriedade EnableScpLookup = false (ou não) – Obter o Endpoint (Exchange Service) para a Caixa Correio • Indica-nos o Servidor onde está alojada a Caixa de Correio • https://SERVER.outlook.com/EWS/Exchange.asmx – BIND do Exchange Service Object
  16. 16. EWS Autodiscovery Service TRACE<Trace Tag="AutodiscoverConfiguration" Tid="10" Time="2011-08-02 16:30:13Z">Host returned enabled endpoint flags: Legacy</Trace><Trace Tag="AutodiscoverConfiguration" Tid="10" Time="2011-08-02 16:30:13Z">Trying to get Autodiscover redirection URL from http://autodiscover.DOMINIO.PT/autodiscover/autodiscover.xml.</Trace><Trace Tag="AutodiscoverConfiguration" Tid="10" Time="2011-08-02 16:30:13Z">Redirection URL found: https://autodiscover-s.OUTLOOK.COM/autodiscover/autodiscover.xml</Trace><Trace Tag="AutodiscoverConfiguration" Tid="10" Time="2011-08-02 16:30:13Z">Determining which endpoints are enabled for host autodiscover-s.outlook.com</Trace><Trace Tag="AutodiscoverRequestHttpHeaders" Tid="10" Time="2011-08-02 16:30:14Z">POST /autodiscover/autodiscover.svc HTTP/1.1Content-Type: text/xml; charset=utf-8Accept: text/xmlUser-Agent: ExchangeServicesClient/14.02.0051.000</Trace><Trace Tag="AutodiscoverRequest" Tid="10" Time="2011-08-02 16:30:14Z" Version="14.02.0051.000"> <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:a="http://schemas.microsoft.com/exchange/2010/Autodiscover"xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <a:RequestedServerVersion>Exchange2010</a:RequestedServerVersion><wsa:Action>http://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetUserSettings</wsa:Action>
  17. 17. EWS Autodiscovery em SharePoint• Trace para a CLOUD – Credenciais (Caixa Correio e Password) • Ativar o Trace TraceEnable = true • Prevenir que não vamos à nossa AD (ou não) • Definir a propriedade EnableScpLookup = false (ou não) – Passar diretamente o URL do Serviço • https://SERVER.outlook.com/EWS/Exchange.asmx – Passar um Certificado X509 como Dummy • ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidationHandler – BIND do Exchange Service Object
  18. 18. EWS – Boas Práticas
  19. 19. Best Practices• Usar Impersonation em vez de passar novas Cred’s• Tentar realizar o menor número de Bindig’s• Ler DocumentaçãoEWS Managed API Referencehttp://msdn.microsoft.com/en-us/library/gg248112(v=EXCHG.80).aspx
  20. 20. User Impersonation
  21. 21. Activar User ImpersonationEnable Impersonation: http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx
  22. 22. User Impersonation• Porquê? – Non Admin - não tem controlo total sobre o Web Service – Garantimos que executamos todas as operaçõesservice.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _user);
  23. 23. DEMO
  24. 24. Gestão de Mensagens
  25. 25. Gestão de Mensagens• Folders de Exchange – WellKnownFolderName (ENUM) • ArchiveDeletedItems • ArchiveMsgFolderRoot • ArchiveRecoverableItemsDeletions • ArchiveRecoverableItemsPurges • ArchiveRecoverableItemsRoot • ArchiveRecoverableItemsVersions • ArchiveRoot • Calendar • Contacts • DeletedItems • Drafts • Inbox • Journal • JunkEmail • MsgFolderRoot • Notes • Outbox • PublicFoldersRoot • RecoverableItemsDeletions • RecoverableItemsPurges
  26. 26. Query Básico a Folders
  27. 27. DEMO
  28. 28. Gestão de Mensagens• Obter Mensagens na Inbox – ItemView – SearchFilter – FindItemsResults<Item> (WellKnownFolderName.Inbox) – foreach (Item item in findResults.Items) – Item mess = Item.Bind(GetBinding(), item.Id.UniqueId); • UniqueId • ReceivedDate … – EmailMessage message = mess as EmailMessage; • Subject • From • From.Address …
  29. 29. DEMO
  30. 30. Gestão de MensagensNão utilizar ID como QueryString pois ID é reservado no SharePoint 2010• Renderizar HTML de uma Mensagem – Necessitamos de saber o seu UniqueID – Fazer o request do Body • Plain Text • HTML – Verificar se tem Attachments e InLine Attachments • Tipo “cid:” • Fazer o Load do Content para a Memória • Converter o Content para Base 64 - incluir no HTML – “Despejar” o HTML tratado por exemplo num LITERAL
  31. 31. DEMO
  32. 32. Gestão de Mensagens• Enviar Mensagem através da API – ExchangeService service, – string subject – string body • Tipo que queremos Plain Text ou HTML – IEnumerable<string> mailTo, – IEnumerable<string> mailCc, – IEnumerable<string> mailBcc, – IEnumerable<string> attachments – message.Send (); – message.SendAndSaveCopy(); (FolderID, WellKnownFolderName)
  33. 33. DEMO
  34. 34. Gestão de Mensagens• Responder e Encaminhar Mensagens – message.Reply(messageBody, bool replyAll); – messageForward(messageBody, param[] ToRecipients); – messageForward(messageBody, IEnumerable ToRecipients); – message.CreateReply(); – message.CreateForward(); var message = (EmailMessage) Item.Bind(service, new ItemId(uniqueId), PropertySet.FirstClassProperties); var reply = message.CreateReply(false); reply.BodyPrefix = "Body vai aqui"; var replyMessage = reply.Save(WellKnownFolderName.Drafts); replyMessage.ToRecipients.Add("sharepoint@pt.pt"); replyMessage.CcRecipients.Add("sharepoint@pt.pt"); replyMessage.Attachments.AddFileAttachment("d:inboxteste.pdf"); replyMessage.Update(ConflictResolutionMode.AlwaysOverwrite); replyMessage.SendAndSaveCopy();
  35. 35. Gestão de Mensagens• REPLY e FORWARD – O EWS encarrega-se de formatar a mensagem
  36. 36. DEMO
  37. 37. Gestão de Pastas
  38. 38. Gestão de Pastas• Cada Pasta tem um UniqueID diferente – FolderView view – SearchFilter searchFilter – FindFoldersResults findFolderResults – foreach (Folder myFolder in findFolderResults.Folders) – if (findFolderResults.MoreAvailable) • moffset = moffset + pageSize; • EnumeraPastasRoot(service, moffset);
  39. 39. DEMO
  40. 40. Gestão de Anexos
  41. 41. Gestão de Anexos• ExchangeService service• EmailMessage message = EmailMessage.Bind• foreach (Attachment att in message.Attachments)
  42. 42. DEMO
  43. 43. Mailbox vs Shared Mailbox• Mailbox requer uma Licença Office 365• Shared Mailbox não requer uma Licença Office 365, mas cada utilizador que acede à mesma necessita de uma Licença.
  44. 44. SharePoint Online
  45. 45. SharePoint Online• Sandbox Solution – Como sabem o DLL não entra no Office 365 – Workaround’s • Criar uma camada de Web Services • MS Exchange Server 2010 SP2 Web Services SDK http://www.microsoft.com/download/en/details.aspx?id=13082Developing for SharePoint Online with Sandbox Solutionshttp://msdn.microsoft.com/en-us/Office365TrainingCourse_2V_1SharePoint Online for Office 365 Developer Guidehttp://msdn.microsoft.com/en-us/library/hh147180.aspx
  46. 46. Remote PowerShellMicrosoft Online Service Module
  47. 47. Requisitos para Administração
  48. 48. CmdLets Enterprise• Instalar Windows PowerShell 2.0 e AD FS 2.0• Configurar as Desktop Apps (sign up assistant 7.0)• Instalar Microsoft Online Services ModuleWindows PowerShell 2.0 e AD FS 2.0http://social.technet.microsoft.com/wiki/contents/articles/2735.aspxDesktop Apps (sign up assistant 7.0)DEMOMicrosoft Online Services Modulehttp://onlinehelp.microsoft.com/en-us/office365-enterprises/ff652560.aspx
  49. 49. Administração Office 365Granular license assignment from PowerShellhttp://community.office365.com/en-us/w/officeapps/granular-license-assignment-from-powershell.aspxInstall and configure the Microsoft Online Services Module for WindowsPowerShell for single sign-onhttp://onlinehelp.microsoft.com/en-us/office365-enterprises/ff652560.aspx
  50. 50. PowerShell Toolkit para Live@Edu http://archive.msdn.microsoft.com/psoutlooklive/Release/ProjectReleases.aspx?ReleaseId=4513
  51. 51. Instalar e configurar o PowerShell 1. Desinstalar versões anteriores do Windows PowerShell do seu computador 2. Desinstalar versões anteriores do WinRM do seu computador 3. Instalar o Windows Management Framework 4. Verificar se o Windows PowerShell pode executar scripts 5. Verificar se o WinRM (Windows Remote Management) permite que o Windows PowerShell se conecte
  52. 52. Instalar e configurar o PowerShell • Verificar se o Windows PowerShell pode executar scripts
  53. 53. Instalar e configurar o PowerShell• Verificar se o WinRM permite que o Windows PowerShell se conecte
  54. 54. Conetar ao Windows PowerShellMáximo de 3 conexões simultâneas$LiveCred = Get-Credential$Session = New-PSSession -ConfigurationName Microsoft.Exchange-ConnectionUri "https://pod51011psh.outlook.com/PowerShell-LiveID?PSVersion=2.0"-Credential $LiveCred -Authentication Basic -AllowRedirection$Office365PS = Import-PSSession $Session
  55. 55. DEMO
  56. 56. Exchange Online UI
  57. 57. DEMO
  58. 58. ReferênciasMicrosoft MSDNhttp://msdn.microsoft.com/en-us/Microsoft Exchange Serverhttp://msdn.microsoft.com/en-us/library/bb418718(v=EXCHG.80).aspxOffice 365 Helphttp://onlinehelp.microsoft.com/en-us/office365-enterprises/ff637592.aspx
  59. 59. Questões? Sugestões?Sessões futuras apenas de Gestão PowerShell?
  60. 60. Obrigado!Contactosjtlivio@gmail.comhttp://pt.linkedin.com/in/jliviohttp://www.facebook.com/jliviohttp://twitter.com/jliviohttp://www.slideshare.net/jlivio1Meu Online Services Blog:http://exchws.wordpress.com/

×