문제

내 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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top