0

我在 SharePoint 2013 中工作,并且为内容搜索 Web 部件创建了一个自定义显示模板。我的三个字段使用多选人员选择器,所有三个字段都在一个字符串中返回名称,如下所示:

布朗、约翰史密斯、迈克琼斯、玛丽

我想以下面显示的格式返回名称,但我似乎无法让它工作:

布朗,约翰;史密斯,迈克;琼斯,玛丽

我已经尝试了这些博客文章中的建议:

https://social.msdn.microsoft.com/Forums/en-US/ea0fe2fe-0757-4c1c-b3cc-2dd99b38bfa1/sharepoint-2013-custom-display-template-people-picker-field-separate-multiple-names- in-display?forum=sharepointdevelopment

https://sharedpointtips.blogspot.com/2015/01/sharepoint-2013-display-template.html

http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2014/02/26/useful-javascript-for-working-with-sharepoint-display-templates-spc3000-spc14.aspx

我已经尝试了第一篇文章中包含的所有建议 - https://social.msdn.microsoft.com/Forums/en-US/ea0fe2fe-0757-4c1c-b3cc-2dd99b38bfa1/sharepoint-2013-custom-display-template -people-picker-field-separate-multiple-names-in-display?forum=sharepointdevelopment

在标题中:

'Response Preparer'{Response Preparer}:'ResponsePreparerOWSUSER'

在身体里:

<script>
            $includeLanguageScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/Language Files/{Locale}/CustomStrings.js");
        $includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/Search/jquery-1.11.3.min.js");
        $includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/Search/splitNames.js");

        RegisterSod('jquery-1.11.3.min.js', Srch.U.replaceUrlTokens("~sitecollection/_catalogs/masterpage/Display Templates/Search/jquery-1.11.3.min.js"));
        RegisterSod('splitNames.js', Srch.U.replaceUrlTokens("~sitecollection/_catalogs/masterpage/Display Templates/Search/splitNames.js"));

        //Register Dependencies
        RegisterSodDep('splitNames.js', 'jquery-1.11.3.min.js');

        AddPostRenderCallback(ctx, function () {
           EnsureScriptFunc("splitNames.js", 'splitNames', function() {
             var regulatorypartner = $getItemValue(ctx, "Regulatory Partner");
             var splitregpartner = "";
             splitregpartner = $splitNames(regulatorypartner);
           });
         });        

    </script>

在 JavaScript 部分我试过这个:

var regulatorypartner = ctx.RegulatoryPartnerOWSUSER;
var splitregpartner = splitNames(regulatorypartner);

这是我的显示代码:

<td rowspan="2" colspan="4" style="text-align:center; border:0.5px solid #F88007;"> _#= splitregpartner =#_ </td>

显示应如下所示:

布朗,约翰;史密斯,迈克;琼斯,玛丽

这是regulatorypartner的输出:

布朗、约翰史密斯、迈克琼斯、玛丽

这是 splitNames 代码(文件包含在 RegisterSod 语句中):

  var newStr="";
  for(var i=0;i<str.length;i++){
    var char=str.charAt(i);
    if(char==char.toUpperCase()){
        newStr+=" "+char ;
    }else{
        newStr+=char;

    }
  }
  return newStr;
}
4

1 回答 1

0

请记住,它不适用于名称中包含超过 2 个大写字母的人,除非您添加示例,否则无法编写适用于所有情况的内容并转换为您正在寻找的格式用于多个单词和唯一名称。

to_ReadableFormat("Brown, JohnSmith, MikeJones, Mary");

function to_ReadableFormat(regulatorypartner){
    var counter = 0;
    var fullString = "";

    regulatorypartner.match(/[A-Z]/g).map(function (cap) { // loop through all the capitals
        let regIndex = regulatorypartner.indexOf(cap);
        if (counter != 0 && counter % 2 == 0) {
            fullString += regulatorypartner.slice(0, regIndex) + ";";
            regulatorypartner = regulatorypartner.slice(regIndex, regulatorypartner.length);
        }
        counter++;
    });
    fullString += regulatorypartner; // concat the remaining
    return fullString;
}
于 2019-08-16T19:25:15.467 回答