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.




Built-in web Service + Eventreceiver Problem

Geprüfte Antwort Dieser Beitrag hat 7 Antworten

Ohne Rang
163 Beiträge
Markus Sallmutter erstellt 2 Apr. 2013 11:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Community!

Ich verwende das Standard Copy Service von SharePoint um ein File in eine Bibliothek zu laden und 4 Metadatenspalten zu befüllen.

Das hochladen und setzen der Metadaten funktioniert einwandfrei, jedoch habe ich an diese Bibliothek auch einen Eventreceiver angehängt, der Metadaten aus dem File ausliest und setzt.
Das Problem hierbei ist, dass der Eventreceiver die Metadaten nicht setzt, was daran liegen könnte, dass nach dem hinzufügen noch das Webservice auf das Item zugreift und daher der Eventreceiver keinen Zugriff hat.

Hat irgendwer eine Idee wie ich das Problem beheben kann? Wenn ich das File über das UI hochlade funktioniert der Eventrecevier problemlos.

Bin für jede Hilfe dankbar :)

Mfg
Markus

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 Apr. 2013 11:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Auf welches Ereignis lauscht der EventReceiver und wieviele Aufrufe machst Du auf den Service (also z.B. erst hochladen und dann update)?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 2 Apr. 2013 13:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für deine Antwort Andi :)

Also ich rufe nur einmal die Methode CopyIntoItems auf, bei der man das file als Byte[] und die Metadaten als FieldInformation[] mitgibt.

Mit dem Funktionsaufruf wird das file in der Library abgelegt und meine 4 Metadaten Spalten befüllt.

Der Eventreceiver auf der Library ist ein Mailhandler, der aus einer Mail informationen wie Absender Betreff usw ausliest und in die entsprechenden Metadatenspalten schreibt. Leider kann ich nicht genau sagen auf welches Event er anspringt (vermutlich ItemAdding oder ItemAdded), da es sich um eine Drittanbieter Lösung handelt.

Mfg
Markus

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 Apr. 2013 13:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nur damit ich das richtig verstehe: Du hast eine Bibliothek, die eingehende Mails empfängt und in die Du per CopyIntoItems Dateien einfügst? Also zwei Dinge vermischt, die nicht unbedingt zusammengehören. Und was macht die Drittanbieter-Lösung?

Es gibt ein MailReceived-Ereignis, das nicht direkt mit ItemAdding oder ItemAdded zusammenhängt. Es sollte eigentlich auch nur ausgelöst werden, wenn wirklich eine Mail eingeht und nicht wenn man manuell eine Datei hochlädt.

Ich denke Du kommst hier nur durch ausgiebiges Debugging weiter...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 2 Apr. 2013 13:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also die Bibliothek wird nicht über eine Mailadresse angesteuert wenn du das meinst. Sie hat einfach aufgrund des Templates die Spalten für die Mailinformationen und der Eventreciever befüllt dieses wenn man eine Mail hochlädt. Dieser Eventreceiver ist nicht von mir programmiert, daher weiß ich leider nicht genau wie er funktioniert...

Ich habe ein Webservice entwickelt, das aus einem anderen Programm aufgerufen wird und sich der CopyIntoItems Funktion des Copywebservices bedient um ein File(in meinem Fall eine Mail) mit bestimmten Metadaten aus dem Aufruf meines Services in die Bibliothek zu laden.

Danach wäre es wunderbar wenn der Event receiver auf der Bibliothek anspringt und die Mailinfos ausliest, aber genau das passiert nicht.
Ich kann noch nicht genau sagen ob er garnicht getriggert wird oder ob er abbricht, ich weiß nur das die Metadaten nicht gesetzt werden.

Ich habe mir schon gedacht das es knifflig wird dieses Problem zu lösen und bin für jeden Ansatz dankbar :)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 Apr. 2013 16:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da Du den EventReceiver nicht entwickelt hast, sehe ich keine Möglichkeit das Problem zu lösen. Falls der wirklich auf eingehende Mails reagieren soll, behandelt er wohl (wie oben geschrieben) das MailReceived-Ereignis und das wird von Deiner Aktion nicht getriggert.

Ich sehe da nur zwei Ansätze: entweder der EventReceiver wird umgebaut oder Du änderst Deine Aktion so um, daß wirklich eine Mail verschickt wird.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 3 Apr. 2013 08:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für deine Antwort Andi.

Ich glaube nicht das es daran liegt das ich keine Mail sende, da der Eventreceiver ja getriggert wird wenn ich im Browser auf add Document klicke und eine Mail in die Bibliothek einfüge.

Wie gesagt glaube ich das das Problem im Zugriff auf das Item liegt, bei dem sich das WebService und der Eventreceiver in die Quere kommen, ich sehe jedoch keine Möglichkeit wie ich das verhindern kann.

Ich werde mir wohl noch ein Paar gedanken machen müssen, ob ich das Mail nicht anders in die Bibliothek einfügen sollte um den Eventreceiver funktional zu halten.

Danke nochmals für deine Hilfe :)

Mfg
Markus

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 3 Apr. 2013 13:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nur zur Vollständigkeit hier mein Lösung:

Ich habe den Aufruf des webservices aufgegeben und greife nun auf das COM(Client object Model) vom Sharepoint zurück.

Mit diesem kann ich das File das ich als Byte[] erhalte problemlos in die Library einfügen und der Eventreceiver wird korrekt ausgeführt.
Auch die 4 Metadatenspalten, die der Eventreceiver nicht befüllt kann ich mit Hilfe des COMs befüllen. Hier ein kleiner Code Ausschnitt falls jemand eine ähnliche Anforderung hat:

 ClientContext cc = new ClientContext(webFullUrl);
NetworkCredential nc = new NetworkCredential(user, password, domain);
cc.Credentials = nc;
Web web = cc.Web;

List list = web.Lists.GetByTitle("Igel");
FileCreationInformation fci = new FileCreationInformation();
fci.Content = documentBinary;
fci.Overwrite = true;
fci.Url = destinationUrls[0];
Microsoft.SharePoint.Client.File newFile = list.RootFolder.Files.Add(fci);

newFile.ListItemAllFields["storeNumber"] = storeNumber;
newFile.ListItemAllFields["company"] = company;
newFile.ListItemAllFields["igelID"] = igelID;
newFile.ListItemAllFields["igelMetadata"] = igelMetadata;

newFile.ListItemAllFields.Update();
cc.ExecuteQuery();

Mfg
Markus