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

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top