Recentemente apresentei uma sessão sobre “Office Graph” no Microsoft Developer Tech Refresh, em Lisboa. Tentando ter uma noção sobre o nível de conhecimento da audiência sobre os temas que ía abordar, perguntei quem conhecia o Office Graph e o Office Delve. Fiquei surpreendido por verificar que é um assunto relativamente desconhecido da maioria das pessoas. Na realidade, grande parte dos espectadores que ali estavam a ouvir-me não fazia a mais pequena ideia do que é o Office Graph e, por essa razão, pensei que seria uma boa ideia escrever um artigo introdutório sobre o tema. Vamos então começar pelo início…
O que é um grafo?
Começar pelo início implica explicar o que é um grafo (ou graph, em inglês). Um grafo é um conceito matemático que é também utilizado em computação como uma estrutura de dados, composta por nós (nodes) e arestas (edges). Cada nó representa algum tipo de entidade, e cada aresta uma relação entre duas dessas entidades. Cada aresta pode ainda ter uma direção e armazenar informação.
As redes sociais, como o Facebook, o LinkedIn ou o Yammer, utilizam este tipo de estrutura de dados para representar as relações entre pessoas e os conteúdos armazenados nas mesmas.
O que é o Office Graph?
É mais fácil de explicar o que é o Office Graph descrevendo o que é que este faz. Vamos focar-nos numa pessoa que utiliza o Office 365 nas suas atividades do dia-a-dia enquanto trabalha na sua empresa. Cada ação que esta pessoa realiza envia um sinal para o Office Graph que, depois de processado, pode originar uma nova relação entre dois dos seus nós.
Um sinal é enviado para o Office Graph sempre que:
- Eu abro um documento no SharePoint Online ou no OneDrive for Business;
- Um colega partilha um documento comigo;
- Um colega me envia um email;
- Um colega me apresenta um slide deck em PowerPoint;
- Eu realizo um “gesto social”, ou seja, algo como pressionar o botão “like” num conteúdo do Yammer da empresa.
Mas não é apenas de sinais que se alimenta o Office Graph, este também consegue obter informação sobre a minha organização ligando-se ao Azure Active Directory (AAD) da minha organização e ao meu perfil de utilizador no SharePoint Online. A partir desta informação, o Office Graph constrói um mapa organizacional da minha empresa e passa a saber quem é o meu manager e quem é que reporta a mim.
Adicionalmente, o Office Graph utiliza mecanismos de aprendizagem (machine learning) para identificar automaticamente as pessoas com quem eu trabalho ativamente, baseado em quem partilha informação comigo e nas mensagens de correio eletrónico que eu troco com outros utilizadores da minha organização. Por exemplo, se eu recebo frequentemente emails do João e respondo imediatamente, o Office Graph vai inferir que eu trabalho proximamente com ele. Por outro lado, se eu recebo emails da Joana e não respondo ou demoro mais tempo a responder, o Office Graph vai inferir que a relação de trabalho não é tão próxima.
O Office Graph faz isto para mim e para todos os colegas que trabalham na minha organização, assumindo que eles também usam o mesmo tenant de Office 365. É por isto que o Office Graph é também apelidado de “cérebro do Office 365”.
O que está guardado no Office Graph?
Atualmente, os nós do Office Graph são Documentos e Pessoas mas brevemente haverá novos tipos de nós. O Profile passará a viver no Graph, os Groups também terão os seus próprios nós assim como algumas das ações realizadas pelos utilizadores (que neste momento correspondem apenas a arestas).
Nos eventos Build e Ignite deste ano, a Microsoft partilhou algumas estatísticas impressionantes que nos permitem ter uma ideia da escala que o Office Graph atinge:
- O Office 365 armazena mais de 70 PetaBytes de informação espalhada por todos os seus tenants. Isto corresponde a mais de 78.812.993.478.983.680 bytes!
- Foram enviados mais de 60 mil milhões de anexos de email através do Exchange Online;
- Todos os meses são marcadas 850 milhões de reuniões através do Exchange Online;
- O Office Graph tem atualmente mais de 4 biliões de nós e 8 mil milhões de relações entre nós (arestas);
- 25% de todas as relações são entre pessoas.
Esta escala só é possível na nuvem, onde o poder computacional e a capacidade de armazenamento são praticamente ilimitados. É também por isso que o Office Graph não está disponível on premises. No entanto, será possível utilizar uma abordagem híbrida e ligar uma farm de SharePoint Server 2016 on premises a um tenant de Office 365 para tirar partido do Office Graph numa organização. Mas isso terá que ser tema para outro artigo.
É seguro?
Uma questão importante que surge frequentemente quando se fala no Office Graph é a da privacidade. Nem todas as ações realizadas pelos utilizadores são públicas, algumas são privadas:
- Visualizar um documento é uma ação privada e não será partilhada com outros utilizadores. O número de vezes que eu abro um determinado documento é utilizado para calcular quão importante esse documento é para mim, e quão forte é a minha relação com o autor desse documento. No entanto, essa contagem nunca é partilhada com ninguém.
- O envio de emails também é uma ação privada, apenas disponível ao remetente e ao destinatário da mensagem de email, assim como qualquer anexo da referida mensagem.
No que respeita à segurança, o Office Graph respeita as permissões de acesso que foram definidas sobre cada conteúdo, independentemente de este estar armazenado no SharePoint Online, no OneDrive for Business ou no Exchange Online. Cada utilizador conseguirá ver apenas os conteúdos aos quais tem acesso.
O que é o Office Delve?
O Office Delve é uma aplicação web, recentemente adicionada à família de aplicações que constitui o Office 365. Foi anunciada na SPC (SharePoint Conference) em 2014 com o nome de código Oslo (ou Oslo Experience). Começou por ser uma demo interna que mostrava como apresentar a informação armazenada no Office Graph e foi construída pela equipa da Microsoft de Oslo, na Noruega, que anteriormente era parte da FAST antes desta ser adquirida pela Microsoft.
O Office Delve é descrito como uma experiência de Search & Discovery (ou Pesquisa & Descoberta) porque, por um lado, permite-nos fazer pesquisas sobre pessoas e documentos através da introdução de termos numa caixa de pesquisa (a componente de Pesquisa mais tradicional). Por outro lado, apresenta-nos os conteúdos que nos interessam sem que seja necessário pesquisar por eles (a tal componente de Descoberta). Este é, aliás, o seu principal elemento diferenciador e faz com que o Office Delve funcione especialmente bem como a homepage personalizada do Office 365.
A Home Page
Para quem tem uma subscrição de Office 365, o acesso ao Office Delve é feito através do menu de aplicações do Office 365 (pressionando o botão do waffle no canto superior esquerdo) e clicando no ícone do Delve.
É imediatamente apresentada a Home Page que mostra os conteúdos que o Office Graph “pensa” que me interessam. Podem ser conteúdos que eu próprio editei, que algum colega partilhou comigo ou que foram editados por um colega com o qual tenho interações frequentes.
Do lado esquerdo, o Delve apresenta a lista de pessoas com as quais eu trabalho. São sempre utilizadores que pertencem ao mesmo tenant de Office 365, o que normalmente quer dizer que trabalham na mesma empresa que eu. Esta informação é automaticamente calculada com base nas trocas de emails, documentos partilhados, visualizados e editados.
Cada conteúdo é apresentado sob a forma de um cartão contendo a seguinte informação:
- A razão que justifica que o conteúdo esteja a ser mostrado
- O título do conteúdo
- Imagem extraída automaticamente do conteúdo
- Tipo de conteúdo (ou aplicação associada a este)
- Localização do conteúdo
- Ícones para partilhar o conteúdo por email, para gerir permissões de acesso e para iniciar uma conversação no Yammer sobre o conteúdo
- Botão para adicionar o conteúdo a um Board
A Me Page
A Me Page apresenta informação que está diretamente relacionada comigo. É composta por duas subpáginas: a Activity Page e a Profile Page
- A Activity Page apresenta os conteúdos que eu editei pessoalmente ou que foram explicitamente partilhados comigo. Nesta página é ainda possível aceder a informação adicional sobre mim através da hiperligação para a Trending Around Me Page que, por sua vez, mostra as pessoas e os conteúdos que o Office Graph automaticamente inferiu que estão relacionados comigo, com base na minha utilização da plataforma.
- A Profile Page apresenta uma vista agregada do meu perfil de utilizador, com informação obtida a partir da Active Directory da minha organização e do perfil de utilizador do Office 365. O diagrama organizacional (organograma) é automaticamente calculado com base no valor da propriedade Manager de cada perfil de utilizador.
Boards
No Delve, um Board é um grupo de cartões de conteúdos, agregados através de uma etiqueta (tag). É um conceito com algumas semelhanças ao utilizado pelo Pinterest mas com algumas pequenas diferenças.
Os Boards são sempre públicos, o que quer dizer que qualquer pessoa consegue encontrar um Board que eu criei apenas pesquisando pela etiqueta que lhe está associada e poderá até adicionar-lhe os seus próprios conteúdos. No entanto, porque tudo no Delve se baseia na pesquisa, cada utilizador conseguirá ver apenas os conteúdos aos quais tem acesso. Isto significa que dois utilizadores que acedem a um determinado Board verão, provavelmente, conjuntos diferentes de cartões de conteúdos.
Interrogar o Office Graph
Dado todo o conteúdo armazenado no Office Graph, é natural que os developers tenham interesse em interrogá-lo e queiram usar todo este conhecimento nas suas próprias aplicações de negócio. Atualmente há duas formas de interrogar o Office Graph:
- Através de Graph Query Language (GQL)
- Através da Office 365 Unified API
Graph Query Language
A Graph Query Language (GQL) foi desenvolvida para ser utilizada pelo Office Delve e funciona sobre a API REST da pesquisa. Utiliza uma sintaxe semelhante à FQL (FAST Query Language, a linguagem utilizada pela plataforma de pesquisa FAST e suportada também no SharePoint 2013) ou não tivessem ambas sido criadas pelas mesmas pessoas.
Antes de mergulhar no GQL, é necessário discutir alguns conceitos importantes:
- No Office Graph, todos os nós (nodes) representam uma entidade, como um documento ou uma pessoa, e cada nó é identificado por um número inteiro;
- Cada aresta (edge) representa uma ação entre dois nós e tem uma direção, ou seja, um nó de origem (chamado actor) e um nó de destino (chamado object);
- Uma aresta pode ainda ter informação adicional, como um timestamp e um peso (weight).
Em GQL existe apenas um operador – ACTOR
– que é usado da seguinte forma:
ACTOR(<ActorId> [, filter])
O primeiro parâmetro é sempre o identificador do nó sobre o qual queremos fazer a query. Opcionalmente, pode ser adicionada uma expressão para filtrar os resultados.
Por exemplo, para obter todos os itens modificados por um utilizador específico, utilizaria a seguinte query GQL:
ACTOR(1234, action:1003)
Em que:
1234
é o identificador do utilizador (ou seja, do seu nó)1003
é o código da ação “modified by”
Para interrogar o Office Graph é necessário injetar a query GQL num pedido à API REST da pesquisa, utilizando o parâmetro Properties
tal como apresentado abaixo:
https://[URL tenant]/_api/search/query?QueryText='*' &Properties='GraphQuery:actor(1234\,action\:1033)' &SelectProperties='DocId,Title'
Para obter os itens relacionados com o utilizador autenticado, pode ser utilizada a query abaixo, em que a palavra ME é automaticamente substituída pelo identificador deste.
ACTOR(ME)
É possível ainda combinar mais do que uma expressão de filtro através de operadores lógicos. O exemplo abaixo permite obter todos os itens modificados ou visualizados pelo utilizador 1234.
ACTOR(1234, OR(action:1001, action:1003))
Como indicado acima, as arestas do grafo são caracterizadas por vários atributos. Um deles é o código da ação (action
) mas existem outros como o time
que, quando aplicável, representa a data e hora em que decorreu determinada ação representada pela aresta.
Para filtrar o grafo por este atributo, utiliza-se a query abaixo que retorna todos os itens modificados pelo utilizador autenticado no dia 15-08-2015.
ACTOR(ME, AND(action:1003, time:datetime(2015-08-15)))
Como se pode verificar pelos exemplos apresentados, o filtro pela ação é o mais comum, mas requer que se saiba o código da ação pela qual se pretende filtrar o grafo. A tabela abaixo resume as ações e respetivos códigos.
Ação | ID | Descrição |
PersonalFeed | 1021 | Feed do utilizador (actor) tal como mostrado na sua homepage no Delve. Privada. |
Modified | 1003 | Itens modificados pelo utilizador nos últimos 3 meses. |
OrgColleague | 1015 | Pessoas que reportem ao mesmo manager que o utilizador. |
OrgDirect | 1014 | Pessoas que reportam ao utilizador. |
OrgManager | 1013 | A pessoa a quem o utilizador reporta. |
WorkingWith | 1019 | Pessoas com as quais o utilizador comunica ou colabora com frequência. Privada. |
TrendingAround | 1020 | Itens populares junto das pessoas com as quais o utilizador comunica ou colabora com frequência. |
Viewed | 1001 | Itens visualizados pelo utilizador nos últimos 3 meses. Privada. |
WorkingWithPublic | 1033 | Versão pública da aresta WorkingWith. |
Muitas outras queries podem ser realizadas com GQL. Para saber mais, visite este endereço: https://msdn.microsoft.com/en-us/office/office365/howto/query-Office-graph-using-gql-with-search-rest-api.
Office 365 Unified API
A nova Unified API expõe todas as APIs do Office 365 a partir de um único endpoint, oferecendo aos developers uma experiência mais robusta e consistente. A utilização de um único fluxo de autenticação também é muito mais simples do que realizar a autenticação separadamente para cada API do Office 365.
A Unified API pode ser utilizada para operações CRUD (Create, Read, Update and Delete) sobre múltiplas entidades da plataforma Office 365, desde Users (utilizadores) e Groups (grupos) até Files (documentos) e Mail (mensagens de email), e até ao Office Graph.
Atualmente, a Unified API ainda está em Preview e algumas das operações ainda não estão disponíveis. No entanto, já é possível utilizá-la com qualquer tenant de Office 365 utilizando o endpoint com o endereço:
https://graph.microsoft.com/beta/
Além de ações relacionadas com Users, Groups ou Files, a Unified API fornece o acesso a duas ações muito importantes do Office Graph: TrendingAround e WorkingWith.
A ação TrendingAround retorna todos os nós relacionados com um utilizador específico, tal como inferido pelo Office Graph, e pode ser invocada da seguinte forma:
https://graph.microsoft.com/beta/me/trendingAround
A ação WorkingWith retorna a lista dos colegas que colaboram ativamente com um determinado utilizador, tal como inferido pelo Office Graph, e pode ser invocada da seguinte forma:
https://graph.microsoft.com/beta/me/workingWith
Para mais informação sobre como utilizar a Unified API:
- http://dev.office.com/unifiedAPIs
- https://msdn.microsoft.com/en-us/office/office365/howto/office-365-unified-api-overview
O que é que aí vem?
O Office Graph e o Office Delve são ainda tecnologias muito recentes, com muito para evoluir e, por estarem tão intimamente relacionadas, evoluirão juntas.
O roadmap do Office Graph inclui:
- A nova Unified REST API, atualmente em preview;
- Client SDKs para simplificar a integração e a autenticação com a nova API;
- Extensibilidade das entidades permitindo aos developers definir entidades próprias que são também armazenadas no Graph, tal como entidades de negócio;
- Conetores para permitir a outros sistemas como Dynamics CRM, Salesforce ou Trello, o envio de sinais para o Office Graph;
- Custom Analytics;
- Notificações sempre que determinadas ações são realizadas sobre o Graph;
- Licenciamento para a utilização do Office Graph.
No que respeita ao Office Delve, podem esperar:
- Uma nova Profile Page mais rica;
- Uma nova área para os Office 365 Groups com informação analítica;
- Uma nova área dedicada à organização com informação analítica.
Para saber mais…
Para quem está interessando em aprender mais sobre Office Graph, aqui ficam alguns links interessantes:
- Aprender sobre Office Graph
http://dev.office.com/officegraph - Criar apps com Office 365 API e com a Unified API
https://msdn.microsoft.com/en-us/office/office365/api/api-catalog - Testar a Office Graph Preview API
http://msdn.microsoft.com/en-us/library/office/dn783218(v=office.15).aspx