none
Редирект на форму для группы RRS feed

  • Вопрос

  • Есть список,   у него:
    DispForm - по умолчанию
    EditForm - по умолчанию
    NewForm - по умолчанию

    SecondEditForm - не поумолчанию

    В итоге у меня 2 формы редактирования, на каждой я скрыл разные строки.
    Задача в том, что бы, скажем, при открытии формы редактирования элемента списка членом определенной группой - js редиректил их на вторую форму



    15 июня 2015 г. 10:38

Ответы

  • Здравствуйте!
    Воспользуйтесь кодом ниже ("Определенной группой" будет "MyGroup"):

    // "Точка входа"
    function myOnload() {
        isCurrentUserMemberOfMyGroup()
    }
    
    // Делаем редирект на SecondEditForm.aspx
    function RedirectToSecondEditForm() {
         var origUrl = window.location.toString();
         var editUrl = origUrl.replace("Edit","SecondEdit");
         window.location = editUrl;
    }
    
    // Проверяем наличие текущего пользователя в группе "MyGroup"
    function isCurrentUserMemberOfMyGroup() {
        IsCurrentUserMemberOfGroup("MyGroup", function (isCurrentUserInGroup) {
            if (isCurrentUserInGroup) {
                RedirectToSecondEditForm();
            }
        });
    }
    
    // Вспомогательная ф-ия по работе с группами
    function IsCurrentUserMemberOfGroup(groupName, OnComplete) {
        var context = new SP.ClientContext.get_current();
        var currentWeb = context.get_web();
        var currentUser = context.get_web().get_currentUser();
        context.load(currentUser);
        var allGroups = currentWeb.get_siteGroups();
        context.load(allGroups);
        var group = allGroups.getByName(groupName);
        context.load(group);
        var groupUsers = group.get_users();
        context.load(groupUsers);
        context.executeQueryAsync(
    			function (sender, args) {
    			    var userInGroup = IsUserInGroup(currentUser, group);
    			    OnComplete(userInGroup);
    			},
    			function OnFailure(sender, args) {
    			    OnComplete(false);
    			}
    	);
    
        function IsUserInGroup(user, group) {
            var groupUsers = group.get_users();
            var userInGroup = false;
            var groupUserEnumerator = groupUsers.getEnumerator();
            while (groupUserEnumerator.moveNext()) {
                var groupUser = groupUserEnumerator.get_current();
                if (groupUser.get_id() == user.get_id()) {
                    userInGroup = true;
                    break;
                }
            }
            return userInGroup;
        }
    }
    
    // Регистрируем ф-ию myOnload() на старт после окончания подгрузки тела документа. Это вместо jQuery.onLoad(), т.к. в SharePoint может не сработать.
    _spBodyOnLoadFunctionNames.push("myOnload");
    


    Блог о SharePoint

    • Предложено в качестве ответа Maxim Shusharin 15 июня 2015 г. 11:01
    • Помечено в качестве ответа Alexander Surbashev 15 июня 2015 г. 11:26
    15 июня 2015 г. 10:56

Все ответы

  • Здравствуйте!
    Воспользуйтесь кодом ниже ("Определенной группой" будет "MyGroup"):

    // "Точка входа"
    function myOnload() {
        isCurrentUserMemberOfMyGroup()
    }
    
    // Делаем редирект на SecondEditForm.aspx
    function RedirectToSecondEditForm() {
         var origUrl = window.location.toString();
         var editUrl = origUrl.replace("Edit","SecondEdit");
         window.location = editUrl;
    }
    
    // Проверяем наличие текущего пользователя в группе "MyGroup"
    function isCurrentUserMemberOfMyGroup() {
        IsCurrentUserMemberOfGroup("MyGroup", function (isCurrentUserInGroup) {
            if (isCurrentUserInGroup) {
                RedirectToSecondEditForm();
            }
        });
    }
    
    // Вспомогательная ф-ия по работе с группами
    function IsCurrentUserMemberOfGroup(groupName, OnComplete) {
        var context = new SP.ClientContext.get_current();
        var currentWeb = context.get_web();
        var currentUser = context.get_web().get_currentUser();
        context.load(currentUser);
        var allGroups = currentWeb.get_siteGroups();
        context.load(allGroups);
        var group = allGroups.getByName(groupName);
        context.load(group);
        var groupUsers = group.get_users();
        context.load(groupUsers);
        context.executeQueryAsync(
    			function (sender, args) {
    			    var userInGroup = IsUserInGroup(currentUser, group);
    			    OnComplete(userInGroup);
    			},
    			function OnFailure(sender, args) {
    			    OnComplete(false);
    			}
    	);
    
        function IsUserInGroup(user, group) {
            var groupUsers = group.get_users();
            var userInGroup = false;
            var groupUserEnumerator = groupUsers.getEnumerator();
            while (groupUserEnumerator.moveNext()) {
                var groupUser = groupUserEnumerator.get_current();
                if (groupUser.get_id() == user.get_id()) {
                    userInGroup = true;
                    break;
                }
            }
            return userInGroup;
        }
    }
    
    // Регистрируем ф-ию myOnload() на старт после окончания подгрузки тела документа. Это вместо jQuery.onLoad(), т.к. в SharePoint может не сработать.
    _spBodyOnLoadFunctionNames.push("myOnload");
    


    Блог о SharePoint

    • Предложено в качестве ответа Maxim Shusharin 15 июня 2015 г. 11:01
    • Помечено в качестве ответа Alexander Surbashev 15 июня 2015 г. 11:26
    15 июня 2015 г. 10:56
  • Спасибо, то что я искал
    15 июня 2015 г. 11:29