PeoplePicker/PeopleEditor에서 가치 얻기
-
10-12-2019 - |
문제
내 SharePoint 사이트의 새 Asp 페이지에서 새 처방집을 만들려고 합니다.
그래서 모든 사용자를 검색하고 하나를 선택할 수 있는 필드가 필요합니다.
나는 여러 포럼에서 PeoplePicker나 PeopleEditor가 가장 좋은 컨트롤이라는 것을 보았습니다.
이제 컨트롤에서 값을 가져와서 목록에 삽입해야 합니다.
Javascript가 이를 수행하는 유일한 방법입니까?속성에 좋은 옵션이 안보이네요...
내 aspx 코드에서 사용자 필드 컨트롤을 넣으려고 했지만 페이지에 표시되지 않습니다...peoplepickerdialog에서도 마찬가지입니다.
내 코드는 다음과 같습니다.
<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>
그리고 여기에 코드가 있습니다
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);
}
그만큼 GetUser()
그냥 돌려줘 SPUser
...작동해야 합니다...아니면...
해결책
이는 해결된 사용자 및 그룹에서 SPFieldUserValue를 가져오기 위해 사용한 것입니다. PeopleEditor
제어.
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;
}
다른 팁
aspx 사용의 코드 숨김에서 다음 코드를 사용할 수 있습니다.
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
}
}
이렇게 수정하겠습니다. pectrl
PeopleEditor입니다.메모:이는 다음을 추가한다고 가정합니다. MultiSelect="false"
이론적으로는 Sean의 예와 같은 루프를 사용하여 모든 항목을 가져올 수 있지만 컬렉션을 반환해야 할 수도 있습니다. SPUser
또는 SPFieldUserValue
하기 위해서:
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;
}
제휴하지 않습니다 sharepoint.stackexchange