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.




EventReceiver + Explorer View

Unbeantwortet Dieser Beitrag hat 8 Antworten

Ohne Rang
163 Beiträge
Markus Sallmutter erstellt 15 Jan. 2014 16:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community!

Ich arbeite derzeit an einem Eventreceiver der die DPI eines hochgeladenen Bildes als Metadaten eintragen soll.

Ich weiß schon wie ich die DPI auslesen kann und der Code funktioniert auch Prima wenn das Bild über die Oberfläche hochgeladen wird. Probleme treten allerdings auf, wenn ein oder mehrere Bilder via Explorer-Ansicht in die Bibliothek geladen werden.

Hierbei bekomme ich im ItemAdded die Fehlermeldung "Parameter not valid".
Der Fehler tritt bei folgender Codezeile auf:

Image img = System.Drawing.Image.FromStream(properties.ListItem.File.OpenBinaryStream());

Ich brauche diese Zeile um anschließend die DPI aus img auslesen zu können.
Ich poste hier nochmal den ganzen Code der Funktion, vielleicht kann mir jemand hierbei weiterhelfen.

Image img = System.Drawing.Image.FromStream(properties.ListItem.File.OpenBinaryStream());
System.Drawing.Image img = System.Drawing.Image.FromStream(properties.ListItem.File.OpenBinaryStream());
EventFiringEnabled = false;
properties.ListItem[fieldname] = Math.Round(img.HorizontalResolution);
properties.ListItem.SystemUpdate(false);
EventFiringEnabled = true;

Bin für jeden Tipp dankbar :)

LG

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Jan. 2014 08:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ist nur eine Vermutung, aber ich nehme an, daß in dem Fall die Datei noch nicht eingecheckt ist. Das kannst Du im ItemAdded prüfen, um den Fehler zu umgehen. Und Du kannst zusätzlich das CheckedIn-Ereignis behandeln, für die Bilder, die per Explorer hochgeladen werden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 16 Jan. 2014 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi, danke für die Antwort!

Also wenn ich im Debug-Mode prüfe ist das File eingecheckt, also denke ich das hier nicht das Problem liegt.

Ich habe jetzt mal zu Testzwecken das Added Event auskommentiert und verwende nur das Updated Event. Hierbei bekomme ich die Fehlermeldung:

The file [FILENAME] has been modified by [USER] on 16 Jän 2014 14:41:37 +0100.

Der Code zum ändern der Metadaten ist der selbe geblieben.

Hat jemand eine Idee?
Danke im Voraus & LG

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 16 Jan. 2014 15:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, danke für die Antwort!

Diesen Blogeintrag habe ich auch schon gefunden, allerdings tritt das Problem bei mir nicht auf wenn ich das File über das UI uploade, sondern nur wenn ich die Explorer-View verwende. Hierbei kommt kein Editform, es werden einfach die Eventreceiver in folgender Reihenfolge getriggert:

ItemAdded -> ItemUpdated -> ItemUpdated

Warum der ItemUpdated zweimal getriggert wird ist mir auch nicht klar, dadurch erhalte ich die Fehlermeldung gleich 2 mal...

Im ItemAdded habe ich aktuell keinen Code d.h. es gibt auch keinen Fehler bei diesem Event.
Für mich sieht es so aus als wäre der Eventreceiver einfach zu schnell, wenn ich mich an die w3wp.exe anhänge und dadurch den Eventreceiver mittels breakpoint verzögere funktioniert es. Allerdings kann das wohl nicht die beste Lösung sein, einfach ein Thread.sleep einzubauen(habe ich auch noch garnicht versucht), daher versuche ich eine andere zu finden.

Bin für jeden Ratschlag dankbar :)

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 16 Jan. 2014 16:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Doofer Workarround aber den EventReceiver kurz anhalten (Thread.Sleep) eventuell kommt sich da was in die Quere... erst mal zum testen

Beste Grüße,
Christian

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

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 17 Jan. 2014 07:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Habe jetzt ein Thread.Sleep(100) eingebaut, mit dem funktioniert der Code beim ersten Auslösen des ItemUpdated Events.

Allerdings wird es ja zweimal getriggert und so bekomm ich beim zweiten mal wieder den Fehler :(
Also das Ergebniss ist jetzt schonmal richtig, allerdings logge ich alle Aufrufe von custom solutions in eine DB und deshalb müsste ich entweder den Fehler beim 2ten Aufruf beheben oder am besten den 2ten Aufruf garnicht erst machen.

Hat da vielleicht noch jemand eine Idee dazu wie ich das realisieren könnte?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Jan. 2014 08:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Änderst Du selbst etwas innerhalb von ItemUpdated? Wenn Du nämlich properties.ListItem.Update() aufrufst, wird das natürlich als Änderung angesehen und löst damit auch die entsprechenden Events aus (ItemUpdating und ItemUpdated). Du kannst das verhindern, indem Du ein this.EventFiringEnabled=false einsetzt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 17 Jan. 2014 08:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja ich ändere eine Spalte im ItemUpdated, allerdings verwende ich EventfiringEnabled=false; bereits.

Meine Google Suche hat ergeben, das der zweite Aufruf des Receivers vom einchecken des Files kommt. Ich versuche nun das Problem einfach zu umgehen indem ich im Event prüfe ob der Wert in der Spalte schon gesetzt ist und wenn ja einfach das Event ohne Aktion beende, dann sollte es wenigstens keinen Fehler mehr loggen^^