javascript - 使用 JS 为当前用户设置 peoplepicker 默认值

标签 javascript sharepoint

我使用的是 Sharepoint Services 3.0,我已经创建了一个自定义列表表单。我在这个表单中有一个 peoplepicker 字段,需要将其默认设置为当前用户。

这是我目前所得到的:

  • 首先是我的人员选择器功能:

    函数 PeoplePicker(){

    this.context = null;
    this.web = null;
    this.currentUser = null;
    this.parentTagId = null
    
    this.SetParentTagId = function(id){
        this.parentTagId = id;
    }
    
    this.SetLoggedInUser = function(){
        if(this.parentTagId != null){
            this.getWebUserData();
        }
    }
    
    this.getWebUserData = function(){
        this.context = new SP.ClientContext.get_current();
        this.web = this.context.get_web();
        this.currentUser = this.web.get_currentUser();
        this.currentUser.retrieve();
        this.context.load(this.web);
        this.context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod),
                                       Function.createDelegate(this, this.onFailureMethod));
    }
    
    this.onSuccessMethod = function(){
        this.setDefaultValue(this.currentUser.get_title());
    }
    
    this.onFailureMethod = function(){
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }
    
    this.setDefaultValue = function(value){
        var parentTag = document.getElementById(this.parentTagId);
        if (parentTag != null) {
            var peoplePickerTag = this.getTagFromIdentifierAndTitle(parentTag, 'div',
                                                    'UserField_upLevelDiv', 'People Picker');
            if (peoplePickerTag) {
                peoplePickerTag.innerHTML = value;
            }
        }
    }
    
    this.getTagFromIdentifierAndTitle = function(parentElement, tagName, identifier, title){
        var len = identifier.length;
        var tags = parentElement.getElementsByTagName(tagName);
        for (var i = 0; i < tags.length; i++) {
            var tempString = tags[i].id;
            if (tags[i].title == title && (identifier == "" ||
                                tempString.indexOf(identifier) == tempString.length - len)) {
                return tags[i];
            }
        }
        return null;
    }
    

  • 其次,我在我的 asp 内容中使用它的方式:

ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "PeoplePicker.js");

function SetWebUserData() { var pplPicker = new PeoplePicker(); // Set the parent tag id of the people the picker. pplPicker.SetParentTagId('ctl00_PlaceHolderMain_g_ec44fef5_c1a6_4ade_b7e4_2b80803724a1_ff6_1_ctl00_ctl00_UserField'); pplPicker.SetLoggedInUser(); }

但是当我加载表单时没有任何反应...我是否使用了错误的父标记 ID?我是从页面的源代码里拿来的...

任何帮助都会很棒!

最佳答案

这是我的做法。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript"> 
$(window).load(function(){
var columnName = 'Manager Name';   
var searchText = RegExp("FieldName=\"" + columnName + "\"", "gi");
$("td.ms-formbody").each(function() {  
if(searchText.test($(this).html())) {  
$(this).find("div[Title='People Picker']").html(getUserName());  
return false;  
}  
});
function getUserName() { 
var wshell=new ActiveXObject("wscript.shell"); 
var userName=wshell.ExpandEnvironmentStrings("%username%");  
return userName;}   
});
</script>

我的人员选择器字段名为“经理姓名”,但它是一个变量,因此您可以更改它。我使用函数 getUserName() 来设置人员选择器的值。 getUserName 使用环境字符串用户名。有些人会告诉你这不是最好用的东西,因为它可以被“伪造”。我在一个严格控制的公司环境中。我个人认为大多数用户甚至都不知道该怎么做。

我认为您遇到的问题是人员选择器字段需要的值不仅仅是一个字符串。我相信它正在寻找一个键值对,这意味着您需要在 SharePoint 站点中分配的用户名和 ID 号。为了解决这个问题,我使用的代码只是将用户名字符串放在 html 表单字段中。

希望这对您有所帮助。

关于javascript - 使用 JS 为当前用户设置 peoplepicker 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12174181/

相关文章:

sharepoint - 安装 Sharepoint

.net - 与 LINQ 一起使用的集合类的要求

javascript - Ajax 调用中的数据长度

javascript - 带图像的 HTML CSS 全屏背景

javascript - 使用下划线比较两个对象列表并获取唯一对象

c# - 如何从 SharePoint 2010 正确调用外部 WCF 服务?

javascript - 如何在 JavaScript 中创建动态 json 对象

javascript - 使用 JavaScript 删除字符串末尾括号中的内容

javascript - Sharepoint 2013 控件显示模板 : how to know how many items we'll get

SharePoint 多个新项目表单