A Web Part do Navegador da Organização não é renderizada para usuários de Declarações do Windows

Sintomas

Ao usar a Web Part do Navegador da Organização em sites habilitados para Declarações do Windows, a Web Part não renderiza nenhuma informação. A mesma Web Part renderiza os usuários com diferentes tipos de Autenticação de Declarações corretamente.

Motivo

As informações da organização são extraídas do banco de dados de perfil do APLICATIVO do Serviço de Perfil de Usuário (UPSA). As informações necessárias são armazenadas na tabela UserProfile_Full.

Os usuários do Active Directory (adicionados manualmente ou sincronizados automaticamente) são armazenados no banco de dados de perfil UPSA com o formato NETBIOS\LogonName (Ex.: CONTOSO\TestUser1).

No entanto, ao navegar por um site de declarações, o contexto do usuário usa o formato NTName de Declarações. (Ex.: i:0#.w|Contoso\TestUser1)

Em seguida, a Web Part do Navegador da Organização faz uma pesquisa de banco de dados para o usuário 'i'0#.w|Contoso\TestUser1' que não está disponível no banco de dados, pois as informações do usuário serão armazenadas com o NTName 'CONTOSO\TestUser1'.

O problema não acontece com nenhum outro tipo de Autenticação de Declarações, pois o Banco de Dados de Perfil contém o formato de nomenclatura correto para eles.

Resolução

O controle Web Part do Navegador da Organização é renderizado na página pela função javascript CreateHierarchyChartControl. Essa função não está ciente do fato de que o Banco de Dados de Perfil UPSA armazena os usuários do Windows Claims com um formato de nomenclatura diferente. Para contornar isso, o snippet de código abaixo deve ser inserido na fonte do site logo após a Web Part do Navegador da Organização.

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

Para o 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étodo 1: Adicionar um conteúdo Editor Web Part à página

  1. Edite a página que contém a Web Part do Navegador da Organização.
  2. Adicione um Conteúdo Editor Web Part logo após a Web Part do Navegador da Organização.
  3. Edite o conteúdo.
  4. Na Faixa de Opções, clique em HTML/Editar Fonte HTML na guia Formatar Texto.
  5. Copie o código acima.
  6. Ocultar o Chrome e o conteúdo da Web Part para que ele não apareça na página.

Método 2: Editar a página no SharePoint Designer

Observe que esse método desanexará a página da definição do site e, como tal, deve ser usado com cuidado.

  1. Abra a página no SharePoint Designer para edição.
  2. Alterar para exibição de código.
  3. Na Faixa de Opções, clique em Modo Avançado
  4. Localize a <marca /SharePoint:EmbeddedFormField> .
  5. Cole o código acima logo após a marca.
  6. Salve suas alterações.
  7. Clique em Sim na janela Aviso da Página de Definição do Site.

Informações adicionais

Observe que não é possível substituir a Exibição Html da Web Part do Navegador da Organização do cliente. Se você precisar ter um controle não Silverlight disponível, precisará gravar uma Web Part personalizada para atingir esse objetivo com o Windows Claims.

Ainda precisa de ajuda? Acesse a Comunidade do SharePoint.