пятница, 27 января 2017 г.

Проверка выбранного значение в PeoplePicker при сохранении элемента

В этой статье я расскажу, как можно осуществлять проверку выбранного значения в поле типа «Пользователь или группа». И так будем проверять что в поле выбран пользователь отличный от текущего. В случае если он выбрал сам себя, то ему будет выведено сообщение об этом.




Первым делом, после загрузки страницы, нам нужно получить текущего пользователя.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// получение текущего пользователя
function getCurrentUser() {
    var dfd = jQuery.Deferred();
    var currentUser;
    if (SP.ClientContext != null) {
        SP.SOD.executeOrDelayUntilScriptLoaded(getUser, 'sp.js');
    }
    else {
        SP.SOD.executeFunc('sp.js', null, getUser);
    }
    function getUser() {
        var context = new SP.ClientContext.get_current();
        var web = context.get_web();
        currentUser = web.get_currentUser();
        context.load(currentUser);
        context.executeQueryAsync(onSuccessMethod, onRequestFail);
    }
    function onSuccessMethod(sender, args) {
        //currUser = currentUser;
        dfd.resolve(currentUser);
    }
    function onRequestFail(sender, args) {
        console.log('ошибка получения пользователя' + args.get_message() + '\n' + args.get_stackTrace());
        dfd.reject(args);
    }
 
    return dfd.promise();
};

На выходе будет промис, который будет знать получены асинхронные данные или нет, и какие данные получены.
Вторая функция получает значение из поля PeoplePicker.
1
2
3
4
5
6
function getPPValue(fieldId) {
    var strFieldId = jQuery("[id ^= '" + fieldId + "']").attr("id");
    var field = SPClientPeoplePicker.SPClientPeoplePickerDict[strFieldId];
    var ui = field.GetAllUserInfo();
    return ui;
};


Третья функция проверки, в момент нажатия на кнопку «Сохранить». 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function PreSaveAction() {
    var PPvalue = getPPValue("User")
    var result = false;
    currUser.done(function (res) {       
            if(PPvalue[0] && PPvalue[0].Key == res.get_loginName()){
                console.log(PPvalue[0].Key, res.get_loginName());
            alert("Выберите другого пользователя")
               result = false;
            }else{
               // alert(res.get_loginName())
                result = true;
            };                  
    });  
    return result;        
}


Решение полностью

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<script src="/Style%20Library/Js/jquery-1.11.1.min.js" type="text/javascript"></script>
<script src="/Style%20Library/test/test.js" type="text/javascript"></script>
/// содежимое test.js
var currUser;
_spBodyOnLoadFunctionNames.push("WorkingWithFields");
function WorkingWithFields()
{
    currUser = getCurrentUser();
     
}
// получение текущего пользователя
function getCurrentUser() {
    var dfd = jQuery.Deferred();
    var currentUser;
    if (SP.ClientContext != null) {
        SP.SOD.executeOrDelayUntilScriptLoaded(getUser, 'sp.js');
    }
    else {
        SP.SOD.executeFunc('sp.js', null, getUser);
    }
    function getUser() {
        var context = new SP.ClientContext.get_current();
        var web = context.get_web();
        currentUser = web.get_currentUser();
        context.load(currentUser);
        context.executeQueryAsync(onSuccessMethod, onRequestFail);
    }
    function onSuccessMethod(sender, args) {
        //currUser = currentUser;
        dfd.resolve(currentUser);
    }
    function onRequestFail(sender, args) {
        console.log('ошибка получения пользователя' + args.get_message() + '\n' + args.get_stackTrace());
        dfd.reject(args);
    }
 
    return dfd.promise();
};
// получение данные из поля PeoplePicker
function getPPValue(fieldId) {
    var strFieldId = jQuery("[id ^= '" + fieldId + "']").attr("id");
    var field = SPClientPeoplePicker.SPClientPeoplePickerDict[strFieldId];
    var ui = field.GetAllUserInfo();
    return ui;
};
function PreSaveAction() {
    var PPvalue = getPPValue("User")
    var result = false;
    currUser.done(function (res) {       
            if(PPvalue[0] && PPvalue[0].Key == res.get_loginName()){
                console.log(PPvalue[0].Key, res.get_loginName());
            alert("Выберите другого пользователя")
               result = false;
            }else{
               // alert(res.get_loginName())
                result = true;
            };                  
    });  
    return result;        
}

Комментариев нет:

Отправить комментарий