Benutzer mit den meisten Antworten
Code-Änderung nach Office-Update erforderlich?

Frage
-
Wir haben eine SharePoint 2010 Farm mit zwei Webfrontends, die auf SharePoint SP2 gepatcht war (10.12.2014), davor war SP1 installiert. Wir hatten darauf entwickelt und Codeanpassungen vorgenommen und hatten in der Zwischenzeit einige weitere Microsoft-Updates installiert. Es ergab sich am 29.07.2015 die Gelegenheit, alle wartenden Updates zu installieren, u. a. waren auch Office Updates enthalten:
- Sicherheitsupdate für Microsoft SharePoint Server 2010 (KB3054968) -Farmbereitstellung - http://support.microsoft.com/kb/3054968
- Update für Microsoft Office 2013 (KB3023069) 64-Bit-Edition - http://support.microsoft.com/kb/3023069
- Sicherheitsupdate für Microsoft SharePoint Foundation 2010 (KB3054847) -Farmbereitstellung - http://support.microsoft.com/kb/3054847
- Sicherheitsupdate für Microsoft SharePoint Server 2010 (KB3054833) -Farmbereitstellung - http://support.microsoft.com/kb/3054833
Direkt im Anschluss fiel uns auf, dass unser Ein- und Auschecken von Dokumenten Fehler warf - allerdings können wir nicht nachvollziehen, inwieweit das Problem schon mit Microsoft-Updates aufgetreten ist, die nach SP2 vorgenommen wurden. In dem Zeitraum nach der SP2-Installation (ohne weitere Updates), gab es diese Problematik noch nicht.
Hier Codebeispiele wie die Implementation zuvor funktionierte und wie der Workaround danach aussah.
Vorher (plain SP2):
SPFile file = web.GetFile(fileUrl); file.CheckOut(); {…} file.CheckIn("comment"); [oder: file.CheckIn("comment", SPCheckinType.OverwriteCheckIn);] file.Update(); file.Publish("comment"); file.Update(); file.Approve("comment"); file.Update();
Nachher (nach Office-Updates):
SPFile file = web.GetFile(fileUrl); file.CheckOut(); {…} try { file.CheckIn("comment", SPCheckinType.OverwriteCheckIn); } catch (Exception) { file.CheckIn("comment"); } // hier wird einfach ausprobiert, welches .CheckIn funktioniert file.Publish("comment"); try { file.Approve("comment"); } catch (Exception) { file.Approve("comment"); } // erstes .Approve schlägt immer fehl, auch ein vorheriges .Update löst eine Exception aus
Ergänzend:
- Das Löschen überflüssiger Versionen (SPListItemVersion) ignoriert den Status (SPFile.SPCheckOutType) von Seiten und führt ggf. zu unvorhergesehenem Verhalten.
- Der erste Versuch der Annahme (SPFile.Approve) einer zur Veröffentlichung markierten Seite (nach SPFile.CheckIn durch SPFile.Publish) im selben Kontext führt zu einer Ausnahme. Wenn direkt danach versucht wird, die Annahme erneut vorzunehmen, klappt es im zweiten Versuch. Alternativ kann der entsprechende übergeordnete Container (z. B. SPWeb oder PublishingWeb) freigegeben und neu instanziiert werden, um die Inhaltsveröffentlichung abzuschließen.
- Das vorher erforderliche Schreiben von Änderungen an einer Seite in die Datenbank bei Eincheck-Prozeduren (SPFile.Update) scheint obsolet zu sein, jedenfalls erzeugt es oftmals eine Ausnahme.
Wir haben seitdem keine Microsoft-Updates mehr installiert.
Bei diesem Workaround handelt es sich nicht um eine finale Version, es war eine Zwischenversion, die so in dieser Art funktionierte. Im Falle, dass wir auf einer SPSite mit den System-Credentials arbeiten, sollte der korrekte Weg für das Aktualisieren eines SPFile - nach meinem Verständnis - folgendermaßen lauten:
- SPFile.CheckOut
- SPFile.Update (?)
- [Änderungen am SPFile vornehmen]
- SPFile.Update
- SPFile.CheckIn
- SPFile.Publish
- SPFile.Approve
Jedenfalls erwarte ich in keinem Fall eine Fehlermeldung, sofern das ursprüngliche SPFile vorher ordentlich eingecheckt war und die vorgenommenen Änderungen erlaubt sind.
- Ist die skizzierte Vorgehensweise korrekt?
- Wo können wir Informationen dazu erhalten, inwieweit es Änderungen an SharePoint 2010 gegeben hat, die Änderungen in oben genannter Art erforderlich gemacht haben könnten?
- Gibt es ein Office-Update, das zu einer Änderung der API-Verwendung geführt hat?
Vielen Dank im Voraus!
Antworten
-
Hi Jochen,
so eine Übersicht wirst Du vermutlich nicht finden. Mit einem Update, CU oder Patch werden üblicherweise Probleme beseitigt, die meist Sicherheitsaspekte betreffen. Programmierfehler können im SharePoint schnell zu Instabilitäten der Farm führen. Das beste Beispiel dafür sind fehlende oder falsch gesetzte Dispose's. Keiner wird Dir eine Übersicht bringen, auf welche Programmierfehler der SharePoint nach einem Update anders reagiert.Ich habe bewusst auf das erneute GetFile hingewiesen, weil auch das Caching immer verbessert wird. Caching kann dazu führen, dass vorher genutzte Objekte ohne Nachladen nicht mehr aktuell sein können.
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert Teodora MilushevaModerator Mittwoch, 16. Dezember 2015 11:18
Alle Antworten
-
Hi Jochen,
ich habe mir angewöhnt, nach solchen Operationen das Objekt neu aus der Datenbank zu laden, d.h. nach Update ein erneutes GetFile. Hast Du das mal probiert?--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert Teodora MilushevaModerator Mittwoch, 16. Dezember 2015 11:18
- Tag als Antwort aufgehoben Jochen.SL Mittwoch, 16. Dezember 2015 11:22
-
Hallo Peter,
danke, ein guter Hinweis, das habe ich noch nicht probiert. Ein erneutes Laden des SPFile aus der Datenbank scheint mir tatsächlich sinnvoll.
Die übrigen mich brennend interessierenden Fragen in diesem Gesamtzusammenhang lauten nach wie vor:
- Wo können wir Informationen dazu erhalten, inwieweit es Änderungen an SharePoint 2010 gegeben hat, die Codeanpassungen in oben genannter Art erforderlich gemacht haben könnten?
- Gibt es ein Office-Update, das zu einer Änderung der API-Verwendung geführt hat?
Sollte es ein detailliertes Changelog geben, das erforderliche Änderungen erklären würde, könnte ich mir dies als Vorlage nehmen, um die Todos besser zu planen und im Nachhinein zu begründen. Also vielen Dank vorab für jegliche diesbezügliche Information! -
Hi Jochen,
so eine Übersicht wirst Du vermutlich nicht finden. Mit einem Update, CU oder Patch werden üblicherweise Probleme beseitigt, die meist Sicherheitsaspekte betreffen. Programmierfehler können im SharePoint schnell zu Instabilitäten der Farm führen. Das beste Beispiel dafür sind fehlende oder falsch gesetzte Dispose's. Keiner wird Dir eine Übersicht bringen, auf welche Programmierfehler der SharePoint nach einem Update anders reagiert.Ich habe bewusst auf das erneute GetFile hingewiesen, weil auch das Caching immer verbessert wird. Caching kann dazu führen, dass vorher genutzte Objekte ohne Nachladen nicht mehr aktuell sein können.
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert Teodora MilushevaModerator Mittwoch, 16. Dezember 2015 11:18