Am 2. Dezember 2009 fand in Düsseldorf der 2. iX Day rund um SharePoint statt. Nach dem Erfolg des ersten iX Tages im Juli sollte sich diesmal alles rund um Sharepoint, speziell Sharepoint 2010 drehen. In über 25 Sessions kam der ambitionierte Sharepointer voll auf seine Kosten. Das Themengebiet erstreckte sich von entwicklerlastigen Vorträgen, welche sich mit der API Unterstützten Programmierung von Sharepoint befassten über Vorträge der administrativen Art bis hin zur neuen Sharepoint Pie.
Vom 22 – 24.09.2009 hatte ich, dank meiner Firma, die Gelegenheit zur Shareconnect & Basta 2009 in Mainz zu fahren. Das ist zwar jetzt schon fast einen Monat her, jedoch will ich euch meine Eindrücke nicht vorenthalten.
Die Shareconnect findet im Rahmen der Basta statt und baut auf den Sharepoint Days auf, welche seit 2007 parallel zur Basta stattfinden. In über 50 Sessions geben Experten Einblicke in die Sharepoint Welt sowohl aus Administratoren Sicht, als auch aus der Sicht von Entwicklern. Da durften auch die Experten von Communardo nicht fehlen.
Nach einem anstrengenen Flug und Bahnerlebnis und einem anschließenden Gewaltmarsch über die Theodor-Heuss-Brücke erreichte ich am 22.09 pünktlich zur ersten Session die Rheingoldhalle in Mainz. Begrüßt wurde jeder Teilnehmer mit dem Basta Survival Pack bestehend aus Rucksack, T-Shirt und allerlei Büromaterial ( Danke nochmal). Danach hat es mich direkt in den Vortrag von Oliver Sturm verschlagen, welcher bereits eifrig über die Zukunft von C# und .NET philosophierte, Co- und Kontravarianz erläuterte und die dynamischen Erweiterungen von .NET 4 vorstellte.
Gott sei dank habe ich mir im Vorfeld bereits die Sessions der Konferenz zusammengestellt, was gar nicht so einfach war. Das Angebot umfasste rund 90 Sessions, wobei jeweils ca. 9 gleichzeitig liefen. Dank des tollen Zeitplaners konnte man aber den Überblick behalten und keine der Veranstaltungen verpassen.
Nach dem Vortrag von Oliver Sturm zog es mich direkt zu der ersten Sharepoint Session von Björn Schneider : “Planung und Aufbau von hochverfügbaren SharePoint-Infrastrukturen”.
Christian Glessner veranstaltete im Anschluss die Sharepoint Freak Show. Hier wurden richtig coole Ansätze gezeigt, Sharepoint mit jQuery, PowerShell, IronRuby oder IronPyhton zu erweitern. Seit Christians Demos, welche den Umgang mit Powershell und Sharepoint zeigten, bin ich richtiger Fan der Powershell geworden.
Weiter ging es mit einer Demonstration wie extrem sich Sharepoint bezüglich seines User Interfaces verbiegen lässt. Michael Hofer zeigte anhand eines Fallbeispieles wie Sharepoint mit Hilfe von Bordmitteln zu einem Intranetportal ähnlich der Startseite von www.bbc.com umgebogen werden kann. Auch wenn die Technik an diesem Tag nicht mitspielte , anhand der Screenshots konnte man schon sehr gut erkennen welche Lesitung in diesem Customizing Projekt erbracht wurde.
Für die letzte Session des Tages habe ich mir “(Keine) Zeit für Herzrasen” von Torsten Weber gegönnt. Am besten ist dieses Thema durch Torstens eigene Worte beschrieben:
Es geht um Handlungsmaximen für eine ausgeglichene Work-Life-Balance, “Entschleunigung” für Fortbildung, Freiräume und Erfolg mit Werkzeugen wie MindManager oder Livescribe.
Obwohl dieser Vortrag so rein gar nichts mit Programmierung oder IT zu tun hat, habe ich es genossen Torstens Worte zu folgen. Wer mehr zu dem Vortrag erfahren möchte kann ihn hier nochmal nachlesen.
So ging er zu Ende dieser erste Tag der Shareconnect & Basta in Mainz. Zwischen den Sessions wurde man durch das Konferenz Team mit reichlich Kaffee, Kuchen, Brötchen und warmen Mahlzeiten am Mittag versorgt. Ganz nebenbei konnte ich nette Kontakte knüpfen und Produkte von Firmen bestaunen. Es gab sogar die Möglichkeit sich massieren zu lassen.
Pünktlich 8:30 ging es dann am Mittwoch mit Bus und Bahn zur Reingoldhalle, zum zweiten Tag der Basta. Nach einer kurzen Auffrischung meiner Webpartentwicklungs – Kentnisse mit Renè Hèzser verschlug es mich zu Manfred Steyers Session “Codequalität mittels Code Contracts und PEX”. Da meine Interessengebiete in Codequalität und Clean Code Development liegen, war ich sehr interessiert daran wie Code mittels Code Contracts besser und sicherer gestaltet werden kann. Zunächst entwickelte Manfred Steyer eine unscheinbare C# Klasse, welche ein Taschengeldkonto verwalten kann. Nach und nach wurden Mängel und Lücken im Quellcode aufgedeckt und anschließend erläutert, wie diese durch Code Contracts und PEX verhindert werden können. Für mich eine der besten Sessions der Basta.

Die letzten drei Sessions für diesen Tag waren sehr von Silverlight 3 geprägt. Los ging es mit Christian Wenz, welcher alle prägnanten Neuigkeiten in Silverlight 3 präsentierte. Dazu gehören Features wie Element Data Binding, 3D Unterstützung oder das legendäre Out Of Browser Funktionalität ![]()
Oliver Scheer schloss sich den Ausführungen von Christian Wenz fast nahtlos an und erläuterte wie Silverlight 3 für Enterprise Business Aplikationen verwendet werden kann. Silverlight 3 bringt dazu schon einiges an Funktionalität mit, wie etwa die eben genannte Out Of Browser Fähigkeit, smooth streaming oder die neuen RIA Services. Obwohl Olivers Vortrag eher sehr multimedialastig gehalten war und ich den Enterprise Aplikations Teil ein wenig vermisst habe war die Darbietung von Oliver wie immer sehr genial. Jörg Krause beendete den Tag mit einem Überblick der Methoden um Webparts in Kombination mit Silverlight zu verwenden.
Selbst den Abend konnte man auf der Basta verbringen indem man sich beispielsweise direkt auf das BASToberfest gesellte.
Der dritte und somit letzte Tag der Basta war für mich komplett von Silverlight und WPF geprägt. So ging es pünktlich 8:30 mit Oliver Scheer und seinen Ausführungen zu “Design the next RIA Generation” los. Nach diesem Vortrag sollte auch der Letzte alle neuen Features von Silverlight 3 kennen
Ob Ton, Bild, Streaming ,Styling oder Skinning.
Markus Egger zeigte in den nachfolgenden 2 Sessions wie WPF & Silverlight Business Applications gestylet und anschließend in wiederverwendbare Komponenten ausgelagert werden werden können. Auch diese beiden Tracks kann ich mit gutem Gewissen zu meinen persönlichen Highlights der Basta zählen. Anhand eines aktuellen Projektes erklärte er wie mit Hilfe von Styling und Skinning die Performance und Usablity einer Applikation gesteigert werden kann. Anschließend zeigte er auf welche Art und Weise Silverlight Komponenten ausgelagert und somit zu wiederverwendbaren Komponenten gewandelt werden können. Auch aus diesen Erläuterungen konnte ich sehr viel für mich mit nach Hause nehmen. Die für mich letzte Session der Basta verbrachte ich bei Jan Blessenohl von Telerik und seinen Ausführungen zu Silverlight und dem RIA Framework.
Vor der täglichen Mittagspause fanden sogenannte KeyNotes statt in denen Sprecher wie Tony Lanni oder aber auch Frank Fischer von Microsoft die Zuschauer unterhielten.Tonny Lanni erklärte in seiner KeyNote “What can Sharepoint do for you” wie sehr er die Sharepoint Fee mag und diese Figur in seiner Firma wiederspiegelt.
Hier nochmal für alle das Video
[youtube]http://www.youtube.com/watch?v=lw-OHO3UMco&feature=PlayList&p=328055501A304058&playnext=1&playnext_from=PL&index=36[/youtube]
Abschließend kann ich feststellen, dass sich die Shareconnect und Basta 2009 für mich persönlich sehr gelohnt hat. Ich konnte viele für mich neue Gesichter kennenlernen und auch viele Anregungen mit nach Hause nehmen.
Ein Teil unserer Kernkompetenzen im Umgang mit Sharepoint, ist die Migration von Altsystemen zu Sharepoint. Ein aktuelles Projekt stellte uns vor die Herausforderung, Inhalte, Stylevorgaben und Meta-Daten mittels XML Import aus einem bestehenden Content Management System 1:1 nach SharePoint zu übernehmen. Besonders problematisch war dabei der Fakt, dass sich innerhalb der Daten Parameter für die Businesslogik versteckten. Diese Logik musste in SharePoint zum Teil nachgebaut und beim Import berücksichtigt werden.
Eine Teilaufgabe des Imports bestand in der Übernahme der eigentlichen Inhalte der Seiten. Diese lagen als barrierefreies HTML vor und mussten deshalb original so in die SharePoint Seite importiert werden.
Meine Aufgabe bestand nun darin, den originalen HTML Inhalt der zu migrierenden Seite in eine Sharepoint Seite zu importieren. Möglichst sollten die Optik (Styles, Bilder, etc.) sowie der Inhalt (inkl. Links, Tabellen etc.) unangetastet bleiben.
Sharepoint bietet dem geneigten Entwickler mit seiner API reichlich Werkzeug um diese Aufgabe zu bewältigen. So kann eine Seite ohne Probleme mit folgenden Programmcode angelegt werden:
PublishingWeb currPublishingWeb = PublishingWeb.GetPublishingWeb(webContext);
PublishingPageCollection pages = currPublishingWeb.GetPublishingPages();
PublishingPage currentPage = pages.Add(pageFileName, layout);
Auf diese Weise ist eine Publishing Page schnell erstellt. Soll diese jetzt auch noch mit Inhalt versehen werden, wird das SPField, das für den Inhalt einer PublishingPage zuständig ist, benötigt.
Das SPField für Inhalte ist das PublishingPageContent Field, das über die FieldId Klasse verwendet werden kann.
SPListItem newFileItem = newFile.Item;
newFileItem[FieldId.PublishingPageContent] = htmlContent;
newFileItem.Update();
Bis hier wurde alles ordnungsgemäß von Sharepoint ausgeführt. Die Seite wurde angelegt und der Inhalt wurde auch gesetzt. Beim näheren Betrachten der neu Erstellten Seite wurde ich jedoch misstrauisch:
Durch dieses Verhalten wurden die importierten Seiten “wertlos” für mich. Alle darauf folgenden Versuche den Inhalt in die Seite zu schreiben schlug fehl. Versucht habe ich folgende Wege:
Da ich das Problem gerne ohne “Dirty Hacks” lösen wollte, entschied ich mich eine Supportanfrage bei Microsoft zu stellen. Dazu sei erwähnt, dass die Anfragen über den Microsoft Support sehr schnell und kompetent beantwortet und abgewickelt werden. Ich sollte meine Antwort von Microsoft bekommen; Leider hieß diese “By design” oder kurz auf deutsch: abgewiesen.
Die Begründung: Mirosoft Sharepoint nutzt einen sogenannten XSS (Cross side scripting) Protection Mechanismus. Dieser sollte verhindern das schädlicher Inhalte (Code) in Sharepoint eingepflegt werden kann.
Davon betroffen ist allerdings auch das HTML Texteingabe Control. Beispielsweise würde dieser Programm – Code wie folgt abgeändert:
original: Das ist ein gutes <SCRIPT>void:alert("hello world")</SCRIPT> Script
verfälscht: Das ist ein gutes Script
Auch “<” oder “>” Zeichen würden wie folgt abgeändert: > – <. Ich empfinde dieses Verhalten als vollkommen richtig und auch nachvollziehbar, wenn es dabei bleiben würde. Es stellte sich herraus dass dieser XSS Filter auch für die Kürzung meiner HTML Inhalte zuständig war. Microsoft selbst kann sich nicht erklären warum dieser Filter solch drastische Änderungen am HTML Quellcode vornimmt. Man riet mir von Seiten Microsoft ernsthaft entweder ein 3rd Party AddOn als Ersatz für den RichTextEditor einzusetzen oder aber die Daten nicht innerhalb Sharepoints zu halten, sondern extern. Keiner der beiden angebotetenen Lösungen erschien mir für unser Projekt auch nur ansatzweise logisch beziehungsweise umsetzbar.
Um die Inhalte dennoch wie gefordert 1:1 importieren zu können, musste nun ein Workaround gefunden werden. Dazu bot sich eine Codierung der beim Import beanstandeten HTML-Tags an. Nach der erfolgreichen Integration der Methoden in unseren Import können nun alle Inhalte wie gefordert übernommen werden.
Beim programmatischen Erstellen von benutzerdefinierten Spalten (SPField) in Sharepoint sind einige Dinge zu beachten und erwarten auch beachtet zu werden. Hält man sich jedoch an die Spielregeln (API Dokumentation) und erzielt trotzdem nicht das gewünschte Ergebniss, ist wahrscheinlich wieder ein Sharepoint Bug gefunden worden. Dies musste ich heute wieder mal schmerzhaft feststellen.
Sharepoint verwendet zwei Namen um Felder zu kennzeichnen. Den internalName sowie den displayName (bzw. Title). Der internalName wird von Sharepoint selbst sowie von dem Sharepoint Objekt Modell verwendet um Spalten(SPField) und Objekte wieder zu erkennen und anzusprechen. Der displayName und die Title – Eigenschaft werden verwendet um die Darstellung der Spalten zu steueren. So können eindeutige Namen Verwendung finden um Objekte eindeutig anzusprechen. Gleichzeitig kann der Anzeigename variabel gestaltet werden.
So hatte ich versucht eine Sharepoint Spalte über die API zu erstellen und anschließend zur SPFieldCollection einer Liste hinzuzufügen.
Dies funktionierte mit den folgenden Codeschnipseln auch sehr gut.
SPField currField = colFields.CreateNewField(SPFieldTypeString, displayName);
currField.staticName = internalName;
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);
Anschließend beim Beschreiben der Spalte gingen jedoch die Probleme los.
SPField newField = newItem.Fields.GetFieldByInternalName(internalFieldName);
Laut API Dokumentation und MSDN welche besagt, dass der staticName dazu dient, um den internalName zu setzen, wäre der obige Programm – Code richtig. (“Gets or sets the internal name of the field.”)
Das Ausführen der Methode verursachte eine ArgumentException mit der Meldung: Value does not fall within the expected range.
Darfaufhin begann ich ein wenig weiter zu forschen (Danke an Sharepoint Manager) und fand herraus, dass die AddFieldAsXml Methode in Verbindung mit einem SPField welches mit CreateNewField erzeugt wurde einen Bug von Sharepoint hervorruft. AddFieldAsXml setzt den displayName wie angegeben, aber leider auch den internalName mit dem Wert des display Namens. Das hat zur Folge, dass die Spalten nicht mehr über den interalName ansprechbar sind.
Wer jetzt also vor genau diesem Problem stehen sollte, hat zwei schnelle Möglichkeiten.
Workaround:
Die Lösung des Problems ist regelrecht simpel. Es wird der gleiche obige Code verwendet um das SPField zu erstellen, jedoch als displayName der internalName gesetzt. Dadurch legt Sharepoint die Spalte mit dem richtigen internalName an. Sobald die Spalte angelegt wurde, muss nur noch der displayName geändert werden.
string internalName = "internerName";
string displayName = "displayName";
SPField currField = colFields.CreateNewField(SPFieldTypeString, internalName);
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);
SPField rewriteField = colFields[internalName];
rewriteField.Title = displayName;
rewriteField.Update();
Wird die GetField- oder GetFieldByInternalName - Methode jetzt mit dem internalName aufgerufen liefert sie die gewünschte Spalte.
Am Donnerstag den 11.06.2009 fand unser 4. Treffen der Sharepoint Usergroup Dresden in den Räumen der T-Systems MMS statt.
Für unser gestriges Treffen konnten wir Steffen Krause (Technical Evangelist, Microsoft Deutschland) gewinnen. Sein Vortrag stand unter dem Thema ” SQL Server Grundlagen für SharePoint Administratoren”. In einem interessanten Vortrag erläuterte er die Unterschiede der verschiedenen SQL Server Editionen, wie man seine Hardware für den Einsatz mit SQL Server plant und zeigte verschiedene Tools für den Einsatz mit Datenbanken.
Im zweiten Teil seines Vortrages erläuterte er die Besonderheiten von SQL Server für den Umgang mit Sharepoint und welche Grenzen durch das System gesetzt sind. Ein anschließender Überblick über Performanceüberwachung innerhalb von Sharepoint sowie der dazugehörigen Datenbankwartung rundete den Vortrag ab.
Die uns näher gebrachten Best Practices in Umgang mit Sharepoint sowie SQL allgmein festigte er mit einer anschließenden Demo des SQL Servers und seiner verschiedenen Wiederherstellungsmethoden.
Hier mal die versammelte Runde:

Interessante Links:
Defragmentieren von Windows SharePoint Services 3.0- und SharePoint Server 2007-Datenbanken
Folien zu dem Vortrag:
XTOPIA [kompakt] – die UX/Web/RIA Roadshow 09 tourt zur Zeit durch Deutschland und wir (die Microsoft Freaks bei Communardo
) waren am 12.05.2009 in Berlin dabei.
Zu sehen und hören gab es eine Menge an bekannten und neuen Themen, die da waren: User Experience und Windows 7, Internet Explorer 8, Windows Live Services, Silverlight, Microsoft Surface sowie Visio für Webentwickler. Leider habe ich im Web bisher nirgendwo die Slides der Vorträge zum Download gefunden, lediglich für den Vortrag zu Windows Live Services gibt es hier einen Preview der Slides.
Besonders hervorheben möchte ich hier 2 Vorträge: Der Vortrag “Mit Microsoft Silverlight Next Generation Rich Internet Applications entwickeln” von Oliver Scheer zeigte anschaulich, was mit Silverlight so alles geht, wie Expression Blend effektiv eingesetzt werden kann und welche Neuerungen in der nächsten Version zu erwarten sind. Mit dem Video Sehen heißt verstehen! schaffte Florian Müller einen effektvollen Einstieg in seinen gleichnamigen Vortrag zum Einsatz von Visio für Webentwickler. Der zog sich mit solchen Aussagen wie “Visio ist die Reinkarnation der doppelten Negation” durch den gesamten Vortrag, besonders interessant fand ich die Tipps, bei Bedarf die Shape Sheets in Visio anzupassen und den Built-in Website-Dokumentierer zu verwenden sowie den Verweis auf visiotoolbox.com mit einer Menge Tipps, How-Tos und kostenlosen Add-Inns.
Zusätzlich gab es auch noch ein paar “Werbevorträge”, die sich aber meist in erträglichem Rahmen hielten und für das Sponsoring einer solchen Veranstaltung wohl unumgänglich sind. Immerhin war die Teilnahme kostenlos – sogar incl. Catering
.
Alles in allem kann man konstatieren, dass der Ausflug nach Berlin sich gelohnt hat, gerne mal wieder!
Update vom 14. Mai 2009:
Langsam sickert immer mehr durch. So war heute bei Mary Jo Foley folgendes zu lesen:
Inhalt vom 11. Mai 2009:
Das SharePoint Team hat jetzt offiziell die voraussichtlichen Systemanforderungen von SharePoint 2010 bekannt gegeben.
Weiter heißt es:
Voller Beitrag unter: http://blogs.msdn.com/sharepoint/archive/2009/05/07/announcing-sharepoint-server-2010-preliminary-system-requirements.aspx
Im Anschluss an die kurze Präsentation auf der SharePoint UserGroup habe ich Silverlight und unseren Prozess-Editor in etwas erweiterter Form an der HS Zittau/Görlitz vorgestellt. Näheres dazu kann man im Bereich Meldungen der Hochschule nachlesen: Kolloquium im Fachbereich Informatik: Silverlight 2.0 im Unternehmenseinsatz.
Interessant fand ich in den Gesprächen vor und nach dem Vortrag, dass obwohl an der HS eher Java vorherrscht, sich die Studenten anscheinend eher für C# entscheiden, wenn sie ihre Programmiersprache frei wählen können.
Als wir kurz das Thema Linux-Support gestreift haben (Stichwort: Moonlight) tauchten auch direkt Fragen zu den Lizenzen für die Multimedia-Codecs auf.
Ich habe deshalb jetzt im Anschluss nochmal ein wenig recherchiert: Die Zusagen von Microsoft zum Thema Moonlight kann man nachlesen unter: http://www.microsoft.com/interop/msnovellcollab/moonlight.mspx.
Und zum Thema Multimedia-Codecs gibt es außerdem einen interessanten Blog-Eintrag über das Microsoft Media Pack.
An Silverlight und einem seiner meist gepriesenen Features, nämlich Deep Zoom, dürften mittlerweile die meisten Entwickler von Web-Anwendungen schon einmal vorbeigekommen sein.
Ein paar der prominenteren Beispiele: Obama Headlines, A Website Named Desire, Deep Zoom Obama, die Hard Rock Cafe Memorabilia Wall, DeepLOL, die Website des Renault Laguna Coupé, etc.
Die Vertigo Software Inc. wirbt sogar mit dem Claim “Zoom is the new click“.
Man muss kein Zauberkünstler sein, um selbst ein Deep Zoom Bild erstellen zu können.
Dazu lädt man sich einfach den Deep Zoom Composer herunter, mit dem man bequem ein Deep Zoom Image (.dzi) erzeugen kann. (Hilfe, inkl. bebilderter Anleitung)
Was vielleicht weniger bekannt ist:
Man kann die Deep Zoom Images auch schnell und einfach online erstellen lassen, mit dem Microsoft Live Labs Projekt “PhotoZoom“.
Ich habe dort mal eine Deep Zoom Version des Canaletto-Blicks erstellt.
Deep Zoom – Demo (Silverlight)
Aber es geht noch weiter! Für Umgebungen in denen Silverlight nicht verhanden oder nicht möglich ist, kann man die DZI-Bilder auch mittels der Seadragon Ajax Bibliothek anzeigen lassen.
Deep Zoom – Demo (Seadragon Ajax)
Viel Spaß beim Zoomen!
Seit Herbst 2008 bietet Microsoft mit den Microsoft Chart Controls für Microsoft .NET Framework 3.5 sowohl für ASP.NET als auch für WinForms-Anwendungen kostenlose Controls an, mit denen man schnell ansprechende und aussagekräftige Diagramme generieren kann.
Die Installation zusätzlicher Runtimes auf dem Server bzw. Client, wie z.B. bei Crystal Reports, entfällt. Einzige Voraussetzung ist ein installiertes .NET Framework 3.5 SP1.
Zu den Hauptmerkmalen gehören:
Hier bekommt man also eine ganze Menge geboten. Ich finde das ist definitiv einen Blick wert. Es ist sicher nicht so mächtig wie manch andere Werkzeuge für das Reporting, aber um einfach nur ein paar Diagramme zu erzeugen, ist es zumindest eine willkommene Alternative.
Der Einbau in eine ASP.NET Seite kann so einfach aussehen:

Die Ergebnisse können z.B. so aussehen:

Links:
Releaseparty at Atlassian? Confluence 3.2 BETA and 3.1.2 with soms bugfixes were released yesterday. [...]
Tino Schmidt's Vortrag zu Enterprise Mashups auf der webciety, 4.3 Remix the Web http://bit.ly/d26rtA [...]
neuer Blogpost: February Cumulative Update (2010) http://bit.ly/cwxZGE [...]
Webinar am 16.03.: „Communote Enterprise Microblogging - Funktionen und Einsatzbereiche im Unternehmen“ http://bit.ly/96eexF [...]