Frage

Ich bin an einem Problem festgefahren, bei dem ich eine Listen -ID habe - Liste der IDs Ich muss den Loginnamen von Stresser oder SPGroup mit der ID in der ListID finden

Ich habe Folgendes ausprobiert, aber es warf Ausnahme, da es keinen Benutzer gefunden hat, wenn Gruppen -ID vorhanden ist

              foreach (var id in ID)
                {
                    SPUser spUser = web.SiteUsers.GetByID(Convert.ToInt32(id));
                    if (spUser != null)
                    {
                        lstUsers.Add(spUser.LoginName);
                         continue;
                    }
                    SPGroup spGroup = web.SiteGroups.GetByID(Convert.ToInt32(id ));
                    if (spGroup != null)
                    {
                        lstGroups.Add(spGroup.LoginName);
                         continue;

                    }

                }

Bitte schlagen Sie vor, was zu tun ist !!!

War es hilfreich?

Lösung

Ich würde zwei Änderungen vorschlagen.

  1. Verwenden SPFieldUserValue. Es macht keine Ausnahme, wenn der Benutzer nicht existiert.
  2. Verwenden Sie das SPGroupCollection.GetCollection(int[] ids)

    SPUserCollection users = web.SiteUsers;
    SPGroupCollection groups = web.SiteGroups;
    foreach (var id in ID)
    {
      // try to get user-name
      SPUser spUser = new SPFieldUserValue(web, Convert.ToInt32(id), null).User;
      if (spUser != null)
      {
        lstUsers.Add(spUser.LoginName);
        continue;
      }
      // try to get group-name
      var foundGroups = groups.GetCollection(new int[] { Convert.ToInt32(id) });
      if (foundGroups.Count > 0) 
      {
        lstGroups.Add(foundGroups[0]);
        continue;
      }
      // If execution reaches this point: Nothing found with this id
    }
    

Andere Tipps

Wenn ich Ihre Frage korrekt lese: Sie haben die Liste aufgerufen ID in dem Sie numerische IDs (Benutzer- und Gruppen -IDs) haben und den Namen des Benutzer oder der Gruppe hinzufügen möchten, die der ID einer anderen Liste entsprechen (als LSTUSERS oder LSTGROUPS bezeichnet).

Die Ausnahme ist zu erwarten, wenn die behandelte ID die ID einer Gruppe ist. Die Funktion web.SiteUsers.GetById() Wirft eine Ausnahme aus, wenn die angegebene ID nicht gefunden wird und das ist es, was Sie zuerst versuchen. Versuchen Sie, es in einen zu wickeln try-catch-Block.

Bonus: Speichern Sie SiteUser und SiteGroups in einer Variablen, um zu vermeiden, dass diese Unzufriedenheit in jeder Iteration der Schleife immer wieder aus der Datenbank erhalten.

SPUserCollection users = web.SiteUsers;
SPGroupCollection groups = web.SiteGroups;
foreach (var id in ID)
{
  // try to get user-name
  try{
    SPUser spUser = users.GetByID(Convert.ToInt32(id));
    if (spUser != null)
    {
      lstUsers.Add(spUser.LoginName);
      continue;
    }
  }catch(Exception){
     //  no user found with id.
  }

  // try to get group-name
  try {
    SPGroup spGroup = groups.GetByID(Convert.ToInt32(id ));
    if (spGroup != null)
    {
      lstGroups.Add(spGroup.LoginName);
      continue;
    }
  }catch(Exception){
     // no group found with id
  }

  // If execution reaches this point: Nothing found with this id
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top