Question

Mon article d'utilisation:

J'essaie de mettre en œuvre un système de gestion d'événements à SharePoint à l'aide de la ou des parties Web visuelles.

J'ai deux listes personnalisées, on s'appelle "événements". Disons qu'il a une colonne "Titre" qui affiche les détails de l'événement dans une formelle d'affichage (le champ Titre hors du boîtier qu'il est, en fait) et d'autres détails non pertinents dans d'autres colonnes.

La deuxième liste est appelée "participants". Il y a deux colonnes, premier: "Assistante" (champ utilisateur Obtenir le nom de connexion de l'utilisateur actuel). Deuxièmement: "événement" (pour le moment: String du titre de l'événement).

chez My Visual Webpart (ajouté via & Toolpaneview= 2 ci-dessus Formulaire d'affichage des "Evénements" - Les boutons Afficher ("registre" et "Unregister") en fonction du code suivant:

...
using System.Linq;
...
//Snippet of prerequisites for better understanding
SPWeb web = SPContext.Current.Web;
SPUser currentUser = web.CurrentUser;
SPListItem currentEventItem = (SPListItem)SPContext.Current.Item;
string userString = currentUser.ID.ToString() + ";#" + currentUser.LoginName.ToString();
...
//called in page_load
 private void GetButtonView()
    {
        try
        {
            bool foundUsers = (from SPListItem item in tn.Items
                               where item["Attendee"].ToString() == userString
                               && item["Event"].ToString() == currentEventItem.Title
                               select item).Count() > 0;
            if (foundUsers)
            {
                ...
                ButtonRegister.Visible = false;
            }
            else
            {
                ...
                ButtonUnregister.Visible = false;
            }
        }
        catch (Exception ex)
        {
            ...
        }
    }

Problème de cet usage-cas: Si le titre de l'événement ("titre") est modifié ultérieurement dans la liste des événements, je ne reçois pas d'événement correct de la cartographie=> événement car pour le moment je vérifie uniquement pour faire correspondre la correspondance. des cordes de titre.

Solution préférée: Rendre la colonne "Événement" à la colonne ATENDESE-LIST une colonne de recherche qui obtient l'événement réel (ID et le titre, je pense) et montre le titre dans la liste "Participation" "Evénement" -Column, Donc, si le titre est modifié ultérieurement dans les "événements", la liste des participants mettra automatiquement à jour les entrées de référence de son "événement" -Column et je peux montrer le "registre" / "Unregister" -Button (en dehors de ayant une cartographie correcte, qui est nécessaire à coup sûr;)).

Ce serait génial si quelqu'un pouvait me donner une solution / indice comment faire cela de manière programmatique pour que je ne puisse pas le faire fonctionner.

meilleures salutations, Dominik

P.s. Je suis allemand donc j'espère que vous comprenez ma question. N'hésitez pas à demander plus de détails! Je ferai de mon mieux pour l'expliquer en anglais approprié.

Editer 1: Voici mon astastraTentee-méthode aussi:

private void AddAttendee() {
        try
        {
            //Using this because read-permissions are used for attendees
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite ElevatedSite = new SPSite(site.ID))
                {
                    using (SPWeb ElevatedWeb = ElevatedSite.OpenWeb(web.ID))
                    {
                        SPList attendeeList= ElevatedWeb.Lists["Attendees"];
                        SPListItemCollection listItems = attendeeList.Items;
                        SPListItem item = listItems.Add();
                        item["Name"] = currentUser.ID.ToString() + ";#" + 
                        currentUser.LoginName.ToString() + ";#";
                        item["Event"] = currentEventItem["Title"];
                        ElevatedWeb.AllowUnsafeUpdates = true;
                        item.Update();
                        ElevatedWeb.AllowUnsafeUpdates = false;
                        ...
                    }
                }
            });
        }
        catch (Exception ex) 
        {
            ...
        }
    }

Était-ce utile?

La solution

As far as I know, changing field type from text to lookup is not supported in Sharepoint.

You should create new lookup field in the Attendees list and point it to Events list, either from Sharepoint list settings, or from code.

Basically, lookup field has the same structure as user field, which you populated in the final bit of your code - ID#;Title. Also, lookup field value is represented by SPFieldLookupValue class, so it can be retrieved like that:

return new SPFieldLookupValue((string)item["EventLookup"]);

You can set lookup field value by assigning new SPFieldLookupValue object to SPListItem property:

item["EventLookup"] = new SPFieldLookupValue(1, "Great Event");

where 1 - Event list item Id and "Great Event" - Event list Item title.

If I also may add some remarks to your code examples. As far as I can see, you are searching attendees for the event by iterating through SPList.Items object and comparing a string value of "Attendee" field with custom string value.

Such a search can return wrong and slow results, because usually user lookup field contains user display name, not a Login Name. I'd recommend using CAML query instead:

SPQuery qry = new SPQuery();
qry.Query =
"  <Where>"
+"    <And>"
+"      <Eq>"
+"          <FieldRef Name='Event' />"
+"          <Value Type='Text'>"+ currentEventItem.Title +"</Value>"
+"      </Eq>"
+"      <Eq>"
+"          <FieldRef Name='Attendee' LookupId='TRUE' />"
+"          <Value Type='Integer'>"+ currentUser.ID.ToString() +"</Value>"
+"      </Eq>"
+"    </And>"
+"  </Where>";
SPListItemCollection listItems = spList.GetItems(qry);
bool foundUsers = listItems.Count > 0;

The query above searches by Event field (type "text" as in your example) and by Attendee user Id without user login Name. Also it retrieves only items, that fall whithin the query where clause.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top