Frage

Mein Gebrauchsfall:

Ich versuche, ein Event-Management-System mit dem visuellen Web-Teil (s) in SharePoint umzusetzen.

Ich habe zwei benutzerdefinierte Listen, man heißt "Events". Nehmen wir an, es hat einen Spalte "Titel", der die Ereignisdetails in einem DisplayForm anzeigt (das außerordnähige Titelfeld, eigentlich) und einige andere nicht relevante Details in anderen Säulen.

Die zweite Liste heißt "Teilnehmer". Es gibt zwei Spalten, zuerst: "Teilnehmer" (Benutzerfeld, das den Anmeldenamen des aktuellen Benutzers erhält). Zweitens: "Ereignis" (im Moment: Zeichenfolge des Ereignis-Titels).

an meinem visual webPart (via cot toolpaneview= 2 über Anzeigeformular der "Ereignisse" -List) I Show Schaltflächen ("Registrieren" und "ResiRegister"), abhängig vom folgenden Code: generasacodicetagpre.

Problem bei diesem Ereignis-Fall: Wenn der Ereignis-Titel ("Titel") später in der Ereignisliste geändert wird, bekomme ich keinen korrekten Mapping-Teilnehmer=> Ereignis, denn ich schaue gerade auf das Matching Titel-Saiten.

Bevorzugte Lösung: Erstellen Sie die Spalte "Ereignis" an der Attees-Liste einer Lookup-Spalte, die das eigentliche Ereignis (ID und den Titel, ich denke, den Titel in der "Teilnehmer" -Liste "Ereignis", die "Ereignis" abgibt. Wenn also der Titel später in den "Ereignissen" -List geändert wird, aktualisiert die Teilnehmerliste automatisch die verweisenden Einträge in seiner "Event" -Column, und ich kann das "Registrieren" / "Unregel" -Button (abgesehen von mit einer korrekten Mapping, die sicher notwendig ist;)).

Es wäre groß, wenn jemand mir eine Lösung / Tint geben könnte, wie man dies programmgesteuert macht, denn ich verstehe es nicht zur Arbeit.

beste Grüße, Dominik

p.s. Ich bin Deutsch, also hoffe ich, dass Sie meine Frage verstehen. Fühlen Sie sich frei, um weitere Details zu fragen! Ich werde mein Bestes geben, um es in richtigem Englisch zu erklären.

edit 1: Hier ist auch meine SO-FAR ADDattendee-Methode: generasacodicetagpre.

War es hilfreich?

Lösung

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top