Le navigateur de l’organisation n’est pas restituer pour Windows utilisateurs de revendications

Symptômes

Lorsque vous utilisez le navigateur d’organisation sur Windows sites activés pour les revendications, le partie Web Ne restituera aucune information. Le même élément Web Part restituera correctement les utilisateurs avec différents types d’authentification basée sur les revendications.

Cause

Les informations de l’organisation sont tirées de la base de données de profils de l’application de service de profil utilisateur (UPSA). Les informations requises sont stockées dans la table UserProfile_Full tableau.

Les utilisateurs Active Directory (ajoutés manuellement ou synchronisés automatiquement) sont stockés au format BASE de données de profils UPSA avec NETBIOS\LogonName (Ex.: CONTOSO\TestUser1).

Toutefois, lorsque vous parcourez un site de revendications, le contexte utilisateur utilise le format Claims NTName. (Ex.: i:0#.w| Contoso\TestUser1)

Le navigateur de l’organisation recherche ensuite une base de données pour l’utilisateur « i'0#.w| Contoso\TestUser1' qui n’est pas disponible dans la base de données, car les informations utilisateur seront stockées avec le nom NTName « CONTOSO\TestUser1 ».

Le problème ne se produit pas avec un autre type d’authentification basée sur les revendications, car la base de données de profils contient le format d’attribution de noms correct pour eux.

Résolution

Le contrôle De Web Part Navigateur d’organisation est rendu sur la page par la fonction JavaScript CreateHierarchyChartControl. Cette fonction ne connaît pas le fait que la base de données de profils UPSA stocke les utilisateurs Windows Claims avec un format d’attribution de noms différent. Pour contourner ce besoin, l’extrait de code ci-dessous doit être entré dans la source du site juste après le volet Web Du navigateur de l’organisation.

<script type="text/javascript">  
 function CreateHierarchyChartControl(parentId, profileId, type, persistControlId) {  
  var i = profileId.indexOf("|");  
  var claimsmode = profileId.substr(i-1,1);  
  if((i >=0 ) & (claimsmode=="w"))  
  {  
   profileId = profileId.substr(i+1,profileId.length-i-1);  
   var initParam = profileId + ',' + type + ',' + persistControlId;  
   var host = document.getElementById(parentId);  
   host.setAttribute('width', '100%');  
   host.setAttribute('height', '100%');  
   Silverlight.createObject('/_layouts/ClientBin/hierarchychart.xap',  
    host,  
    'ProfileBrowserSilverlightControl',  
    {  
     top: '30',  
     width: '100%',  
     height: '100%',  
     version: '2.0',  
     isWindowless: 'true',  
     enableHtmlAccess: 'true'  
    },  
    {  
     onLoad: OnHierarchyChartLoaded  
    },  
     initParam,  
     null);  
    }  
  }  
</script>  

Pour SharePoint Server 2016

  <script type="text/javascript">
            function CreateHierarchyChartControl(parentId, profileId, type, persistControlId, flowDirection, silverLightControlId){
            var i = profileId.indexOf("|");
            var claimsmode = profileId.substr(i - 1, 1);
            if ((i >= 0) & (claimsmode == "w")) {
                profileId = profileId.substr(i + 1, profileId.length - i - 1);
                var initParam = profileId + ',' + type + ',' + persistControlId + ',' + flowDirection + ',' + silverLightControlId;
                var host = document.getElementById(parentId);
                host.setAttribute('width', '100%');
                host.setAttribute('height', '100%');
                Silverlight.createObject('/_layouts/ClientBin/hierarchychart.xap',
                 host,
                 'ProfileBrowserSilverlightControl',
                 {
                     top: '30',
                     width: '100%',
                     height: '100%',
                     version: '2.0',
                     isWindowless: 'true',
                     enableHtmlAccess: 'true'
                 },
                 {
                     onLoad: OnHierarchyChartLoaded
                 },
                  initParam,
                  null);
            }
            }            

        //For html view
            SP.UI.Portal.SimpleProfileBrowser.prototype.$35_0 = function(b, c, d) {
            var i = b.indexOf("|");
            b = b.substr(i + 1, b.length - i - 1);
            var a = $get(c);
            if (a) {
                a.innerHTML = "<DIV></DIV><DIV></DIV><DIV></DIV>";
                this.$m_0 = a.firstChild;
                this.$1C_0 = this.$m_0.nextSibling;
                this.$1a_0 = this.$1C_0.nextSibling
            }
            if (d) {
                this.$m_0.innerHTML = String.format(SpsClient.ScriptResources.silverlight_Install_Message, "<a href='javascript:Silverlight.getSilverlight(\"2.0\");'>Silverlight</a>");
                Sys.UI.DomElement.addCssClass(this.$m_0, "ms-profileBrowserHeaderText");
                Sys.UI.DomElement.addCssClass(this.$m_0.firstChild.nextSibling, "ms-profileBrowserSilverlightLink")
            }
            this.$38_0(b)
        }
       
</script>

Méthode 1 : ajouter un élément Web Part Éditeur de contenu à la page

  1. Modifiez la page qui contient le volet Web Du navigateur de l’organisation.
  2. Ajoutez un élément Web Part Éditeur de contenu juste après le volet Navigateur d’organisation.
  3. Modifiez le contenu.
  4. Dans le Ruban, cliquez sur HTML/Modifier la source HTML sous l’onglet Format de texte.
  5. Copiez-collez le code ci-dessus.
  6. Masquez chrome et le contenu du partie Web Part afin qu’il n’apparaisse pas sur la page.

Méthode 2 : Modifier la page dans SharePoint Designer

Notez que cette méthode détache la page de la définition de site et doit donc être utilisée avec précaution.

  1. Ouvrez la page dans SharePoint designer pour modification.
  2. Changez en affichage code.
  3. Dans le Ruban, cliquez sur Mode avancé
  4. Recherchez la balise </SharePoint:EmbeddedFormField>.
  5. Collez le code ci-dessus juste après la balise.
  6. Enregistrez vos modifications.
  7. Cliquez sur Oui dans la fenêtre Avertissement de la page de définition de site.

Informations supplémentaires

Veuillez noter qu’il n’est pas possible d’utiliser le contrôle d’affichage Html du partie Web Du navigateur de l’organisation à partir du client. Si vous avez besoin d’un contrôle non Silverlight disponible, vous devez écrire un élément Web Part personnalisé pour atteindre cet objectif avec Windows Revendications.

Encore besoin d’aide ? Accédez au site de la Communauté SharePoint.