Exchange Online with SharePoint - Improve Your App

Preview:

DESCRIPTION

 

Citation preview

Comunidade Portuguesa de SharePoint

15ª Reunião Presencial

10/12/2011

Exchange Online with SharePointImprove your App!

SharePoint work is something you do that nobody notices until you don't do it

Source: http://www.paulswider.com

JOÃO TITO LÍVIO

SharePoint Programmer

MCTS - SharePoint 2010 Application DevelopmentMicrosoft MVP Office Systems:Development (2002-present)

C#, VB.NET, VSTOWindows Forms DevelopmentWebForms DevelopmentSharePoint DevelopmentSharePoint Administration Celebrating 10 Years as MVP

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

Exchange Web Services Managed API

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 ExchangeUsa mensagens EWS SOAP para comunicarCamada 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 Downloadhttp://archive.msdn.microsoft.com/psoutlooklive/Release/ProjectReleases.aspx?ReleaseId=4513

Vantagens

What you see is what you get (Ready Made)Basta instanciar as classes do DLLMenos linhas de CódigoEm 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).

Desvantagens

Estamos limitados ao que a Microsoft Expõem no DLL

Persistência de ObjetosNão é serializável porque não tem construtor padrão.

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 later

15-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 later

DateTime.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

Classes – Folder

Classes – Item

Itens e pastas no Exchange são identificados exclusivamente. No EWS Managed API, itens e pastas têm uma propriedade ID que mantém a sua identidade única. O ID de um item é do tipo ItemId, o ID de uma pasta é do tipo FolderId.

Comunicar com o Exchange On Premises (na vossa empresa) Na Cloud

EWS – Autodisovery Service

EWS Autodiscovery Service

0 – Resolve Utilizador1 – Vai à procura do Web Service2 – Encontra o Servidor4 – Estabelece Ligação5 – Transporta Definições6 – Configura Outlook

EWS Autodiscovery Service TRACE

• 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

dominio.pt > outlook.com > server.outlook.com

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>

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

EWS – Boas Práticas

Best Practices

• Usar Impersonation em vez de passar novas Cred’s• Tentar realizar o menor número de Bindig’s• Ler Documentação

EWS Managed API Referencehttp://msdn.microsoft.com/en-us/library/gg248112(v=EXCHG.80).aspx

User Impersonation

Activar User Impersonation

Enable Impersonation: http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx

User Impersonation

• Porquê?– Non Admin - não tem controlo total sobre o Web Service– Garantimos que executamos todas as operações

service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _user);

DEMO

Gestão de Mensagens

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

Query Básico a Folders

DEMO

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 …

DEMO

Gestão de Mensagens

• 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

Não utilizar ID como QueryString pois ID é reservado no SharePoint 2010

DEMO

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)

DEMO

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:\\inbox\\teste.pdf");replyMessage.Update(ConflictResolutionMode.AlwaysOverwrite);replyMessage.SendAndSaveCopy();

Gestão de Mensagens

• REPLY e FORWARD– O EWS encarrega-se de formatar a mensagem

DEMO

Gestão de Pastas

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);

DEMO

Gestão de Anexos

Gestão de Anexos

• ExchangeService service• EmailMessage message = EmailMessage.Bind• foreach (Attachment att in message.Attachments)

DEMO

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.

SharePoint Online

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=13082

Developing for SharePoint Online with Sandbox Solutionshttp://msdn.microsoft.com/en-us/Office365TrainingCourse_2V_1

SharePoint Online for Office 365 Developer Guidehttp://msdn.microsoft.com/en-us/library/hh147180.aspx

Remote PowerShellMicrosoft Online Service Module

Requisitos para Administração

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 Module

Windows PowerShell 2.0 e AD FS 2.0http://social.technet.microsoft.com/wiki/contents/articles/2735.aspx

Desktop Apps (sign up assistant 7.0)DEMO

Microsoft Online Services Modulehttp://onlinehelp.microsoft.com/en-us/office365-enterprises/ff652560.aspx

Administração Office 365Granular license assignment from PowerShellhttp://community.office365.com/en-us/w/officeapps/granular-license-assignment-from-powershell.aspx

Install and configure the Microsoft Online Services Module for Windows PowerShell for single sign-onhttp://onlinehelp.microsoft.com/en-us/office365-enterprises/ff652560.aspx

PowerShell Toolkit para Live@Eduhttp://archive.msdn.microsoft.com/psoutlooklive/Release/ProjectReleases.aspx?ReleaseId=4513

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 Framework4. Verificar se o Windows PowerShell pode executar

scripts5. Verificar se o WinRM (Windows Remote Management)

permite que o Windows PowerShell se conecte

Instalar e configurar o PowerShell

• Verificar se o Windows PowerShell pode executar scripts

Instalar e configurar o PowerShell

• Verificar se o WinRM permite que o Windows PowerShell se conecte

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

DEMO

Exchange Online UI

DEMO

Questões? Sugestões? Sessões futuras apenas de Gestão PowerShell?

Obrigado! Contactosjtlivio@gmail.com http://pt.linkedin.com/in/jliviohttp://www.facebook.com/jliviohttp://twitter.com/jliviohttp://www.slideshare.net/jlivio1

Meu Online Services Blog: http://exchws.wordpress.com/

Recommended