L'obtention de la Valeur de PeoplePicker / PeopleEditor
-
10-12-2019 - |
Question
Je suis en train de créer un nouveau formulaire dans une page Asp sur mon site sharepoint.
J'ai donc besoin d'un champ de recherche à tous les utilisateurs et d'en sélectionner un.
J'ai Vu sur plusieurs forums que le meilleur contrôles sont PeoplePicker ou PeopleEditor.
Maintenant, je dois obtenir la valeur de la commande et de la vis à une liste...
Javascript est la seule façon de le faire?Je ne peux pas voir les bonnes options dans les propriétés...
Dans mon code aspx, j'ai essayé de mettre un userfield de contrôle, mais la page ne veut pas le montrer...même pour peoplepickerdialog
voici mon 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>
et voici le code derrière
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);
}
L' GetUser()
juste de retour d'un SPUser
...il devrait fonctionner...ou pas...
La solution
C'est ce que j'ai utilisé pour obtenir une SPFieldUserValue de l'résolu utilisateurs et des groupes dans un PeopleEditor
de contrôle.
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;
}
Autres conseils
Dans le code-behind de votre aspx utiliser pouvez utiliser le code suivant:
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
}
}
Je voudrais la revoir comme ça, où pectrl
est le PeopleEditor.Note:Cela suppose que vous ajoutez un MultiSelect="false"
attribut sur votre PeopleEditor, bien que, théoriquement, vous devriez être en mesure d'utiliser une boucle comme dans de Sean exemple de les avoir tous, mais vous auriez besoin de renvoyer une collection, et pas seulement SPUser
ou SPFieldUserValue
pour ce faire:
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;
}