Nutzen Sie PeoplePicker/PeopleEditor
-
10-12-2019 - |
Frage
Ich versuche, eine neue Formelsammlung auf einer neuen Asp-Seite auf meiner Sharepoint-Site zu erstellen.
Ich brauche also ein Feld, das alle Benutzer durchsuchen und einen auswählen kann.
Ich habe in mehreren Foren gesehen, dass die besten Steuerelemente PeoplePicker oder PeopleEditor sind.
Jetzt muss ich den Wert vom Steuerelement abrufen und ihn in eine Liste einfügen ...
Ist Javascript die einzige Möglichkeit, das zu tun?Ich kann in den Eigenschaften keine guten Optionen erkennen ...
In meinem ASPX-Code habe ich versucht, ein Userfield-Steuerelement einzufügen, aber die Seite zeigt es nicht an ... dasselbe gilt für peoplepickerdialog
hier ist mein Code:
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
User: <SharePoint:PeopleEditor runat="server" ID="UserPe" /><br />
Start Date: <SharePoint:DateTimeControl runat="server" ID="StartDate" DateOnly="true" /><br />
End Date: <SharePoint:DateTimeControl runat="server" ID="EndDate" DateOnly="true" /><br />
Comment: <asp:TextBox runat="server" ID="CommentTb" TextMode="MultiLine" /><br />
<asp:Button runat="server" ID="SubmitBtn" Text="Submit" OnClick="SubmitBtn_Click" />
<asp:Button runat="server" ID="CancelBtn" Text="Cancel" OnClick="CancelBtn_Click" />
</asp:Content>
und hier ist der Code dahinter
protected void SubmitBtn_Click(object sender, EventArgs e)
{
SPList thisList = SPContext.Current.Web.Lists["Recuperations"];
SPListItem newItem = thisList.Items.Add();
newItem["User"] = GetUser();
newItem["Start Date"] = StartDate.SelectedDate.Date;
newItem["End Date"] = EndDate.SelectedDate.Date;
newItem["Comment"] = CommentTb.Text;
newItem.Update();
Context.Response.Redirect(SPContext.Current.Web.Url);
}
Der GetUser()
gib einfach eine zurück SPUser
...es sollte funktionieren...oder auch nicht...
Lösung
Dies ist es, was ich verwendet habe, um einen SPFieldUserValue von den aufgelösten Benutzern und Gruppen in einem zu erhalten PeopleEditor
Kontrolle.
public static SPFieldUserValue GetPeopleFromPickerControl(PeopleEditor people, SPWeb web)
{
SPFieldUserValue value = null;
if (people.ResolvedEntities.Count > 0)
{
for (int i = 0; i < people.ResolvedEntities.Count; i++)
{
try
{
PickerEntity user = (PickerEntity)people.ResolvedEntities[i];
switch ((string)user.EntityData["PrincipalType"])
{
case "User":
SPUser webUser = web.EnsureUser(user.Key);
value = new SPFieldUserValue(web, webUser.ID, webUser.Name);
break;
case "SharePointGroup":
SPGroup siteGroup = web.SiteGroups[user.EntityData["AccountName"].ToString()];
value = new SPFieldUserValue(web, siteGroup.ID, siteGroup.Name);
break;
default:
SPUser spUser = web.EnsureUser(people.Accounts[i].ToString());
value = new SPFieldUserValue(web, spUser.ID, spUser.Name);
break;
}
}
catch (Exception ex)
{
// log or do something
SPUser spUser = web.EnsureUser(people.Accounts[i].ToString());
value = new SPFieldUserValue(web, spUser.ID, spUser.Name);
}
}
}
return value;
}
Andere Tipps
Im Code hinter Ihrer ASPX-Nutzung können Sie den folgenden Code verwenden:
foreach (PickerEntity resolvedEntity in peopleEditor.ResolvedEntities)
{
SPPrincipalType principalType = (SPPrincipalType)Enum.Parse(typeof(SPPrincipalType), resolvedEntity.EntityData["PrincipalType"].ToString());
if (principalType == SPPrincipalType.User || principalType == SPPrincipalType.SecurityGroup)
{
string loginName = resolvedEntity.Key;
//get the user form web.SiteUsers
}
else if (principalType == SPPrincipalType.SharePointGroup)
{
string groupName = resolvedEntity.Key;
//get the group here from web.SiteGroups
}
}
Ich würde es so überarbeiten, wo pectrl
ist der PeopleEditor.Notiz:Dies setzt voraus, dass Sie a hinzufügen MultiSelect="false"
Attribut in Ihrem PeopleEditor, obwohl Sie theoretisch in der Lage sein sollten, eine Schleife wie in Seans Beispiel zu verwenden, um sie alle abzurufen, aber Sie müssten eine Sammlung zurückgeben, nicht nur SPUser
oder SPFieldUserValue
das zu tun:
public static SPUser GetUserFromPickerControl()
{
SPUser user = null;
if (pectrl.ResolvedEntities.Count > 0)
{
try
{
PickerEntity pe = (PickerEntity)pectrl.ResolvedEntities[0];
SPFieldUserValue userValue = new SPFieldUserValue(web, Convert.ToInt32(pe.EntityData["SPUserID"]), pe.Key);
user = userValue.User;
}
catch (Exception ex)
{
// log or do something
}
}
return user;
}