1

SharePoint サービス 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(); // ピッカーの親タグ ID を設定します。pplPicker.SetParentTagId('ctl00_PlaceHolderMain_g_ec44fef5_c1a6_4ade_b7e4_2b80803724a1_ff6_1_ctl00_ctl00_UserField'); pplPicker.SetLoggedInUser(); }

しかし、フォームを読み込んでも何も起こりません...間違った親タグ ID を使用していませんか? ページのソースコードから取った...

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

3

これが私のやり方です。

<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 フォーム フィールドに配置するだけです。

お役に立てれば。

于 2012-10-31T15:17:35.153 に答える
2

これが私が実装した方法です。ここでは、ユーザー名をクエリ文字列として渡しました。そうでない場合は、現在のユーザーが入力されています。必要に応じて変更します。

        var Dname = queryString('DName'); 
        if(Dname!= null)
        {       
            var pp = getPickerInputElement('Employee');
            if(pp != null)
            {
                pp.innerHTML =Dname;
                document.getElementById('Emp').innerHTML=Dname;
            }
        }
        else
        {   
            fillPeoplePickerWithCurrentUser('Employee');
        }   
function fillPeoplePickerWithCurrentUser(pickerName)
    {
        var currentUser =getUserData();
    }
function getUserData() 
    {   
        context = new SP.ClientContext.get_current();             
        web = context.get_web(); 
        currentUser = web.get_currentUser(); 

        currentUser.retrieve(); 
        context.load(web);
        context.executeQueryAsync(onSuccessMethod, onFaiureMethodl);
    }
于 2012-11-01T07:20:07.327 に答える