SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Listenübergreifender Event Receiver

Unbeantwortet Dieser Beitrag hat 15 Antworten

Ohne Rang
32 Beiträge
Exes Forum erstellt 9 Juni 2011 13:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich möchte gerne einen Event Receiver für die Liste x haben, der per ItemAdding den Wert eines Feldes an die Werte eines anderen Feldes einer anderen Liste anhängt.

Also: Die Liste mit dem EventReceiver hat Seminarinfo und Teilnehmer (ein einzelner), die andere mehrere Spalten aber unter anderem Seminarteilnehmer und Seminarinfo. Ich möchte nun, dass der Teilnehmer der ersten Liste an die Seminarteilnehmer der zweiten Liste angehängt wird und zwar in dem Item, wo Seminarinfo übereinstimmt.

Ich bekomme es jedoch momentan nicht hin, dass entsprechende Item bzw. Feld zu selektieren. Auf das Feld der Liste mit dem EventReceiver greife ich per properties.Afterproperties zu.

Gruß

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2011 13:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du mußt das Element in der anderen Liste über eine Abfrage suchen:
http://blogs.evocom.de/af/archive/2010/12/03/caml-anfragen-in-sharepoint.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 9 Juni 2011 13:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi!

Danke, ich bin gerade auch auf diesen CAML Builder von U2U gestoßen und werde mich damit mal versuchen.

Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 9 Juni 2011 13:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

using (SPSite Site = new SPSite("http://moss2007-bib:5555"))
            {
                SPWeb web = Site.OpenWeb();

                SPList list = web.Lists["Seminarinstanzen"];

                String teilnehmer = properties.AfterProperties["Teilnehmer"].ToString();
                String seminar = properties.AfterProperties["Seminarwahl"].ToString();
                //SPField found;
                //SPList list = SPContext.Current.Web.Lists["Seminarinstanzen"];

                SPQuery spQuery = new SPQuery();
                spQuery.Query = @"<Where>
                                    <Eq>
                                        <FieldRef Name='Seminar_x0020_Info' />
                                        <Value Type='Calculated'>"+seminar+@"</Value>
                                    </Eq>
                                   </Where>";

                SPListItemCollection listItemCollection = list.GetItems(spQuery);

                foreach (SPListItem listItem in listItemCollection)
                {
                    listItem["TeilnehmerTest"] += teilnehmer + ";";
                   
                }

 

Das ist mein bisheriger Versuch aber irgendwie passiert nicht wirklich was :) Kann ich eine Zuweisung in der Art machen?

 

Gruß!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2011 14:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Eigentlich sollte der Compiler das gar nicht erst annehmen ;-)

listItem["TeilnehmerTest"] liefert den Typ object, den man nicht einfach mit einem string verketten kann. Außerdem mußt Du listItem.Update() aufrufen, damit die Änderungen gespeichert werden.

Falls das alles nicht hilft: schau Dir die Sache im Debugger an, dann erfährst Du, was wo drinsteht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 9 Juni 2011 14:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aber wie kann ich denn dann den "teilnehmer" unter "TeilnehmerTest" hinzufügen? Ich habe mir ein Beispiel zu CAML angesehen und da wird über die Console auch listItem["IRGENDWAS"] ausgegeben. Somit muss das doch eigentlich auch ein String sein oder nicht?!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2011 14:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Je nach Feldtyp ist das schon ein string. Console.WriteLine() akzeptiert allerdings auch ein object, das muß also nichts heißen (bei object wird intern auch einfach ToString() aufgerufen).

Das sind jetzt aber wirklich Grundlagen des Programmierens:

string tn = listItem["Teilnehmer"] as string;
if (!string.IsNullOrEmpty(tn)) {
 tn += "mehr Text";
 listItem["Teilnehmer"] = tn;
 listItem.UUpdate();
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 9 Juni 2011 14:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok das hab ich gerade auch schon versucht. Ich habe das Programm mal debuged und wie es aussieht läuft er gar nicht wirklich durch die foreach Schleife?! Es sieht so aus, als sei die listItemCollection einfach leer. Im Query findet er aber das richtige Item.

 

Gruß

Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 9 Juni 2011 14:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok das hab ich gerade auch schon versucht. Ich habe das Programm mal debuged und wie es aussieht läuft er gar nicht wirklich durch die foreach Schleife?! Es sieht so aus, als sei die listItemCollection einfach leer. Im Query findet er aber das richtige Item.

 

Gruß

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2011 15:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da widersprichst Du Dir aber: entweder die Query findet was (dann ist es auch in der Collection) oder eben nicht. Schau Dir die fertige Query nochmal genauer an und teste, ob sie z.B. im CAML-Builder ein Ergebnis liefert.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 9 Juni 2011 16:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Moin,

Noch eine Anmerkung zum Code - verwende:

using(SPWeb web = site.OpenWeb())
{
    dein Code
}

für ein Dispose des Web-Objekts.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 10 Juni 2011 11:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank für die Hilfen! Ich habe es jetzt umsetzen können, dass mir die Werte die ich haben möchte auch richitg angezeigt werden. So langsam beginnt man auch ein paar Zusammenhänge zu verstehen ;) Allerdings habe ich jetzt das Problem, dass ich die Ausgabe nicht wie bisher in ein einfaches Textfeld anfügen möchte, sondern ein cascading lookup feld um einen wert erweitern möchte. Ich finde bislang nur keinen Hinweis bezüglich des Zugriffs auf so ein Feld.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Juni 2011 11:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist kein SharePoint-Standard und es gibt im Web mehrere Umsetzungen. Schau Dir einfach im Debugger den Wert eines solchen Feldes an, dann weißt Du mit was Du es füttern mußt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
32 Beiträge
Exes Forum Als Antwort am 10 Juni 2011 12:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vermutlich ne dumme Frage, aber ich habe das Lookupfeld mit dem Namen "Teilnehmer auswählen". Ich möchte dies jetzt CAML Query und dann mit listItem["Teilnehmer auswählen"] auslesen. Bin mir jetzt nicht sicher ob das so beim Lookup überhaupt geht aber wollte nur mal sehen was da überhaupt drin steht. Allerdings bekomme ich beim debugn die Fehlermeildung, dass er das Feld nicht kennt und vermute, dass dies an dem "ä" liegt?! Wie kann ich das umgehen? ich habe auch schon versucht den InternalName aus der URL zu ziehen ( Teilnehmer ausw%5Fx00e4%5Fhlen).

 

Die Fehlermeldung ist: Value does not fall within the expected range.

 

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 10 Juni 2011 12:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

also im Internalname ist ziemlich sicher kein Leerzeichen. Wenn Du die Listeneinstellungen aufrufst und dort die Spalte anklickst bkommst Du in der URL den Internalname angezeigt.

Alternativ einmal mit dem SharePoint Manager suchen.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de