组织浏览器 Web 部件不为声明Windows呈现

症状

在启用声明Web 部件使用Windows浏览器功能时,Web 部件不会呈现任何信息。 同一 Web 部件正确呈现具有不同的声明身份验证类型的用户。

原因

组织信息从 UPSA 应用程序的 User Profile Service 应用程序配置文件 (提取) 。 所需信息存储在UserProfile_Full表中。

Active Directory (手动添加或自动同步) 存储在 UPSA 配置文件数据库中,其格式为 NETBIOS\LogonName (:CONTOSO\TestUser1) 格式。

但是,浏览声明网站时,用户上下文使用 Claims NTName 格式。 (:i:0#.w|Contoso\TestUser1)

然后,组织浏览器 Web 部件会为用户 "i'0#.w"执行数据库查找|在数据库中不可用的 Contoso\TestUser1, 因为用户信息将存储为"CONTOSO\TestUser1"NTName。

此问题不会发生在任何其他声明身份验证类型中,因为配置文件数据库包含正确的命名格式。

解决方案

组织浏览器Web 部件由 CreateHierarchyChartControl javascript 函数呈现在页面上。 此函数不知道 UPSA 配置文件数据库以不同的命名Windows存储声明用户。 若要处理此问题,必须在组织浏览器 Web 部件之后将以下代码段输入到网站源。

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

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

方法 1:将内容编辑器Web 部件添加到页面

  1. 编辑包含组织浏览器 Web 部件的页面。
  2. 在组织浏览器Web 部件后添加内容编辑器Web 部件。
  3. 编辑内容。
  4. 在功能区中,单击"设置文本格式"选项卡下的"HTML/编辑 HTML 源"。
  5. 复制粘贴上述代码。
  6. 隐藏 Chrome 和 Web 部件的内容,以便它不会出现在页面上。

方法 2:在设计器中SharePoint页面

请注意,此方法会从网站定义中分离页面,因此必须谨慎使用。

  1. 在设计器中打开SharePoint进行编辑。
  2. 更改为代码视图。
  3. 在功能区中,单击"高级模式"
  4. 找到 </SharePoint:EmbeddedFormField> 标记。
  5. 将上述代码粘贴到 标记的右侧。
  6. 保存所做的更改。
  7. 在"网站定义页警告"窗口中单击"是"。

更多信息

请注意,无法从客户端覆盖组织浏览器 Web 部件 Html 视图。 如果需要具有可用的非 Silverlight 控件,则需要编写自定义 Web 部件以使用声明Windows目标。

仍然需要帮助? 请转到 SharePoint 社区