<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Olivier Carpentier's blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ocarpen/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ocarpen/feed.xml</link>
    <description>.Net coder, SharePoint fan and Visual Studio automation addict</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:21:59 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SharePoint Server 2016 IT Preview disponible sur Azure IaaS</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/sharepoint-server-2016-it-preview-disponible-sur-azure-iaas</link>
      <pubDate>Mon, 31 Aug 2015 06:20:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/08/31/sharepoint-server-2016-it-preview-disponible-sur-azure-iaas/</guid>
      <description><![CDATA[Depuis quelques jours, SharePoint Server 2016 IT Preview est disponible sur Azure IaaS en tant que...]]></description>
      <content:encoded><![CDATA[<p>Depuis quelques jours, SharePoint Server 2016 IT Preview est disponible sur Azure IaaS en tant que mod&egrave;le de machine virtuelle.</p>
<p>Tr&egrave;s pratique pour d&eacute;marrer rapidement une machine virtuelle sur Windows Server 2012 Datacenter, avec les pr&eacute;requis et les binaires de SharePoint Server 2016 Preview.</p>
<p>Bien suivre les recommandations de sizing (A4 minimum) :</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0525.SP2016-AzureIaaS.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0525.SP2016_2D00_AzureIaaS.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0525.SP2016-AzureIaaS.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0525.SP2016_2D00_AzureIaaS.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Quelques nouvelles fonctionnalités de SharePoint Server 2016 Preview</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/quelques-nouvelles-fonctionnalits-de-sharepoint-server-2016-preview</link>
      <pubDate>Tue, 25 Aug 2015 12:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/08/25/quelques-nouvelles-fonctionnalits-de-sharepoint-server-2016-preview/</guid>
      <description><![CDATA[Et voil&agrave;, la tr&egrave;s attendue version Preview de SharePoint Server 2016 est enfin...]]></description>
      <content:encoded><![CDATA[<p>Et voil&agrave;, la tr&egrave;s attendue version Preview de SharePoint Server 2016 est enfin disponible !</p>
<p>&nbsp;</p>
<h2>Les liens importants</h2>
<p>&nbsp;</p>
<p>Si vous souhaitez la t&eacute;l&eacute;charger, vous pouvez suivre les liens suivants :</p>
<p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=48712">https://www.microsoft.com/en-us/download/details.aspx?id=48712</a></p>
<p>Voici quelques autres liens importants &agrave; conna&icirc;tre :</p>
<p>SharePoint Server 2016 IT Preview Quick Start Guide: <br /><a href="http://www.microsoft.com/en-us/download/details.aspx?id=48714">http://www.microsoft.com/en-us/download/details.aspx?id=48714</a></p>
<p>SharePoint Server 2016 IT Preview Reviewer Guide<br /><a href="http://www.microsoft.com/en-us/download/details.aspx?id=48713">http://www.microsoft.com/en-us/download/details.aspx?id=48713</a></p>
<p>SharePoint Server 2016 IT Preview Datasheet<br /><a href="http://www.microsoft.com/en-us/download/details.aspx?id=48715">http://www.microsoft.com/en-us/download/details.aspx?id=48715</a></p>
<p>La documentation technique (Technet):<br /><a href="https://technet.microsoft.com/en-us/library/cc303422(v=office.16).aspx">https://technet.microsoft.com/en-us/library/cc303422(v=office.16).aspx</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Les nouveaut&eacute;s fonctionnelles</h2>
<p>&nbsp;</p>
<p>Chers amis francophones, voici une pr&eacute;sentation (non exhaustive) en fran&ccedil;ais de quelques&nbsp;nouveaut&eacute;s <span style="text-decoration: underline;">fonctionnelles</span> (et uniquement elles)&nbsp;apport&eacute;es par cette version. Vous pourrez retrouver dans de futurs billets les nouveaut&eacute;s techniques (pour les IT Pro).</p>
<p>Si, en plus de SharePoint Server, vous &ecirc;tes utilisateur de SharePoint Online, peut &ecirc;tre connaisez vous d&eacute;j&agrave; certaines des nouveaut&eacute;s fonctionnelles apport&eacute;es par cette nouvelle version. En effet, il est bon de rappeler que depuis la version 2013, les &eacute;quipes produit SharePoint travaillent d'abord sur la version Online de SharePoint, puis reversent progressivement les nouveaut&eacute;s vers SharePoint Server. Dernier conseil : m&ecirc;me en tant que fan de SharePoint Server, il est imp&eacute;ratif &agrave; mon sens aujourd'hui de bien conna&icirc;tre SharePoint Online qui bouge rapidement et est plus riche de jour en jour.</p>
<p>&nbsp;</p>
<h4>La barre de navigation, appel&eacute;e d&eacute;sormais "Apps Launcher"</h4>
<p>Finit la "barre bleue" en haut par d&eacute;faut avec le mot SharePoint &agrave; gauche et &agrave; droite les liens vers OneDrive, Newfeed/Yammer et Sites. D&eacute;sormais, SharePoint Server 2016 reprend le look and feel d'Office 365 pour pr&eacute;senter un acc&egrave;s sous forme de "lanceur applicatif" aux diff&eacute;rentes applications. En haut &agrave; droite on retrouve la photo de profil de l'utilisateur, ainsi qu'un lien vers les Apps mises en avant par l'administrateur.</p>
<p>Bien plus conforme au visuel d'Office 365, et donc plus facile pour faire de la coexistence de services entre SharePoint Server et SharePoint Online.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3162.AppLauncher.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3162.AppLauncher.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3162.AppLauncher.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3162.AppLauncher.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h4>Pr&eacute;visualisation des images et des vid&eacute;os dans les biblioth&egrave;ques de document</h4>
<p>Avec SharePoint Server 2013 ou avant, la pr&eacute;visualisation des m&eacute;dias types images et vid&eacute;os, depuis une biblioth&egrave;que de document, pouvait sembler un peu "rustique", dans le sens o&ugrave; lorsque l'on cliquait sur l'image ou la vid&eacute;o, on ouvrait directement le fichier comme une nouvelle page. Sur les sites web, il est souvent pr&eacute;f&eacute;rable d'utiliser un syst&egrave;me dit de type "LightBox" (du nom de la <a title="1iere librairie Javascript" href="http://lokeshdhakar.com/projects/lightbox2/" target="_blank">1iere librairie Javascript</a> qui permettait l'impl&eacute;mentation de ce syst&egrave;me). C'est maintenant chose faite, SharePoint Server 2016 int&egrave;gre cette pr&eacute;visualisation des fichiers sous forme de "popin", c'est-&agrave;-dire une nouvelle fen&ecirc;tre en surimpression qui permet de garder la navigation en cours sans ouvrir une nouvelle page.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0172.lightbox.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0172.lightbox.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0172.lightbox.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0172.lightbox.png" alt="" border="0" /></a>&nbsp;</p>
<p>&nbsp;&nbsp;</p>
<h4>Nouvelle exp&eacute;rience de navigation en mobilit&eacute;</h4>
<p>SharePoint Server 2013 apportait un bon nombre de nouveaut&eacute;s concernant l'exp&eacute;rience de navigation en mobilit&eacute;, comme par exemple les "devices channels". Toutefois ces nouveaut&eacute;s concernaient quasiment exclusivement les sites de publication. Les sites collaboratifs avaient &eacute;galement vues une mise &agrave; jour de l'exp&eacute;rience mobile, mais celle-ci restait assez sommaire et simple, et relativement proche de cette fonctionnalit&eacute; introduite en 2010. Les fonctionnalit&eacute;s &eacute;taient assez r&eacute;duites et il &eacute;tait plut&ocirc;t complexe de repasser sur une vue PC (ou dite de navigateur classique) pour aller plus loin.</p>
<p>Maintenant, l'exp&eacute;rience en mobilit&eacute; des sites collaboratives est bien meilleure, et surtout orient&eacute;e pour une exp&eacute;rience dite "touch". Vous pouvez retrouver un tr&egrave;s bon post de blog de pr&eacute;sentation de cette fonctionnalit&eacute; lors de <a title="https://blogs.office.com/2013/11/19/sharepoint-online-introduces-the-touch-design-mobile-experience/" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/sa sortie sur SharePoint Online ici" target="_blank">sa sortie sur SharePoint Online ici</a>.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0118.SPO_touch_03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0118.SPO_5F00_touch_5F00_03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0118.SPO_touch_03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0118.SPO_5F00_touch_5F00_03.png" alt="" border="0" /></a>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0121.goto.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0121.goto.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0121.goto.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0121.goto.png" alt="" width="283" height="184" border="0" /></a></p>
<p>&nbsp;</p>
<h4>Am&eacute;lioration de la gestion des fichiers (taille maximale, caract&egrave;res sp&eacute;ciaux, liens durables, etc.)</h4>
<p>Avec SharePoint Server 2013, la taille maximale d'un fichier &eacute;tait d'environ 2 Go. C'est maintenant chose r&eacute;volue et vous pouvez d&eacute;poser ou t&eacute;l&eacute;charger des fichiers bien plus volumineux. A noter qu'une nouveau param&eacute;trage permet &agrave; l'administrateur de la ferme SharePoint de choisir, par web application, la limite maximale de la taille de fichiers d&eacute;sir&eacute;e.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7522.maxfilesize.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7522.maxfilesize.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7522.maxfilesize.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7522.maxfilesize.png" alt="" border="0" /></a></p>
<p>Autre nouveaut&eacute; int&eacute;ressante du c&ocirc;t&eacute; du nommage des fichiers. Avec la version 2013 (et les versions pr&eacute;c&eacute;dentes), il &eacute;tait impossible de cr&eacute;er un fichier plus long que 128 caract&egrave;res et qui contenant les caract&egrave;res sp&eacute;ciaux du type&nbsp;<span id="ouHighlight__64_65TO74_75">&amp;,</span><span id="noHighlight_0.5171925779432058">&nbsp;</span><span id="ouHighlight__67_68TO77_78">~,</span><span id="noHighlight_0.960765030933544">&nbsp;</span><span id="ouHighlight__70_71TO80_81">{,</span><span id="noHighlight_0.5440108173061162">&nbsp;ou }. C'est d&eacute;sormais termin&eacute;, c'est maintenant possible avec la version 2016.</span></p>
<p>&nbsp;&nbsp;</p>
<h4>Am&eacute;liorations de l'interface et de l'accessibilit&eacute; des biblioth&egrave;ques&nbsp;de documents</h4>
<p>Les biblioth&egrave;ques de documents connaissent un l&eacute;ger lifting, avec une barre d'outils l&eacute;g&egrave;rement plus claire :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5076.doclib.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5076.doclib.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5076.doclib.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5076.doclib.png" alt="" border="0" /></a></p>
<p>On va surtout retrouver de nombreuses nouveaut&eacute;s concernant l'accessibilit&eacute; de ces biblioth&egrave;ques de documents, avec la gestion du focus ou encore la gestion des raccourcis clavier. On peut par exemple maintenant faire certaines op&eacute;rations avec des combinaisons de touches, comme par exemple :</p>
<ul>
<li>ALT+<strong>N : </strong>cr&eacute;ation un nouveau fichier ou r&eacute;pertoire</li>
<li>ALT+<strong>E</strong> : pour &eacute;diter</li>
<li>ALT+<strong>U : </strong>uploader un fichier</li>
<li>ALT+<strong>M : </strong>Manager</li>
<li>ALT+<strong>S : </strong>Partager (Share)</li>
</ul>
<p>&nbsp;</p>
<h4>Am&eacute;liorations de la fonctionnalit&eacute; de partage</h4>
<p>La fonctionnalit&eacute; de partage a &eacute;t&eacute; une bonne nouveaut&eacute; de la version 2013, permettant &agrave; tout utilisateur sans connaissance SharePoint de facilement partag&eacute; un fichier ou l'acc&egrave;s &agrave; un site. Suite aux retours des utilisateurs le groupe produit a apport&eacute; un bon nombre de nouveaut&eacute; pour encore am&eacute;liorer ce principe.</p>
<p>Une fonctionnalit&eacute; que je trouve int&eacute;ressante par exemple est la possibilit&eacute; d&eacute;sormais de partager un r&eacute;pertoire en m&ecirc;me temps que sa cr&eacute;ation. C'est un cas d'usage courant pour les utilisateurs finaux et cela aide &agrave; aller plus vite. Voici un exemple de la s&eacute;quence de clics :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6567.CreateFolder.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6567.CreateFolder.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6567.CreateFolder.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6567.CreateFolder.png" alt="" width="401" height="173" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1256.CreateFolder2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1256.CreateFolder2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1256.CreateFolder2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1256.CreateFolder2.png" alt="" width="404" height="213" border="0" /></a></p>
<p>Il y'a &eacute;videmment bien d'autres am&eacute;lioration, comme par exemple le mail d'invitation, ou encore les liens durables, l'approbation d'une invitation directement par mail, etc.</p>
<p>&nbsp;</p>
<h4>Le "pin" de sites</h4>
<p>Dans la liste des sites que vous suivez, vous pouvez maintenant "piner" (on va dire que&nbsp;&ccedil;a se dit ;-))&nbsp;un site pour le faire appara&icirc;tre en d&eacute;but de liste. Plus pratique pour s'y retrouver lorsque l'on&nbsp;suit un grand nombre de sites :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3343.Pin.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3343.Pin.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3343.Pin.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3343.Pin.png" alt="" border="0" /></a>&nbsp;</p>
<p>&nbsp;</p>
<h4>Am&eacute;lioration de OneDrive for Business (aka OneDrive Entreprise)</h4>
<p>Une nouveaut&eacute; tr&egrave;s attendue est bien s&ucirc;r l'&eacute;volution de OneDrive for Business, tant les diff&eacute;rences entre SharePoint Online et SharePoint Server 2013 &eacute;taient devenues importantes. Dans cette nouvelle version, on va retrouver un certaines nombres de nouveaut&eacute;s majeures.</p>
<p>Par exemple, nous avons d&eacute;sormais un nouveau look and feel pour provisionner son site lors de la 1iere connexion. L'ergonomie est meilleure et surtout le processus de cr&eacute;ation du site est bien plus rapide. Ceci est d'ailleurs vrai pour tous les mod&egrave;les de sites, gr&acirc;ce &agrave; une nouvelle fonctionnalit&eacute; introduite, qui fait en sorte que d&eacute;sormais les sites ne sont plus syst&eacute;matiquement recr&eacute;&eacute;s "from scratch", mais "instanci&eacute;s" depuis des mod&egrave;les cach&eacute;s.</p>
<p>Voici quelques captures d'&eacute;cran du nouveau processus de cr&eacute;ation d'un nouvel espace OneDrive for Business :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3051.onedrive01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3051.onedrive01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3051.onedrive01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3051.onedrive01.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2275.onedrive02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2275.onedrive02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2275.onedrive02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2275.onedrive02.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0412.onedrive03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0412.onedrive03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0412.onedrive03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0412.onedrive03.png" alt="" border="0" /></a></p>
<p>&nbsp;L'ergonomie des sites OneDrive a &eacute;t&eacute; largement revue, permettant une prise en main plus simple de l'interface. On a par exemple :</p>
<ul>
<li>La suppression du ruban, tr&egrave;s utile pour les experts SharePoint et les biblioth&egrave;ques de documents, moins pour OneDrive et des utilisateurs n&eacute;ophytes</li>
<li>Le nouveau look and feel des biblioth&egrave;ques de documents</li>
<li>La nouvelle barre de recherche avec auto compl&eacute;tion &agrave; gauche</li>
<li>Le nouvel &eacute;cran "Site Folders" vous permettant de retrouver facilement les sites ou biblioth&egrave;ques que vous suivez</li>
<li>Les fonctionnalit&eacute;s de partages qui ont &eacute;t&eacute; am&eacute;lior&eacute;es</li>
</ul>
<p>Capture d'&eacute;cran de la nouvelle interface de OneDrive for Business :</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0363.onedrive04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0363.onedrive04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0363.onedrive04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0363.onedrive04.png" alt="" border="0" /></a></p>
<p>Capture d'&eacute;cran de "Site Folders" :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6014.SiteFolder.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6014.SiteFolder.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6014.SiteFolder.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6014.SiteFolder.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h4>Fonctionnalit&eacute;s de gestion de la conformit&eacute; et de protection num&eacute;rique&nbsp;</h4>
<p>Sur le sujet de la compliance et de la gouvernance de contenu en g&eacute;n&eacute;ral, on va retrouver un grand nombre de nouveaut&eacute;s, comme c'est d&eacute;j&agrave; le cas dans Office 365.</p>
<p>D&eacute;sormais, deux nouveaux mod&egrave;les de sites sont disponibles, permettant &agrave; des &eacute;quipes de "monitorer" le contenu partag&eacute; sur SharePoint et &eacute;tablir des r&egrave;gles de ce que peuvent faire ou non les utilisateurs par espace :</p>
<ul>
<li>Le mod&egrave;le dit "<strong>Compliance Policy Center</strong>": vous permet de g&eacute;rer un cycle de vie &agrave; vos donn&eacute;es de fa&ccedil;on centralis&eacute;e</li>
<li>Le mod&egrave;le dit "<strong>In-Place Hold Policy Center</strong>" : vous permet d'identifier des types de donn&eacute;es pour les verrouiller. On retrouve par exemple des mod&egrave;les de donn&eacute;es &agrave; d&eacute;tecter, comme par exemple des cartes de cr&eacute;dits, etc. Pratique &eacute;galement pour se pr&eacute;munir de la fuite potentielle d'information (aka DLP).</li>
</ul>
<p>&nbsp;Quelques captures du Compliance Policy Center :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4111.Compliance01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4111.Compliance01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4111.Compliance01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4111.Compliance01.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8546.Compliance02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8546.Compliance02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8546.Compliance02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8546.Compliance02.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0272.Compliance04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0272.Compliance04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0272.Compliance04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0272.Compliance04.png" alt="" border="0" /></a></p>
<p>&nbsp;Quelques captures du "In-place Policy center" :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2845.InPlacePolicy.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2845.InPlacePolicy.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2845.InPlacePolicy.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2845.InPlacePolicy.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3173.InPlacePolicy2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3173.InPlacePolicy2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3173.InPlacePolicy2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3173.InPlacePolicy2.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7510.InPlacePolicy3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7510.InPlacePolicy3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7510.InPlacePolicy3.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7510.InPlacePolicy3.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2><span style="font-size: 12px;">Conclusion</span></h2>
<p>&nbsp;</p>
<p><span style="font-size: 12px;">Voil&agrave; quelques nouveaut&eacute;s de SharePoint Server 2016 Preview de la release du 24 Ao&ucirc;t, m&ecirc;me si c'est qu'un rapide et succinct aper&ccedil;u. Ce billet n'est pas exhaustif sur les nouveaut&eacute;s,&nbsp;Rendez-vous dans un prochain billet pour plus d'aventures.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Installation de SharePoint Server 2016 Preview</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/installation-de-sharepoint-server-2016-preview</link>
      <pubDate>Mon, 24 Aug 2015 23:09:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/08/24/installation-de-sharepoint-server-2016-preview/</guid>
      <description><![CDATA[Introduction
&nbsp;
Et voil&agrave;, le tr&egrave;s attendu SharePoint Server 2016 est...]]></description>
      <content:encoded><![CDATA[<h2>Introduction</h2>
<p>&nbsp;</p>
<p>Et voil&agrave;, le tr&egrave;s attendu SharePoint Server 2016 est bient&ocirc;t parmi nous. En attendant la version finale pr&eacute;vue pour le printemps 2016, depuis le 24 Ao&ucirc;t Microsoft a mis &agrave; disposition la version Preview. Cette version est une version "beta" publique qui peut &ecirc;tre essay&eacute;e gratuitement pendant 180 jours.</p>
<p>Voici une proc&eacute;dure en fran&ccedil;ais pour vous aider &agrave; installer et essayer cette version avec des captures d'&eacute;cran &agrave; chaque &eacute;tape. Avertissement : ceci est une installation "stand alone", c'est-&agrave;-dire que tous les r&ocirc;les SharePoint sont install&eacute;s sur une seule et m&ecirc;me machine (aka Single Server Farm). Ce n'est &eacute;videmment pas une bonne pratique pour une ferme de production, mais ceci fait l'affaire pour une machine de d&eacute;veloppement ou d'int&eacute;gration. Pour finir, si vous souhaitez avoir un peu plus d'information sur cette nouvelle version de SharePoint, ainsi que conna&icirc;tre les limitations et le r&ocirc;le de la version Preview, je vous conseille les deux articles suivant (en anglais) : <a href="https://blogs.office.com/2015/08/24/announcing-availability-of-sharepoint-server-2016-it-preview-and-cloud-hybrid-search/">https://blogs.office.com/2015/08/24/announcing-availability-of-sharepoint-server-2016-it-preview-and-cloud-hybrid-search/</a> (annonce officielle) et <a href="http://www.learningsharepoint.com/2015/08/24/things-you-need-to-know-before-you-install-sharepoint-2016-preview/">http://www.learningsharepoint.com/2015/08/24/things-you-need-to-know-before-you-install-sharepoint-2016-preview/</a></p>
<p>&nbsp;</p>
<h2>T&eacute;l&eacute;chargement des binaires et pr&eacute;requis</h2>
<p>&nbsp;</p>
<p>Avant de se lancer dans l'installation, il nous faut imp&eacute;rativement deux choses: t&eacute;l&eacute;charger les binaires d'installation et pr&eacute;parer la machine virtuelle.</p>
<p>Pour t&eacute;l&eacute;charger les binaires d'installation, rendez-vous &agrave; l'adresse suivante : <a href="https://www.microsoft.com/en-us/download/details.aspx?id=48712">https://www.microsoft.com/en-us/download/details.aspx?id=48712</a></p>
<p>N'y chercher pas la version fran&ccedil;aise ou un language pack fran&ccedil;ais, la version Preview de SharePoint 2016 n'est disponible &agrave; ce stade qu'en anglais ou avec les languages packs Japonais et Espagnol. Noter &eacute;galement dans ce lien en dessous la cl&eacute; produit, elle vous sera n&eacute;cessaire pendant l'installation.</p>
<p>Deuxi&egrave;me &eacute;tape, la pr&eacute;paration de la machine virtuelle qui h&eacute;bergera notre serveur. Au niveau des performances de la machine, n'h&eacute;sitez pas &agrave; &ecirc;tre g&eacute;n&eacute;reux. Si vous&nbsp;utilisez Microsoft Azure (vivement recommand&eacute;), je vous conseille par exemple d'opter pour une machine de type A6 ou plus. En gros, optez pour une machine du type :</p>
<p>16 Go RAM minimum (pr&eacute;voir m&ecirc;me plut&ocirc;t 24 Go), 64-bit, Processeurs 4 cores &agrave; + de 2Ghz, 80 Go&nbsp;pour le disque syst&egrave;me, un disque secondaire de 100 Go ou plus.&nbsp;</p>
<p>Au niveau de la version du&nbsp;syst&egrave;me d'exploitation et de la base de donn&eacute;es, je vous conseille : L'&eacute;dition <span style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">64-bit&nbsp;de Windows Server 2012 R2 Standard ou Datacenter et au niveau de SQL Server vous pouvez opter pour l'&eacute;dition </span>64-bit&nbsp;de Microsoft SQL Server 2014 Service Pack 1 (SP1) ou&nbsp;l'&eacute;dition 64-bit&nbsp;de Windows Server 2012 R2 Standard ou Datacenter.</p>
<p><span style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">N'oubliez pas &eacute;galement de cr&eacute;er un contr&ocirc;leur de domaine Active Directory et de cr&eacute;er les comptes ad&eacute;quat &agrave; une installation de SharePoint (vous pouvez vous r&eacute;f&eacute;rer au guide de 2013 pour cela, les choses n'ont gu&egrave;re &eacute;volu&eacute;es &agrave; ce niveau : <a href="https://technet.microsoft.com/en-us/library/cc678863.aspx">https://technet.microsoft.com/en-us/library/cc678863.aspx).</a>&nbsp;Activer sur ce serveur les r&ocirc;les Web Server (IIS) et Application Server (framework .net etc.).</span></p>
<p>Comme vous allez le voir, d'autres pr&eacute;requis sont n&eacute;cessaires pour installer SharePoint Server. Toutefois, <span style="text-decoration: underline;">l'outil d'installation est capable de les t&eacute;l&eacute;charger et les installer pour vous</span>. Cela suppose toutefois que votre serveur puisse se connecter &agrave; Internet. Si ce n'est pas le cas, voici la liste compl&egrave;te des pr&eacute;requis n&eacute;cessaires &agrave; l'installation :</p>
<ul>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Web Server (IIS) role</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Application Server role</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft .NET Framework version 4.5.2</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft SQL Server 2012 Native Client</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft WCF Data Services 5.6</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft Information Protection and Control Client (MSIPC)</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft Sync Framework Runtime v1.0 SP1 (x64)</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Windows Management Framework 3.0 which includes Windows PowerShell 3.0</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft Identity Extensions</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Windows Server AppFabric 1.1</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Cumulative Update Package 1 for Microsoft AppFabric 1.1 for Windows Server (KB 2671763)</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Microsoft ODBC Driver 11 for SQL Server</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Update for Microsoft .NET Framework to disable RC4 in Transport Layer Security (KB2898850)</div>
</li>
<li>
<div style="color: #000000; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; widows: 1; -webkit-text-stroke-width: 0px;">Visual C++ Redistributable Package for Visual Studio 2013&nbsp;</div>
</li>
</ul>
<p>Dernier conseil et pas des moindre, <strong>installer tous ces logiciels en version anglaise EN-US !!</strong> Cela vous &eacute;vitera probablement bien des ennuis sur des sc&eacute;narios non encore test&eacute;s par le groupe produit !!&nbsp;</p>
<p>&nbsp;</p>
<h2>Installation des binaires</h2>
<p>&nbsp;</p>
<p>Ca y'est vous &ecirc;tes pr&ecirc;t &agrave; lancer l'installation ? C'est partit !</p>
<p>Faites cette installation avec un compte d'installation qiu poss&egrave;de les droits administrateurs de la machine.</p>
<p>Tout d'abord, faite un clic droit sur l'image ISO et cliquer sur Mount :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1050.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1050.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1050.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1050.01.png" alt="" width="304" height="95" border="0" /></a></p>
<p>&nbsp;Cela vous ajoutera un lecteur qui porte le num&eacute;ro de release de la version Preview (16.0.4316.1217). Ouvrez ce lecteur :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0763.02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0763.02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0763.02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0763.02.png" alt="" width="276" height="84" border="0" /></a></p>
<p>&nbsp;Lancer l'ex&eacute;cutable prerequisiteinstaller.exe qui est l'outil pour installer les pr&eacute;requis :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3157.03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3157.03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3157.03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3157.03.png" alt="" border="0" /></a></p>
<p>Cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2502.04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2502.04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2502.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2502.04.png" alt="" border="0" /></a></p>
<p>L'outil va configurer les r&ocirc;les n&eacute;cessaires sur le serveur :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1754.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1754.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1754.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1754.05.png" alt="" border="0" /></a></p>
<p>Cliquer sur Finish, le syst&egrave;me va red&eacute;marrer :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4857.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4857.06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4857.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4857.06.png" alt="" border="0" /></a></p>
<p>Apr&egrave;s le red&eacute;marrage, l'outil de pr&eacute;requis va reprendre l'installation. Si ce n'est pas le cas, remonter l'image iso et relancer l'outil d'installation des pr&eacute;requis, cela va reprendre aux installations suivantes. Cocher&nbsp;"I accept.." et cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1440.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1440.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1440.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1440.07.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1184.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1184.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1184.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1184.08.png" alt="" border="0" /></a></p>
<p>Tous les pr&eacute;requis vont &ecirc;tre install&eacute;s. Une fois termin&eacute; cliquer sur Finish, puis le syst&egrave;me va encore une fois red&eacute;marrer :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3582.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3582.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3582.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3582.09.png" alt="" border="0" /></a></p>
<p>Une fois red&eacute;marr&eacute;, lancer l'ex&eacute;cutable nomm&eacute; setup.exe pour lancer l'installation :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8562.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8562.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8562.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8562.10.png" alt="" border="0" /></a></p>
<p>Patientez durant la v&eacute;rification des pr&eacute;requis. Ne vous inqui&eacute;tez pas si la fen&ecirc;tre semble "fris&eacute;e" et attendre que celle-ci vous redonne la main :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5187.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5187.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5187.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5187.11.png" alt="" border="0" /></a></p>
<p>Si les pr&eacute;requis sont bien install&eacute;s, vous allez &ecirc;tre inviter &agrave; saisir la cl&eacute; du produit. Pour la version Preview, la cl&eacute; est disponible juste en dessous du lien pour t&eacute;l&eacute;charger l'image ISO sur la page de Microsoft.com (voir adresse dans l'introduction). Cliquer ensuite sur Continue :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8037.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8037.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8037.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8037.12.png" alt="" border="0" /></a></p>
<p>Cochez "I accept..", puis cliquer sur Continue :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5707.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5707.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5707.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5707.13.png" alt="" border="0" /></a></p>
<p>Choisir les r&eacute;pertoire d'installation ou laisser par d&eacute;faut, puis cliquer sur "Install Now" :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8738.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8738.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8738.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8738.14.png" alt="" border="0" /></a></p>
<p>Patientez durant l'installation :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2465.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2465.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2465.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2465.15.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6076.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6076.16.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6076.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6076.16.png" alt="" border="0" /></a></p>
<p>L'installation est termin&eacute;e et vous allez &ecirc;tre invit&eacute; &agrave; lancer le "Configuration Wizard" qui va vous permettre de cr&eacute;er et configurer votre ferme SharePoint 2016 :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1185.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1185.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1185.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1185.17.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Configuration de la ferme (aka Config Wizard)</h2>
<p>&nbsp;</p>
<p>Si vous avez laiss&eacute; cocher "Run the..", l'&eacute;cran suivant va se lancer automatiquement. Si ce n'est pas le cas, ce n'est pas un soucis, vous retrouverez ce programme dans votre liste d'applications sous le titre "SharePoint Products Configuration Wizard". Cliquez sur Next :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4048.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4048.18.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4048.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4048.18.png" alt="" border="0" /></a></p>
<p>Le programme a besoin de red&eacute;marrer IIS, cliquer sur Yes :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7522.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7522.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7522.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7522.19.png" alt="" border="0" /></a></p>
<p>Nous allons cr&eacute;er un nouvelle ferme, donc cocher "Create a new server farm" et cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1781.20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1781.20.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1781.20.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1781.20.png" alt="" border="0" /></a></p>
<p>Saisir le nom de votre instance SQL, ainsi que le compte et le mot de passe du compte d'acc&egrave;s (exemple: le compte&nbsp;administrateur de ferme). Cliquer sur Next :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7762.21.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7762.21.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7762.21.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7762.21.png" alt="" border="0" /></a></p>
<p>Saisir une "passphrase" (mot de passe par exemple). Celui-ci est important, conserver le de c&ocirc;t&eacute;. Il vous sera n&eacute;cessaire si vous d&eacute;cider de rajouter un nouveau serveur dans votre ferme plus tard. Cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5672.22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5672.22.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5672.22.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5672.22.png" alt="" border="0" /></a></p>
<p>C'est la grande nouveaut&eacute; de la version 2016 : la capacit&eacute; d'installer configurer votre serveur &agrave; partir de mod&egrave;les topologiques. On peut choisir par exemple un serveur web frontal, un serveur pure applicatif, etc. etc. Pour une ferme mono-machine "all-in-one", cocher "Single Farm Server" et cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5001.23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5001.23.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5001.23.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5001.23.png" alt="" border="0" /></a></p>
<p>Choisir le port de votre centrale d'administration (site de gestion de la ferme) et choisir le mode d'authentification (par d&eacute;faut choisir NTLM). Cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2084.24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2084.24.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2084.24.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2084.24.png" alt="" border="0" /></a></p>
<p>SharePoint vous r&eacute;capitule les informations,&nbsp;si elles sont correctes, cliquer sur Next :&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6545.25.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6545.25.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6545.25.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6545.25.png" alt="" border="0" /></a></p>
<p>Patientez durant la configuration (l'&eacute;tape 3 - cr&eacute;ation et configuration des bases de donn&eacute;es va prendre un peu de temps ne pas s'en inqui&eacute;ter) :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5226.26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5226.26.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5226.26.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5226.26.png" alt="" border="0" /></a></p>
<p>Si tout s'est bien pass&eacute;, l'&eacute;cran suivant va appara&icirc;tre, cliquer sur Finish :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1452.28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1452.28.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1452.28.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1452.28.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Configuration additionnelle dans la centrale d'administration</h2>
<p>&nbsp;</p>
<p>F&eacute;licitations, le plus gros de l'installation est derri&egrave;re nous. Maintenant nous allons finir les &eacute;tages de configuration qui se font via la centrale d'administration. Cette fen&ecirc;tre va normalement s'ouvrir toute seule. Si ce n'est pas le cas pas de panique, vous pouvez retrouver un lien dans votre menu d'application (ex menu d&eacute;marrer) ou y acc&eacute;der par votre navigateur via le port choisit pr&eacute;c&eacute;demment.</p>
<p>Au 1ier lancement, SharePoint va vous proposer de reporter vos erreurs aux &eacute;quipes produit pour permettre d'am&eacute;liorer la version 2016 d'ici sa sortie. Cocher "Yes.." et cliquer sur OK :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3480.29.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3480.29.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3480.29.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3480.29.png" alt="" border="0" /></a></p>
<p>Vous aller maintenant &ecirc;tre invit&eacute; &agrave; configurer les services techniques de SharePoint. Deux choix sont possibles : utiliser l'assistant (Wizard) ou le faire manuellement. Les puristes et les installations de production pr&eacute;f&eacute;rerons &eacute;videmment une installation &agrave; la main. Pour un environnement de test, le wizard fait tr&egrave;s bien l'affaire. Cliquer sur le bouton "Start the Wizard" :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3301.30.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3301.30.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3301.30.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3301.30.png" alt="" border="0" /></a></p>
<p>L'assistant va vous inviter &agrave; choisir les comptes et&nbsp;services &agrave; utiliser dans votre ferme. Saisir le compte et le mot de passe du compte de service &agrave; utiliser puis cocher les services que vous souhaitez utiliser :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4035.31.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4035.31.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4035.31.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4035.31.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5518.32.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5518.32.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5518.32.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5518.32.png" alt="" border="0" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0247.33.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0247.33.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0247.33.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0247.33.png" alt="" border="0" /></a></p>
<p>Cochez les services que vous souhaitez utiliser. Noter que j'ai ici cocher le service "Microsoft SharePoint Insights", car celui-ci est une nouveaut&eacute; de SharePoint 2016 et que je suis int&eacute;ress&eacute; par le tester ;-) Cliquer sur Next :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4331.34.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4331.34.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4331.34.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4331.34.png" alt="" border="0" /></a></p>
<p>La configuration des services va commencer, ne pas s'&eacute;tonner si cette &eacute;tape prend du temps, il y'a pas mal de boulot sous-jacent. Prenez votre mal en patience ;-)</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1513.35.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1513.35.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1513.35.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1513.35.png" alt="" border="0" /></a></p>
<p>F&eacute;licitations ! Votre configuration est termin&eacute;e ! SharePoint est maintenant pr&ecirc;t &agrave; &ecirc;tre utilis&eacute; ! Vous pouvez noter l'apparition de "l'App Launcher" en haut &agrave; gauche du ruban noir sup&eacute;rieur.</p>
<p>&nbsp;</p>
<h2>Cr&eacute;ation d'un site d'&eacute;quipe</h2>
<p>&nbsp;</p>
<p>L'installation &agrave; proprement parl&eacute; est termin&eacute;e. Toutefois pour tester un site SharePoint, il nous reste&nbsp;&agrave; cr&eacute;er un site d'&eacute;quipe.</p>
<p>Pour cela, cliquer sur "Manage Web applications":</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1462.36.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1462.36.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1462.36.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1462.36.png" alt="" border="0" /></a></p>
<p>&nbsp;Normalement une web application nomm&eacute;e "SharePoint - 80" a &eacute;t&eacute; cr&eacute;&eacute; et est disponible sur le port 80. V&eacute;rifiez que c'est bien le cas et revenez en arri&egrave;re :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8322.37.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8322.37.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8322.37.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8322.37.png" alt="" border="0" /></a></p>
<p>Cliquez sur "Create site collections" :&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7776.38.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7776.38.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7776.38.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7776.38.png" alt="" border="0" /></a></p>
<p>Saisir le nom de votre site (par exemple ici "Team Site") :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2768.39.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2768.39.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2768.39.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2768.39.png" alt="" border="0" /></a></p>
<p>Choisir un mod&egrave;le de site (par exemple le "team site"), puis saisir le compte du propri&eacute;taire du site :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6303.40.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6303.40.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6303.40.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6303.40.png" alt="" border="0" /></a></p>
<p>Cliquer sur OK :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6840.41.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6840.41.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6840.41.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6840.41.png" alt="" border="0" /></a></p>
<p>Le processus de cr&eacute;ation du site est en cours :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0336.42.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0336.42.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0336.42.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0336.42.png" alt="" border="0" /></a></p>
<p>La cr&eacute;ation est termin&eacute;e, cliquer sur l'adresse de votre site :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8688.43.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8688.43.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8688.43.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8688.43.png" alt="" border="0" /></a></p>
<p>Un nouvel onglet appara&icirc;t et vous donne acc&egrave;s &agrave; votre site d'&eacute;quipe :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7824.44.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7824.44.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7824.44.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7824.44.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>&nbsp;</p>
<p>Bravo, vous avez termin&eacute; ! Votre ferme SharePoint Server 2016 Preview est maintenant op&eacute;rationnelle et vous allez pouvoir vous amuser avec d'ici la sortie de la version finale.</p>
<p>Comme vous avez pu le constater si vous connaissez la version 2013 de SharePoint Server, l'installation n'est pas tr&egrave;s diff&eacute;rente et vous retrouverez facilement vos marques. A noter tout de m&ecirc;me l'installation de serveurs avec des r&ocirc;les sp&eacute;cifiques, qui aide grandement la construction de ferme SharePoint multiserveurs.</p>
<p>Cette nouvelle fonctionnalit&eacute; est appel&eacute;e "Min Roles", et est une nouveaut&eacute; importante pour les IT Pro. Nous aurons l'occasion d'en reparler dans de futurs articles.</p>
<p>Enjoy SharePoint Server 2016 Preview !</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Techdays 2015 : les slides</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/techdays-2015-les-slides</link>
      <pubDate>Mon, 23 Mar 2015 05:35:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/03/23/techdays-2015-les-slides/</guid>
      <description><![CDATA[Bonjour &agrave; tous et merci pour votre pr&eacute;sence nombreuse lors des TechDays 2015. Cette...]]></description>
      <content:encoded><![CDATA[<p>Bonjour &agrave; tous et merci pour votre pr&eacute;sence nombreuse lors des TechDays 2015. Cette ann&eacute;e j'ai eut la chance de pouvoir coanimer 3 sessions aux c&ocirc;t&eacute;s d'experts sur 3 sujets de transformations du Digital Work via Office 365. Les slides des sessions sont consultables et t&eacute;l&eacute;chargeables sur le site SlidesShare.</p>
<p>Voici les pr&eacute;sentations que j'ai co-anim&eacute; :</p>
<h3>SharePoint on premises et Yammer, quels usages et quelle int&eacute;gration ?&nbsp;</h3>
<p>Avec&nbsp;Guelnoji Njetein (MCS) et Kevin TRELOHAN (MVP) :</p>
<p><iframe style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="http://www.slideshare.net/slideshow/embed_code/44757446" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"> </iframe></p>
<div style="margin-bottom: 5px;"><strong> <a title="SharePoint on premises et Yammer, quels usages et quelle int&eacute;gration&nbsp;?&nbsp;" href="http://www.slideshare.net/DecideursIT/mod201" target="_blank">SharePoint on premises et Yammer, quels usages et quelle int&eacute;gration&nbsp;?&nbsp;</a> </strong> from <strong><a href="http://www.slideshare.net/DecideursIT" target="_blank">Microsoft D&eacute;cideurs IT</a></strong></div>
<p>&nbsp;</p>
<h3>L'Office Graph et le futur des modes travail</h3>
<p>Avec Alexandre Cipriani (MS) et St&eacute;phane Palluet (MS)&nbsp;</p>
<p><iframe style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="http://www.slideshare.net/slideshow/embed_code/44757362" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"> </iframe></p>
<div style="margin-bottom: 5px;"><strong> <a title="L�Office Graph et le futur des modes travail" href="http://www.slideshare.net/DecideursIT/mod109" target="_blank">LOffice Graph et le futur des modes travail</a> </strong> from <strong><a href="http://www.slideshare.net/DecideursIT" target="_blank">Microsoft D&eacute;cideurs IT</a></strong></div>
<p>&nbsp;</p>
<h3>Office Vid&eacute;o : le streaming vid&eacute;o pour entreprise pr&ecirc;t &agrave; l&rsquo;emploi&nbsp;</h3>
<p>Avec Alexandre Cipriani (MS) et St&eacute;phane Palluet (MS) &nbsp;</p>
<p><iframe style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="http://www.slideshare.net/slideshow/embed_code/44757378" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"> </iframe></p>
<div style="margin-bottom: 5px;"><strong> <a title="Office Vid&eacute;o&nbsp;: le streaming vid&eacute;o pour entreprise pr&ecirc;t &agrave; l&rsquo;emploi" href="http://www.slideshare.net/DecideursIT/mod110" target="_blank">Office Vid&eacute;o&nbsp;: le streaming vid&eacute;o pour entreprise pr&ecirc;t &agrave; l&rsquo;emploi</a> </strong> from <strong><a href="http://www.slideshare.net/DecideursIT" target="_blank">Microsoft D&eacute;cideurs IT</a></strong></div>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Delve et l'Office Graph - Ressources en français</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/delve-et-loffice-graph-ressources-en-franais</link>
      <pubDate>Sun, 22 Mar 2015 09:48:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/03/22/delve-et-loffice-graph-ressources-en-franais/</guid>
      <description><![CDATA[Voici une collection de liens et ressources utiles &agrave; propos de l'Office Graph et de Delve...]]></description>
      <content:encoded><![CDATA[<p>Voici une collection de liens et ressources utiles &agrave; propos de l'Office Graph et de Delve dans Office 365.</p>
<p>&nbsp;</p>
<p><span>Key Resources for Delve</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="http://blogs.office.com/2014/09/08/milestone-office-delve/"><span lang="fr">Announcing Delve</span></a><span lang="fr">&nbsp; [Blog]</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="https://support.office.com/Article/What-is-Office-Delve--1315665a-c6af-4409-a28d-49f8916878ca?ui=en-US&amp;rs=en-US&amp;ad=US"><span lang="fr">What is Office Delve?</span></a><span lang="fr">&nbsp;</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="https://www.youtube.com/watch?v=cCbyer0Xupg"><span lang="fr">Introducing Office Delve</span></a><span lang="fr">&nbsp; [Video]</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="https://www.youtube.com/watch?v=FV1Sc6UW8-o"><span lang="fr">Powered by Office Graph</span></a><span lang="fr">&nbsp; [Video]</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="http://office.microsoft.com/en-us/office365-suite-help/office-365-release-programs-HA104204958.aspx"><span lang="fr">How to turn on First Release</span></a><span lang="fr">&nbsp;</span></p>
<p><span lang="en-US">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="fr">&nbsp;</span><a href="https://support.office.com/Article/Who-can-see-my-documents-f5f409a2-37ed-4452-8f61-681e5e1836f3"><span lang="fr">Who can see my documents in Office Delve?&nbsp;</span></a><span lang="fr">&nbsp;</span></p>
<p lang="fr">&nbsp;</p>
<p lang="fr">Office Delve for Office 365 admins</p>
<p lang="fr"><a href="https://support.office.com/Article/Delve-for-Office-365-admins-54f87a42-15a4-44b4-9df0-d36287d9531b">https://support.office.com/Article/Delve-for-Office-365-admins-54f87a42-15a4-44b4-9df0-d36287d9531b</a></p>
<p lang="fr">&nbsp;</p>
<p lang="fr">Using GQL with the SharePoint Online Search REST API to query Office graph</p>
<p lang="fr"><a href="http://msdn.microsoft.com/en-us/library/office/dn783218(v=office.15).aspx">http://msdn.microsoft.com/en-us/library/office/dn783218(v=office.15).aspx</a></p>
<p lang="fr">&nbsp;</p>
<h3 lang="fr">Mat&eacute;riel End-User et Admin Office 365 en Fran&ccedil;ais :</h3>
&nbsp;
<p lang="fr">Office Delve pour les administrateurs Office 365</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Office-Delve-pour-les-administrateurs-Office-365-54f87a42-15a4-44b4-9df0-d36287d9531b?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Office-Delve-pour-les-administrateurs-Office-365-54f87a42-15a4-44b4-9df0-d36287d9531b?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Qu&rsquo;est-ce qu&rsquo;Office Delve ?</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Quest-ce-quOffice-Delve--1315665A-C6AF-4409-A28D-49F8916878CA?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Quest-ce-quOffice-Delve--1315665A-C6AF-4409-A28D-49F8916878CA?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Comment Office Delve d&eacute;termine-t-il ce qui est pertinent pour moi ?</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Comment-Office-Delve-d%C3%A9termine-t-il-ce-qui-est-pertinent-pour-moi--048D502E-80A7-4F77-AC5C-F9D81733C385?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Comment-Office-Delve-d%C3%A9termine-t-il-ce-qui-est-pertinent-pour-moi--048D502E-80A7-4F77-AC5C-F9D81733C385?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Regrouper et partager des documents dans Office Delve</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Regrouper-et-partager-des-documents-dans-Office-Delve-DA0C5804-01EF-4EDD-8B87-E576B19BEF3E?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Regrouper-et-partager-des-documents-dans-Office-Delve-DA0C5804-01EF-4EDD-8B87-E576B19BEF3E?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Raccourcis clavier pour Office Delve</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Raccourcis-clavier-pour-Office-Delve-6d4ca665-6d65-4aa4-a311-136937eeb33f?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Raccourcis-clavier-pour-Office-Delve-6d4ca665-6d65-4aa4-a311-136937eeb33f?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Utiliser les cartes de contenu dans Office Delve</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Utiliser-les-cartes-de-contenu-dans-Office-Delve-E6157225-0E40-441C-906F-0C82BFEE55F3?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Utiliser-les-cartes-de-contenu-dans-Office-Delve-E6157225-0E40-441C-906F-0C82BFEE55F3?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Donner de l&rsquo;importance &agrave; votre contenu dans Office Delve</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Donner-de-limportance-%C3%A0-votre-contenu-dans-Office-Delve-50D22F53-56E7-4D0E-9D8E-978BD9A3040D?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Donner-de-limportance-%C3%A0-votre-contenu-dans-Office-Delve-50D22F53-56E7-4D0E-9D8E-978BD9A3040D?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Stocker vos documents dans un emplacement accessible par Office Delve</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Stocker-vos-documents-dans-un-emplacement-accessible-par-Office-Delve-49a0db49-5e6c-4dda-816e-e11dd77de49d?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Stocker-vos-documents-dans-un-emplacement-accessible-par-Office-Delve-49a0db49-5e6c-4dda-816e-e11dd77de49d?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Quel type d&rsquo;informations puis-je trouver dans Office Delve ?</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Quel-type-dinformations-puis-je-trouver-dans-Office-Delve--46f92806-b52c-4187-b60e-b3bf8d25f73e?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Quel-type-dinformations-puis-je-trouver-dans-Office-Delve--46f92806-b52c-4187-b60e-b3bf8d25f73e?ui=fr-FR&amp;rs=fr-FR&amp;ad=FR</a></p>
<p lang="fr">Mes documents sont-ils en s&eacute;curit&eacute; dans Office Delve ?</p>
<p lang="fr"><a href="https://support.office.com/fr-fr/article/Mes-documents-sont-ils-en-s%C3%A9curit%C3%A9-dans-Office-Delve--f5f409a2-37ed-4452-8f61-681e5e1836f3?omkt=fr-fr&amp;ui=fr-FR&amp;rs=fr-FR&amp;ad=FR">https://support.office.com/fr-fr/article/Mes-documents-sont-ils-en-s%C3%A9curit%C3%A9-dans-Office-Delve--f5f409a2-37ed-4452-8f61-681e5e1836f3?omkt=fr-fr&amp;ui=fr-FR&amp;rs=fr-FR&amp;ad=FR#</a></p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Online, Apache Cordova et WinJS : Créer des Apps Mobiles d’entreprise multi-devices</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/sharepoint-online-apache-cordova-et-winjs-crer-des-apps-mobiles-dentreprise-multi-devices</link>
      <pubDate>Sat, 21 Mar 2015 20:43:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/03/21/sharepoint-online-apache-cordova-et-winjs-crer-des-apps-mobiles-dentreprise-multi-devices/</guid>
      <description><![CDATA[&nbsp;
1. Introduction
&nbsp;
Si vous &ecirc;tes int&eacute;ress&eacute; par le...]]></description>
      <content:encoded><![CDATA[<p>&nbsp;</p>
<h2>1. Introduction</h2>
<p>&nbsp;</p>
<p>Si vous &ecirc;tes int&eacute;ress&eacute; par le d&eacute;veloppement d&rsquo;Apps pour mobiles, vous devez sans-doute conna&icirc;tre Apache Cordova. Apache Cordova <strong>permet de cr&eacute;er simplement des applications pouvant &ecirc;tre d&eacute;ploy&eacute;es, avec un m&ecirc;me code, sur des appareils mobiles diff&eacute;rents</strong>&nbsp;: iOS (iPhone et iPad sous iOS 6, 7 ou 8), Andro&iuml;d (2.3.3 ou +), Windows Phone 8 ou pour Apps universelles Windows 8.1 (Windows Phone ou Windows 8.1). On appelle couramment ce type d&rsquo;Apps des &laquo;&nbsp;<strong>Apps hybrides</strong>&nbsp;&raquo;. Cordova est aujourd&rsquo;hui tr&egrave;s populaire et est utilis&eacute;e par de tr&egrave;s nombreuses applications grand public.</p>
<p>Cordova offre quelques avantages notables pour la cr&eacute;ation d&rsquo;Apps Mobiles, comme&nbsp;:</p>
<ul>
<li>L&rsquo;utilisation d&rsquo;un seul et m&ecirc;me code pour tous les types de p&eacute;riph&eacute;riques</li>
<li>L&rsquo;utilisation de technologies web (HTML 5, CSS, JavaScript), rapide &agrave; d&eacute;velopper et bien connues</li>
<li>Ne n&eacute;cessite pas une connaissance pointue des sp&eacute;cificit&eacute;s de d&eacute;veloppement de chaque plateforme</li>
</ul>
<p>Aujourd&rsquo;hui <strong>on peut tirer parti pleinement des capacit&eacute;s de Cordova dans le monde entreprise, et en particulier avec les plateformes Microsoft dans le cloud et Office 365</strong>.</p>
<p>Il est par exemple tr&egrave;s simple de d&eacute;velopper des applications capables de se connecter de fa&ccedil;on s&eacute;curis&eacute;e &agrave; Office 365 (et donc &eacute;galement &agrave; SharePoint Online). On peut proposer aux utilisateurs une vraie immersion du monde professionnel au sein de leur t&eacute;l&eacute;phone professionnel ou personnel.</p>
<p>Dans cet article, nous allons regarder comment r&eacute;aliser une <strong>application mobile capable de se connecter &agrave; SharePoint Online pour remonter le contenu d&rsquo;une liste d&rsquo;actualit&eacute; ou les derniers &eacute;l&eacute;ments d&rsquo;une biblioth&egrave;que de documents</strong>.</p>
<p><strong><em>NOTE&nbsp;: Vous pouvez t&eacute;l&eacute;charger le code source d&rsquo;exemple de cette application en bas de cet article.</em></strong></p>
<p>&nbsp;</p>
<h2>2. Les technologies et outils &agrave; conna&icirc;tre et installer</h2>
<p align="left">&nbsp;</p>
<p align="left">Dans ce chapitre, nous allons utiliser quelques briques importantes &agrave; conna&icirc;tre pour r&eacute;aliser rapidement et efficacement une App Mobile.</p>
<h3>2.1 Le moteur d&rsquo;ex&eacute;cution et l&rsquo;&eacute;diteur de code</h3>
<p align="left">&nbsp;</p>
<p align="left">Pour d&eacute;velopper une App de ce type, il nous faut un certain nombre d&rsquo;&eacute;l&eacute;ments install&eacute;s.</p>
<p>Voici une liste des &eacute;l&eacute;ments qu&rsquo;il vous faudra installer&nbsp;:</p>
<ol>
<li><strong>Visual Studio 2013</strong> avec les fonctionnalit&eacute;s "Tools for Maintaining Store apps for Windows 8" and "Windows Phone 8.0 SDK". Je vous conseille d&rsquo;utiliser plut&ocirc;t les versions Pro, Premium ou Ultimate de Visual Studio, mais vous pouvez &eacute;galement utiliser la version Express gratuite &laquo;&nbsp;Visual Studio Express 2013 with Update 4 for Windows&nbsp;&raquo;&nbsp; disponible en t&eacute;l&eacute;chargement ici&nbsp;: <a href="https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx">https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx</a></li>
<li><strong>L&rsquo;update 4 de Visual Studio 2013</strong>, que vous pouvez t&eacute;l&eacute;charger ici&nbsp;: <a href="http://www.microsoft.com/fr-fr/download/details.aspx?id=44921">http://www.microsoft.com/fr-fr/download/details.aspx?id=44921</a>&nbsp;</li>
<li><strong>Visual Studio Tools for Apache Cordova CTP3.1</strong>, que vous pouvez t&eacute;l&eacute;charger ici : <a href="http://www.microsoft.com/en-us/download/details.aspx?id=42675">http://www.microsoft.com/en-us/download/details.aspx?id=42675</a></li>
</ol>
<p>Il existe un excellent <strong>guide sur MSDN pour vous aider dans l&rsquo;installation des VS Tools pour Cordova</strong>&nbsp;: <a href="https://msdn.microsoft.com/en-us/library/dn771545.aspx">https://msdn.microsoft.com/en-us/library/dn771545.aspx</a></p>
<p>A noter que vous n&rsquo;avez pas besoin d&rsquo;installer Apache Cordova ind&eacute;pendamment, car les Tools pour Cordova vont r&eacute;aliser un certain nombre de t&eacute;l&eacute;chargements et d&rsquo;installation pour vous, pour vous permettre de d&eacute;buguer et tester vos Apps sur Andro&iuml;d par exemple.</p>
<p>Parmi eux, on peut noter&nbsp;:</p>
<ul>
<li>Joyent Node.js</li>
<li>Git CLI</li>
<li>Google Chrome</li>
<li>Apache Ant</li>
<li>Oracle Java JDK 7</li>
<li>Android SDK</li>
<li>SQLLite for Windows Runtime</li>
<li>Apple iTunes</li>
</ul>
<p>&nbsp;</p>
<p>Dernier conseil&nbsp;(important) : <strong>si vous poss&eacute;dez un t&eacute;l&eacute;phone Windows Phone et que vous souhaitez d&eacute;ployer et tester votre App sur votre t&eacute;l&eacute;phone, il vous faut le &laquo;&nbsp;d&eacute;bloquer&nbsp;&raquo;</strong> en l&rsquo;enregistrant en tant que t&eacute;l&eacute;phone de d&eacute;veloppement. La proc&eacute;dure est simple une fois que vous avez install&eacute; Visual Studio (qui contient le Windows Phone SDK), il vous suffit de suivre la proc&eacute;dure document&eacute;e ici&nbsp;:</p>
<p><a href="https://msdn.microsoft.com/en-us/library/windows/apps/ff769508(v=vs.105).aspx">https://msdn.microsoft.com/en-us/library/windows/apps/ff769508(v=vs.105).aspx</a></p>
<p>&nbsp;</p>
<h3>2.2 La couche de communication avec Office 365 et SharePoint Online</h3>
<p align="left">&nbsp;</p>
<p>Microsoft a publi&eacute; des aides au d&eacute;veloppement sp&eacute;cialement pour Office 365, appel&eacute;es &laquo;&nbsp;<strong>Office 365 API</strong>&nbsp;&raquo;. Ce kit de d&eacute;veloppement permet de facilement cr&eacute;er des applications capables de s&rsquo;interconnecter avec la plateforme Office 365. Avec ce SDK on peut r&eacute;aliser un grand nombre d&rsquo;actions sans pour autant &ecirc;tre expert des diff&eacute;rents composants d&rsquo;Office 365.</p>
<p>On va pouvoir r&eacute;aliser des op&eacute;rations du type&nbsp;:</p>
<ul>
<li>Authentification et connexion de fa&ccedil;on s&eacute;curis&eacute;e&nbsp;;</li>
<li>Gestion des utilisateurs et des groupes d&rsquo;Azure Active Directory&nbsp;;</li>
<li>Manipulation des donn&eacute;es de messageries (mails, calendrier au sein d&rsquo;Exchange Online)&nbsp;;</li>
<li>Manipulation des fichiers au sein de son OneDrive ou de sites SharePoint Online.</li>
</ul>
<p align="left">D&egrave;s sa sortie, ce kit de d&eacute;veloppement a &eacute;t&eacute; rendu disponible &agrave; la fois pour .Net, mais aussi pour Cordova, Xamarin ou les SDK natives d&rsquo;Andro&iuml;d et iOS.</p>
<p align="left">Pour utiliser le SDK Office 365, vous devez t&eacute;l&eacute;charger et installer les &laquo;&nbsp;<strong>Office Developer Tools for Visual Studio 2013</strong>&nbsp;&raquo;, disponible depuis ce lien&nbsp;:</p>
<p align="left"><a href="https://aka.ms/officedevtoolsforvs2013">https://aka.ms/officedevtoolsforvs2013</a></p>
<h1>&nbsp;</h1>
<h3>2.3 La couche de rendu graphique</h3>
<p>&nbsp;</p>
<p>Maintenant que vous avez install&eacute; les outils de d&eacute;veloppement et l&rsquo;extension Visual Studio pour Office 365, il ne nous reste plus qu&rsquo;&agrave; choisir un framework graphique et JavaScript qui va nous aider &agrave; d&eacute;velopper une interface graphique adapt&eacute;e aux mobiles.</p>
<p>Il existe un certain nombre de frameworks HTML 5 populaires qui permettent de r&eacute;aliser simplement des interfaces de ce type, parmi eux on peut citer&nbsp;:</p>
<ul>
<li><strong>OnsenUI</strong>&nbsp;: Tr&egrave;s beau framework qui se couple tr&egrave;s bien avec AngularJS. OnsenUI pr&eacute;sente un grand int&eacute;r&ecirc;t lorsque l&rsquo;on souhaite r&eacute;aliser une interface qui r&eacute;pond au basique des composants visuels pour iPhone ou Android. Seul b&eacute;mol, il ne vaut mieux pas l&rsquo;utiliser avec du JQuery, mais on peut facilement s&rsquo;en passer. Plus d&rsquo;information sur OnsenUI ici&nbsp;: <a href="http://onsen.io/">http://onsen.io/</a></li>
<li><strong>JQuery Mobile</strong>&nbsp;: Un kit HTML 5 pour faire des contr&ocirc;les et interfaces orient&eacute;s mobilit&eacute;. &nbsp;Pour une App mobile on ne retrouve pas forc&eacute;ment les &eacute;l&eacute;ments d&rsquo;interface propre au monde de la t&eacute;l&eacute;phonie.</li>
<li><strong>WinJS&nbsp;</strong>: Il s&rsquo;agit d&rsquo;un framework made-in-Microsoft pour r&eacute;aliser simplement des interfaces en JavaScript avec le look-and-feel des interfaces Windows Modern UI et Windows Phone. WinJS peut &ecirc;tre utilis&eacute; avec Angular ou non. Pour plus d&rsquo;information sur WinJS, &ccedil;a se passe ici&nbsp;: <a href="https://dev.windows.com/en-us/develop/winjs">https://dev.windows.com/en-us/develop/winjs</a> ou <a href="http://try.buildwinjs.com/">http://try.buildwinjs.com/</a></li>
</ul>
<p>Dans cet exemple, nous allons utiliser <strong>WinJS</strong> pour notre couche graphique.</p>
<p>&nbsp;</p>
<h2>&nbsp;3. Cr&eacute;ation d&rsquo;un nouveau projet</h2>
<h1>&nbsp;</h1>
<h3>3.1 Cr&eacute;ation du projet Cordova avec Visual Studio</h3>
&nbsp;
<p align="left">Ouvrez Visual Studio 2013, cliquez sur &laquo;&nbsp;New&nbsp;&raquo; puis &laquo;&nbsp;Project&nbsp;&raquo;.</p>
<p>Dans la liste des templates &agrave; gauche, s&eacute;lectionnez la partie JavaScript, puis la section &laquo;&nbsp;Apache Cordova Apps&nbsp;&raquo;. S&eacute;lectionner &laquo;&nbsp;Blank App&nbsp;&raquo;, indiquer le nom de l&rsquo;App ainsi qu&rsquo;un chemin sur votre disque dur, puis cliquez sur &laquo;&nbsp;OK&nbsp;&raquo;.</p>
<p><strong><em><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6087.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6087.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6087.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6087.01.png" alt="" border="0" /></a><br /></em></strong></p>
<p>&nbsp;</p>
<p align="left">Une fois cr&eacute;&eacute;e, votre solution contient les fichiers HTML, JS et CSS de base vous permettant de commencer le d&eacute;veloppement orient&eacute; Web&nbsp;:&nbsp;</p>
<p align="left">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2376.02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2376.02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2376.02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/389x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2376.02.png" alt="" border="0" /></a></p>
<p>Le fichier config.XML vous permet de modifier la plupart des param&egrave;tres de l&rsquo;Application (comme son nom, l&rsquo;&eacute;diteur, etc.) communs &agrave; toutes les plateformes, les plugins Cordova que vous souhaitez utiliser, ainsi que les param&eacute;trages propres &agrave; chaque plateforme&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0574.03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0574.03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0574.03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0574.03.png" alt="" border="0" /></a></p>
<p>Pour ex&eacute;cuter et tester votre App, vous pouvez utiliser directement le lanceur de Visual Studio. Vous pouvez cibler diff&eacute;rentes plateformes, avec l&rsquo;&eacute;mulateur correspondant ou directement sur un t&eacute;l&eacute;phone/p&eacute;riph&eacute;rique connect&eacute; par USB &agrave; votre PC&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6708.04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6708.04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6708.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/342x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6708.04.png" alt="" border="0" /></a></p>
<p>Pour iOS, il vous faudra toutefois un Mac serveur, pour porter le r&ocirc;le de build. Pour Windows Phone, l&rsquo;&eacute;mulateur est directement install&eacute; avec le SDK et votre installation Visual Studio et pour Andro&iuml;d &eacute;galement, le tout a &eacute;t&eacute; install&eacute; avec les tools Cordova pour VS.</p>
<p>Quelque chose de fort int&eacute;ressant lorsque vous ex&eacute;cutez votre code est l&rsquo;utilisation de Ripple (au lieu d&rsquo;un device ou d&rsquo;un emulator) :</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8321.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8321.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8321.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/499x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8321.05.png" alt="" border="0" /></a></p>
<p>Ripple est un &eacute;mulateur Andro&iuml;d fait par Apache dont la particularit&eacute; est qu&rsquo;il est ex&eacute;cut&eacute; directement dans Chrome. En fait on pourrait le r&eacute;sumer &agrave; une ex&eacute;cution sp&eacute;cifique en mode web dans Chrome, avec l&rsquo;&eacute;mulation des caract&eacute;ristiques d&rsquo;un t&eacute;l&eacute;phone ou d&rsquo;une tablette. Tr&egrave;s pratique car extr&ecirc;mement rapide pour d&eacute;buguer ses Apps (plus rapide qu&rsquo;un &eacute;mulateur &agrave; d&eacute;marrer, monter en m&eacute;moire, etc.). Une documentation sur MSDN est disponible ici&nbsp;: <a href="https://msdn.microsoft.com/en-us/library/dn757052.aspx">https://msdn.microsoft.com/en-us/library/dn757052.aspx</a></p>
<p>Si vous essayez d&rsquo;ex&eacute;cuter l&rsquo;App avec Ripple, vous pourrez tester votre App dans Chrome, avec un rendu de ce type&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0753.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0753.06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0753.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0753.06.png" alt="" border="0" /></a>&nbsp;</p>
<h3>3.2 Ajout de la librairie WinJS</h3>
<p>&nbsp;</p>
<p>Maintenant que vous avez pris en main l&rsquo;interface du projet, nous allons ajouter WinJS &agrave; notre solution. Pour cela, ouvrez la fen&ecirc;tre dite &laquo;&nbsp;Package Manager Console&nbsp;&raquo; et dans la ligne de commande, saisir la commande d&rsquo;installation de WinJS Install-Package winjs&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2262.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2262.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2262.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2262.07.png" alt="" border="0" /></a></p>
<p>Une fois le package install&eacute;, un sous-r&eacute;pertoire contenant les scripts, styles etc. de WinJS est visible dans l&rsquo;arborescence de la solution&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6278.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6278.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6278.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/383x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6278.08.png" alt="" border="0" /></a></p>
<p>Pour exploiter WinJS dans notre App, on peut inclure dans le fichier index.html les appels au th&egrave;me CSS &agrave; utiliser, ainsi qu&rsquo;aux 2 fichiers JS du framework :&nbsp;&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;link</span> <span style="color: #0000cc;">href=</span><span style="background-color: #fff0f0;">"WinJS/css/ui-dark.css"</span> <span style="color: #0000cc;">rel=</span><span style="background-color: #fff0f0;">"stylesheet"</span> <span style="color: #007700;">/&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"WinJS/js/base.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"WinJS/js/ui.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<h3>3.3 Initialisation de WinJS</h3>
<p align="left">&nbsp;</p>
<p align="left">Dans le fichier index.js, nous allons initialiser l&rsquo;application WinJS, avec le code g&eacute;n&eacute;rique suivant&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">//var activation = Windows.ApplicationModel.Activation;</span>
<span style="color: #008800; font-weight: bold;">var</span> app <span style="color: #333333;">=</span> WinJS.Application;
<span style="color: #008800; font-weight: bold;">var</span> nav <span style="color: #333333;">=</span> WinJS.Navigation;
<span style="color: #008800; font-weight: bold;">var</span> sched <span style="color: #333333;">=</span> WinJS.Utilities.Scheduler;
<span style="color: #008800; font-weight: bold;">var</span> ui <span style="color: #333333;">=</span> WinJS.UI;

app.addEventListener(<span style="background-color: #fff0f0;">"activated"</span>, <span style="color: #008800; font-weight: bold;">function</span> (args) {
    <span style="color: #008800; font-weight: bold;">if</span> (args.detail.kind <span style="color: #333333;">===</span> <span style="background-color: #fff0f0;">"Windows.Launch"</span>) {
        <span style="color: #008800; font-weight: bold;">if</span> (args.detail.previousExecutionState <span style="color: #333333;">!==</span> <span style="color: #0000dd; font-weight: bold;">3</span>) {
            <span style="color: #888888;">//3: terminated</span>
            <span style="color: #888888;">// TODO: This application has been newly launched. Initialize</span>
            <span style="color: #888888;">// your application here.</span>
        } <span style="color: #008800; font-weight: bold;">else</span> {
            <span style="color: #888888;">// TODO: This application has been reactivated from suspension.</span>
            <span style="color: #888888;">// Restore application state here.</span>
        }

        nav.history <span style="color: #333333;">=</span> app.sessionState.history <span style="color: #333333;">||</span> {};
        nav.history.current.initialPlaceholder <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">true</span>;

        <span style="color: #888888;">// Optimize the load of the application and while the splash screen is shown, execute high priority scheduled work.</span>
        ui.disableAnimations();
        <span style="color: #008800; font-weight: bold;">var</span> p <span style="color: #333333;">=</span> ui.processAll().then(<span style="color: #008800; font-weight: bold;">function</span> () {
            <span style="color: #008800; font-weight: bold;">return</span> nav.navigate(nav.location <span style="color: #333333;">||</span> Application.navigator.home, nav.state);
        }).then(<span style="color: #008800; font-weight: bold;">function</span> () {
            <span style="color: #008800; font-weight: bold;">return</span> sched.requestDrain(sched.Priority.aboveNormal <span style="color: #333333;">+</span> <span style="color: #0000dd; font-weight: bold;">1</span>);
        }).then(<span style="color: #008800; font-weight: bold;">function</span> () {
            ui.enableAnimations();
        });

        args.setPromise(p);
    }
});

app.oncheckpoint <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">function</span> (args) {
    <span style="color: #888888;">// TODO: This application is about to be suspended. Save any state</span>
    <span style="color: #888888;">// that needs to persist across suspensions here. If you need to </span>
    <span style="color: #888888;">// complete an asynchronous operation before your application is </span>
    <span style="color: #888888;">// suspended, call args.setPromise().</span>
    app.sessionState.history <span style="color: #333333;">=</span> nav.history;
};

app.start();
</pre>
</div>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p>&nbsp;</p>
<h3>3.4 Utilisation du pattern navigator de WinJS</h3>
<p>&nbsp;</p>
<p>WinJS offre un pattern tr&egrave;s appr&eacute;ciable appel&eacute; le &laquo;&nbsp;navigator&nbsp;&raquo;. Ce pattern permet de g&eacute;rer une navigation fluide (sans rafra&icirc;chissement) entre les pages, ainsi qu&rsquo;un d&eacute;coupage applicatif tr&egrave;s &eacute;l&eacute;gant. Le code source du pattern navigator peut &ecirc;tre encapsul&eacute; au sein d&rsquo;un script g&eacute;n&eacute;rique, que nous allons &eacute;galement inclure dans notre page&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"scripts/navigator.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
</pre>
</div>
<p>Une fois ce fichier JS appel&eacute;, nous allons pouvoir g&eacute;rer nos pages de fa&ccedil;on &eacute;l&eacute;gante et &eacute;volutive. Dans notre page index.html, nous allons pouvoir inclure le contr&ocirc;le de navigation de la fa&ccedil;on suivante&nbsp;: &nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"contenthost"</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"Application.PageControlNavigator"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{home: 'pages/login/login.html'}"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Ceci va indiquer &agrave; notre App que le contenu de la page va &ecirc;tre retrouv&eacute; dans une page login.html dans le sous r&eacute;pertoire pages/login. La page de login va contenir son code de pr&eacute;sentation html, et &eacute;galement appeler son propre fichier JavaScript et son propre fichier de style. Ceci va rendre notre application plus maintenable, chaque page de notre App ayant son propre contexte m&eacute;tier et graphique, bien isol&eacute; du reste du code&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1030.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1030.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1030.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/183x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1030.09.png" alt="" border="0" /></a></p>
<p align="left">La page login.html va contenir son propre code html, et appeler ses propres ressources&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #557799;">&lt;!DOCTYPE html&gt;</span>
<span style="color: #007700;">&lt;html&gt;</span>
<span style="color: #007700;">&lt;head&gt;</span>
    <span style="color: #007700;">&lt;meta</span> <span style="color: #0000cc;">charset=</span><span style="background-color: #fff0f0;">"utf-8"</span> <span style="color: #007700;">/&gt;</span>
    <span style="color: #007700;">&lt;title&gt;</span>Login<span style="color: #007700;">&lt;/title&gt;</span>

    <span style="color: #007700;">&lt;link</span> <span style="color: #0000cc;">href=</span><span style="background-color: #fff0f0;">"login.css"</span> <span style="color: #0000cc;">rel=</span><span style="background-color: #fff0f0;">"stylesheet"</span> <span style="color: #007700;">/&gt;</span>
    <span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"login.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
<span style="color: #007700;">&lt;/head&gt;</span>
<span style="color: #007700;">&lt;body&gt;</span>
    <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"page fragment"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;header</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"page-header"</span> <span style="color: #0000cc;">aria-label=</span><span style="background-color: #fff0f0;">"Header content"</span> <span style="color: #0000cc;">role=</span><span style="background-color: #fff0f0;">"banner"</span><span style="color: #007700;">&gt;</span>
            <span style="color: #007700;">&lt;h1</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"titlearea win-type-ellipsis"</span><span style="color: #007700;">&gt;</span>
                <span style="color: #007700;">&lt;span</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"pagetitle"</span><span style="color: #007700;">&gt;</span>Login<span style="color: #007700;">&lt;/span&gt;</span>
            <span style="color: #007700;">&lt;/h1&gt;</span>
        <span style="color: #007700;">&lt;/header&gt;</span>
        <span style="color: #007700;">&lt;section</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"page-section"</span> <span style="color: #0000cc;">aria-label=</span><span style="background-color: #fff0f0;">"Main content"</span> <span style="color: #0000cc;">role=</span><span style="background-color: #fff0f0;">"main"</span><span style="color: #007700;">&gt;</span>

                <span style="color: #888888;">&lt;!-- contenu de la page --&gt;</span>

        <span style="color: #007700;">&lt;/section&gt;</span>
    <span style="color: #007700;">&lt;/div&gt;</span>
<span style="color: #007700;">&lt;/body&gt;</span>
<span style="color: #007700;">&lt;/html&gt;</span>
</pre>
</div>
<p align="left">&nbsp;</p>
<p>Le fichier login.js pourra contenir le code m&eacute;tier propre &agrave; sa page html, avec des fonctions appel&eacute;es automatiquement lors de certains &eacute;v&egrave;nements, comme &laquo;&nbsp;ready&nbsp;&raquo;, &laquo;&nbsp;unload&nbsp;&raquo;, etc.&nbsp;:&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">// For an introduction to the Page Control template, see the following documentation:</span>
<span style="color: #888888;">// http://go.microsoft.com/fwlink/?LinkId=232511</span>
(<span style="color: #008800; font-weight: bold;">function</span> () {
    <span style="background-color: #fff0f0;">"use strict"</span>;

    WinJS.UI.Pages.define(<span style="background-color: #fff0f0;">"/pages/login/login.html"</span>, {
        <span style="color: #888888;">// This function is called whenever a user navigates to this page. It</span>
        <span style="color: #888888;">// populates the page elements with the app's data.</span>
        ready<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (element, options) {
            <span style="color: #888888;">// TODO: Initialize the page here.</span>
        },

        unload<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> () {
            <span style="color: #888888;">// TODO: Respond to navigations away from this page.</span>
        },

        updateLayout<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (element) {
            <span style="color: #888888;">/// &lt;param name="element" domElement="true" /&gt;</span>

            <span style="color: #888888;">// TODO: Respond to changes in layout.</span>
        }
    });
})();
</pre>
</div>
<p>&nbsp;</p>
<p>Avec cette structuration de pages, nous allons pouvoir maintenant r&eacute;aliser le contenu de notre application, faire des requ&ecirc;tes &agrave; des sites SharePoint, affich&eacute; le contenu dans des contr&ocirc;les HTML 5 efficaces et beaux, et tout &ccedil;a dans une App qui va pouvoir s&rsquo;ex&eacute;cuter aussi bien sur Windows, Windows Phone, Andro&iuml;d, iPhone et iPad&nbsp;!&nbsp;</p>
<p>&nbsp;</p>
<h2>4. Authentification &agrave; Office 365 et SharePoint Online</h2>
<p>&nbsp;</p>
<p>Avant d&rsquo;envisager de faire des requ&ecirc;tes aux API de SharePoint Online ou Office 365, il est indispensable de g&eacute;rer correctement l&rsquo;authentification. Comme vous le savez sans doute, la brique de gestion et de connexion des utilisateurs d&rsquo;Office 365 est bas&eacute;e sur Azure Active Directory (dit AAD).</p>
<p>Azure Active Directory, comme tous les services d&rsquo;Office 365 expose un bon nombre de web services et API pour permettre de g&eacute;rer par programmation l&rsquo;authentification &agrave; ses services. AAD &eacute;volue vite et propose r&eacute;guli&egrave;rement des nouveaux services et m&eacute;thodes d&rsquo;authentification (par exemple r&eacute;cemment a &eacute;t&eacute; ajout&eacute; le support de l&rsquo;authentification Multi-Facteurs, dite MFA).</p>
<p>C&rsquo;est l&agrave; notamment qu&rsquo;intervient les Office 365 API. Pas besoin d&rsquo;&ecirc;tre un expert de l&rsquo;authentification et des services AAD pour &ecirc;tre capable de d&eacute;velopper un syst&egrave;me d&rsquo;authentification. Pas besoin de stocker le login/mot de passe de l&rsquo;utilisateur, ni de se pr&eacute;occuper des &eacute;volutions futures de la plateforme&nbsp;: Office 365 API vous offre des moyens simples pour prendre en charge ses m&eacute;thodes d&rsquo;authentification&nbsp;!</p>
<p>Voici comment proc&eacute;der&nbsp;: Faites un clic droit sur le nom de votre projet dans la fen&ecirc;te &laquo;&nbsp;Solution Explorer&nbsp;&raquo;, puis aller dans le menu &laquo;&nbsp;Add&nbsp;&raquo;, puis cliquer sur &laquo;&nbsp;Connected Service&hellip;&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2656.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2656.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2656.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2656.10.png" alt="" border="0" /></a>&nbsp;</p>
<p>Cliquer dans le menu gauche sur &laquo;&nbsp;Office 365 APIs&nbsp;&raquo; dans la partie Office 365&nbsp;:&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/82252.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/82252.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/82252.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/82252.11.png" alt="" border="0" /></a></p>
<p>Saisir votre compte Office 365&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3443.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3443.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3443.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3443.12.png" alt="" border="0" /></a></p>
<p align="left">Une fois connect&eacute;, la liste de vos services accessible sur votre tenant Office 365 va appara&icirc;tre. Cliquer sur &laquo;&nbsp;Sites&nbsp;&raquo;, puis sur &laquo;&nbsp;Permissions&nbsp;&raquo; &agrave; droite&nbsp;:</p>
<p align="left">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5852.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5852.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5852.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5852.13.png" alt="" border="0" /></a></p>
<p align="left">S&eacute;lectionner la permission &laquo;&nbsp;Read items in all site collections&nbsp;&raquo;, puis cliquer sur &laquo;&nbsp;Apply&nbsp;&raquo;&nbsp;:</p>
<p align="left">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3884.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3884.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3884.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/388x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3884.14.png" alt="" border="0" /></a></p>
<p>Une fois la fen&ecirc;tre pr&eacute;c&eacute;dente valid&eacute;e, des nouveaux fichiers de sources sont ajout&eacute;es dans votre solution, dans un sous-r&eacute;pertoire &laquo;&nbsp;services/office365&nbsp;&raquo;&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8475.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8475.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8475.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/213x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8475.15.png" alt="" border="0" /></a></p>
<p>Si vous ouvrez le fichier &laquo;&nbsp;settings.js&nbsp;&raquo;, vous allez voir le param&eacute;trage sp&eacute;cifique &agrave; votre application, avec les informations d&rsquo;identification (client ID) et les adresses permettant &agrave; votre application de dialoguer avec le fournisseur d&rsquo;authentification de votre tenant&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">var</span> O365Auth;
(<span style="color: #008800; font-weight: bold;">function</span> (O365Auth) {
    (<span style="color: #008800; font-weight: bold;">function</span> (Settings) {
        Settings.clientId <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">'you-client-id-guid'</span>;
        Settings.authUri <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">'https://login.windows.net/common/'</span>;
        Settings.redirectUri <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">'http://localhost:4400/services/office365/redirectTarget.html'</span>;
    })(O365Auth.Settings <span style="color: #333333;">||</span> (O365Auth.Settings <span style="color: #333333;">=</span> {}));
    <span style="color: #008800; font-weight: bold;">var</span> Settings <span style="color: #333333;">=</span> O365Auth.Settings;
})(O365Auth <span style="color: #333333;">||</span> (O365Auth <span style="color: #333333;">=</span> {}));
</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;Pour appeler et inclure les services d&rsquo;Office 365 dans notre projet, les choses sont plut&ocirc;t simples, il nous suffit d&rsquo;inclure l&rsquo;appel au fichier &laquo;&nbsp;o365loader.js&nbsp;&raquo; qui va se charger d&rsquo;inclure les autres JS n&eacute;cessaires&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">&lt;!-- Office365 Service Libraries --&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"services/office365/scripts/o365loader.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Lorsque l&rsquo;utilisateur va cliquer sur le bouton de Login, l&rsquo;API Office 365 nous permet d&rsquo;initialiser le contexte d&rsquo;authentification, puis de demander le jeton pour acc&eacute;der aux ressources SharePoint&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">authContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> O365Auth.Context();
discoveryContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> O365Discovery.Context();
discoveryContext.services(authContext.getAccessTokenFn(<span style="background-color: #fff0f0;">'Microsoft.SharePoint'</span>)).then((<span style="color: #008800; font-weight: bold;">function</span> (value) {
    capabilities <span style="color: #333333;">=</span> value;
    getCurrentUser();
}).bind(<span style="color: #008800; font-weight: bold;">this</span>), <span style="color: #008800; font-weight: bold;">function</span> (error) {
    <span style="color: #008800; font-weight: bold;">var</span> errorAsString <span style="color: #333333;">=</span> JSON.stringify(error);
});
</pre>
</div>
<p>&nbsp;</p>
<p>On peut alors extraire les informations du profil utilisateur et naviguer vers la page home.html&nbsp;: &nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">// Get currently logged in user</span>
<span style="color: #008800; font-weight: bold;">function</span> getCurrentUser() {
    authContext.getIdToken(<span style="background-color: #fff0f0;">"https://outlook.office365.com/"</span>).then((<span style="color: #008800; font-weight: bold;">function</span> (token) {
        authToken <span style="color: #333333;">=</span> token;

        <span style="color: #008800; font-weight: bold;">var</span> options <span style="color: #333333;">=</span> { token<span style="color: #333333;">:</span> authToken, context<span style="color: #333333;">:</span> authContext, capabilities<span style="color: #333333;">:</span> capabilities };
<span style="color: #888888;">//Bind the user name</span>
<span style="color: #008800; font-weight: bold;">var</span> userName <span style="color: #333333;">=</span> { name<span style="color: #333333;">:</span> authToken.givenName <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">' '</span> <span style="color: #333333;">+</span> authToken.familyName };
<span style="color: #008800; font-weight: bold;">var</span> personDiv <span style="color: #333333;">=</span> <span style="color: #007020;">document</span>.querySelector(<span style="background-color: #fff0f0;">'#userName'</span>);
WinJS.Binding.processAll(personDiv, userName);

        WinJS.Navigation.navigate(<span style="background-color: #fff0f0;">"/pages/home/home.html"</span>, options);

    }).bind(<span style="color: #008800; font-weight: bold;">this</span>), <span style="color: #008800; font-weight: bold;">function</span> (reason) {
        console.og(reason.message);
    });
}
</pre>
</div>
<p>&nbsp;</p>
<p>Dans notre App, l&rsquo;utilisateur peut maintenant s&rsquo;authentifier dans l&rsquo;App en trois &eacute;tapes&nbsp;: 1&nbsp;: Il clique sur le bouton Login, 2&nbsp;: Il est invit&eacute; &agrave; saisir ses cr&eacute;dentials sur son syst&egrave;me d&rsquo;authentification de son tenant Office 365, 3&nbsp;: il est redirig&eacute; vers l&rsquo;App&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7144.authent.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7144.authent.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7144.authent.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7144.authent.png" alt="" border="0" /></a></p>
<h2>5. Utilisation des web services de SharePoint Online</h2>
<p>&nbsp;</p>
<p>Maintenant que l&rsquo;utilisateur est capable de se connecter, on peut r&eacute;aliser des requ&ecirc;tes sur des ressources contenu au sein de site SharePoint.</p>
<p>Pour cet exemple, nous allons utiliser deux listes au sein d&rsquo;un site d&rsquo;&eacute;quipe pour respectivement afficher des annonces et les derniers documents d&rsquo;une biblioth&egrave;que SharePoint.</p>
<p>Exemple de listes Annonce&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3323.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3323.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3323.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3323.17.png" alt="" border="0" /></a></p>
<p>Exemple de biblioth&egrave;que SharePoint Online :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0741.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0741.18.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0741.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0741.18.png" alt="" border="0" /></a>&nbsp;</p>
<p>Pour lire les donn&eacute;es d&rsquo;une liste ou d&rsquo;une biblioth&egrave;que SharePoint, on peut utiliser les web services de l&rsquo;API REST. On peut par exemple lister les donn&eacute;es de la biblioth&egrave;que &laquo;&nbsp;Annonces&nbsp;&raquo; via un appel du type :</p>
<p align="left"><a href="https://yourtenant.sharepoint.com/sites/WinJSSampleSite/_api/lists/getbytitle('Annonces')/items?$select=Title,Body,Modified">https://YOURTENANT.sharepoint.com/sites/WinJSSampleSite/_api/lists/getbytitle('Annonces')/items?$select=Title,Body,Modified</a></p>
<p>Le code suivant montre comment ex&eacute;cuter la requ&ecirc;te HTML avec WinJS.xhr et lister les r&eacute;sultats&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">//Request the latest announcements</span>
<span style="color: #008800; font-weight: bold;">var</span> rootSiteRessourceId;
options.capabilities.forEach(<span style="color: #008800; font-weight: bold;">function</span> (v, i, a) {
    <span style="color: #008800; font-weight: bold;">if</span> (v.capability <span style="color: #333333;">===</span> <span style="background-color: #fff0f0;">'RootSite'</span>) {
        rootSiteRessourceId <span style="color: #333333;">=</span> v.resourceId;
    }
});

options.context.getAccessToken(rootSiteRessourceId).then((<span style="color: #008800; font-weight: bold;">function</span> (bearerToken) {
    <span style="color: #008800; font-weight: bold;">var</span> options <span style="color: #333333;">=</span> {
        url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://YOURTENANT.sharepoint.com/sites/WinJSSampleSite/_api/lists/getbytitle('Annonces')/items?$select=Title,Body,Modified"</span>,
        type<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">'GET'</span>,
        headers<span style="color: #333333;">:</span>
            {
                <span style="background-color: #fff0f0;">"accept"</span><span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"application/json;odata=verbose"</span>,
                <span style="background-color: #fff0f0;">"content-type"</span><span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"application/json;odata=verbose"</span>,
                <span style="background-color: #fff0f0;">"Authorization"</span><span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"Bearer "</span> <span style="color: #333333;">+</span> bearerToken
            }
    };
    WinJS.xhr(options).done(
        <span style="color: #008800; font-weight: bold;">function</span> (result) {

            <span style="color: #008800; font-weight: bold;">var</span> feed <span style="color: #333333;">=</span> JSON.parse(result.responseText);
            <span style="color: #008800; font-weight: bold;">for</span> (<span style="color: #008800; font-weight: bold;">var</span> i <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">0</span>, len <span style="color: #333333;">=</span> feed.d.results.length; i <span style="color: #333333;">&lt;</span> len; i<span style="color: #333333;">++</span>) {
                <span style="color: #008800; font-weight: bold;">var</span> item <span style="color: #333333;">=</span> feed.d.results[i];

                latestNews.push(
                    {
                        name<span style="color: #333333;">:</span> item[<span style="background-color: #fff0f0;">"Title"</span>],
                        icon<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"images/calendar.png"</span>,
                        time<span style="color: #333333;">:</span> formatDate(item[<span style="background-color: #fff0f0;">"Modified"</span>]),
                        readStateColor<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"rgba(255, 255, 255, 4)"</span>,
                        readStateFont<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"Segoe UI Semibold"</span>,
                        messageText<span style="color: #333333;">:</span> removeHtml(item[<span style="background-color: #fff0f0;">"Body"</span>])
                    });

            }
</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>6. Afficher des donn&eacute;es et interface graphique avec WinJS</h2>
<p>&nbsp;</p>
<p>Une fois la requ&ecirc;te ex&eacute;cut&eacute;e nous pouvons afficher les r&eacute;sultats &agrave; l&rsquo;aide d&rsquo;un contr&ocirc;le ListView de WinJS. Ce contr&ocirc;le permet de &laquo;&nbsp;binder&nbsp;&raquo; une liste de r&eacute;sultats &agrave; partir d&rsquo;une template HTML. On peut &eacute;galement utiliser le contr&ocirc;le WinJS.UI.Pivot pour afficher les deux listes sous la forme d&rsquo;onglets&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"messageTemplate"</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.Binding.Template"</span><span style="color: #007700;">&gt;</span>
    <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"message"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"userIcon"</span><span style="color: #007700;">&gt;&lt;img</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"#"</span> <span style="color: #0000cc;">data-win-bind=</span><span style="background-color: #fff0f0;">"src: icon"</span> <span style="color: #0000cc;">width=</span><span style="background-color: #fff0f0;">"48"</span><span style="color: #007700;">/&gt;&lt;/div&gt;</span>
        <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"messageContent"</span><span style="color: #007700;">&gt;</span>
            <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"contactInformation"</span><span style="color: #007700;">&gt;</span>
                <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"contactName"</span> <span style="color: #0000cc;">data-win-bind=</span><span style="background-color: #fff0f0;">"textContent: name"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
                <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"contactTime"</span> <span style="color: #0000cc;">data-win-bind=</span><span style="background-color: #fff0f0;">"textContent: time; style.color: readStateColor; style.fontFamily: readStateFont"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
            <span style="color: #007700;">&lt;/div&gt;</span>
            <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"messagePreview"</span> <span style="color: #0000cc;">data-win-bind=</span><span style="background-color: #fff0f0;">"textContent: messageText; style.color: readStateColor; style.fontFamily: readStateFont"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
        <span style="color: #007700;">&lt;/div&gt;</span>
    <span style="color: #007700;">&lt;/div&gt;</span>
<span style="color: #007700;">&lt;/div&gt;</span>

<span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"messageList"</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.UI.Pivot"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{ selectedIndex: 0 }"</span><span style="color: #007700;">&gt;</span>
                
    <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"pivotItem"</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.UI.PivotItem"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{ 'header': 'Latest News' }"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.UI.Repeater"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{ data: DataSet.LatestNews, template: select('.messageTemplate') }"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
    <span style="color: #007700;">&lt;/div&gt;</span>

    <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">class=</span><span style="background-color: #fff0f0;">"pivotItem"</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.UI.PivotItem"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{ 'header': 'Latest Docs' }"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">data-win-control=</span><span style="background-color: #fff0f0;">"WinJS.UI.Repeater"</span> <span style="color: #0000cc;">data-win-options=</span><span style="background-color: #fff0f0;">"{ data: DataSet.LatestDocs, template: select('.messageTemplate') }"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
    <span style="color: #007700;">&lt;/div&gt;</span>

<span style="color: #007700;">&lt;/div&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Dans le code JavaScript associ&eacute;, on peut initialiser les listes&nbsp;:&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">var</span> latestNews <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> WinJS.Binding.List([]);
<span style="color: #008800; font-weight: bold;">var</span> latestDocs <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> WinJS.Binding.List([]);

WinJS.Namespace.define(<span style="background-color: #fff0f0;">"DataSet"</span>, {
    LatestNews<span style="color: #333333;">:</span> latestNews,
    LatestDocs<span style="color: #333333;">:</span> latestDocs
});
</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Voici le rendu des &eacute;crans&nbsp;sur un t&eacute;l&eacute;phone en mode vertical&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1638.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1638.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1638.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1638.19.png" alt="" border="0" /></a></p>
<p>Ou en mode horizontal&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7587.20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7587.20.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7587.20.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/340x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7587.20.png" alt="" border="0" /></a></p>
<h2>Conclusion</h2>
<p>&nbsp;</p>
<p>Il est simple de d&eacute;velopper une App mobile capable de pleinement exploiter les API d&rsquo;Office 365 pour interroger un site SharePoint Online. Gr&acirc;ce aux extensions Apache Cordova pour Visual Studio, on peut facilement rendre cette application compatible pour les types de devices mobiles comme Windows Phone, Andro&iuml;d ou iOS.</p>
<p>Proposer des applications mobiles connect&eacute;es avec ses sites Intranet SharePoint, sa messagerie Exchange Online, son espace OneDrive ou encore son Office Graph sont autant de choses facilement r&eacute;alisables gr&acirc;ce &agrave; l'Office 365 API.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/60/18/76/MyWinJSCordovaApp.zip" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-60-18-76/MyWinJSCordovaApp.zip">MyWinJSCordovaApp.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Comment utiliser Yammer API avec SharePoint 2013 ?</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/comment-utiliser-yammer-api-avec-sharepoint-2013</link>
      <pubDate>Wed, 11 Mar 2015 00:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/03/11/comment-utiliser-yammer-api-avec-sharepoint-2013/</guid>
      <description><![CDATA[&nbsp;
Introduction
&nbsp;
Si vous aim&eacute; Yammer et SharePoint 2013, vous vous &ecirc;tes...]]></description>
      <content:encoded><![CDATA[<p>&nbsp;</p>
<h2>Introduction</h2>
<p>&nbsp;</p>
<p>Si vous aim&eacute; Yammer et SharePoint 2013, vous vous &ecirc;tes probablement souvent pos&eacute; la question de comment faire des sc&eacute;narios d&rsquo;int&eacute;gration entre ces deux outils. M&ecirc;me si cela est parfois mal connu, il existe un grand nombre de m&eacute;thodes pour &ecirc;tre capable d&rsquo;int&eacute;grer ces deux solutions.</p>
<p>Parmi elles, on peut citer deux m&eacute;thodes particuli&egrave;rement utiles pour un grand nombre de projets&nbsp;:</p>
<ol>
<li><strong>Yammer Embed</strong>&nbsp;: il s&rsquo;agit d&rsquo;une librairie JavaScript pour tr&egrave;s simplement afficher un flux Yammer dans un site SharePoint.&nbsp; Cette m&eacute;thode n&rsquo;est pas d&eacute;taill&eacute;e dans cet article. Si vous souhaitez plus d&rsquo;information, je vous invite &agrave; lire <a href="http://blogs.msdn.com/b/ocarpen/archive/2015/03/07/comment-utiliser-yammer-embed-avec-sharepoint-2013.aspx">mon billet de blog pr&eacute;c&eacute;dent</a>, qui explique les fondamentaux &agrave; conna&icirc;tre sur Yammer Embed.</li>
<li><strong>Yammer API</strong>&nbsp;: il s&rsquo;agit de l&rsquo;interface de programmation de Yammer. C&rsquo;est celle que nous allons d&eacute;tailler et pr&eacute;senter dans ce billet.</li>
</ol>
<p>Yammer API (pour Application Program Interface) est un kit de programmation disponible dans diff&eacute;rents langages, qui va vous permettre d&rsquo;interagir avec Yammer pour r&eacute;aliser un bon nombre d&rsquo;actions.&nbsp;</p>
<p>Dans cet article, nous verrons diff&eacute;rents exemples de code nous permettant d&rsquo;afficher des donn&eacute;es de Yammer dans un site SharePoint, ou au contraire, de pousser des &eacute;l&eacute;ments vers Yammer depuis SharePoint.</p>
<p>Pour cet article, je souhaite remercier chaleureusement <a href="https://twitter.com/loicdacosta">Loic Da Costa</a>, avec qui j&rsquo;ai eu la chance de pouvoir collaborer sur le sujet.</p>
<p>&nbsp;</p>
<h2>Yammer API&nbsp;: pour quoi faire&nbsp;?</h2>
<p>&nbsp;</p>
<p>Hormis les sc&eacute;narios d&rsquo;inclusion d&rsquo;un fil de discussion Yammer dans une page SharePoint qui peut &ecirc;tre r&eacute;alis&eacute; avec Yammer Embed, tous les autres sc&eacute;narii d&rsquo;interconnexion applicative peuvent &ecirc;tre r&eacute;alis&eacute;s avec l&rsquo;API Yammer.</p>
<p>Si vous savez utiliser l&rsquo;API Yammer, vous allez pouvoir r&eacute;aliser un bon nombre d&rsquo;id&eacute;e d&rsquo;int&eacute;gration, comme par exemple&nbsp;:</p>
<ul>
<li>R&eacute;aliser une application qui se base sur l&rsquo;authentification Yammer&nbsp;;</li>
<li>R&eacute;aliser une application qui est capable d&rsquo;extraire et d&rsquo;utiliser les informations du profil de l&rsquo;utilisateur, comme par exemple sa photo, ses groupes d&rsquo;appartenance, etc.</li>
<li>R&eacute;aliser une application qui est capable de cr&eacute;er automatiquement du contenu dans Yammer, comme par exemple pour pousser un lien vers une donn&eacute;e stock&eacute;e dans SharePoint&nbsp;;</li>
<li>Etc.</li>
</ul>
<p>&nbsp;</p>
<h2>Principes des interfaces de programmation de Yammer</h2>
<p>&nbsp;</p>
<p>Il existe plusieurs types d&rsquo;interface de programmation pour faire de l&rsquo;int&eacute;gration avec Yammer. Parmi elles, on peut citer&nbsp;: le SDK JavaScript, Ruby, Python, iOS, .Net ou encore Windows Phone 8.</p>
<p>L&rsquo;objectif de ces SDK est relativement identique&nbsp;: encapsuler du code qui appelle les web services &nbsp;de Yammer (dits &laquo;&nbsp;EndPoints&nbsp;&raquo; &ndash; ou &laquo;&nbsp;points de terminaison&nbsp;&raquo; - utilisant la technologie REST) pour vous faciliter les manipulations par code.</p>
<p>Dans cet article, nous n&rsquo;allons utiliser que le <strong>SDK JavaScript</strong>, <strong>car il se pr&ecirc;te tr&egrave;s bien &agrave; une int&eacute;gration simple et rapide avec SharePoint 2013</strong>.</p>
<p>Si vous souhaitez lire la documentation de l&rsquo;&eacute;quipe Yammer sur le sujet, je vous sugg&egrave;re la doc officielle, r&eacute;f&eacute;renc&eacute;e dans le &laquo;&nbsp;Developper Center&nbsp;&raquo; de Yammer. Je vous invite &agrave; lire les pages suivantes, qui sont riches en information&nbsp;:</p>
<ul>
<li>Point d&rsquo;entr&eacute;e de la documentation&nbsp;: <a href="https://developer.yammer.com/">https://developer.yammer.com/</a>&nbsp;</li>
<li>Comprendre les m&eacute;canismes d&rsquo;authentification&nbsp;: <a href="https://developer.yammer.com/v1.0/docs/authentication">https://developer.yammer.com/v1.0/docs/authentication</a></li>
<li>Pr&eacute;sentation des concepts de l&rsquo;Open Graph&nbsp;: <a href="https://developer.yammer.com/v1.0/docs/open-graph">https://developer.yammer.com/v1.0/docs/open-graph</a></li>
<li>Documentation du SDK JavaScript&nbsp;: <a href="https://developer.yammer.com/v1.0/docs/js-sdk">https://developer.yammer.com/v1.0/docs/js-sdk</a></li>
<li>Documentation des web services REST&nbsp;: <a href="https://developer.yammer.com/v1.0/docs/rest-api-rate-limits">https://developer.yammer.com/v1.0/docs/rest-api-rate-limits</a></li>
</ul>
<p>Il est &eacute;galement pratique de savoir que toute la communaut&eacute; des d&eacute;veloppeurs Yammer &eacute;change sur la plateforme Stack Overflow. Vous pouvez trouver un grand nombre d&rsquo;exemples de code et des r&eacute;ponses &agrave; vos questions ici&nbsp;: <a href="http://stackoverflow.com/tags/yammer/">http://stackoverflow.com/tags/yammer/</a></p>
<p>Toute utilisation de l&rsquo;API Yammer n&eacute;cessite forc&eacute;ment deux concepts de base&nbsp;: r&eacute;aliser une App pour Yammer et g&eacute;rer l&rsquo;authentification.</p>
<p>Nous allons pr&eacute;senter ces concepts dans les chapitres suivants.</p>
<p>&nbsp;</p>
<h2>D&eacute;clarer une application Yammer</h2>
<p>&nbsp;</p>
<p>Un point important &agrave; comprendre avant de se lancer dans un d&eacute;veloppement avec Yammer, est le concept d&rsquo;Application.</p>
<p>Pour pouvoir communiquer de fa&ccedil;on s&eacute;curis&eacute;e entre un site SharePoint et un r&eacute;seau Yammer, on doit au pr&eacute;alable &eacute;tablir un &laquo;&nbsp;lien &nbsp;s&eacute;curis&eacute;&nbsp;&raquo; entre nos d&eacute;veloppements et Yammer. Cela passe par le concept d&rsquo;App. Une App Yammer est essentiellement une d&eacute;claration au sein d&rsquo;un r&eacute;seau, permettant d&rsquo;obtenir des param&egrave;tres que nous pourrons utiliser dans un code source pour communiquer avec Yammer de fa&ccedil;on s&eacute;curis&eacute;e.</p>
<p>La proc&eacute;dure officielle pour d&eacute;clarer une nouvelle App dans Yammer est disponible &agrave; l&rsquo;adresse suivante&nbsp;: <a href="https://developer.yammer.com/v1.0/docs/app-registration">https://developer.yammer.com/v1.0/docs/app-registration</a></p>
<p>Pour d&eacute;clarer une nouvelle App Yammer, vous pouvez suivre la proc&eacute;dure suivante&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2021.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2021.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2021.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/162x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2021.01.png" alt="" border="0" /></a>&nbsp;</p>
<p>Dans le bloc de gauche de l&rsquo;&eacute;cran, cliquer sur&nbsp;&laquo;&nbsp;Enregistrer une nouvelle App&nbsp;&raquo; :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3162.02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3162.02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3162.02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/167x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3162.02.png" alt="" border="0" /></a>&nbsp;</p>
<p>Remplissez le formulaire et tous ses champs. Pour la zone de saisie &laquo;&nbsp;site web&nbsp;&raquo;, bien remplir avec l&rsquo;adresse du site SharePoint qui va contenir les d&eacute;veloppements qui vont communiquer avec Yammer, puis cliquez sur &laquo;&nbsp;Continuer&nbsp;&raquo;&nbsp;:</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0486.03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0486.03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0486.03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/525x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0486.03.png" alt="" border="0" /></a></p>
<p>Une fois cr&eacute;&eacute;e, votre application est visible et peut &ecirc;tre publi&eacute;e gr&acirc;ce &agrave; un formulaire en 3 &eacute;tapes&nbsp;: les informations de base, le param&eacute;trage sur la fa&ccedil;on d&rsquo;appara&icirc;tre dans l&rsquo;annuaire des Apps et enfin du param&eacute;trage sp&eacute;cifique si vous souhaitez personnaliser le &laquo;&nbsp;vocabulaire&nbsp;&raquo; open graph de votre application. Le 1<sup>ier</sup> &eacute;cran est tr&egrave;s important, c&rsquo;est ici que vous allez trouver l&rsquo;identifiant (cl&eacute;) de votre App, ainsi que la cl&eacute; secr&egrave;te. Garder pr&eacute;cieusement l&rsquo;identifiant Client, nous serons amen&eacute; &agrave; nous en resservir par la suite&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7853.04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7853.04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7853.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7853.04.png" alt="" border="0" /></a>&nbsp;</p>
<p align="left">Dans le menu de gauche, cliquer sur &laquo;&nbsp;Info de base&nbsp;&raquo; pour acc&eacute;der aux informations g&eacute;n&eacute;riques de l&rsquo;App.</p>
<p align="left">L&rsquo;&eacute;cran se d&eacute;compose en deux parties :</p>
<ul>
<li><strong>Informations sur l&rsquo;Application &amp; Informations de support</strong>&nbsp;: ces deux sections contiennent les informations sur l&rsquo;App que vous venez de saisir.</li>
<li><strong>Informations d&rsquo;installation</strong>&nbsp;: cette section est tr&egrave;s importante. Vous devez saisir l&rsquo;adresse de redirection (que vous avez normalement d&eacute;j&agrave; saisie sur le formulaire pr&eacute;c&eacute;dent) et <span style="text-decoration: underline;">SURTOUT</span> les adresses des domaines d&rsquo;origines qui vont appeler l&rsquo;API Yammer. Il est <span style="text-decoration: underline;">primordial de bien pr&eacute;ciser ces informations</span>, pour que l&rsquo;authentification fonctionne bien. Vous devez saisir ici les domaines des sites SharePoint. Pas besoin de saisir les adresses compl&egrave;tes de vos sites SharePoint, mais uniquement les domaines. Ne saisissez pas les adresses avec des &laquo;&nbsp;wildcards&nbsp;&raquo; (type&nbsp;: <a href="https://%2A.sharepoint.com/">https://*.sharepoint.com</a>), mais plut&ocirc;t des adresses compl&egrave;tes. Prenons un exemple&nbsp;: vous poss&eacute;dez un tenant Office 365 appel&eacute; &laquo;&nbsp;mycontoso&nbsp;&raquo;. Vos sites SharePoint sont disponibles depuis le domaine <a href="https://mycontoso.sharepoint.com/">https://mycontoso.sharepoint.com</a> avec des adresses du type <a href="https://mycontoso.sharepoint.com/sites/sample">https://mycontoso.sharepoint.com/sites/sample</a>. La valeur &agrave; remplir ici est donc bien <a href="https://mycontoso.sharepoint.com/">https://mycontoso.sharepoint.com</a>.&nbsp; &nbsp;</li>
</ul>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7851.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7851.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7851.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7851.05.png" alt="" border="0" /></a></p>
<p><em>Astuce&nbsp;: Saisir ici des adresses sans le slash final &laquo;&nbsp;/&nbsp;&raquo;.&nbsp;</em></p>
<p>&nbsp;</p>
<p>Cliquer ensuite sur &laquo;&nbsp;Annuaire des applications&nbsp;&raquo;. Vous pouvez alors configurer la fa&ccedil;on dont l&rsquo;App appara&icirc;tra. Vous pouvez &eacute;galement fournir des images &agrave; diff&eacute;rents formats, qui seront r&eacute;-exploit&eacute;es par Yammer pour vous faire appara&icirc;tre aux diff&eacute;rents endroits du site et de l&rsquo;annuaire.</p>
<p>&nbsp;Au-del&agrave; des informations de description de l&rsquo;App, il est important de noter deux choses sur cet &eacute;cran&nbsp;:</p>
<ol>
<li>Vous remarquerez la pr&eacute;sence d&rsquo;une case &agrave; cocher &laquo;&nbsp;Jeton&nbsp;&raquo;. Cette case peut vous aider &agrave; dialoguer et &eacute;changer les param&egrave;tres d&rsquo;authentification gr&acirc;ce &agrave; des jetons. Ne la cochez pas, dans notre exemple nous n&rsquo;en n&rsquo;aurons pas besoin&nbsp;;</li>
<li>La pr&eacute;sence d&rsquo;un bouton &laquo;&nbsp;D&eacute;ployer&nbsp;&raquo; en bas du formulaire. Ce bouton est imp&eacute;ratif dans pour que l&rsquo;App soit visibles et utilisables par vos utilisateurs.</li>
</ol>
<p>Remplissez les champs, puis cliquez sur le bouton &laquo;&nbsp;D&eacute;ployer&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0763.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0763.06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0763.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0763.06.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5621.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5621.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5621.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5621.07.png" alt="" border="0" /></a></p>
<p align="left">Apr&egrave;s avoir enregistr&eacute; et d&eacute;ploy&eacute; votre App sur votre r&eacute;seau, les boutons de cet &eacute;cran changent et apparaissent de la fa&ccedil;on suivante&nbsp;:</p>
<p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3513.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3513.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3513.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/481x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3513.08.png" alt="" border="0" /></a>&nbsp;</p>
<p>Attention&nbsp;: ne cliquer pas sur le bouton &laquo;&nbsp;Soumettre pour v&eacute;rification&nbsp;&raquo;. Ce bouton que permet de soumettre votre application pour appara&icirc;tre dans l&rsquo;annuaire global des App Yammer et donc &ecirc;tre disponibles pour tous les networks managers. A ce stade, ce n&rsquo;est probablement pas ce que vous souhaitez faire.</p>
<p>Dans cet exemple, nous n&rsquo;allons pas configurer le 3ieme &eacute;cran, relatif au &laquo;&nbsp;tunning&nbsp;&raquo; de l&rsquo;Open Graph pour une raison simple&nbsp;: nous n&rsquo;en aurons pas besoin. En ayant d&eacute;ploy&eacute; notre App sur le r&eacute;seau, celle-ci est maintenant visible et op&eacute;rationnelle.</p>
<p>Nous pouvons maintenant commencer l&rsquo;int&eacute;gration de cette App au sein d&rsquo;un site SharePoint 2013&nbsp;!</p>
<p>&nbsp;</p>
<h2>R&eacute;f&eacute;rencer la librairie JavaScript Yammer</h2>
<p>&nbsp;</p>
<p>Pour r&eacute;f&eacute;rencer la librairie JavaScript Yammer, nous devons inclure dans nos pages un appel au fichier JS de Yammer. Inclure un appel &agrave; une librairie peut &ecirc;tre fait de plusieurs fa&ccedil;ons dans SharePoint 2013, via directement une &eacute;dition de la page et l&rsquo;ajout d&rsquo;une WebPart de type &laquo;&nbsp;Editeur de script&nbsp;&raquo;, ou directement via une modification du code de votre master page.</p>
<p>C&rsquo;est &agrave; travers cette r&eacute;f&eacute;rence, que nous allons fournir &agrave; Yammer notre CLIENT ID.</p>
<p>L&rsquo;inclusion doit &ecirc;tre r&eacute;alis&eacute;e avec la forme suivante&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000cc;">data-app-id=</span><span style="background-color: #fff0f0;">"YOUR-APP-CLIENT-ID"</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"https://c64.assets-yammer.com/assets/platform_js_sdk.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;Dans l&rsquo;exemple de l&rsquo;App que nous venons de cr&eacute;er, le code serait donc le suivant&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000cc;">data-app-id=</span><span style="background-color: #fff0f0;">"E1mOzs6tUYIEq93MrNUA"</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"https://c64.assets-yammer.com/assets/platform_js_sdk.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p><em>Astuce&nbsp;: Ne copiez/collez pas directement le code pr&eacute;c&eacute;dent, pensez &agrave; bien remplacer l&rsquo;argument &laquo;&nbsp;data-app-id&nbsp;&raquo; par votre propre identifiant, sans quoi, vos appels &agrave; l&rsquo;API ne fonctionneront pas&nbsp;!</em></p>
<p>Maintenant que nous avons correctement r&eacute;f&eacute;renc&eacute; la librairie JavaScript, nous sommes pr&ecirc;ts pour faire des appels &agrave; l&rsquo;API Yammer.</p>
<p>&nbsp;</p>
<h2>G&eacute;rer la connexion de l&rsquo;utilisateur par Yammer</h2>
<p>&nbsp;</p>
<h3>Concepts de l&rsquo;authentification Yammer</h3>
<p>&nbsp;</p>
<p>Pierre angulaire de toute int&eacute;gration d&rsquo;une solution dans une autre&nbsp;: l&rsquo;authentification&nbsp;! Si l&rsquo;on souhaite communiquer ou r&eacute;cup&eacute;rer des informations de Yammer depuis un site SharePoint, il est imp&eacute;ratif que l&rsquo;on soit capable de conna&icirc;tre l&rsquo;identit&eacute; Yammer de l&rsquo;utilisateur.</p>
<p align="left">Pour cela, nous allons voir deux concepts importants&nbsp;:</p>
<ol>
<li>Comment d&eacute;tecter si l&rsquo;utilisateur est connect&eacute; sur Yammer</li>
<li>Comment d&eacute;clencher une authentification si l&rsquo;utilisateur n&rsquo;est pas encore connect&eacute;</li>
</ol>
<p>&nbsp;</p>
<h3>M&eacute;thode de connexion &laquo;&nbsp;tout en un&nbsp;&raquo;</h3>
<p>&nbsp;</p>
<p>L&rsquo;API JavaScript de Yammer nous offre un m&eacute;canisme pr&eacute;construit pour r&eacute;aliser ces deux op&eacute;rations, gr&acirc;ce &agrave; la m&eacute;thode &laquo;&nbsp;<span style="font-family: 'courier new', courier;">yam.connect.loginButton</span>&nbsp;&raquo; :</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">yam.connect.loginButton
</pre>
</div>
<p>Cette m&eacute;thode va automatiquement essayer de d&eacute;tecter le statut d&rsquo;authentification de l&rsquo;utilisateur et &eacute;ventuellement afficher le bouton de connexion si l&rsquo;utilisateur n&rsquo;est pas connect&eacute;.</p>
<p>Le code JavaScript pour r&eacute;aliser cette op&eacute;ration est le suivant&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;span</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"yammer-login"</span><span style="color: #007700;">&gt;&lt;/span&gt;</span>
<span style="color: #007700;">&lt;script&gt;</span>
  yam.connect.loginButton(<span style="background-color: #fff0f0;">'#yammer-login'</span>, <span style="color: #008800; font-weight: bold;">function</span> (resp) {
    <span style="color: #008800; font-weight: bold;">if</span> (resp.authResponse) {
      <span style="color: #007020;">document</span>.getElementById(<span style="background-color: #fff0f0;">'yammer-login'</span>).innerHTML <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">'Bravo vous &ecirc;tes connect&eacute; !'</span>;
    }
  });
<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p align="left">Dans le cas o&ugrave; l&rsquo;utilisateur n&rsquo;est pas encore connect&eacute;, le bouton suivant va appara&icirc;tre&nbsp;:</p>
<p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8585.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8585.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8585.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/168x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8585.09.png" alt="" border="0" /></a>&nbsp;</p>
<p align="left">Si l&rsquo;utilisateur clique sur le bouton, une pop-up de ce type va appara&icirc;tre &agrave; l&rsquo;utilisateur&nbsp;:</p>
<p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0815.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0815.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0815.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0815.10.png" alt="" border="0" /></a>&nbsp;</p>
<p>Une fois identifi&eacute;, l&rsquo;utilisateur sera maintenant correctement reconnu et nous allons pouvoir faire des appels &agrave; l&rsquo;API Yammer.</p>
<p>Une chose importante &agrave; se souvenir est que la r&eacute;ponse de l&rsquo;authentification est fournie gr&acirc;ce &agrave; l&rsquo;argument &laquo;&nbsp;resp&nbsp;&raquo; (dans l&rsquo;exemple ci-dessus), qui poss&egrave;de un certains nombres de membres qui peuvent nous int&eacute;resser.</p>
<p align="left">Voici un rapide d&eacute;tail de ces membres&nbsp;:</p>
<table style="border-color: #dddddd;" border="1">
<tbody>
<tr>
<td>Membre</td>
<td>Description</td>
</tr>
<tr>
<td>resp.authResponse</td>
<td>&nbsp;Indique par bool&eacute;en si l&rsquo;authentification est correcte ou non</td>
</tr>
<tr>
<td>&nbsp;resp.status &nbsp;</td>
<td>&nbsp;Indique par valeur textuelle le statut de la r&eacute;ponse. Si tout est OK par exemple, la valeur sera &laquo;&nbsp;connected&nbsp;&raquo;.</td>
</tr>
<tr>
<td>&nbsp;response.access_token.token</td>
<td>Contient la valeur du jeton d&rsquo;authentification si la connexion s&rsquo;est bien d&eacute;roul&eacute;e. Il peut &ecirc;tre pratique de sauvegarder cette valeur car nous pourrions avoir &agrave; la r&eacute;utiliser, m&ecirc;me si, comme vous allez le voir, l&rsquo;API Yammer va nous masquer toute la complexit&eacute; sous-jacente.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3>M&eacute;thode de connexion &laquo;&nbsp;pas &agrave; pas&nbsp;&raquo;</h3>
<p>&nbsp;</p>
<p>Un d&eacute;faut de la m&eacute;thode pr&eacute;sent&eacute;e pr&eacute;c&eacute;demment, m&ecirc;me si elle est tr&egrave;s pratique, est que le bouton de connexion propos&eacute; par Yammer poss&egrave;de un texte en anglais. De plus, pour des raisons sp&eacute;cifiques &agrave; un projet, on pourrait vouloir personnaliser ce bouton.</p>
<p>Dans ce cas, pas de panique, l&rsquo;API JavaScript de Yammer propose une m&eacute;thode alternative&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">yam.platform.getLoginStatus(callback, [forceRefresh])
</pre>
</div>
<p>Cette m&eacute;thode va simplement v&eacute;rifier que l&rsquo;utilisateur est bien connect&eacute; et vous renvoyer la r&eacute;ponse. Dans le cas o&ugrave; ce n&rsquo;est pas le cas, vous pourriez d&eacute;clencher l&rsquo;authentification via une m&eacute;thode &eacute;galement pr&eacute;construite&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">yam.platform.login([opts], [callback])
</pre>
</div>
<p>&nbsp;Prenons un exemple qui va impl&eacute;menter ces deux m&eacute;thodes :</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"yammerapppopin"</span> <span style="color: #0000cc;">style=</span><span style="background-color: #fff0f0;">"display: block;"</span><span style="color: #007700;">&gt;</span>
    Pour une utilisation optimale du site, nous vous recommandons de vous connecter &agrave; Yammer.
    Vous pouvez le faire simplement en cliquant sur le bouton suivant :

    <span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">style=</span><span style="background-color: #fff0f0;">"clear:left"</span><span style="color: #007700;">&gt;</span>
    <span style="color: #007700;">&lt;/div&gt;</span>
    <span style="color: #007700;">&lt;a</span> <span style="color: #0000cc;">onclick=</span><span style="background-color: #fff0f0;">"javascript:LaunchLogin();"</span> <span style="color: #0000cc;">href=</span><span style="background-color: #fff0f0;">"#"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;img</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"/images/yammer-signin.gif"</span><span style="color: #007700;">&gt;</span>
    <span style="color: #007700;">&lt;/a&gt;</span>
<span style="color: #007700;">&lt;/div&gt;</span>

<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

<span style="color: #008800; font-weight: bold;">function</span> LaunchLogin() {
    yam.platform.login(<span style="color: #008800; font-weight: bold;">function</span> (response) {
        <span style="color: #008800; font-weight: bold;">if</span> (response.authResponse <span style="color: #333333;">&amp;&amp;</span> response.status <span style="color: #333333;">==</span> <span style="background-color: #fff0f0;">"connected"</span>) {
            location.reload();
        }
    });
}

yam.platform.getLoginStatus(
	<span style="color: #008800; font-weight: bold;">function</span> (response) { 		
		<span style="color: #008800; font-weight: bold;">if</span> (response.authResponse) {
            <span style="color: #888888;">//L'utilisateur est bien connect&eacute;</span>
		    console.log(<span style="background-color: #fff0f0;">"logged in"</span>);
		}
		<span style="color: #008800; font-weight: bold;">else</span> {
		    <span style="color: #888888;">//L'utilisateur n'est pas connect&eacute;, on affiche le </span>
		    <span style="color: #888888;">//message de connexion</span>
		    <span style="color: #007020;">document</span>.getElementById(<span style="background-color: #fff0f0;">"yammerapppopin"</span>).style.display <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"block"</span>;
		}
	}
);

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p><em>Astuce&nbsp;: Si vous n&rsquo;avez pas bien renseign&eacute; le champ &laquo;&nbsp;Origine JavaScript&nbsp;&raquo; depuis le formulaire d&rsquo;enregistrement de l&rsquo;App, vous pouvez avoir des probl&egrave;mes de connexions non autoris&eacute;es.</em></p>
<p>&nbsp;</p>
<h2>Exemple&nbsp;1 : r&eacute;cup&eacute;rer les informations du profil Yammer</h2>
<p>&nbsp;</p>
<p>Voici un 1<sup>ier</sup> cas d&rsquo;usage de l&rsquo;API Yammer qui peut nous &ecirc;tre tr&egrave;s pratique&nbsp;: r&eacute;cup&eacute;rer les informations du profil Yammer depuis un site SharePoint. En effet, on peut vouloir par exemple r&eacute;aliser une interface qui soit capable d&rsquo;afficher des informations provenant de Yammer, comme par exemple pour faire un lien direct vers son profil Yammer, ou encore pour r&eacute;cup&eacute;rer la photo de l&rsquo;utilisateur qu&rsquo;il aurait renseign&eacute; sur le r&eacute;seau social. Un bon moyen donc, par exemple, de g&eacute;rer une exp&eacute;rience unifi&eacute;e pour une solution qui se base &agrave; la fois sur SharePoint et sur Yammer.</p>
<p>Toutes les requ&ecirc;tes vers les API Yammer doivent suivre quelques r&egrave;gles simples&nbsp;:</p>
<ul>
<li>Une m&eacute;thode yam.platform.request permet de r&eacute;aliser une requ&ecirc;te vers un web service de Yammer. Cette m&eacute;thode a l&rsquo;avantage d&rsquo;&ecirc;tre simple et de prendre en charge le passage des param&egrave;tres li&eacute;s &agrave; l&rsquo;authentification par exemple</li>
<li>Diff&eacute;rents web services sont disponibles pour travailler sur les objets utilisateurs, et sont &agrave; fournir via l&rsquo;argument url de la m&eacute;thode request.</li>
</ul>
<p>Pour r&eacute;cup&eacute;rer des informations sur l&rsquo;utilisateur connect&eacute;, un point de terminaison sp&eacute;cifique est disponible &agrave; l&rsquo;adresse <a href="https://api.yammer.com/api/v1/users/current.json">https://api.yammer.com/api/v1/users/current.json</a>.</p>
<p>Voici un exemple de son utilisation, qui permettent de r&eacute;cup&eacute;rer la photo de l&rsquo;utilisateur, son nom complet, ainsi qu&rsquo;un lien vers sa page de profil&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

yam.platform.request({
    url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/users/current.json"</span>,
    method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"GET"</span>,
    success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (user) {

        <span style="color: #888888;">//Log dans la console le profil utilisateur</span>
        console.dir(user);
        <span style="color: #888888;">//R&eacute;cup&egrave;re l'image de l'utilisateur</span>
        <span style="color: #008800; font-weight: bold;">var</span> userImg <span style="color: #333333;">=</span> user.mugshot_url;
        <span style="color: #888888;">//R&eacute;cup&egrave;re l'image de l'utilisateur</span>
        <span style="color: #008800; font-weight: bold;">var</span> userFullName <span style="color: #333333;">=</span> user.full_name;
        <span style="color: #888888;">//R&eacute;cup&egrave;re l'adresse du profil utilisateur</span>
        <span style="color: #008800; font-weight: bold;">var</span> userWebUrl <span style="color: #333333;">=</span> user.web_url;
    },
    error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (mssg) {
        console.log(<span style="background-color: #fff0f0;">"There was an error with the request."</span>);
    }
});

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Si vous souhaitez r&eacute;cup&eacute;rer des informations d&rsquo;un utilisateur sp&eacute;cifique (et non de l&rsquo;utilisateur en cours), vous pourriez &eacute;galement utiliser d&rsquo;autres web services d&eacute;di&eacute;s.</p>
<p>Par exemple, pour r&eacute;cup&eacute;rer les informations d&rsquo;un utilisateur depuis son adresse email, un point de terminaison est disponible &agrave; l&rsquo;adresse suivante&nbsp;:</p>
<p><a href="https://api.yammer.com/api/v1/users/by_email.json?email">https://api.yammer.com/api/v1/users/by_email.json?email</a>=<em>&lt;adresse-email&gt;</em></p>
<p>Voici un exemple de m&eacute;thode pour r&eacute;cup&eacute;rer les informations d&rsquo;un profil utilisateur depuis son adresse email&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

yam.platform.request(
    {
        url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/users/by_email.json?email=toto@contoso.com"</span>,
        method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"GET"</span>,
        success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (user) {
            <span style="color: #888888;">//Log dans la console le profil utilisateur</span>
            console.dir(user);
        },
        error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) {
            console.log(<span style="background-color: #fff0f0;">"There was an error with the request."</span>);
        }
    }
);

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Chaque utilisateur poss&egrave;de un identifiant unique sous Yammer, du coup, si vous poss&eacute;dez cet identifiant, vous pouvez &eacute;galement faire une requ&ecirc;te pour obtenir les informations compl&eacute;mentaires du profil&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

yam.platform.request(
	{
		url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/users/"</span> <span style="color: #333333;">+</span> userId <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">".json"</span>,
		method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"GET"</span>,
		success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (user) {
		    <span style="color: #888888;">//Log dans la console le profil utilisateur</span>
		    console.dir(user);
		},
		error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) {
		    console.log(<span style="background-color: #fff0f0;">"There was an error with the request."</span>);
		}
	}
);

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<h2>Exemple&nbsp;2 : r&eacute;cup&eacute;rer les groupes Yammer auxquels l&rsquo;utilisateur appartient</h2>
<p>&nbsp;</p>
<p>Il est assez fr&eacute;quent de vouloir afficher les groupes Yammer d&rsquo;un utilisateur sur un site SharePoint. Notamment lorsque l&rsquo;on propose un Intranet r&eacute;alis&eacute; avec SharePoint, dans lequel on souhaite avoir sur la page d&rsquo;accueil une vue relativement &laquo;&nbsp;profil&eacute;e&nbsp;&raquo; pour l&rsquo;utilisateur en r&eacute;f&eacute;ren&ccedil;ant les diff&eacute;rents espaces auxquels il peut avoir acc&egrave;s.</p>
<p>Pour ce faire, les choses sont plut&ocirc;t simples, on peut appeler le web services groups.json qui peut prendre un argument mine=1 qui va retourner les groupes d&rsquo;appartenance de l&rsquo;utilisateur actuel&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

yam.platform.request({
    url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/groups.json?mine=1"</span>,
    method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"GET"</span>,
    success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (groups) {

        <span style="color: #008800; font-weight: bold;">for</span> (<span style="color: #008800; font-weight: bold;">var</span> i <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">0</span>; i <span style="color: #333333;">&lt;</span> groups.length; i<span style="color: #333333;">++</span>) {

            <span style="color: #008800; font-weight: bold;">var</span> curGroup <span style="color: #333333;">=</span> groups[i];
            <span style="color: #888888;">//Log dans la console les informations du groupe</span>
            console.dir(curGroup);
            <span style="color: #888888;">//Nom du groupe</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupName <span style="color: #333333;">=</span> curGroup.full_name;
            <span style="color: #888888;">//URL de l'image descriptive</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupImage <span style="color: #333333;">=</span> curGroup.mugshot_url;
            <span style="color: #888888;">//URL du groupe</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupUrl <span style="color: #333333;">=</span> curGroup.web_url;
            <span style="color: #888888;">//Niveau de s&eacute;curit&eacute; du groupe (private, public)</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupPrivacy <span style="color: #333333;">=</span> curGroup.privacy;
            <span style="color: #888888;">//Description du groupe</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupDesc <span style="color: #333333;">=</span> curGroup.description;
            <span style="color: #888888;">//Nombre d'utilisateurs au sein du groupe</span>
            <span style="color: #008800; font-weight: bold;">var</span> groupMembers <span style="color: #333333;">=</span> curGroup.stats.members;
        }

    },
    error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (mssg) {
        console.log(<span style="background-color: #fff0f0;">"There was an error with the request."</span>);
    }
});

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<h2>Exemple&nbsp;3 : publier un message dans Yammer par programmation</h2>
<p>&nbsp;</p>
<p>Maintenant que nous avons vu comment r&eacute;cup&eacute;rer par programmation des informations stock&eacute;es dans Yammer, voyons maintenant comment publier des informations vers Yammer depuis SharePoint.</p>
<p>Pour poster un message, il existe un web service disponible &agrave; l&rsquo;adresse <a href="https://api.yammer.com/api/v1/messages.json">https://api.yammer.com/api/v1/messages.json</a> qui permet, via un appel de type POST, d&rsquo;envoyer des donn&eacute;es contenant le message. Les donn&eacute;es doivent &ecirc;tre format&eacute;es avec une forme sp&eacute;cifique et des param&egrave;tres donn&eacute;s. Les deux param&egrave;tres obligatoires sont &agrave; minima l&rsquo;identifiant du groupe Yammer, ainsi que le corps du message.</p>
<p>Voici un exemple d&rsquo;un post simple d&rsquo;un message par programmation&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

<span style="color: #008800; font-weight: bold;">function</span> PostYammer(group_id, message, success, fail) {

    <span style="color: #008800; font-weight: bold;">var</span> yammerData;
    yammerData <span style="color: #333333;">=</span> { group_id<span style="color: #333333;">:</span> group_id, body<span style="color: #333333;">:</span> message };
    
    yam.platform.request(
        {
            url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/messages.json"</span>,
            method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"POST"</span>,
            data<span style="color: #333333;">:</span> yammerData,
            success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { success(msg); },
            error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { fail(msg); }
        }
    );
}

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Lorsque vous r&eacute;alis&eacute; la cr&eacute;ation d&rsquo;un message par programmation, il est important de noter que le nom de votre Application va appara&icirc;tre &agrave; c&ocirc;t&eacute; du message.</p>
<p>Par exemple, voici une capture d&rsquo;un message automatiquement publi&eacute;e depuis une App appel&eacute;e &laquo;&nbsp;Contoso Intranet&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0753.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0753.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0753.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/521x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0753.11.png" alt="" border="0" /></a>&nbsp;</p>
<p>On pourrait &eacute;galement fournir &agrave; Yammer, des &laquo;&nbsp;topics&nbsp;&raquo; (ou tag) &agrave; attacher &agrave; un message. M&ecirc;me si chaque tag poss&egrave;de un identifiant unique, pas besoin de cr&eacute;er un nouveau tag puis de fournir son identifiant&nbsp;: il suffit de fournir le tag de fa&ccedil;on textuelle. Lorsque l&rsquo;on construit &laquo;&nbsp;l&rsquo;enveloppe&nbsp;&raquo; des donn&eacute;es &agrave; envoyer &agrave; Yammer, on peut associer des arguments de type &laquo;&nbsp;topic1&nbsp;&raquo; num&eacute;rot&eacute;s (exemple&nbsp;: topic1, topic2, topic3, etc.)</p>
<p>Voici un exemple de code pour publier un message avec un topic associ&eacute;&nbsp;:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

<span style="color: #008800; font-weight: bold;">function</span> PostYammerWithTopic(group_id, message, topic, success, fail) {

    <span style="color: #008800; font-weight: bold;">var</span> yammerData;
    yammerData <span style="color: #333333;">=</span> { group_id<span style="color: #333333;">:</span> group_id, body<span style="color: #333333;">:</span> message, topic1<span style="color: #333333;">:</span> topic };

    yam.platform.request(
        {
            url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/messages.json"</span>,
            method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"POST"</span>,
            data<span style="color: #333333;">:</span> yammerData,
            success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { success(msg); },
            error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { fail(msg); }
        }
    );
}

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Le r&eacute;sultat dans Yammer sera le suivant&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5811.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5811.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5811.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/521x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5811.12.png" alt="" border="0" /></a>&nbsp;</p>
<p>On pourrait &eacute;galement ajouter &agrave; un message des personnes &agrave; notifier. Pour notifier des utilisateurs, il faut ajouter un param&egrave;tre compl&eacute;mentaire en renseignant un tableau des utilisateurs cibl&eacute;s.</p>
<p>Voici un exemple d&rsquo;un message publi&eacute; avec une notification d&rsquo;un utilisateur&nbsp;sp&eacute;cifique :</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

<span style="color: #008800; font-weight: bold;">function</span> PostYammerWithNotification(group_id, message, userCC, success, fail) {

    <span style="color: #008800; font-weight: bold;">var</span> yammerData;
    yammerData <span style="color: #333333;">=</span> { group_id<span style="color: #333333;">:</span> group_id, body<span style="color: #333333;">:</span> message };
    yammerData.cc <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"[[user:"</span> <span style="color: #333333;">+</span> userCC <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"]]"</span>;

    yam.platform.request(
        {
            url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/messages.json"</span>,
            method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"POST"</span>,
            data<span style="color: #333333;">:</span> yammerData,
            success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { success(msg); },
            error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { fail(msg); }
        }
    );
}

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Le r&eacute;sultat dans Yammer sera le suivant&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2402.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2402.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2402.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/521x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2402.13.png" alt="" border="0" /></a>&nbsp;</p>
<p>Ca y&rsquo;est, les fondamentaux de l&rsquo;envoi de message &agrave; Yammer depuis SharePoint par programmation n&rsquo;a plus de secret pour vous&nbsp;? Vous &ecirc;tes pr&ecirc;t &agrave; aller plus loin en joignant un objet Open Graph &agrave; vos messages&nbsp;!</p>
<p>&nbsp;</p>
<h2>Exemple&nbsp;4 : publier un message dans Yammer avec un objet Open Graph rattach&eacute;</h2>
<p>&nbsp;</p>
<p>Une autre capacit&eacute; int&eacute;ressante de l&rsquo;API Yammer est de pouvoir ajouter &agrave; un message un objet Open Graph. Un objet Open Graph est un objet qui sera identifiable visuellement au sein du fil de discussion.</p>
<p>Un objet Open Graph poss&egrave;dera un identifiant unique sous Yammer, qui permettra ensuite de le retrouver ou de voir tous les messages publi&eacute;s relativement &agrave; cet objet dans les diff&eacute;rents groupes de votre r&eacute;seau.&nbsp;</p>
<p>Prenons un exemple simple pour lequel l&rsquo;attachement d&rsquo;un objet Open Graph peut avoir du sens. Imaginons que sur notre Intranet r&eacute;alis&eacute; avec SharePoint, nous ayons un calendrier des &eacute;v&egrave;nements internes qui est entretenu par notre service de communication. Lorsque les contributeurs publient un nouvel &eacute;v&egrave;nement dans cet agenda, nous souhaiterions qu&rsquo;un message soit automatiquement cr&eacute;&eacute; au nom du contributeur dans un groupe Yammer correspondant aux communications internes. Ce message devra avoir un code visuel sp&eacute;cifique (pour tout de suite identifier qu&rsquo;il s&rsquo;agit d&rsquo;un &eacute;v&egrave;nement d&rsquo;un calendrier), et lorsque l&rsquo;utilisateur va cliquer sur l&rsquo;&eacute;v&egrave;nement dans le fil de discussion, il sera redirig&eacute; vers l&rsquo;agenda h&eacute;berg&eacute; sur SharePoint. Un excellent moyen donc de donner de la visibilit&eacute; &agrave; vos contenus stock&eacute;s sur votre Intranet et b&eacute;n&eacute;ficier &agrave; moindre effort de la visibilit&eacute; de Yammer pour promouvoir vos donn&eacute;es&nbsp;!</p>
<p>Lorsque l&rsquo;on souhaite cr&eacute;er un objet Open Graph et l&rsquo;associer &agrave; un message, on peut fournir les param&egrave;tres suivants&nbsp;:</p>
<ul>
<li><span style="font-family: 'courier new', courier;">og_url</span>&nbsp;: adresse web (url) vers laquelle l&rsquo;utilisateur va &ecirc;tre redirig&eacute; s&rsquo;il clique sur l&rsquo;objet Open Graph</li>
<li><span style="font-family: 'courier new', courier;">og_title</span>&nbsp;: titre de l&rsquo;objet Open Graph</li>
<li><span style="font-family: 'courier new', courier;">og_image</span>&nbsp;: adresse (url) d&rsquo;une image qui sera affich&eacute;e &agrave; c&ocirc;t&eacute; de l&rsquo;objet</li>
<li><span style="font-family: 'courier new', courier;">og_description</span>&nbsp;: description associ&eacute;e &agrave; l&rsquo;objet Open Graph</li>
</ul>
<p>Voici un exemple de fonction JavaScript qui permet de publier un message en attachant un objet Open Graph :</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>

<span style="color: #008800; font-weight: bold;">function</span> PostYammerWithOpenGraph(group_id, message, openGraphUrl, openGraphTitle, openGraphImage, openGraphDescription, success, fail) {

    <span style="color: #008800; font-weight: bold;">var</span> yammerData;

    yammerData <span style="color: #333333;">=</span> {
        group_id<span style="color: #333333;">:</span> group_id, body<span style="color: #333333;">:</span> message,
        og_url<span style="color: #333333;">:</span> openGraphUrl, og_title<span style="color: #333333;">:</span> openGraphTitle, og_image<span style="color: #333333;">:</span> openGraphImage, og_description<span style="color: #333333;">:</span> openGraphDescription
    };
    
    yam.platform.request(
		{
		    url<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"https://api.yammer.com/api/v1/messages.json"</span>,
		    method<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"POST"</span>,
		    data<span style="color: #333333;">:</span> yammerData,
		    success<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { success(msg); },
		    error<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">function</span> (msg) { fail(msg); }
		}
	);
}

<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Avec l&rsquo;exemple d&eacute;taill&eacute; ci-dessus, voici un rendu d&rsquo;un message avec un objet Open Graph attach&eacute; et la fa&ccedil;on dont les param&egrave;tres sont exploit&eacute;s dans le fil de discussion&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1512.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1512.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1512.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1512.14.png" alt="" border="0" /></a>&nbsp;</p>
<p><em>Astuce&nbsp;: Le param&egrave;tre og_image doit contenir une image dont l&rsquo;adresse est accessible sans authentification de la part de l&rsquo;utilisateur. N&rsquo;h&eacute;berger donc pas cette image sur votre site SharePoint s&eacute;curis&eacute;, mais utilisez plut&ocirc;t une image disponible dans un entrep&ocirc;t d&rsquo;images disponibles publiquement sur Internet.&nbsp;</em></p>
<p>&nbsp;</p>
<h2>Limites &agrave; conna&icirc;tre avec l&rsquo;API Yammer</h2>
<p><em><br /></em></p>
<p>M&ecirc;me si en th&eacute;orie on peut aller tr&egrave;s loin dans les sc&eacute;narios d&rsquo;automatisation de traitement entre SharePoint et Yammer gr&acirc;ce &agrave; l&rsquo;API Yammer, il faut bien garder &agrave; l&rsquo;esprit qu&rsquo;une limitation existe sur l&rsquo;API Yammer&nbsp;: chaque points de terminaison Yammer poss&egrave;de ses propres limites en terme de nombre de requ&ecirc;tes pouvant &ecirc;tre effectu&eacute;es dans un certain laps de temps.</p>
<p>Ceci est malheureusement obligatoire pour les &eacute;quipes Yammer, pour ne pas permettre la r&eacute;alisation d&rsquo;attaques de type &laquo;&nbsp;D&eacute;nis de service&nbsp;&raquo; (tr&egrave;s grand nombre de requ&ecirc;tes qui sature le service). Le syst&egrave;me doit pouvoir avoir des &laquo;&nbsp;gardes fous&nbsp;&raquo;, limitant le nombre d&rsquo;appel &agrave; des services dans un intervalle de temps donn&eacute;. Tout appel qui va d&eacute;passer cette limite vous renverra une erreur HTTP de type 429 (Too Many Requests).</p>
<p align="left">La documentation de Yammer est bien fournit sur ce sujet et vous explique les limites pour chaque point de terminaison. Cette documentation est disponible &agrave; l&rsquo;adresse suivante&nbsp;:</p>
<p><a href="https://developer.yammer.com/v1.0/docs/rest-api-rate-limits">https://developer.yammer.com/v1.0/docs/rest-api-rate-limits</a></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>&nbsp;</p>
<p>L&rsquo;API de Yammer est massivement orient&eacute;e web services. C&rsquo;est m&ecirc;me une constante d&rsquo;architecture avec Yammer&nbsp;: ce que l&rsquo;on fait par l&rsquo;interface graphique de yammer.com est r&eacute;alisable au final par un ou plusieurs appels &agrave; des points de terminaisons REST/JSON.</p>
<p>Le SDK JavaScript nous offre un moyen simple et rapide pour envisager des sc&eacute;narios avanc&eacute;s d&rsquo;interconnexion entre Yammer et SharePoint 2013 qui r&eacute;pondraient &agrave; nos besoins m&eacute;tier.</p>
<p>On peut facilement imaginer afficher des informations provenant de Yammer dans un site SharePoint (exemple&nbsp;: lister les groupes Yammer de l&rsquo;utilisateur sur la page de profil SharePoint), ou encore utiliser les messages en push pour &eacute;mettre des informations depuis SharePoint (exemple&nbsp;: publier de fa&ccedil;on automatique des messages dans un r&eacute;seau depuis une application m&eacute;tier).</p>
<p>Cet article n&rsquo;est pas exhaustif vis-&agrave;-vis des sc&eacute;narios que l&rsquo;on peut imaginer r&eacute;aliser ni des points de terminaisons disponibles dans Yammer. Il y&rsquo;a beaucoup d&rsquo;autres (comme la recherche, etc.) qui peuvent vous &ecirc;tre utiles pour vos id&eacute;es d&rsquo;interconnexion entre SharePoint et Yammer&nbsp;!</p>
<p>Garder toutefois &agrave; l&rsquo;esprit deux points importants&nbsp;:</p>
<ul>
<li>Bien impl&eacute;menter l&rsquo;exp&eacute;rience de connexion des utilisateurs&nbsp;;</li>
<li>Faire avec les limites en termes de nombres de requ&ecirc;tes simultan&eacute;es par utilisateur.</li>
</ul>
<p>&nbsp;</p>
<p>Enjoy SharePoint &amp; Yammer&nbsp;!</p>]]></content:encoded>
    </item>
    <item>
      <title>Comment utiliser Yammer Embed avec SharePoint 2013 ?</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/comment-utiliser-yammer-embed-avec-sharepoint-2013</link>
      <pubDate>Sat, 07 Mar 2015 10:20:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/03/07/comment-utiliser-yammer-embed-avec-sharepoint-2013/</guid>
      <description><![CDATA[Introduction
&nbsp;
Si vous &ecirc;tes utilisateur de Yammer et que vous souhaitez facilement...]]></description>
      <content:encoded><![CDATA[<h2>Introduction</h2>
<p>&nbsp;</p>
<p>Si vous &ecirc;tes utilisateur de Yammer et que vous souhaitez facilement utiliser des flux Yammer au sein d&rsquo;un site SharePoint 2013 (Online ou Server), cet article est fait pour vous&nbsp;!</p>
<p>Si vous ne connaissez pas encore Yammer Embed, c&rsquo;est LA bonne m&eacute;thode pour utiliser facilement et rapidement Yammer dans n&rsquo;importe quel site SharePoint, que ce soit un site de publication ou un site d&rsquo;&eacute;quipe.</p>
<p>Dans cet article nous allons voir comment inclure un flux Yammer dans une page SharePoint, comment personnaliser ce flux, ainsi que quelques trucs et astuces pour apporter, avec peu d&rsquo;effort, un maximum de visibilit&eacute; &agrave; vos contenus stock&eacute;s sur SharePoint.</p>
<p>&nbsp;</p>
<h2>C&rsquo;est quoi Yammer Embed&nbsp;?</h2>
<p>&nbsp;</p>
<p>Yammer Embed est une <strong>librairie JavaScript</strong> qui permet en quelques lignes d&rsquo;inclure dans un site SharePoint (Online ou Server) des donn&eacute;es provenant de Yammer.</p>
<p>Par exemple, avec Yammer Embed on peut afficher, sur une page d&rsquo;un Intranet SharePoint, le flux d&rsquo;un groupe sp&eacute;cifique de Yammer, ou encore les donn&eacute;es correspondant aux flux personnel d&rsquo;une personne (les &eacute;l&eacute;ments suivis par l&rsquo;utilisateur).</p>
<p>Ceci va nous permettre de pleinement b&eacute;n&eacute;ficier des fonctionnalit&eacute;s sociales de Yammer, comme pouvoir r&eacute;pondre directement &agrave; des messages depuis un site SharePoint, comment &laquo;&nbsp;liker&nbsp;&raquo; une page tout en restant dans l&rsquo;interface de SharePoint. Embed peut &eacute;galement nous permettre d&rsquo;afficher sur une page une zone de commentaires pour afficher toutes les publications r&eacute;alis&eacute;es sur Yammer relatives &agrave; un sujet sp&eacute;cifique.</p>
<p>La documentation officielle de Yammer Embed est disponible &agrave; l&rsquo;adresse suivante&nbsp;:</p>
<p><a href="https://developer.yammer.com/v1.0/docs/embed">https://developer.yammer.com/v1.0/docs/embed</a></p>
<p>Si vous &ecirc;tes d&eacute;j&agrave; utilisateur de Yammer, sans le savoir vous avez peut-&ecirc;tre d&eacute;j&agrave; vu du code Yammer Embed. En effet, lorsque vous allez dans un groupe Yammer, vous pouvez voir sur la droite une widget appel&eacute;e &laquo;&nbsp;Options d&rsquo;Acc&egrave;s&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7230.01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7230.01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7230.01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/291x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7230.01.png" alt="" border="0" /></a></p>
<p>En cliquant sur &laquo;&nbsp;Int&eacute;grer ce groupe sur votre site&nbsp;&raquo;, Yammer vous affiche du code JavaScript automatiquement g&eacute;n&eacute;r&eacute;, pour vous permettre d&rsquo;afficher le contenu du fil de discussion du groupe Yammer au sein d&rsquo;un site web&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2072.02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2072.02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2072.02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/519x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2072.02.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Les options de Yammer Embed</h2>
<p>&nbsp;</p>
<p>Lorsque vous utilisez le bouton d&rsquo;int&eacute;gration &agrave; un site depuis un groupe Yammer, le code JavaScript qui vous est propos&eacute; est un code avec des options g&eacute;n&eacute;r&eacute;es par d&eacute;faut.</p>
<p>Vous pouvez toutefois aller bien plus loin dans la personnalisation, avec un certain nombre d&rsquo;options int&eacute;ressantes.</p>
<p>Voici un tableau vous expliquant quelques-unes des options disponibles&nbsp;:</p>
<table border="1">
<tbody>
<tr>
<td>Option</td>
<td>Description</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Network Permalink</span></td>
<td>
<p>Permet de pr&eacute;ciser sur quel r&eacute;seau doit pointer le code. Vous devez renseigner l&rsquo;adresse du r&eacute;seau Yammer correspondant. L&rsquo;adresse du r&eacute;seau correspond le plus souvent &agrave; votre domaine de messagerie.</p>
<p>Pour conna&icirc;tre l&rsquo;adresse de votre r&eacute;seau, il vous suffit de regarder l&rsquo;adresse de votre navigateur lorsque vous &ecirc;tes connect&eacute; &agrave; Yammer. Par exemple, si votre adresse est <a href="https://www.yammer.com/contoso.com/#/threads">https://www.yammer.com/contoso.com/#/threads</a>, votre &laquo;&nbsp;network permalink&nbsp;&raquo; est &laquo;&nbsp;contoso.com&nbsp;&raquo;.</p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Feed Type</span></td>
<td>
<p>Permet de sp&eacute;cifier le type de flux &agrave; afficher. Voici les types de flux disponibles&nbsp;:</p>
<ul>
<li><strong>My Feed</strong>&nbsp;: permet d&rsquo;afficher le flux personnel de l&rsquo;utilisateur (les informations qu&rsquo;il suit)&nbsp;;</li>
<li><strong>Group</strong>&nbsp;: permet d&rsquo;afficher le flux d&rsquo;un groupe Yammer sp&eacute;cifique&nbsp;;</li>
<li><strong>User</strong>&nbsp;: permet d&rsquo;afficher le flux d&rsquo;actualit&eacute; d&rsquo;un utilisateur donn&eacute;&nbsp;;</li>
<li><strong>Topic</strong>&nbsp;: permet d&rsquo;afficher les discussions marqu&eacute; avec un topic (tag) donn&eacute;&nbsp;;</li>
<li><strong>Open Graph</strong>&nbsp;: permet d'afficher le flux Yammer associ&eacute; &agrave; un objet sp&eacute;cifique. C&rsquo;est cette option qui<br />peut nous permettre d&rsquo;afficher par exemple un flux de commentaire sur la page en cours. Nous reviendrons sur cet argument vers la fin de cet article.</li>
</ul>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Feed ID</span></td>
<td>
<p>Permet de sp&eacute;cifier l&rsquo;identifiant d&rsquo;une entit&eacute; selon le type de flux (cf option pr&eacute;c&eacute;dente). Par exemple, si vous avez choisi l&rsquo;option &laquo;&nbsp;Group&nbsp;&raquo;, le Feed ID doit &ecirc;tre &eacute;gal &agrave; l&rsquo;identifiant du groupe. Pour un flux de type &laquo;&nbsp;User&nbsp;&raquo;, il s&rsquo;agit de l&rsquo;identifiant de l&rsquo;utilisateur, etc. etc.</p>
<p>Avec Yammer, il est tr&egrave;s simple de conna&icirc;tre l&rsquo;identifiant d&rsquo;une entit&eacute;. Une technique pour cela, est de cliquer sur l&rsquo;objet que vous souhaitez int&eacute;grer et de regarder l&rsquo;adresse de votre navigateur. Celle-ci contient g&eacute;n&eacute;ralement un argument<br />appel&eacute; &laquo;&nbsp;feed id&nbsp;&raquo; avec la valeur.</p>
<p>Par exemple, lorsque vous naviguez dans un groupe, l&rsquo;adresse a la forme suivante&nbsp;:</p>
<p><a href="https://www.yammer.com/%3cnom-du-tenant%3e/#/threads/inGroup?type=in_group&amp;feedId=3322297">https://www.yammer.com/&lt;nom-du-tenant&gt;/#/threads/inGroup?type=in_group&amp;feedId=3322297</a></p>
<p>Dans cet exemple, l&rsquo;identifiant du groupe est 3322297.</p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Show header</span></td>
<td>
<p>Permet d&rsquo;afficher ou de masquer le bandeau d&rsquo;ent&ecirc;te. L&rsquo;ent&ecirc;te affiche le nom de votre r&eacute;seau Yammer, avec en fond la couleur du r&eacute;seau. M&ecirc;me si cette option est int&eacute;ressante, ce bandeau peut &ecirc;tre visuellement &laquo;&nbsp;imposant&nbsp;&raquo; du point de vue de l&rsquo;int&eacute;gration graphique. Il peut donc &ecirc;tre int&eacute;ressant de le masquer.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6254.03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6254.03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/6254.03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/6254.03.png" alt="" width="441" height="114" border="0" /></a></p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Show footer</span></td>
<td>
<p>Permet d&rsquo;afficher ou de masquer le bandeau de pied de page du flux Yammer. Ce bandeau affiche le logo Yammer, ainsi que le nom de l&rsquo;utilisateur et un bouton &laquo;&nbsp;se d&eacute;connecter&nbsp;&raquo;.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4011.04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4011.04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4011.04.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4011.04.png" alt="" width="443" height="53" border="0" /></a></p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Hide Network Name in Header</span></td>
<td>
<p>Lorsque l&rsquo;option &ldquo;show header&rdquo; est utilis&eacute;e, vous pouvez afficher le nom du R&eacute;seau dans ce bandeau (valeur par d&eacute;faut) ou pas. Avec l&rsquo;option &laquo; hide network name in header &raquo;, le nom du r&eacute;seau sera remplac&eacute; par la valeur &laquo; Conversations Yammer &raquo;, comme le montre la capture suivante :</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0218.05.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0218.05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0218.05.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0218.05.png" alt="" width="443" height="79" border="0" /></a></p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Default to Canonical Network</span></td>
<td>
<p>Cette option permet de forcer l&rsquo;affichage du r&eacute;seau &laquo; canonique &raquo; de votre organisation. Le r&eacute;seau canonique est le r&eacute;seau principal de votre organisation. Si vous utilisez les r&eacute;seaux externes de Yammer, l&rsquo;utilisateur pourrait avoir utilis&eacute; en dernier un r&eacute;seau externe. Dans ce cas et si vous n&rsquo;utilisez pas un &laquo; feed type &raquo; pointant vers un groupe sp&eacute;cifique (par exemple), Yammer Embed afficherait plut&ocirc;t par d&eacute;faut le r&eacute;seau externe. Avec cette option, vous forcez l&rsquo;utilisation du r&eacute;seau principal.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: FR; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;" lang="FR">Use SSO</span>&nbsp;</td>
<td>Si vous utilisez Yammer Entreprise et que votre organisation a mis en place le Single Sign-On (SSO) avec Yammer, cette option est importante : elle vous permet d&rsquo;&eacute;galement utiliser le SSO avec le code Embed. Du coup vous b&eacute;n&eacute;ficiez d&rsquo;une exp&eacute;rience de connexion pour l&rsquo;utilisateur optimale.</td>
</tr>
<tr>
<td><span style="line-height: 107%; font-family: 'Segoe UI',sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Custom Prompt Text</span></td>
<td>
<p>Permet de modifier le texte par d&eacute;faut&nbsp; &agrave; faire appara&icirc;tre dans la zone de saisie. Par&nbsp;d&eacute;faut, le texte est &laquo;&nbsp;Sur quoi travaillez-vous&nbsp;?&nbsp;&raquo;. Vous pouvez le modifier pour mettre le texte de votre choix, plus adapt&eacute; au contexte du site sur lequel vous allez encapsuler le flux Yammer.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8726.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8726.06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8726.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8726.06.png" alt="" width="429" height="88" border="0" /></a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Il est int&eacute;ressant de savoir que l&rsquo;&eacute;quipe Yammer vous propose une page de test et de configuration qui peut vous g&eacute;n&eacute;rer le code JavaScript ad&eacute;quat selon vos options. &nbsp;Vous pourrez directement choisir les options et pr&eacute;-visualiser directement la fa&ccedil;on dont ce code va appara&icirc;tre sur votre site web.</p>
<p>Ce configurateur est disponible &agrave; l&rsquo;adresse suivante&nbsp;:</p>
<p><a href="https://www.yammer.com/widget/configure">https://www.yammer.com/widget/configure</a></p>
<p>Voici un aper&ccedil;u de ce configurateur&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7140.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7140.07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7140.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7140.07.png" alt="" border="0" /></a>&nbsp;</p>
<p>Ca y&rsquo;est, vous avez compris les bases de Yammer Embed&nbsp;? Vous &ecirc;tes maintenant pr&ecirc;t &agrave; suivre le chapitre suivant, o&ugrave; nous allons voir comment en quelques clics inclure un flux d&rsquo;actualit&eacute; Yammer dans une page SharePoint.</p>
<p>&nbsp;</p>
<h2>Inclure un flux Yammer dans une page SharePoint</h2>
<p>&nbsp;</p>
<p>Dans ce premier exemple, voyons comment inclure un flux de discussions Yammer au sein d&rsquo;un site SharePoint. C&rsquo;est un sc&eacute;nario tr&egrave;s courant et pratique dans de nombreux cas.</p>
<p>Prenons quelques exemples pratiques&nbsp;de l&rsquo;utilit&eacute; de cette d&eacute;marche :</p>
<ol>
<li>Vous utilisez un site SharePoint de type &laquo;&nbsp;Site de publication&nbsp;&raquo; pour, par exemple, votre Intranet de communication. Vous pourriez par exemple vouloir inclure sur votre page d&rsquo;accueil le flux de discussion du groupe Yammer g&eacute;r&eacute; par la communication interne&nbsp;;</li>
<li>Vous utilisez un site Intranet, et vous souhaitez par exemple afficher sur la page d&rsquo;accueil l&rsquo;actualit&eacute; de l&rsquo;utilisateur sur r&eacute;seau social (fa&ccedil;on &laquo;&nbsp;Mon actualit&eacute; sociale&nbsp;&raquo;). Cette approche vous permet de personnaliser et de &laquo;&nbsp;profiler&nbsp;&raquo; facilement l&rsquo;exp&eacute;rience utilisateur sur un site Intranet&nbsp;;</li>
<li>Vous utilisez un site Intranet, et vous souhaitez ajouter une zone d&rsquo;&eacute;change entre vos collaborateurs. Par exemple, une zone &laquo;&nbsp;support&nbsp;&raquo; ou &laquo;&nbsp;aide&nbsp;&raquo; o&ugrave; les personnes pourraient poser des questions &agrave; un service sp&eacute;cifique&nbsp;;</li>
<li>Vous utilisez un site SharePoint pour g&eacute;rer les documents et les t&acirc;ches d&rsquo;une &eacute;quipe et d&rsquo;un projet. Vous pourriez par exemple inclure sur la page d&rsquo;accueil un fil de discussion Yammer pour laisser les personnes mettre en avant les nouveaut&eacute;s du site, sans pour autant les obliger &agrave; naviguer sur le site Yammer pour &ccedil;a&nbsp;;</li>
<li>Etc. etc.</li>
</ol>
<p>Pour inclure un flux Yammer d&rsquo;un groupe au sein d&rsquo;un site SharePoint 2013, vous pouvez suivre les &eacute;tapes suivantes&nbsp;:</p>
<p>&nbsp;</p>
<h3>1&nbsp;: Cr&eacute;ation d&rsquo;un groupe Yammer</h3>
<p>Vous devez au pr&eacute;alable cr&eacute;er un groupe dans Yammer ou utiliser un site existant. Cliquer ensuite sur le bouton &laquo;&nbsp;Int&eacute;grer ce groupe sur votre site&nbsp;&raquo; dans la widget de droite appel&eacute;e &laquo;&nbsp;Options d&rsquo;acc&egrave;s&nbsp;&raquo; (cf chapitre 1). <strong>Copier/Coller ensuite le code JavaScript</strong> affich&eacute; &agrave; l&rsquo;&eacute;cran.</p>
<p>&nbsp;</p>
<h3>2&nbsp;: Editer une page de votre site SharePoint</h3>
<p>Connectez-vous &agrave; votre site SharePoint. Naviguez sur la page dans laquelle vous souhaitez ajouter un flux de discussion.</p>
<p>Cliquer sur le &laquo;&nbsp;rouage&nbsp;&raquo; d&rsquo;administration, puis sur le bouton &laquo;&nbsp;<strong>Modifier la page</strong>&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2308.08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2308.08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2308.08.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2308.08.png" alt="" width="171" height="233" border="0" /></a>&nbsp;</p>
<p>&nbsp;</p>
<h3>3&nbsp;: Ins&eacute;rer une WebPart de script</h3>
<p>Placez-vous dans une zone d&rsquo;&eacute;dition de contenu. Dans le ruban SharePoint, cliquez sur l&rsquo;onglet &laquo;&nbsp;<strong>Ins&eacute;rer</strong>&nbsp;&raquo;. Cliquez alors sur le bouton &laquo;&nbsp;<strong>Composant WebPart</strong>&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1104.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1104.09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1104.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1104.09.png" alt="" width="355" height="104" border="0" /></a></p>
<p>&nbsp;</p>
<p align="left">Dans la liste des WebParts disponibles, s&eacute;lectionnez la cat&eacute;gorie &laquo;&nbsp;<strong>Media et contenu</strong>&nbsp;&raquo;, puis s&eacute;lectionnez la WebPart nomm&eacute;e &laquo;&nbsp;<strong>Editeur de scripts</strong>&nbsp;&raquo;. Cliquer sur le bouton &laquo;&nbsp;<strong>Ajouter</strong>&nbsp;&raquo;&nbsp;:&nbsp;</p>
<p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7120.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7120.10.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7120.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7120.10.png" alt="" width="513" height="252" border="0" /></a></p>
<p align="left">&nbsp;</p>
<p>Une fois la WebPart ins&eacute;r&eacute;e dans votre page, cliquez sur la fl&egrave;che descendante en haut &agrave; droite de la WebPart, puis sur le bouton &laquo;&nbsp;<strong>Modifier le composant WebPart</strong>&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3223.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3223.11.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3223.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3223.11.png" alt="" width="429" height="127" border="0" /></a></p>
<p>&nbsp;</p>
<p>Cliquez alors sur le bouton &laquo;&nbsp;<strong>Modifier l&rsquo;extrait de code</strong>&nbsp;&raquo;&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5822.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5822.12.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5822.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5822.12.png" alt="" width="425" height="78" border="0" /></a></p>
<p>&nbsp;</p>
<h3>4&nbsp;: Ins&eacute;rer le code JavaScript Yammer Embed</h3>
<p>Dans la zone d&rsquo;&eacute;dition qui appara&icirc;t &agrave; l&rsquo;&eacute;cran, <strong>copiez/collez le code Embed fournit par Yammer</strong> dans cette zone&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2860.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2860.13.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2860.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2860.13.png" alt="" width="443" height="176" border="0" /></a></p>
<p>&nbsp;</p>
<p><em>Astuce&nbsp;: C&rsquo;est &agrave; ce moment que vous pouvez modifier le code JavaScript pour personnaliser la fa&ccedil;on dont le flux Embed va appara&icirc;tre sur votre site.</em></p>
<p>Dans le ruban SharePoint, cliquez sur &laquo;&nbsp;<strong>Enregistrer</strong>&nbsp;&raquo; pour enregistrer vos modifications et sortir du mode &eacute;dition&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7673.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7673.14.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/7673.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/7673.14.png" alt="" width="259" height="107" border="0" /></a></p>
<p>Et voil&agrave;, d&eacute;sormais votre flux Yammer appara&icirc;t sur la page de votre site SharePoint&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2626.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2626.15.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2626.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2626.15.png" alt="" width="392" height="356" border="0" /></a></p>
<p>&nbsp;</p>
<p>Maintenant vos utilisateurs pourront discuter, r&eacute;pondre, &laquo;&nbsp;aimer&nbsp;&raquo;, notifier des utilisateurs, etc. directement depuis leur site SharePoint sans devoir changer d&rsquo;interface. Yammer Embed offre une bonne exp&eacute;rience fonctionnelle, similaire &agrave; l&rsquo;utilisation sur le site yammer.com.</p>
<p>En modifiant le code JavaScript que vous ins&eacute;rez dans vos pages, vous pourrez facilement inclure le flux d&rsquo;un groupe, d&rsquo;un utilisateur, ou encore d&rsquo;un tag selon vos besoins. Vous pouvez &eacute;galement modifier la taille prise par ce flux de discussion, en modifiant les param&egrave;tres &laquo;&nbsp;width&nbsp;&raquo; (largeur) et &laquo;&nbsp;height&nbsp;&raquo; (hauteur) de la zone d&rsquo;affichage.</p>
<p>&nbsp;</p>
<h2>Inclure un bouton &laquo;&nbsp;Like&nbsp;&raquo; dans une page SharePoint</h2>
&nbsp;
<p>Un autre sc&eacute;nario int&eacute;ressant d&rsquo;int&eacute;gration de Yammer dans un site SharePoint est la possibilit&eacute; d&rsquo;inclure un bouton &laquo;&nbsp;Like&nbsp;&raquo; sur une page de votre Intranet. En effet, ceci est une fonctionnalit&eacute; relativement populaire sur les sites Internet, via par exemple le bouton &laquo;&nbsp;J&rsquo;aime&nbsp;&raquo; de Facebook.</p>
<p>On peut tr&egrave;s facilement reproduire cette m&ecirc;me fonctionnalit&eacute; avec SharePoint et Yammer. Ceci peut vous permettre de donner plus de visibilit&eacute; &agrave; vos contenus SharePoint. En &laquo;&nbsp;aimant&nbsp;&raquo; une page de votre Intranet, un utilisateur va le faire savoir sur le r&eacute;seau social, permettant d&rsquo;en informer les personnes qui le suivent et qui pourront alors aller lire la page publi&eacute;e sur l&rsquo;Intranet.</p>
<p>Pour ins&eacute;rer un bouton &laquo;&nbsp;Like&nbsp;&raquo; sur une page de SharePoint, vous pourriez proc&eacute;der de deux fa&ccedil;ons diff&eacute;rentes&nbsp;:</p>
<ol>
<li><strong>Ins&eacute;rer un code JavaScript Yammer Embed g&eacute;n&eacute;rique dans le gabarit d&rsquo;une page de publication</strong>. Ceci n&rsquo;est applicable que dans le cas o&ugrave; vous utilisez un site de publication. Cette technique a un avantage &eacute;vident&nbsp;: chaque page qui sera cr&eacute;&eacute;e &agrave; partir de ce gabarit b&eacute;n&eacute;ficiera automatiquement du bouton, sans effort additionnel&nbsp;;</li>
<li><strong>Ins&eacute;rer un code JavaScript Yammer Embed dans une WebPart de type &laquo;&nbsp;Editeur de script&nbsp;&raquo;</strong>. Ceci est &eacute;quivalent, avec un code JavaScript diff&eacute;rent, de la m&eacute;thode utilis&eacute;e dans l&rsquo;exemple pr&eacute;c&eacute;dent&nbsp;;</li>
</ol>
<p>Quelle que soit la m&eacute;thode que vous utilisez, pour ajouter un bouton &laquo;&nbsp;J&rsquo;aime&nbsp;&raquo; sur une page de votre Intranet, vous pouvez utiliser le code JavaScript suivant&nbsp;:&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"embedded-like"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"https://assets.yammer.com/assets/platform_js_sdk.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>
yam.connect.actionButton({
 container<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"#embedded-like"</span>,
 network<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"yournetwork.com"</span>,
 action<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"like"</span>
});
<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Avec ce code JavaScript, le bouton Like va appara&icirc;tre sur votre page&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4606.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4606.16.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4606.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/97x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4606.16.png" alt="" border="0" /></a></p>
<p>Ce bouton est capable de se &laquo;&nbsp;souvenir&nbsp;&raquo; de l&rsquo;action d&rsquo;un utilisateur&nbsp;: si celui-ci a d&eacute;j&agrave; cliqu&eacute; sur ce bouton sur une page, ce bouton appara&icirc;tra avec la forme suivante&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4657.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4657.17.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4657.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/108x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4657.17.png" alt="" border="0" /></a></p>
<p>L&rsquo;utilisateur pourra alors annuler&nbsp;son action en recliquant sur le bouton.</p>
<p>Sur le r&eacute;seau Yammer, les utilisateurs qui suivent l&rsquo;utilisateur ayant cliqu&eacute; sur le bouton, pourront voir cette action dans la widget &laquo;&nbsp;Activit&eacute;s r&eacute;centes&nbsp;&raquo; disponible sur la page d&rsquo;accueil. Une activit&eacute; du type &laquo;&nbsp;<em>Katie Jordan liked LeTitreDeMaPage</em>&nbsp;&raquo; va appara&icirc;tre. Au survol de la souris, on peut voir le d&eacute;tail de ce que la personne a aim&eacute; et cliquer sur l&rsquo;adresse de la page pour y acc&eacute;der&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2664.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2664.18.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2664.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2664.18.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Inclure un flux de commentaires dans vos pages</h2>
<p>&nbsp;</p>
<p>Une autre possibilit&eacute; avec le kit JavaScript de Yammer, est le fait d&rsquo;<strong>utiliser les flux de discussion de Yammer comme des zones de commentaires propres &agrave; chaque page</strong>. Contrairement &agrave; l&rsquo;utilisation d&rsquo;un flux pointant sur un groupe, les commentaires pourront &ecirc;tre publi&eacute;s par l&rsquo;utilisateur dans le groupe de son choix.</p>
<p>Avec cette technique, vous pouvez collecter les retours de vos utilisateurs avec le meilleur des fonctionnalit&eacute;s de discussion, tout en b&eacute;n&eacute;ficiant des capacit&eacute;s de Yammer pour &eacute;changer sur un sujet (notification, ciblage d&rsquo;un groupe, etc.). Un autre avantage sera &eacute;galement que les commentaires r&eacute;alis&eacute;s sur une page seront relay&eacute;s sur le r&eacute;seau social.</p>
<p>Comme pour le bouton &laquo;&nbsp;J&rsquo;aime&nbsp;&raquo;, deux techniques peuvent &ecirc;tre utilis&eacute;es pour ins&eacute;rer un flux de commentaires sur des pages d&rsquo;un Intranet&nbsp;: via un code ins&eacute;r&eacute; dans le gabarit des pages, ou directement dans une page via une WebPart dite de type &laquo;&nbsp;Editeur de scripts&nbsp;&raquo;.</p>
<p>Pour inclure une zone de commentaires dans une page SharePoint, vous pouvez utiliser le code JavaScript suivant :&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;div</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"embedded-feed"</span> <span style="color: #0000cc;">style=</span><span style="background-color: #fff0f0;">"width: 800px; height: 450px;"</span><span style="color: #007700;">&gt;&lt;/div&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000cc;">src=</span><span style="background-color: #fff0f0;">"https://assets.yammer.com/assets/platform_js_sdk.js"</span><span style="color: #007700;">&gt;&lt;/script&gt;</span>
<span style="color: #007700;">&lt;script </span><span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007700;">&gt;</span>
    yam.connect.embedFeed({
        container<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"#embedded-feed"</span>,
        feedType<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"open-graph"</span>,
        config<span style="color: #333333;">:</span> {
            promptText<span style="color: #333333;">:</span> <span style="background-color: #fff0f0;">"Commenter cet article"</span>,
            header<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">false</span>,
            footer<span style="color: #333333;">:</span> <span style="color: #008800; font-weight: bold;">false</span>
        }
    });
<span style="color: #007700;">&lt;/script&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p>Avec cet exemple de code, la zone de commentaire de ce type va &ecirc;tre affich&eacute;e sur votre site SharePoint&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5466.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5466.19.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/5466.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/5466.19.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>Dans la zone de r&eacute;daction d&rsquo;un commentaire, l&rsquo;avantage d&rsquo;utiliser Yammer est que l&rsquo;utilisateur va pouvoir b&eacute;n&eacute;ficier des fonctionnalit&eacute;s de notification d&rsquo;un groupe ou d&rsquo;un utilisateur&nbsp;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2018.20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2018.20.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2018.20.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2018.20.png" alt="" width="298" height="112" border="0" /></a></p>
<p>&nbsp;</p>
<p>Enfin, on peut noter que les commentaires r&eacute;alis&eacute;s dans ces zones respectent les principes de s&eacute;curit&eacute; de Yammer. Ceci veut dire que lorsqu&rsquo;un commentaire est publi&eacute; dans un groupe priv&eacute; de Yammer, seuls les utilisateurs ayant acc&egrave;s &agrave; ce groupe pourront voir ces commentaires depuis la page SharePoint.</p>
<p>&nbsp;</p>
<p><strong><em>Astuce&nbsp;1</em></strong><em> : Il faut noter que si vous souhaitez utiliser plusieurs composants &agrave; la fois (exemple&nbsp;: bouton J&rsquo;aime + zone de commentaires, vous ne devez inclure qu&rsquo;une seule fois le code appelant la librairie JavaScript de Yammer.</em></p>
<p><strong><em>Astuce&nbsp;2</em></strong><em> : Il est important de noter qu&rsquo;avec Yammer Embed, le code HTML de la balise &laquo;&nbsp;div&nbsp;&raquo; (zone d&rsquo;affichage) doit obligatoirement se trouver <span style="text-decoration: underline;">AVANT</span> le code JavasScript. Dans le cas contraire, cela ne marchera pas.</em></p>
<p>&nbsp;</p>
<h2>Pour aller plus loin</h2>
<p><em><br /></em></p>
<p align="left">Si vous &ecirc;tes amateur de JavaScript, il faut &eacute;galement savoir que l&rsquo;on peut <strong>ex&eacute;cuter du code apr&egrave;s certains &eacute;v&egrave;nements</strong> d&eacute;clench&eacute;s par le composant Yammer Embed.</p>
<p align="left">Vous pourrez par exemple ex&eacute;cuter du code personnalis&eacute; apr&egrave;s que le fil de discussion se soit charg&eacute; sur la page.</p>
<p align="left">Pour conna&icirc;tre les capacit&eacute;s de gestion des &eacute;v&egrave;nements via du code JavaScript, vous pouvez lire la page de documentation suivante&nbsp;:</p>
<p><a href="https://developer.yammer.com/v1.0/docs/feed-events">https://developer.yammer.com/v1.0/docs/feed-events</a></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>&nbsp;</p>
<p>Yammer Embed est un <strong>moyen simple et rapide</strong>, avec un minimum de code, <strong>d'inclure des fonctionnalit&eacute;s sociales de Yammer au sein de sites SharePoint</strong>. Elles peuvent vous permettre, dans n&rsquo;importe quel type de site, d&rsquo;inclure des fils de discussions provenant de groupes, d&rsquo;utilisateurs, de tags ou encore d&rsquo;ajouter des boutons &laquo;&nbsp;J&rsquo;aime&nbsp;&raquo; et des zones de commentaires.</p>
<p>On peut &eacute;galement noter que Yammer Embed n&rsquo;utilise que des m&eacute;thodes dites &laquo;&nbsp;c&ocirc;t&eacute; client&nbsp;&raquo; (ex&eacute;cut&eacute;es par le navigateur de l&rsquo;utilisateur) et donc tr&egrave;s peu intrusives vis-&agrave;-vis de la technologie sous-jacente. Pour cette raison, <strong>les techniques d&eacute;montr&eacute;es peuvent &ecirc;tre aussi bien utilis&eacute;es sur SharePoint Online que sur SharePoint Server</strong>.</p>
<p>Pour utiliser Yammer Embed avec SharePoint, deux fonctionnalit&eacute;s importantes sont &agrave; conna&icirc;tre&nbsp;: l&rsquo;utilisation de WebParts dites &laquo;&nbsp;Editeur de scripts&nbsp;&raquo;, ou alors le principe des gabarits de page (pour les sites de publication uniquement).</p>
<p>Cet article est un aper&ccedil;u simple des capacit&eacute;s d&rsquo;int&eacute;gration des deux produits. Nous avons vu comment int&eacute;grer des informations provenant de Yammer au sein de SharePoint (et non le contraire). Pour information, on peut &eacute;galement concevoir des sc&eacute;narii plus complexes d&rsquo;int&eacute;gration en utilisant l&rsquo;API REST et le SDK JavaScript de Yammer, mais cela pourrait faire l&rsquo;objet d&rsquo;un autre article &agrave; part enti&egrave;re.</p>
<p>Enjoy Yammer&nbsp;&amp; SharePoint !</p>]]></content:encoded>
    </item>
    <item>
      <title>Office Graph API and Cortana - Chapter 3: Integration with Cortana</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/office-graph-api-and-cortana-chapter-3-integration-with-cortana</link>
      <pubDate>Fri, 09 Jan 2015 23:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/01/09/office-graph-api-and-cortana-chapter-3-integration-with-cortana/</guid>
      <description><![CDATA[&nbsp;French version / Version fran&ccedil;aise
Preface
&nbsp;
Welcome to the third and last...]]></description>
      <content:encoded><![CDATA[<p class="Heading2Numbered" style="text-align: right;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1423.France-Flag-icon.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1423.France_2D00_Flag_2D00_icon.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1423.France-Flag-icon.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/16x16/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1423.France_2D00_Flag_2D00_icon.png" alt="" border="0" /></a><span>&nbsp;</span><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/07/office-graph-api-et-cortana-chapitre-1-introduction-a-l-office-graph.aspx">French version / Version fran&ccedil;aise</a></p>
<h2 class="Heading2Numbered">Preface</h2>
<p>&nbsp;</p>
<p><span lang="en">Welcome to the third and last chapter of this section dedicated to the integration of the Office Graph API within a .net Windows Phone 8.1 application and Cortana.&nbsp;</span><span lang="en">In the previous chapters, we have seen how interrogate in C# and XML the Office Graph to find elements of its network, connecting securely to Azure Active Directory through the ADAL library.&nbsp;</span><span lang="en">We could find elements of the graph and display to browse through them.</span></p>
<p><span lang="en"><span style="text-decoration: underline;"><strong><span lang="en">You can DOWNLOAD THE SOURCE CODE in the joined ZIP file, available at the end of each chapter.</span></strong></span><br /></span></p>
<p><span lang="en"><strong>This article is published to the TechDays 2015, which will take place from 10 to 12 January 2015 to the Palais des Congr&egrave;s de Paris</strong>.&nbsp;</span><span lang="en">This year I would have the chance to co-animate&nbsp;<a href="http://www.microsofttranslator.com/bv.aspx?from=fr&amp;to=en&amp;a=https%3A%2F%2Ftechdays.microsoft.fr%2Fprogrammes%2F2015%2Ffiche-session.aspx%3FID%3D6c979a6b-fc1d-4295-b566-a8f12461b936" target="_top">the session dedicated to Office Graph with Alexandre Cipriani and St&eacute;phane Palluet</a>.&nbsp;</span><span lang="en">Enjoy many of our session for this example and many more.</span></p>
<p><span id="ouHighlight__0_3TO0_2">For</span><span id="noHighlight_0.5125297091435641">&nbsp;</span><span id="ouHighlight__5_7TO4_7">this</span><span id="noHighlight_0.49753082380630076">&nbsp;</span><span id="ouHighlight__9_15TO9_15">chapter</span><span id="noHighlight_0.4734352519735694">,</span><span id="noHighlight_0.20639621396549046">&nbsp;</span><span id="ouHighlight__18_19TO18_18">I</span><span id="noHighlight_0.5034405738115311">&nbsp;</span><span id="ouHighlight__21_25TO20_23">want</span><span id="noHighlight_0.29291942436248064">&nbsp;</span><span id="ouHighlight__27_27TO25_26">to</span><span id="noHighlight_0.4430404365994036">&nbsp;</span><span id="ouHighlight__29_37TO28_32">thank</span><span id="noHighlight_0.7322289040312171">&nbsp;</span><span id="ouHighlight__39_43TO34_38">Steve</span><span id="noHighlight_0.043745697708800435">&nbsp;</span><span id="ouHighlight__45_51TO40_46">Peschka</span><span id="noHighlight_0.31333017884753644">.</span><span id="noHighlight_0.38118207501247525">&nbsp;</span><span id="ouHighlight__54_61TO49_52">Much</span><span id="noHighlight_0.3860312425531447">&nbsp;</span><span id="ouHighlight__63_64TO54_55">of</span><span id="noHighlight_0.7921108626760542">&nbsp;</span><span id="ouHighlight__66_69TO57_59">the</span><span id="noHighlight_0.13264151522889733">&nbsp;</span><span id="ouHighlight__71_77TO61_64">code</span><span id="noHighlight_0.7577891463879496">&nbsp;</span><span id="ouHighlight__79_81TO66_69">used</span><span id="noHighlight_0.9871415381785482">&nbsp;</span><span id="ouHighlight__83_85TO71_74">here</span><span id="noHighlight_0.162765902467072">&nbsp;</span><span id="ouHighlight__87_93TO76_77">is</span><span id="noHighlight_0.4892757108900696">&nbsp;</span><span id="ouHighlight__95_96TO79_86">inspired</span><span id="noHighlight_0.5322149826679379">&nbsp;</span><span id="ouHighlight__98_100TO88_89">by</span><span id="noHighlight_0.23357354756444693">&nbsp;</span><span id="ouHighlight__102_108TO91_93">his</span><span id="noHighlight_0.1051157743204385">&nbsp;</span><span id="ouHighlight__110_121TO95_114">example "CloudTopia"</span><span id="noHighlight_0.6038308185525239">&nbsp;</span><span id="ouHighlight__127_127TO116_120">which</span><span id="noHighlight_0.6467979336157441">&nbsp;</span><span id="ouHighlight__133_140TO122_124">was</span><span id="noHighlight_0.9538162990938872">&nbsp;</span><span id="ouHighlight__142_142TO126_134">presented</span><span id="noHighlight_0.18052703910507262">&nbsp;</span><span id="ouHighlight__144_145TO136_137">at</span><span id="noHighlight_0.030957614071667194">&nbsp;</span><span id="ouHighlight__156_165TO139_146">numerous</span><span id="noHighlight_0.5051158424466848">&nbsp;</span><span id="ouHighlight__166_166TO148_153">events</span><span id="noHighlight_0.9146197072695941">.&nbsp;</span><a href="http://blogs.technet.com/b/speschka/archive/2014/08/11/cloudtopia-connecting-o365-apps-azure-and-cortana-part-1.aspx"><span id="ouHighlight__168_169TO156_156">I</span><span id="noHighlight_0.8425466932822019">&nbsp;</span><span id="ouHighlight__171_184TO158_166">recommend</span><span id="noHighlight_0.07167531992308795">&nbsp;</span><span id="ouHighlight__186_189TO168_171">more</span><span id="noHighlight_0.8705705567263067">&nbsp;</span><span id="ouHighlight__191_193TO173_176">than</span><span id="noHighlight_0.7572374355513602">&nbsp;</span><span id="ouHighlight__195_202TO178_185">strongly</span><span id="noHighlight_0.15522818989120424">&nbsp;</span><span id="ouHighlight__207_210TO187_193">reading</span><span id="noHighlight_0.6861915949266404">&nbsp;</span><span id="ouHighlight__212_214TO195_197">his&nbsp;</span><span id="ouHighlight__225_228TO199_202">blog</span><span id="noHighlight_0.07312709954567254">&nbsp;</span><span id="ouHighlight__216_220TO204_207">post</span></a>.<span id="noHighlight_0.10981703898869455">&nbsp;</span></p>
<p><span id="noHighlight_0.10981703898869455">Steve&nbsp;</span><span id="ouHighlight__235_237TO216_217">is</span><span id="noHighlight_0.12257500714622438">&nbsp;</span><span id="ouHighlight__239_241TO219_219">a</span><span id="noHighlight_0.9340605984907597">&nbsp;</span><span id="ouHighlight__243_248TO221_226">source</span><span id="noHighlight_0.9574851281940937">&nbsp;</span><span id="ouHighlight__250_262TO228_229">of</span><span id="noHighlight_0.17835386330261827">&nbsp;</span><span id="ouHighlight__264_273TO231_240">incredible</span><span id="noHighlight_0.16017025639303029">&nbsp;</span><span id="ouHighlight__250_262TO242_252">information, thanks a lot</span><span id="noHighlight_0.584885134594515">.</span></p>
<p>&nbsp;</p>
<p><span><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/09/office-graph-api-and-cortana-chapter-1-introduction-to-the-office-graph.aspx" target="_top">Chapter 1: Introduction to the Office Graph</a></span></p>
<p><span><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/10/office-graph-api-and-cortana-chapter-2-how-to-make-queries-by-code-to-the-office-graph.aspx" target="_top">Chapter 2: How to make queries by code to the Office Graph?</a></span></p>
<p lang="en">Chapter 3: Integration with Cortana (this article)</p>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered">About the Cortana API</h2>
<p>&nbsp;</p>
<p><span lang="en">In this last section, we will now focus to how drive our research on the graph through voice commands.&nbsp;</span><span lang="en">Since a few weeks in France on Windows Phone 8.1, it is now possible to control his phone with the voice, thanks to the Cortana.&nbsp;</span><span lang="en">Cortana is a true voice recognition interface, allowing to speak with his phone to steer its applications.</span></p>
<p lang="en">In this example, we will use the SDK of Cortana to achieve controls that will know naturally ask our business graph, as shown in the following schema:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4431.16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4431.16.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4431.16.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4431.16.png" alt="" border="0" /></a></p>
<p><span>When you develop an application for Cortana, can use two types of components:</span></p>
<ul>
<li><span>Speech recognition kit&nbsp;</span>(<span style="font-family: 'courier new', courier;">SpeechRecognition <span style="font-family: 'courier new', courier;">namespace</span></span>) : <span>&nbsp;allows to listen to the user, understand the phrases and words as he speaks.</span></li>
<li>Speech synthesis kit (<span style="font-family: 'courier new', courier;">SpeechSynthesis namespace</span>)&nbsp;: <span>&nbsp;allows to talk with Cortana's voice, so for example our application to respond to user commands.</span></li>
</ul>
<p><span>In addition to the integration of these two components, we will see that we also instruct Cortana how automatically launch our application, interpreting the command to open at the same time.</span></p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">About voice commands</h2>
<p>&nbsp;</p>
<p><span lang="en">To query the Office Graph vocally, we could for example ask the application to display documents about its social graph axes.&nbsp;</span><span lang="en">These axes could be persons of his circle, his manager, the popular elements around itself, the documents that we've read, etc. etc.</span></p>
<p><span lang="en">In this example, we will rely vocal instruction, which will allow us to understand what is the axis that wants to see the user.&nbsp;</span><span lang="en">We can examine the graph with controls detailed in the table below.&nbsp;</span><span lang="en">It is important to understand that each of these commands has one or more words that will be detected in a sentence to launch the command:</span></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="264">
<p><strong>Command samples</strong></p>
</td>
<td valign="top" width="360">
<p><strong>Office Graph query</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong><strong>Popular </strong>documents&nbsp;<strong>&raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Equivalent to Delve homepage</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;My work &raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items recently modified by the user on its different collaborative spaces</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong>Documents I have&nbsp;<strong>read &raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items recently viewed by the user</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong><strong>Shared with me&nbsp;</strong>documents<strong>&nbsp;&raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items shared&nbsp;recently with the user</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;Around me &raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items shared recently around the user (network close)</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong>Documents from my<strong> manager&nbsp;&raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items shared items by the user manager</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong>Documents from my<strong>&nbsp;team &raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span>Items recently shared by people from the team of the user</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong>Documents<strong>&nbsp;from&nbsp;</strong>'Pierre Dupont'<strong>&nbsp;&raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span lang="en">Items changed recently by Pierre Dupont.&nbsp;</span><span lang="en">For this query can use any term after 'from' to search for documents of a person.</span><span lang="en">The research goes well work for first names.&nbsp;</span><span lang="en">For family names, interpretation will be based on the ability of Cortana to understand and spelled a proper name.</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&laquo;&nbsp;</strong>Documents<strong>&nbsp;about&nbsp;</strong>'Office'<strong>&nbsp;&raquo;</strong></p>
</td>
<td valign="top" width="360">
<p><span lang="en">Items recently created or modified about a theme or a keyword items.&nbsp;</span><span lang="en">One can for example use the keyword "about" to search with the words spoken after the keyword.&nbsp;</span><span lang="en">You can search from a theme, a term used recently, the name of a product, service, etc.</span></p>
</td>
</tr>
<tr>
<td valign="top" width="264">
<p><strong>&nbsp;</strong></p>
</td>
<td valign="top" width="360">&nbsp;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Now let's see how to implement these orders with Cortana and voice APIs of Windows Phone.</p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered">Cortana main classes</h2>
<p>&nbsp;</p>
<p><span>To use Cortana, we must include two namespaces corresponding to speech recognition and synthesis libraries:</span></p>
<div><!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Windows.Media.SpeechRecognition</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Windows.Media.SpeechSynthesis</span>;
</pre>
</div>
</div>
<p>&nbsp;</p>
<h2 class="Heading2Numbered"><span id="ouHighlight__0_6TO0_2">How</span><span id="noHighlight_0.6368486087303609">&nbsp;to&nbsp;</span><span id="ouHighlight__8_16TO7_11">learn</span><span id="noHighlight_0.17958049033768475">&nbsp;</span><span id="ouHighlight__18_18TO13_14">to</span><span id="noHighlight_0.37666682386770844">&nbsp;</span><span id="ouHighlight__20_26TO16_22">Cortana</span><span id="noHighlight_0.8168649829458445">&nbsp;</span><span id="ouHighlight__28_28TO24_25">to</span><span id="noHighlight_0.6611403049901128">&nbsp;</span><span id="ouHighlight__30_33TO27_29">speech</span><span id="noHighlight_0.10764837265014648">&nbsp;</span><span id="ouHighlight__44_45TO31_35">words</span><span id="noHighlight_0.007810527458786964">&nbsp;</span><span id="ouHighlight__47_49TO37_39">and</span><span id="noHighlight_0.5090088248252869">&nbsp;phrases ?</span></h2>
<p>&nbsp;</p>
<p><span>We'll start with the SpeechSynthesis part, to talk about Cortana, allowing him to answer us at voice commands.</span></p>
<p><span>To do this, we first initialize an object of type</span> <span style="font-family: 'courier new', courier;">SpeechSynthesizer</span>. <span lang="en">During this initialization, can specify what type of voice and the language used by the speech engine.&nbsp;</span><span lang="en">In our example we will for example choose to use the female voice and the English language, with the following code:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">SpeechSynthesizer Synthesizer = <span style="color: #008800; font-weight: bold;">new</span> SpeechSynthesizer();
<span style="color: #008800; font-weight: bold;">foreach</span> (<span style="color: #333399; font-weight: bold;">var</span> voice <span style="color: #008800; font-weight: bold;">in</span> SpeechSynthesizer.AllVoices)
{
    <span style="color: #008800; font-weight: bold;">if</span> (voice.Gender == VoiceGender.Female &amp;&amp; voice.Language.ToLowerInvariant().Equals(<span style="background-color: #fff0f0;">"en-us"</span>))
    {
        Synthesizer.Voice = voice;
    }
}
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">With the synthesizer object, we can get him to say phrases in English.&nbsp;</span><span lang="en">We use two different ways:</span></p>
<ul>
<li><span lang="en">Phrases as simple strings, without any form of formatting through the&nbsp;</span><span style="font-family: 'courier new', courier;">SynthesizeTextToStreamAsync&nbsp;</span>method;</li>
<li><span>Phrases formatted at the SSML (XML format) format through the</span> <span style="font-family: 'courier new', courier;">SynthesizeSsmlToStreamAsync&nbsp;</span>method. <span>The advantage of this format is that you can for example control the level of intonation of voice over this or that Word;</span></li>
</ul>
<p><span>Consider the following example to say to Cortana &nbsp;"</span><em>Sorry, I did not understand</em><span>&nbsp;" when we fail to understand the command launched by the user.</span></p>
<p><span>In SSML, can represent the sentence in the following way to accentuate the intonation of the word "sorry":</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;speak</span> <span style="color: #0000cc;">version=</span><span style="background-color: #fff0f0;">'1.0'</span> <span style="color: #0000cc;">xmlns=</span><span style="background-color: #fff0f0;">'http://www.w3.org/2001/10/synthesis'</span> <span style="color: #0000cc;">xml:lang=</span><span style="background-color: #fff0f0;">"en-US"</span><span style="color: #007700;">&gt;</span>
  <span style="color: #007700;">&lt;prosody</span> <span style="color: #0000cc;">pitch=</span><span style="background-color: #fff0f0;">'+35%'</span> <span style="color: #0000cc;">rate=</span><span style="background-color: #fff0f0;">'-10%'</span><span style="color: #007700;">&gt;</span> Sorry<span style="color: #007700;">&lt;/prosody&gt;</span>
  <span style="color: #007700;">&lt;prosody</span> <span style="color: #0000cc;">pitch=</span><span style="background-color: #fff0f0;">'-15%'</span><span style="color: #007700;">&gt;</span> I did not understand.<span style="color: #007700;">&lt;/prosody&gt;</span>
<span style="color: #007700;">&lt;/speak&gt;</span>
</pre>
</div>
<p><span>Simply write the following code method giving in argument the string containing the SSML formatted&nbsp;text :</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">public async void StartSpeakingSsml(string ssmlToSpeak)
{
    // Generate the audio stream from plain text.
    SpeechSynthesisStream stream = await this.Synthesizer.SynthesizeSsmlToStreamAsync(ssmlToSpeak);
    // Send the stream to the media object.
    var mediaElement = new MediaElement();
    mediaElement.SetSource(stream, stream.ContentType);
    mediaElement.Play();
}
</pre>
</div>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered">Recognize the voice command&nbsp;</h2>
<p>&nbsp;</p>
<p lang="en">Now we've seen start do talk about Cortana, let's look at how to ensure that Cortana listens to the words and how to interpret them by code.</p>
<p><span lang="en">The first step is to initialize the&nbsp;<span><span style="font-family: 'courier new', courier;">SpeechRecognizer</span> </span>object, that will serve us to start listening to the command.</span><span lang="en">With this object, we can also define a method which will be executed when the listen operation is completed.</span></p>
<p><span lang="en">Listening status is returned via the&nbsp;<span style="font-family: 'courier new', courier;">AsyncStatus&nbsp;</span>type argument that indicates the result (<span style="font-family: 'courier new', courier;">Completed&nbsp;</span>or&nbsp;<span style="font-family: 'courier new', courier;">Error</span>).</span><span lang="en">The text as a string is returned via the&nbsp;<span style="font-family: 'courier new', courier;">GetResults&nbsp;</span>method which returns us an object of type&nbsp;<span style="font-family: 'courier new', courier;">SpeechRecognitionResult</span></span>.</p>
<p><span lang="en">In the example below, we will for example initialize the <span style="font-family: 'courier new', courier;">SpeechRecognizer</span>, then set the code that will be executed upon receipt of voice control.&nbsp;</span><span lang="en">If the status is good, we retrieve the contents of the text and let's look at the text contains the keywords "<em>my&nbsp;work"</em>.&nbsp;</span><span lang="en">If this is the case, we will load&nbsp;method which will call the Office Graph on the current user work &nbsp;(<span style="font-family: 'courier new', courier;">LoadMyWork</span>).&nbsp;</span><span lang="en">Otherwise we will call a method which will talk about Cortana to indicate that the command has not been understood.</span></p>
<p>.</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">async</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">InitializeRecognizer</span>()
{
    <span style="color: #008800; font-weight: bold;">this</span>.Recognizer = <span style="color: #008800; font-weight: bold;">new</span> SpeechRecognizer();
    SpeechRecognitionTopicConstraint topicConstraint
        = <span style="color: #008800; font-weight: bold;">new</span> SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, <span style="background-color: #fff0f0;">"Work"</span>);

    <span style="color: #008800; font-weight: bold;">this</span>.Recognizer.Constraints.Add(topicConstraint);
    <span style="color: #008800; font-weight: bold;">await</span> <span style="color: #008800; font-weight: bold;">this</span>.Recognizer.CompileConstraintsAsync(); <span style="color: #888888;">// Required</span>

    recoCompletedAction = <span style="color: #008800; font-weight: bold;">new</span> AsyncOperationCompletedHandler&lt;SpeechRecognitionResult&gt;((operation, asyncStatus) =&gt;
    {
        Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =&gt;
        {
            <span style="color: #008800; font-weight: bold;">this</span>.CurrentRecognizerOperation = <span style="color: #008800; font-weight: bold;">null</span>;
            <span style="color: #008800; font-weight: bold;">this</span>.SearchTextBox.Text = <span style="background-color: #fff0f0;">"Listening your command"</span>;

            <span style="color: #008800; font-weight: bold;">switch</span> (asyncStatus)
            {
                <span style="color: #008800; font-weight: bold;">case</span> AsyncStatus.Completed:
                    SpeechRecognitionResult result = operation.GetResults();
                    <span style="color: #008800; font-weight: bold;">if</span> (!String.IsNullOrEmpty(result.Text))
                    {
                        <span style="color: #333399; font-weight: bold;">string</span> res = result.Text.ToLower();
                        				
                        <span style="color: #008800; font-weight: bold;">if</span> (res.Contains(<span style="background-color: #fff0f0;">"my work"</span>))
                            LoadMyWork();
                        <span style="color: #008800; font-weight: bold;">else</span>
                            speechHelper.WrongCommand();
                    }
                    <span style="color: #008800; font-weight: bold;">break</span>;
                <span style="color: #008800; font-weight: bold;">case</span> AsyncStatus.Error:
                    speechHelper.WrongCommand();
                    <span style="color: #008800; font-weight: bold;">break</span>;
                <span style="color: #008800; font-weight: bold;">default</span>:
                    <span style="color: #008800; font-weight: bold;">break</span>;
            }
        }).AsTask().Wait();
    });
}
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">We will now look at how to start listening to Cortana in the application.&nbsp;</span><span lang="en">At the click of a button (the microphone in our case), we will launch the active listening of Cortana.&nbsp;</span><span lang="en">For this, we use the</span> <span style="font-family: 'courier new', courier;">RecognizeAsync&nbsp;</span><span>method, specifying the method which will be called when the listen operation will be completed:</span>&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">StartListening</span>()
{
    <span style="color: #008800; font-weight: bold;">try</span>
    {
        beepStart.Play();
        <span style="color: #008800; font-weight: bold;">this</span>.SearchTextBox.Text = <span style="background-color: #fff0f0;">"Listening..."</span>;

        <span style="color: #888888;">// Start listening to the user and set up the completion handler for the result</span>
        <span style="color: #888888;">// this fires when you press the button to start listening </span>
        <span style="color: #008800; font-weight: bold;">this</span>.CurrentRecognizerOperation = <span style="color: #008800; font-weight: bold;">this</span>.Recognizer.RecognizeAsync();
        <span style="color: #008800; font-weight: bold;">this</span>.CurrentRecognizerOperation.Completed = recoCompletedAction;
    }
    <span style="color: #008800; font-weight: bold;">catch</span> (Exception)
    {
        beepStop.Play();
        recoCompletedAction.Invoke(<span style="color: #008800; font-weight: bold;">null</span>, AsyncStatus.Error);
    }
}
</pre>
</div>
<p>&nbsp;</p>
<p><span>Let's see now how the application works:</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8816.17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8816.17.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8816.17.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8816.17.png" alt="" border="0" /></a></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="72">
<p><strong>Screenshot</strong></p>
</td>
<td valign="top" width="552">
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="72">
<p><strong>#1</strong></p>
</td>
<td valign="top" width="552">
<p lang="en">The user arrives on the interface of the application. They can click on the microphone to start listening to the voice command.</p>
</td>
</tr>
<tr>
<td valign="top" width="72">
<p><strong>#2</strong></p>
</td>
<td valign="top" width="552">
<p><span lang="en">The text of the text box down changes with the text 'listen....&nbsp;</span><span>&raquo;.</span></p>
</td>
</tr>
<tr>
<td valign="top" width="72">
<p><strong>#3</strong></p>
</td>
<td valign="top" width="552">
<p><span>If the voice command has been understood, we will have a voice message confirmation on the part of Cortana and the query is displayed in the central text box.</span></p>
</td>
</tr>
<tr>
<td valign="top" width="72">
<p><strong>#4</strong></p>
</td>
<td valign="top" width="552">
<p><span>The Office Graph query returns the results, and we display them to the user via the interface realized in the previous chapter.</span></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p lang="en">Here, we are now able to launch voice commands via Cortana, understand the realized commands and launch the Office Graph based on the criteria selected by the user.</p>
<p lang="en"><span>Now the best of all</span><span class="b2">:</span>&nbsp;allowing to start research on the Office Graph without even manually start the application My Office Graph!</p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">How to use Cortana to start directly our voice commands?</h2>
<p>&nbsp;</p>
<p><span lang="en">It is one of the most impressive features of Cortana:&nbsp;<strong>its ability to learn new commands through the applications installed on the phone</strong></span>.</p>
<p><span lang="en">When an application uses this feature, the user has the ability to send voice commands to an application directly from the main interface of Cortana.&nbsp;</span><span lang="en">Cortana will open the application and 'send' the identified voice command.&nbsp;</span><span lang="en">Cortana will be able to understand that any order concerning such application, thanks to a system of prefixes.</span></p>
<p><span lang="en">In our example, we will define starting his sentence with "Office Graph", Cortana can know whether a specific command to the Office Graph and start the My Office Graph application.&nbsp;</span><span lang="en">It will also analyze the text after the words "Office Graph" to detect a built-in command and run this command within the application.</span></p>
<p lang="en">We could define the following commands to start queries: "Office Graph my work&raquo;, &laquo;Office Graph, search the shared items&raquo;, etc. etc.</p>
<p><span lang="en">To do this, we need to set up a voice command file, which is a file in the XML format that is included in the application.&nbsp;</span><span lang="en">This file will contain the prefix from the application, as well as the different commands.&nbsp;</span><span lang="en">Different commands will define the sample text, the words listened to, be they voluntary or mandatory:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #557799;">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>

<span style="color: #888888;">&lt;!-- Be sure to use the new v1.1 namespace to utilize the new PhraseTopic feature --&gt;</span>
<span style="color: #007700;">&lt;VoiceCommands</span> <span style="color: #0000cc;">xmlns=</span><span style="background-color: #fff0f0;">"http://schemas.microsoft.com/voicecommands/1.1"</span><span style="color: #007700;">&gt;</span>
    
  <span style="color: #007700;">&lt;CommandSet</span> <span style="color: #0000cc;">xml:lang=</span><span style="background-color: #fff0f0;">"en-us"</span> <span style="color: #0000cc;">Name=</span><span style="background-color: #fff0f0;">"officeGraphCommandSet"</span><span style="color: #007700;">&gt;</span>
    <span style="color: #888888;">&lt;!-- The CommandPrefix provides an alternative to your full app name for invocation --&gt;</span>
    <span style="color: #007700;">&lt;CommandPrefix&gt;</span> Office Graph <span style="color: #007700;">&lt;/CommandPrefix&gt;</span>
    <span style="color: #888888;">&lt;!-- The CommandSet Example appears in the global help alongside your app name --&gt;</span>
    <span style="color: #007700;">&lt;Example&gt;</span> load my work <span style="color: #007700;">&lt;/Example&gt;</span>

    <span style="color: #007700;">&lt;Command</span> <span style="color: #0000cc;">Name=</span><span style="background-color: #fff0f0;">"popular"</span><span style="color: #007700;">&gt;</span>
      <span style="color: #007700;">&lt;Example&gt;</span> popular documents <span style="color: #007700;">&lt;/Example&gt;</span>
      <span style="color: #007700;">&lt;ListenFor&gt;</span>[Display] [Find] [Search] popular [elements] [items] [documents]<span style="color: #007700;">&lt;/ListenFor&gt;</span>
      <span style="color: #007700;">&lt;Feedback&gt;</span>Search popular items in progress...<span style="color: #007700;">&lt;/Feedback&gt;</span>
      <span style="color: #007700;">&lt;Navigate</span>  <span style="color: #007700;">/&gt;</span>
    <span style="color: #007700;">&lt;/Command&gt;</span>
...
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">To load the voice commands into Cortana, can execute the method below during initialization of the application.</span><span lang="en">This method will install the commands contained in the&nbsp;<span style="font-family: 'courier new', courier;">VoiceCommandDefinition_8.1.xml</span>&nbsp;file &nbsp;in the App package:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">/// &lt;summary&gt;</span>
<span style="color: #888888;">/// Install the voice commands</span>
<span style="color: #888888;">/// &lt;/summary&gt;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">async</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">InstallVoiceCommands</span>()
{
    <span style="color: #008800; font-weight: bold;">const</span> <span style="color: #333399; font-weight: bold;">string</span> wp81vcdPath = <span style="background-color: #fff0f0;">"ms-appx:///VoiceCommandDefinition_8.1.xml"</span>;

    Uri vcdUri = <span style="color: #008800; font-weight: bold;">new</span> Uri(wp81vcdPath);
    StorageFile file = <span style="color: #008800; font-weight: bold;">await</span> StorageFile.GetFileFromApplicationUriAsync(vcdUri);
    <span style="color: #008800; font-weight: bold;">await</span> VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(file);
}
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">Once the order has been installed, the application is visible from "See more samples" screen inside hte Cortana interface.&nbsp;</span><span lang="en">To check this, we simply open Cortana (in button on the phone for example search button), down everything at the bottom to see the installed applications using Cortana, click on our app &laquo;My Office Graph&raquo; and the list of examples of available commands is displayed:</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2260.18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2260.18.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2260.18.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2260.18.png" alt="" border="0" /></a></p>
<p><span lang="en">Now that the controls are installed, Cortana will be able to recognize our command during a speech, summarize the order included and then launch the application.&nbsp;</span><span lang="en">The following screenshots show the process for the user:</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0511.19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0511.19.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/0511.19.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/0511.19.png" alt="" border="0" /></a></p>
<p><span lang="en">When Cortana will launch our application, we will be notified in the code via our App <span style="font-family: 'courier new', courier;">OnActivated</span> event.&nbsp;</span><span lang="en">Cortana will send us an argument of type "<span style="font-family: 'courier new', courier;">VoiceCommand</span>" for which we will be able to know the name of the detected command and eventually the page that must be opened with this command:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">protected</span> <span style="color: #008800; font-weight: bold;">override</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">OnActivated</span>(IActivatedEventArgs args)
{
<span style="color: #888888;">// When a Voice Command activates the app, this method is going to </span>
<span style="color: #888888;">// be called and OnLaunched is not. Because of that we need similar</span>
<span style="color: #888888;">// code to the code we have in OnLaunched</span>
<span style="color: #888888;">// For VoiceCommand activations, the activation Kind is ActivationKind.VoiceCommand</span>
<span style="color: #008800; font-weight: bold;">if</span> (args.Kind == ActivationKind.VoiceCommand)
{
  <span style="color: #888888;">// since we know this is the kind, a cast will work fine</span>
  VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

  <span style="color: #888888;">// The NavigationTarget retrieved here is the value of the Target attribute in the</span>
  <span style="color: #888888;">// Voice Command Definition xml Navigate node</span>
  <span style="color: #333399; font-weight: bold;">string</span> voiceCommandName = vcArgs.Result.RulePath.First();
  <span style="color: #333399; font-weight: bold;">string</span> target = vcArgs.Result.SemanticInterpretation.Properties[<span style="background-color: #fff0f0;">"NavigationTarget"</span>][<span style="color: #6600ee; font-weight: bold;">0</span>];
<span style="color: #ff0000; background-color: #ffaaaa;">&hellip;</span>
}
}
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">We are able now to see our social graph of business in a few seconds thanks to the voice.&nbsp;</span><span lang="en">We are able to know the news of its network in the Organization and do not miss any document, presentation, excel or even video published around us!!!</span></p>
<p><span lang="en">We have seen that it is simple to query his business graph and integrate it into a third-party application.&nbsp;</span><span lang="en">The Office Graph is powerful and offers us a great way to integrate a social dimension to any enterprise application.</span></p>
<p lang="en">We could, with the same principles as those detailed in this article, display in an App or an Intranet site a large number of information to assist the end-user to find or identify in seconds.</p>
<p lang="en">Thank you for your interest for this article, and have fun with the Office Graph!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/58/55/21/MyOfficeGraph-20150113.zip" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-58-55-21/MyOfficeGraph_2D00_20150113.zip">MyOfficeGraph-20150113.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Office Graph API and Cortana - Chapter 2: how to make queries by code to the Office Graph</title>
      <link>https://docs.microsoft.com/archive/blogs/ocarpen/office-graph-api-and-cortana-chapter-2-how-to-make-queries-by-code-to-the-office-graph</link>
      <pubDate>Fri, 09 Jan 2015 23:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Olivier Carpentier]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ocarpen/2015/01/09/office-graph-api-and-cortana-chapter-2-how-to-make-queries-by-code-to-the-office-graph/</guid>
      <description><![CDATA[&nbsp;&nbsp;&nbsp;French version / Version fran&ccedil;aise
Preface
&nbsp;
Welcome to the second...]]></description>
      <content:encoded><![CDATA[<p class="Heading2Numbered" style="text-align: right;">&nbsp;&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1423.France-Flag-icon.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1423.France_2D00_Flag_2D00_icon.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1423.France-Flag-icon.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/16x16/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1423.France_2D00_Flag_2D00_icon.png" alt="" border="0" /></a><span>&nbsp;</span><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/07/office-graph-api-et-cortana-chapitre-1-introduction-a-l-office-graph.aspx">French version / Version fran&ccedil;aise</a></p>
<h2 class="Heading2Numbered">Preface</h2>
<p>&nbsp;</p>
<p><span lang="en">Welcome to the second chapter of this section dedicated to the integration of the Office Graph API within an application .net Windows Phone 8.1 and Cortana.&nbsp;</span><span lang="en">In the previous chapter, we saw what is the syntax to call web services and to achieve its company&nbsp;graph results.&nbsp;</span><span lang="en">In this chapter, we will now see how to connect to the Office Graph and perform queries in .net.</span></p>
<p><span lang="en"><span style="text-decoration: underline;"><strong><span lang="en">You can DOWNLOAD THE SOURCE CODE in the joined ZIP file, available at the end of each chapter.</span></strong></span><br /></span></p>
<p><span lang="en"><strong>This article is published to the TechDays 2015, which will take place from 10 to 12 January 2015 to the Palais des Congr&egrave;s de Paris</strong>.&nbsp;</span><span lang="en">This year I would have the chance to co-animate&nbsp;<a href="http://www.microsofttranslator.com/bv.aspx?from=fr&amp;to=en&amp;a=https%3A%2F%2Ftechdays.microsoft.fr%2Fprogrammes%2F2015%2Ffiche-session.aspx%3FID%3D6c979a6b-fc1d-4295-b566-a8f12461b936" target="_top">the session dedicated to Office Graph with Alexandre Cipriani and St&eacute;phane Palluet</a>.&nbsp;</span><span lang="en">Enjoy many of our session for this example and many more.&nbsp;</span></p>
<p>&nbsp;</p>
<p><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/09/office-graph-api-and-cortana-chapter-1-introduction-to-the-office-graph.aspx">Chapter 1: Introduction to the Graph Office</a></p>
<p><span lang="en">Chapter 2: How to make queries by code to the Office Graph?&nbsp;</span><span lang="en">(this article)</span></p>
<p lang="en"><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/10/office-graph-api-and-cortana-chapter-3-integration-with-cortana.aspx">Chapter 3: Integration with Cortana</a></p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Prerequisites</h2>
<p>&nbsp;</p>
<p><span>In our example, we will use three major technical components, which can be represented by the following schema:</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3554.06.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3554.06.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3554.06.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3554.06.png" alt="" border="0" /></a>&nbsp;</p>
<p align="left"><span>More details about these components:</span></p>
<ol>
<li><strong>ADAL&nbsp;(Active Directory Authentication Library)</strong>: <span lang="en">is a library to support authentication to the Azure Active Directory underlying Office 365.&nbsp;</span><span lang="en">ADAL will bring us the flexibility to be able to authenticate the user to securely, without storing the login / password for the user.&nbsp;</span><span lang="en">It will allow to rest on the oAuth authentication concepts, with levels specific and transparent access to your data.</span></li>
<li><strong>Office Graph API</strong>: <span>as detailed in the previous article, this is the entry point of the web services that will allow us to browse the social graph</span></li>
<li><strong>Windows Phone 8.1 Store Apps &amp; Cortana SDK</strong>:&nbsp;<span lang="en">allow us to easily develop an application with an interface written in XAML c#, easily compatible with Windows 8.1.&nbsp;</span><span lang="en">It will also allow to define and capture voice commands to query the Office Graph to the voice.</span></li>
</ol>
<p align="left"><span>To develop the App, we will need on our workstation :</span></p>
<ul>
<li>Visual Studio 2013</li>
<li>Visual Studio 2013 Update 4</li>
<li>Windows Phone 8.1 SDK</li>
</ul>
<p align="left"><span>These components are installed with most versions of Visual Studio, or in free express version at the following address:</span></p>
<p align="left"><a href="https://dev.windows.com/en-us/develop/download-phone-sdk">https://dev.windows.com/en-us/develop/download-phone-sdk</a></p>
<p align="left"><span lang="en">Last important point, we need a Windows Phone 8.1 or an emulator (included in the SDK) containing&nbsp;<strong>Windows Phone 8.1 with the Cortana feature</strong></span><span>.</span></p>
<p align="left">&nbsp;</p>
<h2 class="Heading2Numbered">Visual Studio project template</h2>
<p>&nbsp;</p>
<p class="Heading2Numbered"><span lang="en">To create a Windows Phone project 8.1 using Cortana and the Office Graph, you can choose the model of project of type Windows Phone Apps in the "Apps Store" section.&nbsp;</span><span lang="en">This type of application, appeared with Windows 8.1 and Windows Phone 8.1, allows us to create applications that aren't in Silverlight, well written in XAML:</span></p>
<p class="Heading2Numbered">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2234.07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2234.07.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2234.07.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2234.07.png" alt="" border="0" /></a></p>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Authentication with ADAL</h2>
<p>&nbsp;</p>
<p><span lang="en">To be able to perform queries on the Office Graph, we must be first authenticated.&nbsp;</span><span lang="en">To do this, we can retrieve an Azure Active Directory&nbsp;authentication token, that we can provide to our requests.</span></p>
<p><span lang="en">With Azure Active Directory, it is possible to easily create an application that can benefit from existing authentication systems to the platform.&nbsp;</span><span lang="en">For example, we will not have to store the login / password for the user: we will leave Azure to certify and support authentication.</span></p>
<p><span lang="en"><br /></span></p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Install ADAL in your Visual Studio solution</h2>
<p>&nbsp;</p>
<p><span lang="en">To simplify the task of the developer, Microsoft has created ADAL (Active Directory Authentication Library), which is a code library available on many platforms (.Net, Javascript, Cordova, Xamarin, etc.).&nbsp;</span><span lang="en">This library will allow to simply add an authentication process in our application.</span></p>
<p><span lang="en">To use ADAL, you need to first import the library into our solution.&nbsp;</span><span lang="en">The process is very simple thanks to the Visual Studio&nbsp;nuggets system&nbsp;.</span></p>
<p><span>The ADAL package is available at the following address:</span></p>
<p><a href="https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/">https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/</a></p>
<p><span>You can install it in your Visual Studio solution using the following command:</span></p>
<div>
<p><span style="font-family: 'courier new', courier;">PM&gt;Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.13.112191810</span></p>
</div>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Declare the Application in Azure</h2>
<p>&nbsp;</p>
<p><span lang="en">To be able to communicate with Azure Active Directory, we need to declare a new app in our Azure tenant.&nbsp;</span><span lang="en">Declare an application in Azure returns to save the information of our application and get in return a key called "ClientId" which will serve us within our application.</span></p>
<p><span>This can be done by several ways:</span></p>
<ul>
<li><span lang="en"><strong>the <strong>Azure&nbsp;</strong>management portal:</strong>&nbsp;</span><span lang="en">The full procedure to register an application is detailed on the following article</span>: <a href="http://azure.microsoft.com/en-us/documentation/articles/mobile-services-windows-store-dotnet-adal-sso-authentication/">http://azure.microsoft.com/en-us/documentation/articles/mobile-services-windows-store-dotnet-adal-sso-authentication/</a></li>
<li><span lang="en">Use&nbsp;<strong>the interface of Visual Studio to register the Application for you, thanks to the Office 365 SDK extension.</strong>&nbsp;</span><span lang="en">In fact, if you install this extension in Visual Studio, you can add to your App a "Connected&nbsp;Service" as Office 365, which comes with a Wizard for the automatic registration of Apps in Azure.</span><span lang="en">This procedure is described in detail in the following link:</span>&nbsp;<a href="http://msdn.microsoft.com/en-us/office/office365/howto/adding-service-to-your-Visual-Studio-project">http://msdn.microsoft.com/en-us/office/office365/howto/adding-service-to-your-Visual-Studio-project</a></li>
</ul>
<p><span lang="en">The 2nd technical is relatively simple.&nbsp;</span><span lang="en">To use it, you simply need to download the Office 365 extensions for Visual Studio 2013, from here:</span></p>
<p><a href="https://aka.ms/OfficeDevToolsForVS2013">https://aka.ms/OfficeDevToolsForVS2013</a></p>
<p><span>Once installed, simply right click on your Visual Studio solution, and then click on "Add", then "Connected Service":</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2678.09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2678.09.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2678.09.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2678.09.png" alt="" border="0" /></a>&nbsp;</p>
<p><span lang="en">You can then access the Services Manager that allows to manage Office 365 services.&nbsp;</span><span lang="en">You can login with your account Office 365 for save your App on your holding of company:</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4137.10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4137.10.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/4137.10.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/4137.10.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>With this wizard, you can select the levels of approval required to the application on the different &nbsp;Office 365&nbsp;resources. To read the Office Graph, we have at least read permissions on the 'My Files' and 'Sites '. Just click on the service name, and then select the right of reading:&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1157.11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1157.11.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/1157.11.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/364x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/1157.11.png" alt="" border="0" /></a>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3755.12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3755.12.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3755.12.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/364x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3755.12.png" alt="" border="0" /></a></p>
<p align="center">&nbsp;</p>
<p>When you post the window, Visual Studio will save your application in Azure, as you would via the &nbsp;Azure management portal. It will also insert the keys needed to your application (such as the ClientId or authentication authority) in App settings. In the case of a Windows Phone 8.1 App Store, the parameters are automatically inserted in the App.xaml file, as a resource of the application, as for example:</p>
<p>&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #007700;">&lt;Application.Resources&gt;</span>
    <span style="color: #007700;">&lt;x:String</span> <span style="color: #0000cc;">x:Key=</span><span style="background-color: #fff0f0;">"ida:ClientID"</span><span style="color: #007700;">&gt;</span>b53a731a-2638-49a9-8122-1bc9ea233995<span style="color: #007700;">&lt;/x:String&gt;</span>
    <span style="color: #007700;">&lt;x:String</span> <span style="color: #0000cc;">x:Key=</span><span style="background-color: #fff0f0;">"ida:AuthorizationUri"</span><span style="color: #007700;">&gt;</span>https://login.windows.net<span style="color: #007700;">&lt;/x:String&gt;</span>
...
<span style="color: #007700;">&lt;/Application.Resources&gt;</span>
</pre>
</div>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered">Manage the connection in c# .net</h2>
<p>&nbsp;</p>
<p><span>Now that we have seen how to register the App, we are ready to implement the authentication ADAL system in our .Net classes.</span></p>
<p><span>To use ADAL in our classes, we need to include the following namespaces:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Microsoft.IdentityModel.Clients.ActiveDirectory</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Windows.Security.Authentication.Web</span>;
</pre>
</div>
<p align="left"><span lang="en">To add support for authentication to a page, we must prepare this page to manage the recovery process.</span><span lang="en">Following authentication with Azure, we will have a return to our application that can continue treatment.&nbsp;</span><span lang="en">To simply implement this principle, we can create the <span style="font-family: 'courier new', courier;">IWebAuthenticationContinuable</span> interface, and it will suffice to inherit our page of this interface:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">/// &lt;summary&gt;</span>
<span style="color: #888888;">/// Implement this interface if your page invokes the web authentication</span>
<span style="color: #888888;">/// broker</span>
<span style="color: #888888;">/// &lt;/summary&gt;</span>
<span style="color: #008800; font-weight: bold;">interface</span> IWebAuthenticationContinuable
{
    <span style="color: #888888;">/// &lt;summary&gt;</span>
    <span style="color: #888888;">/// This method is invoked when the web authentication broker returns</span>
    <span style="color: #888888;">/// with the authentication result</span>
    <span style="color: #888888;">/// &lt;/summary&gt;</span>
    <span style="color: #888888;">/// &lt;param name="args"&gt;Activated event args object that contains returned authentication token&lt;/param&gt;</span>
    <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">ContinueWebAuthentication</span>(WebAuthenticationBrokerContinuationEventArgs args);
}
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">sealed</span> <span style="color: #008800; font-weight: bold;">partial</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">MainPage</span> : Page, IWebAuthenticationContinuable 
{
<span style="color: #ff0000; background-color: #ffaaaa;">&hellip;</span>
</pre>
</div>
<p align="left"><span>Within our page, authentication will be supported through the</span> <a href="http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.authenticationcontext.aspx">AuthenticationContext</a>&nbsp;<span>class, which allows you to create an authentication context to an authority, and to negotiate the tokens&nbsp;acquisition.</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">AuthenticationContext ac = <span style="color: #008800; font-weight: bold;">null</span>;
</pre>
</div>
<p align="left"><span lang="en">To create the context, we will need to provide to ADAL the redirection address for our application.&nbsp;</span><span lang="en">This address is a specific address, but can be easily acquired by the method</span>&nbsp;<a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.web.webauthenticationbroker.getcurrentapplicationcallbackuri">GetCurrentApplicationCallbackUri</a> of the&nbsp;<a href="http://msdn.microsoft.com/library/windows/apps/br227025">WebAuthenticationBroker</a>&nbsp;<span>&nbsp;class, like this:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">Uri RedirectUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();
</pre>
</div>
<p align="left"><span lang="en">We also provide authentication authority.&nbsp;</span><span lang="en">With Office 365 and Azure Active Directory, the address is of this kind :&nbsp;</span> &laquo;&nbsp;https://login.windows.net/&lt;yourtenantdomain&gt;&nbsp;&raquo;&nbsp;</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">string</span> Authority = <span style="background-color: #fff0f0;">"https://login.windows.net/yourtenantdomain.com"</span>;
</pre>
</div>
<p align="left"><span>If you use the Office 365 SDK to reference your application, you can retrieve the key from resource with the following syntax:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">string</span> Authority = App.Current.Resources[<span style="background-color: #fff0f0;">"ida:AuthorizationUri"</span>].ToString() + <span style="background-color: #fff0f0;">"/ yourtenantdomain.com "</span>;
</pre>
</div>
<p align="left"><span lang="en">The last parameter to provide for authentication is client key of your application that we generated in the previous section.&nbsp;</span><span lang="en">This key is in the form of a GUID:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">string</span> ClientID = <span style="background-color: #fff0f0;">"[your-app-id as for example &lsquo;b6ea739a-2608-4919-8123-12asd233b65&rsquo;"</span>;
</pre>
</div>
<p align="left"><span>If you use the Office 365 SDK to reference your application, you can retrieve the client ID from the resources key&nbsp;with the following syntax:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"> <span style="color: #333399; font-weight: bold;">string</span> ClientID = App.Current.Resources[<span style="background-color: #fff0f0;">"ida:ClientID"</span>].ToString();
</pre>
</div>
<p align="left"><span>To initialize the context, you must use the <span style="font-family: 'courier new', courier;">CreateAsync</span> method on the page <span style="font-family: 'courier new', courier;">OnNavigatedTo</span> event:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">/// &lt;summary&gt;</span>
<span style="color: #888888;">/// Invoked when this page is about to be displayed in a Frame.</span>
<span style="color: #888888;">/// &lt;/summary&gt;</span>
<span style="color: #888888;">/// &lt;param name="e"&gt;Event data that describes how this page was reached.</span>
<span style="color: #888888;">/// This parameter is typically used to configure the page.&lt;/param&gt;</span>
<span style="color: #008800; font-weight: bold;">protected</span> <span style="color: #008800; font-weight: bold;">override</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">OnNavigatedTo</span>(NavigationEventArgs e)
{
      ac = AuthenticationContext.CreateAsync(Authority).GetResults();
}
</pre>
</div>
<p align="left"><span lang="en">We also need to implement the method allowing the resumption of activity following the redirect.&nbsp;</span><span lang="en">To do this, we add the following code:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">async</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">ContinueWebAuthentication</span>(Windows.ApplicationModel.Activation.WebAuthenticationBrokerContinuationEventArgs args)
{
      <span style="color: #008800; font-weight: bold;">await</span> ac.ContinueAcquireTokenAsync(args); 
}
</pre>
</div>
<p><span lang="en">Now create the <span style="font-family: 'courier new', courier;">Login</span> method that will be called when the user clicks on the button "Login" from our interface.</span><span lang="en">The Login method will first try to acquire the token for authentication of "silently".&nbsp;</span><span lang="en">This means that we try to authenticate us without calling the interface connection.&nbsp;</span><span lang="en">If the user is already logged in, we will have its cached token and may give access directly.&nbsp;</span><span lang="en">This is possible through the call to the method <span style="font-family: 'courier new', courier;">AcquireTokenSilentAsync</span> of the <span style="font-family: 'courier new', courier;">AuthenticationContext</span> object.</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">async</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Login</span>()
{
      AuthenticationResult result = <span style="color: #008800; font-weight: bold;">await</span> ac.AcquireTokenSilentAsync(Resource, ClientID);
      <span style="color: #008800; font-weight: bold;">if</span> (result != <span style="color: #008800; font-weight: bold;">null</span> &amp;&amp; result.Status == AuthenticationStatus.Success)
          LoadApp(result);
      <span style="color: #008800; font-weight: bold;">else</span>
          ac.AcquireTokenAndContinue(Resource, ClientID, RedirectUri, LoadApp);
}

<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">LoadApp</span>(AuthenticationResult ar)
{
     <span style="color: #333399; font-weight: bold;">var</span> AuthToken = ar.AccessToken;
     <span style="color: #008800; font-weight: bold;">this</span>.Frame.Navigate(<span style="color: #008800; font-weight: bold;">typeof</span>(CortanaPage), AuthToken);
}
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">If the authentication result is not successful, we will call the <span style="font-family: 'courier new', courier;">AcquireTokenAndContinue</span> method, which will redirect the user to the graphical interface for authentication of its holding.&nbsp;</span><span lang="en">The experience of connection will take place in 2 to 3 times: before the login, enter the password (separate from the login if the tenant uses a redirect SSO), acceptance of the terms of use, then redirection to our application:</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8080.13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8080.13.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/8080.13.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/8080.13.png" alt="" border="0" /></a></p>
<p><span lang="en">When the identification is completed, the result of authentication (via the <span style="font-family: 'courier new', courier;">AuthenticationResult</span> class) contains the token authentication via the <span style="font-family: 'courier new', courier;">AccessToken</span> property.&nbsp;</span><span lang="en">We can use token in our REST of the office Graph queries.</span>&nbsp;</p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">How to query the Office Graph in C# and XML</h2>
<p>&nbsp;</p>
<p lang="en" align="left">Now that we have recovered our authentication token, we can generate http query on the Office Graph.</p>
<p lang="en" align="left">To do this, add the following namespaces:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Net.Http</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Net.Http.Headers</span>;
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">We will use the <span style="font-family: 'courier new', courier;">HttpClient</span> class to perform queries.&nbsp;</span><span lang="en">Take a few simple examples.</span></p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Example 1: find the actor ID of your manager</h2>
<p>&nbsp;</p>
<p><span lang="en">To find items from our manager, we need first to find his Actor ID. We can make the following query by providing the authentication token.&nbsp;</span><span lang="en">After reading the result, we can easily get a list of results and retrieve column '<span style="font-family: 'courier new', courier;">DocId</span>' (which is the Actor ID in Office Graph):</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;">String query = <span style="background-color: #fff0f0;">"https://&lt;your-tenant-url&gt;/_api/search/ query?Querytext=%27*%27&amp;Properties=%27GraphQuery:ACTOR(ME\\,action\\:1013)%27&amp;SourceId=%27b09a7990-05ea-4af9-81ef-edfab16c4e31%27&amp;SelectProperties=%27UserName,DocId%27"</span>;
HttpClient httpClient = <span style="color: #008800; font-weight: bold;">new</span> HttpClient();
httpClient.DefaultRequestHeaders.Authorization = <span style="color: #008800; font-weight: bold;">new</span> AuthenticationHeaderValue(<span style="background-color: #fff0f0;">"Bearer"</span>, AuthToken);
httpClient.DefaultRequestHeaders.Accept.Add(<span style="color: #008800; font-weight: bold;">new</span> MediaTypeWithQualityHeaderValue(<span style="background-color: #fff0f0;">"application/atom+xml"</span>));
HttpResponseMessage response = <span style="color: #008800; font-weight: bold;">await</span> httpClient.GetAsync(query);
<span style="color: #008800; font-weight: bold;">if</span> (response.IsSuccessStatusCode)
{
     Stream resultStream = response.Content.ReadAsStreamAsync().Result;

      <span style="color: #888888;">// process response..</span>
      XDocument oDataXML = XDocument.Load(resultStream, LoadOptions.None);
      XNamespace atom = <span style="background-color: #fff0f0;">"http://www.w3.org/2005/Atom"</span>;
      XNamespace d = <span style="background-color: #fff0f0;">"http://schemas.microsoft.com/ado/2007/08/dataservices"</span>;
      XNamespace m = <span style="background-color: #fff0f0;">"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"</span>;

      List&lt;XElement&gt; items = oDataXML.Descendants(d + <span style="background-color: #fff0f0;">"query"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"PrimaryQueryResult"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"RelevantResults"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"Table"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"Rows"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"element"</span>)
                                             .ToList();
      <span style="color: #333399; font-weight: bold;">var</span> searchResults = <span style="color: #008800; font-weight: bold;">from</span> item <span style="color: #008800; font-weight: bold;">in</span> items
         <span style="color: #008800; font-weight: bold;">select</span> <span style="color: #008800; font-weight: bold;">new</span>
         {
         DocId = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"DocId"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value
         };

}
</pre>
</div>
<p>&nbsp;</p>
<p><span>In this sample, <span style="font-family: 'courier new', courier;">searchResults</span> contains the list of the players returned by the query.</span></p>
<p>&nbsp;</p>
<h2 class="Heading2Numbered" lang="en">Example 2: find popular elements around you (as the Delve home page)</h2>
<p>&nbsp;</p>
<p><span lang="en">Are now trying to reassemble all the popular elements around us, as is the case on the homepage of Delve.&nbsp;</span><span lang="en">The method is identical to the previous example, but this time we will operate the properties related to documents such as the title, the way, the extension, the parent site, etc.</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">string</span> query = <span style="background-color: #fff0f0;">"https://&lt;your-tenant-url&gt;/_api/search/query?QueryTemplate=%27((NOT%20HideFromDelve%3ATrue)%20AND%20(FileExtension%3Adoc%20OR%20FileExtension%3Adocx%20OR%20FileExtension%3Appt%20OR%20FileExtension%3Apptx%20OR%20FileExtension%3Axls%20OR%20FileExtension%3Axlsx%20OR%20FileExtension%3Apdf%20OR%20ContentTypeId%3A0x010100F3754F12A9B6490D9622A01FE9D8F012*%20OR%20contentclass%3AExternalLink))%27&amp;Properties=%27TitleBasedSummaries%3Atrue,IncludeExternalContent%3Atrue,GraphQuery%3Aand(actor(me%5C%2Caction%5C%3A1021)%5C%2Cactor(me%5C%2Cor(action%5C%3A1021%5C%2Caction%5C%3A1036%5C%2Caction%5C%3A1037%5C%2Caction%5C%3A1039%5C%2Caction%5C%3A1052%5C%2Caction%5C%3A1048))),GraphRankingModel%3Aaction%5C%3A1021%5C%2Cweight%5C%3A1%5C%2CedgeFunc%5C%3Aweight%5C%2CmergeFunc%5C%3Amax%27&amp;SelectProperties=%27Author,AuthorOwsUser,ContentClass,ContentTypeId,DefaultEncodingURL,DocId,DocumentPreviewMetadata,Edges,EditorOwsUser,FileExtension,FileType,HitHighlightedProperties,HitHighlightedSummary,LastModifiedTime,LikeCountLifetime,ListID,ListItemID,MediaDuration,OriginalPath,Path,PictureThumbnailURL,PrivacyIndicator,Rank,SPWebUrl,SecondaryFileExtension,ServerRedirectedPreviewURL,ServerRedirectedURL,SitePath,SiteTitle,Title,ViewCountLifetime,siteID,uniqueID,webID%27&amp;RankingModelId=%270c77ded8-c3ef-466d-929d-905670ea1d72%27&amp;RowLimit=36&amp;ClientType=%27PulseWeb%27&amp;BypassResultTypes=true&amp;EnableQueryRules=false&amp;ProcessBestBets=false&amp;ProcessPersonalFavorites=false"</span>;
HttpClient httpClient = <span style="color: #008800; font-weight: bold;">new</span> HttpClient();
httpClient.DefaultRequestHeaders.Authorization = <span style="color: #008800; font-weight: bold;">new</span> AuthenticationHeaderValue(<span style="background-color: #fff0f0;">"Bearer"</span>, AuthToken);
httpClient.DefaultRequestHeaders.Accept.Add(<span style="color: #008800; font-weight: bold;">new</span> MediaTypeWithQualityHeaderValue(<span style="background-color: #fff0f0;">"application/atom+xml"</span>));
HttpResponseMessage response = <span style="color: #008800; font-weight: bold;">await</span> httpClient.GetAsync(query);
<span style="color: #008800; font-weight: bold;">if</span> (response.IsSuccessStatusCode)
{
     Stream resultStream = response.Content.ReadAsStreamAsync().Result;

      <span style="color: #888888;">// process response..</span>
      XDocument oDataXML = XDocument.Load(resultStream, LoadOptions.None);
      XNamespace atom = <span style="background-color: #fff0f0;">"http://www.w3.org/2005/Atom"</span>;
      XNamespace d = <span style="background-color: #fff0f0;">"http://schemas.microsoft.com/ado/2007/08/dataservices"</span>;
      XNamespace m = <span style="background-color: #fff0f0;">"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"</span>;

      List&lt;XElement&gt; items = oDataXML.Descendants(d + <span style="background-color: #fff0f0;">"query"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"PrimaryQueryResult"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"RelevantResults"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"Table"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"Rows"</span>)
                                             .Elements(d + <span style="background-color: #fff0f0;">"element"</span>)
                                             .ToList();

            <span style="color: #333399; font-weight: bold;">var</span> graphResults = <span style="color: #008800; font-weight: bold;">from</span> item <span style="color: #008800; font-weight: bold;">in</span> items
    <span style="color: #008800; font-weight: bold;">select</span> <span style="color: #008800; font-weight: bold;">new</span> 
    {
        Title = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"Title"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        Author = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"Author"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        HitHighlightedSummary = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"HitHighlightedSummary"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        Path = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"Path"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        Ext = <span style="background-color: #fff0f0;">"Assets/Ext/"</span> + item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"SecondaryFileExtension"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value + <span style="background-color: #fff0f0;">".png"</span>,
        ViewCount = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"ViewCountLifetime"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        ServerRedirectedURL = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"ServerRedirectedURL"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        ServerRedirectedPreviewURL = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"ServerRedirectedPreviewURL"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        SiteTitle = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"SiteTitle"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        UniqueID = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"uniqueID"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        SiteID = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"siteID"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        SiteUrl = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"SPWebUrl"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value,
        WebID = item.Element(d + <span style="background-color: #fff0f0;">"Cells"</span>).Descendants(d + <span style="background-color: #fff0f0;">"Key"</span>).First(a =&gt; a.Value == <span style="background-color: #fff0f0;">"webID"</span>).Parent.Element(d + <span style="background-color: #fff0f0;">"Value"</span>).Value
    };
}
</pre>
</div>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered">How to get the documents thumbnails</h2>
<p>&nbsp;</p>
<p><span lang="en">In the interface of Delve, most displayed documents have thumbnails with a visual overview of the element.&nbsp;</span><span lang="en">Develop such a feature 'from' scratch could be tedious, but once again the Office Graph API just help us.</span></p>
<p><span lang="en">To generate a PNG thumbnail of a document &nbsp;you can call an address that will generate us a picture (when possible).&nbsp;</span><span lang="en">We can call the following address with the parameters indicating the file and context information (<span style="font-family: 'courier new', courier;">UniqueID</span>, <span style="font-family: 'courier new', courier;">WebID</span> and <span style="font-family: 'courier new', courier;">SiteID</span>):</span></p>
<div>
<p align="left"><a href="https://&amp;lt;your-tenant-url&amp;gt;/_layouts/15/getpreview.ashx?guidFile=&amp;lt;UniqueID&amp;gt;&amp;amp;guidSite=&amp;lt;SiteID&amp;gt;&amp;amp;guidWeb=&amp;lt;WebID&amp;gt;&amp;amp;metadatatoken=230x241x2&amp;amp;ClientType=DelveWeb&amp;amp;size=small&quot;">https://&lt;your-tenant-url&gt;/_layouts/15/getpreview.ashx?guidFile=&lt;UniqueID&gt;&amp;guidSite=&lt;SiteID&gt;&amp;guidWeb=&lt;WebID&gt;&amp;metadatatoken=230x241x2&amp;ClientType=DelveWeb&amp;size=small"</a></p>
<p><span>From a Windows Phone application, we can easily make a HTTP request to download the image, there still providing the authentication token:</span>&nbsp;&nbsp;</p>
</div>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">var</span> httpClient = <span style="color: #008800; font-weight: bold;">new</span> HttpClient();
httpClient.DefaultRequestHeaders.Authorization = <span style="color: #008800; font-weight: bold;">new</span> AuthenticationHeaderValue(<span style="background-color: #fff0f0;">"Bearer"</span>, AuthToken);
<span style="color: #333399; font-weight: bold;">var</span> contentBytes = <span style="color: #008800; font-weight: bold;">await</span> httpClient.GetByteArrayAsync(DocumentPreviewImage);
</pre>
</div>
<p><span>We could then display this image in a control of type Image by writing the contents of the image in an object of type BitmapImage:</span></p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #333399; font-weight: bold;">var</span> ims = <span style="color: #008800; font-weight: bold;">new</span> InMemoryRandomAccessStream();
<span style="color: #333399; font-weight: bold;">var</span> dataWriter = <span style="color: #008800; font-weight: bold;">new</span> DataWriter(ims);
dataWriter.WriteBytes(contentBytes);
<span style="color: #008800; font-weight: bold;">await</span> dataWriter.StoreAsync();
ims.Seek(<span style="color: #6600ee; font-weight: bold;">0</span>);
BitmapImage bitmap = <span style="color: #008800; font-weight: bold;">new</span> BitmapImage();
bitmap.SetSource(ims);
</pre>
</div>
<p class="Heading2Numbered">&nbsp;</p>
<h2 class="Heading2Numbered">Display the graph results in a ListBox</h2>
<p>&nbsp;</p>
<p lang="en">Now that we have seen how to retrieve the results of the Office Graph, as well as the miniatures of the documents, we can display them on a XAML page.</p>
<p lang="en">For this, we used in this example a ListBox to display the results as a list, one below the other.</p>
<p lang="en">To display the fields of the items returned by the Office Graph, we can for example use the command <span style="font-family: 'courier new', courier;">{{Binding Title}}</span> to automatically display the corresponding property of the object.</p>
<p lang="en">We can also use the control <span style="font-family: 'courier new', courier;">MenuFlyout</span> to display a shortcut menu on each item select long.</p>
<p lang="en">The code of our XAML view could be formed as follows:</p>
<!-- HTML generated using hilite.me -->
<div style="background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;">
<pre style="margin: 0; line-height: 125%;"><span style="color: #888888;">&lt;!--TODO: Content should be placed within the following grid--&gt;</span>
<span style="color: #007700;">&lt;Grid</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"1"</span> <span style="color: #0000cc;">x:Name=</span><span style="background-color: #fff0f0;">"ContentRoot"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"19,9.5,19,0"</span><span style="color: #007700;">&gt;</span>
    <span style="color: #007700;">&lt;Grid.Resources&gt;</span>
        <span style="color: #007700;">&lt;DataTemplate</span> <span style="color: #0000cc;">x:Name=</span><span style="background-color: #fff0f0;">"resultListTemplate"</span><span style="color: #007700;">&gt;</span>
            <span style="color: #007700;">&lt;StackPanel</span> <span style="color: #0000cc;">Holding=</span><span style="background-color: #fff0f0;">"StackPanel_Holding"</span> <span style="color: #007700;">&gt;</span>
                <span style="color: #007700;">&lt;FlyoutBase.AttachedFlyout&gt;</span>
                    <span style="color: #007700;">&lt;MenuFlyout&gt;</span>
                        <span style="color: #007700;">&lt;MenuFlyoutItem</span> <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"Ouvrir"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;MenuFlyoutItem</span> <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"Ouvrir le site"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;MenuFlyoutItem</span> <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"Envoyer par email"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;MenuFlyoutItem</span> <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"Partager sur Yammer"</span> <span style="color: #007700;">/&gt;</span>
                    <span style="color: #007700;">&lt;/MenuFlyout&gt;</span>
                <span style="color: #007700;">&lt;/FlyoutBase.AttachedFlyout&gt;</span>
                <span style="color: #007700;">&lt;Grid</span> <span style="color: #0000cc;">Loaded=</span><span style="background-color: #fff0f0;">"Grid_Loaded"</span> <span style="color: #0000cc;">Background=</span><span style="background-color: #fff0f0;">"#FFFFFEFE"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"0,0,0,10"</span><span style="color: #007700;">&gt;</span>

                    <span style="color: #007700;">&lt;Grid.RowDefinitions&gt;</span>
                        <span style="color: #007700;">&lt;RowDefinition</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;RowDefinition</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;RowDefinition</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;RowDefinition</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;RowDefinition</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #007700;">/&gt;</span>
                    <span style="color: #007700;">&lt;/Grid.RowDefinitions&gt;</span>

                    <span style="color: #007700;">&lt;Grid.ColumnDefinitions&gt;</span>
                        <span style="color: #007700;">&lt;ColumnDefinition</span> <span style="color: #0000cc;">Width=</span><span style="background-color: #fff0f0;">"*"</span> <span style="color: #007700;">/&gt;</span>
                    <span style="color: #007700;">&lt;/Grid.ColumnDefinitions&gt;</span>

                    <span style="color: #007700;">&lt;TextBlock</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"0"</span> <span style="color: #0000cc;">Grid.Column=</span><span style="background-color: #fff0f0;">"0"</span> <span style="color: #0000cc;">TextWrapping=</span><span style="background-color: #fff0f0;">"Wrap"</span>
                                    <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"{Binding Title}"</span> 
                                    <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Black"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"30"</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"5"</span>  <span style="color: #007700;">/&gt;</span>

                    <span style="color: #007700;">&lt;Image</span>  <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"1"</span> <span style="color: #0000cc;">Grid.Column=</span><span style="background-color: #fff0f0;">"0"</span>
                                    <span style="color: #0000cc;">Stretch=</span><span style="background-color: #fff0f0;">"UniformToFill"</span> 
                                    <span style="color: #0000cc;">Source=</span><span style="background-color: #fff0f0;">"{Binding DocumentPreviewImage}"</span> <span style="color: #0000cc;">Loaded=</span><span style="background-color: #fff0f0;">"Image_Loaded"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"5"</span> <span style="color: #007700;">/&gt;</span>

                    <span style="color: #007700;">&lt;TextBlock</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"2"</span> <span style="color: #0000cc;">Grid.Column=</span><span style="background-color: #fff0f0;">"0"</span> <span style="color: #0000cc;">TextWrapping=</span><span style="background-color: #fff0f0;">"Wrap"</span>
                                    <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"{Binding Author}"</span> 
                                    <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Gray"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"20"</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"5"</span><span style="color: #007700;">/&gt;</span>

                    <span style="color: #007700;">&lt;StackPanel</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"3"</span> <span style="color: #0000cc;">Grid.Column=</span><span style="background-color: #fff0f0;">"0"</span> <span style="color: #0000cc;">Orientation=</span><span style="background-color: #fff0f0;">"Horizontal"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"5"</span> <span style="color: #0000cc;">HorizontalAlignment=</span><span style="background-color: #fff0f0;">"Right"</span><span style="color: #007700;">&gt;</span>
                        <span style="color: #007700;">&lt;TextBlock</span>
                                    <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"{Binding ViewCount}"</span>
                                    <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Gray"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"20"</span> <span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;TextBlock</span> <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">" vues"</span> <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Gray"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"20"</span><span style="color: #007700;">&gt;&lt;/TextBlock&gt;</span>

                    <span style="color: #007700;">&lt;/StackPanel&gt;</span>

                    <span style="color: #007700;">&lt;StackPanel</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"4"</span> <span style="color: #0000cc;">Grid.Column=</span><span style="background-color: #fff0f0;">"0"</span> <span style="color: #0000cc;">Orientation=</span><span style="background-color: #fff0f0;">"Horizontal"</span> <span style="color: #0000cc;">Margin=</span><span style="background-color: #fff0f0;">"5"</span><span style="color: #007700;">&gt;</span>
                        <span style="color: #007700;">&lt;Image</span> 
                                    <span style="color: #0000cc;">Width=</span><span style="background-color: #fff0f0;">"32"</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"32"</span> <span style="color: #0000cc;">Stretch=</span><span style="background-color: #fff0f0;">"UniformToFill"</span> 
                                    <span style="color: #0000cc;">Source=</span><span style="background-color: #fff0f0;">"{Binding Ext}"</span><span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;TextBlock</span> <span style="color: #0000cc;">TextWrapping=</span><span style="background-color: #fff0f0;">"Wrap"</span>
                                    <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">" - "</span> 
                                    <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Gray"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"20"</span> <span style="color: #0000cc;">Height=</span><span style="background-color: #fff0f0;">"Auto"</span><span style="color: #007700;">/&gt;</span>
                        <span style="color: #007700;">&lt;TextBlock</span>
                                    <span style="color: #0000cc;">Text=</span><span style="background-color: #fff0f0;">"{Binding SiteTitle}"</span>
                                    <span style="color: #0000cc;">Foreground=</span><span style="background-color: #fff0f0;">"Blue"</span> <span style="color: #0000cc;">FontSize=</span><span style="background-color: #fff0f0;">"20"</span> <span style="color: #007700;">/&gt;</span>

                    <span style="color: #007700;">&lt;/StackPanel&gt;</span>

                <span style="color: #007700;">&lt;/Grid&gt;</span>
            <span style="color: #007700;">&lt;/StackPanel&gt;</span>

        <span style="color: #007700;">&lt;/DataTemplate&gt;</span>
    <span style="color: #007700;">&lt;/Grid.Resources&gt;</span>

    <span style="color: #888888;">&lt;!-- actual list content goes here --&gt;</span>
    <span style="color: #007700;">&lt;ListBox</span> <span style="color: #0000cc;">Name=</span><span style="background-color: #fff0f0;">"ResultsList"</span> <span style="color: #0000cc;">Grid.Row=</span><span style="background-color: #fff0f0;">"0"</span> 
                    <span style="color: #0000cc;">ItemTemplate=</span><span style="background-color: #fff0f0;">"{StaticResource resultListTemplate}"</span> 
                    <span style="color: #0000cc;">ItemsSource=</span><span style="background-color: #fff0f0;">"{Binding}"</span> <span style="color: #0000cc;">Background=</span><span style="background-color: #fff0f0;">"#FF0086D8"</span> <span style="color: #0000cc;">FontFamily=</span><span style="background-color: #fff0f0;">"Global User Interface"</span><span style="color: #007700;">&gt;</span>
        <span style="color: #007700;">&lt;ListBox.ItemContainerStyle&gt;</span>
            <span style="color: #007700;">&lt;Style</span> <span style="color: #0000cc;">TargetType=</span><span style="background-color: #fff0f0;">"ListBoxItem"</span><span style="color: #007700;">&gt;</span>
                <span style="color: #007700;">&lt;Setter</span> <span style="color: #0000cc;">Property=</span><span style="background-color: #fff0f0;">"HorizontalContentAlignment"</span> <span style="color: #0000cc;">Value=</span><span style="background-color: #fff0f0;">"Stretch"</span><span style="color: #007700;">/&gt;</span>
            <span style="color: #007700;">&lt;/Style&gt;</span>
        <span style="color: #007700;">&lt;/ListBox.ItemContainerStyle&gt;</span>
    <span style="color: #007700;">&lt;/ListBox&gt;</span>

<span style="color: #007700;">&lt;/Grid&gt;</span>
</pre>
</div>
<p>&nbsp;</p>
<p><span lang="en">With this sample code, we are able to display the elements as vignettes like the interface of Delve.&nbsp;</span><span lang="en">When the user long clicks an item context menu will allow to perform certain actions on the element, as shown in the following screenshots:</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2816.14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2816.14.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/2816.14.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/2816.14.png" alt="" border="0" /></a></p>
<p><span>If we click on the menu items, you can:</span></p>
<ul>
<li>O<span>pen the document in web mode (Internet Explorer opened to the page corresponding to the address of the document with Office Online)</span></li>
<li>O<span>pen with Internet Explorer the site containing the document</span></li>
<li>C<span>reate a mail to be sent containing the address of the document to share</span></li>
<li>S<span>hare the link of the document within a Yammer group</span></li>
</ul>
<p><span lang="en">To share content in Yammer, the operation is actually easier than others.&nbsp;</span><span lang="en">In fact, Yammer has an address dedicated to applications for recommending content.</span></p>
<p><span>To display a Yammer sharing window, it is just that we open a page with the address formatted as follows:</span></p>
<div>
<p><a href="https://www.yammer.com/messages/new/?status=%3curl-encod%C3%A9e-du-lien-a-partager">https://www.yammer.com/messages/new/?status=&lt;url-encod&eacute;e-du-lien-a-partager</a>&gt;</p>
</div>
<p><span>For example, the address bing.com sharing will display us the sharing window shown below, allowing us to share the link with groups and colleagues:</span></p>
<div>
<p><a href="https://www.yammer.com/messages/new/?status=http%3A%2F%2Fwww.bing.com%2F">https://www.yammer.com/messages/new/?status=http%3A%2F%2Fwww.bing.com%2F</a></p>
</div>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3823.15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3823.15.png"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/34/3823.15.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/300x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-34/3823.15.png" alt="" border="0" /></a>&nbsp;</p>
<p>&nbsp;</p>
<p><span lang="en">We have seen in this chapter how to query the Office Graph in c# .net within a Windows Phone 8.1 application.</span><span lang="en">We are now able to perform queries to display elements of the graph. We are also able to get the essential properties of the documents as well as a thumbnail picture.&nbsp;</span><span lang="en">We just so more to 'connect' our calls to the Office Graph with voice commands of Cortana!</span></p>
<p lang="en">Go to the 3rd and final chapter of this article to read more:</p>
<p><a href="http://blogs.msdn.com/b/ocarpen/archive/2015/01/10/office-graph-api-and-cortana-chapter-3-integration-with-cortana.aspx" target="_top">Chapter 3: Integration with Cortana</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/58/55/20/MyOfficeGraph-20150113.zip" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-58-55-20/MyOfficeGraph_2D00_20150113.zip">MyOfficeGraph-20150113.zip</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>