Попытка получить список групп для пользователя с помощью SPServices

Я наткнулся на этот код и пытаюсь использовать его в SP 2010 Foundation. Когда я загружаю страницу, я получаю сообщение об ошибке «Пользователь не найден». Я использую Jquery 1.10.X и последнюю версию SPServices. Я предполагаю, что это как-то связано с «userLoginName», но мне трудно понять это.

$(document).ready(function() {
  //Populate the users pick list
  var strHTMLSiteUsers = "";
  $().SPServices({
      operation: "GetUserCollectionFromSite",
      async: false,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find("User").each(function() {
          strHTMLSiteUsers += "<option value='" + $(this).attr("LoginName") + "'>" + $(this).attr("Name") + "</option>";
        });
        $("#my_SiteUsers").append(strHTMLSiteUsers);
      }
  });
  RefreshGroupLists();
});

function RefreshGroupLists(){
  var strHTMLAvailable = "";
  var strHTMLAssigned = "";
  var arrOptionsAssigned = new Array();
  var intOpts = 0;
  var booMatch;
  var booErr = "false";

  $("#my_SPGroupsAssigned").html("");
  $("#my_SPGroupsAvailable").html("");

  if($("#my_SiteUsers").attr("value") == 0){
    alert("You must select a user");
    return;
  }

  //Populate the Groups Assigned
  $().SPServices({
      operation: "GetGroupCollectionFromUser",
      userLoginName: $("#my_SiteUsers").attr("value"),
      async: false,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find("errorstring").each(function() {
          alert("User not found");
          booErr = "true";
          return;
        });
        $(xData.responseXML).find("Group").each(function() {
          strHTMLAvailable += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";
          arrOptionsAssigned[intOpts] = $(this).attr("Name");
          intOpts = intOpts + 1;
        });
        $("#my_SPGroupsAssigned").append(strHTMLAvailable);
      }
  });

  //Populate available site groups
  if(booErr == "false"){
    $().SPServices({
        operation: "GetGroupCollectionFromSite",
        async: false,
        completefunc: function(xData, Status) {
          $(xData.responseXML).find("Group").each(function() {
            booMatch = "false";
            for (var i=0;i<=arrOptionsAssigned.length;i++){
              if($(this).attr("Name") == arrOptionsAssigned[i]){
                booMatch = "true";
                break;
              }
            }
            if(booMatch == "false"){
              strHTMLAssigned += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";
            }
          });
          $("#my_SPGroupsAvailable").append(strHTMLAssigned);
        }
    });
  }
}

function AddGroupsToUser(){
  var i;

  if($("#my_SiteUsers").attr("value") == 0){
    alert("You must select a user");
    return;
  }

  if($("#my_SPGroupsAvailable").val() == null){
    alert("You haven't selected any groups to add");
    return;
  }
  else{
    var arrGroups = $("#my_SPGroupsAvailable").val();
    for (i=0;i<arrGroups.length;i++){
      $().SPServices({
          operation: "AddUserToGroup",
          groupName: arrGroups[i],
          userLoginName: $("#my_SiteUsers").attr("value"),
          async: false,
          completefunc: null
      });
    }
    RefreshGroupLists();
  }
}

function RemoveGroupsFromUser(){
  var i

  if($("#my_SiteUsers").attr("value") == 0){
    alert("You must select a user");
    return;
  }

  if($("#my_SPGroupsAssigned").val() == null){
    alert("You haven't selected any groups to remove");
    return;
  }
  else{
    var arrGroups = $("#my_SPGroupsAssigned").val();
    for (i=0;i<arrGroups.length;i++){
      $().SPServices({
          operation: "RemoveUserFromGroup",
          groupName: arrGroups[i],
          userLoginName: $("#my_SiteUsers").attr("value"),
          async: false,
          completefunc: null
      });
    }
    RefreshGroupLists();
  }
}

Это источник.


person Batman    schedule 26.09.2013    source источник


Ответы (1)


Вы должны использовать Firebug (надстройка Firefox), чтобы просмотреть выполненные запросы AJAX. Таким образом, вы можете увидеть точное сообщение об ошибке.

Я знаю, что обычно вам нужно передать имя пользователя с «-1;#» перед ним, чтобы Sharepoint распознал его как имя пользователя (например: «-1;#[email protected]»)… возможно это причина?!

Вместо SPServices вы можете использовать SharepointPlus и его groupMembers:

$SP().groupMembers("my group", function(members) {
  for (var i=0; i < members.length; i++) console.log(members[i]);
  // -> {ID:"1234", Name:"Doe, John", LoginName:"mydomain\john_doe", Email:"[email protected]"}
});
person AymKdn    schedule 27.09.2013
comment
Просто взглянув на методы, доступные в SharePointPlus, не будет ли использование метода групп пользователей более близким эквивалентом GetGroupCollectionFromUser - person Batman; 27.09.2013
comment
Мне удалось получить $SP().usergroups, чтобы получить список пользователей, которым принадлежит выбранный пользователь. Теперь мне просто нужно выяснить, как объединить это с приведенным выше кодом, чтобы заставить его работать. Сейчас просто пишет консольный лог :( - person Batman; 27.09.2013
comment
Вместо использования консоли вы можете создать какой-нибудь HTML-код и вставить его на свою страницу... Я не понимаю, что здесь сложного?! - person AymKdn; 28.09.2013