Pergunta

Eu estou Tentando criar um novo formulário em uma nova página Asp no meu site do sharepoint.

Então eu preciso de um campo de pesquisa de todos os usuários e selecione um.

Eu Vi em vários fóruns que as melhores controles são propriedade PeoplePicker ou PeopleEditor.

Agora eu tenho que pegar o valor do controle e instert-lo a uma lista...

É Javascript a única maneira de fazer isso?Eu não consigo ver nenhum boas opções nas propriedades...


No meu código aspx, eu tentei colocar um campo de controle, mas a página não mostra-lo...mesmo para peoplepickerdialog

aqui está o meu código:

<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>

e aqui está o código por trás

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);
    }

O GetUser() basta voltar uma SPUser...ele deveria estar trabalhando...ou não...

Foi útil?

Solução

Isso é o que eu tenho vindo a utilizar para obter um SPFieldUserValue da resolvido usuários e grupos em um PeopleEditor o controle.

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;
}

Outras dicas

No code-behind do seu aspx uso pode usar o seguinte código:

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
    }
}

Gostaria de rever como esta, onde pectrl é o PeopleEditor.Nota:Isso pressupõe que você adicionar um MultiSelect="false" atributo no seu PeopleEditor, embora, teoricamente, você deve ser capaz de usar um loop como em Sean exemplo, para obter todos eles, mas você precisa devolver um conjunto, não apenas SPUser ou SPFieldUserValue para fazer isso:

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top