Ich und SharePoint Online. WTF?
In den letzten Tagen hat man mich, nach entsprechenden Äußerungen von mir auf Facebook und Twitter, mehrfach darauf angesprochen warum ich plötzlich was mit SharePoint mache ... gerade ich.
Meine Meinung zu SharePoint ist sicherlich einigen bekannt. Ich mag es nicht. Ich mochte nicht damit entwickeln da es keinen Spaß macht einen SharePoint zu installieren oder Anwendungen darin zu deployen. Es ist ein Monster was ohne Ende Resourcen braucht was die Entwicklung auch nicht verbessert oder vereinfacht. Roundtrips bei der Entwicklung brauchen ewig. Einen SharePoint mit bestehenden Anwendungen auf eine neue Version zu heben ist kein zuckerschlecken. Und für sehr viele Anwendungsfälle ist SharePoint auch einfach die falsche Lösung und wird nicht gebraucht.
Auch habe ich in den Jahren 2007-2009 etliche SharePoint Consultants getroffen und gesprochen die noch nicht mal einfachstes ASP.NET Grundwissen hatten. Dies und mehr hat nicht zu einer positiven Meinungsbildung beigetragen habem.
Jedoch hat das SharePoint Marketing die Chef-Etagen sehr gut erreicht und es wird für einfachste Web-Seiten oft auf SharePoint gesetzt. Je größer die Firma je eher SharePoint.
SharePoint hat seine Daseins-Berechtigung und es scheint mittlerweile auch erwachsen zu sein. Und der Markt ist da, es tummeln sich viele SharePoint Firmen auf dem Markt, auch gute mit echten Experten, es scheint somit auch etwas für das finanzielle wohlergehen drin zu sein.
Die Schmerzen die SharePoint mir und den Leuten die täglich dafür entwickeln müssen bereitet hat sind bei Microsoft angekommen und es wurde verbessert.
SharePoint Online und 2013
Nun kommt SharePoint 2013 und SharePoint Online daher mit einem neuen App-Modell was einiges in meiner Meinung ändert. Ein App-Model was auch für den "richtigen" Web-Entwickler Interessant ist. Damit befasse ich gerade ein wenig und bin noch kräftig in der Lernphase (gebt mir bitte Feedback wenn ich etwas fehlerhaft Beschreibe).
SharePoint 2013 On-Premise empfinde ich immer noch als Monster und kann mir aktuell nicht wirklich vorstellen Anwendungen nach dem klassischen SharePoint Modell zu entwickeln. Jedoch kann dafür auch im neuen App-Modell entwickelt werden, sowie auch für SharePoint Online.
SharePoint Online ist für relativ wenig Geld und wenig Administration im Rahmen von Office 365 von Microsoft zu mieten. Auch als eigenständiger Service ohne Exchange und Co.
Neues App-Modell
Das neue App-Model basiert im Wesentlichen darauf dass man keine Anwendungen mehr in den SharePoint deployet die dann im dann auch im Prozess des SharePoint laufen. Somit besteht nicht mehr eine so enge Kopplung an den SharePoint Host. Es wird nur noch über eine REST API, dem CSOM (.NET Client-Side Object Model) und über das JSOM (JavaScript Object Model) mit dem SharePoint kommuniziert.
Dadurch hat man sicherlich auch ein paar Nachteile dass man nicht im SharePoint läuft und kann sicher auch nicht die komplette Funktionalität von SharePoint nutzen. Wie sich dies auswirkt dafür fehlen mir die Erfahrungen.
Und dazu setzt Microsoft noch einen App-Store für SharePoint drauf über diesen kann man dann einfach die entwickelten Apps installieren und auch verkaufen.
Cloud-Apps
Cloud-Apps laufen auf einer seperaten Web-Site oder Server, jedoch ohne SharePoint Installation. Cloud-Apps sprechen mit einer SharePoint Instance über die beim App-Modell verfügbaren APIs.
Diese bedeutet für mich dass man die Apps auch einfacher lokal Entwickeln kann, einfacher deployen und aktualisieren kann ohne eine eigenen SharePoint installation zu haben. Dass ich mir aussuchen kann mit welcher Technologie ich die App-Entwickeln kann. Durch die REST API kann man in Ruby, NodeJS, Java, .NET, WebForms, ASP.NET MVC oder mit was auch immer Anwendungen entwickeln möchte und kann.
Für Cloud-Apps gibt es zwei Varianten.
Provider-Hosted
Ist "nur" eine Web-Site die man bei einem beliebigen Provider gehostet haben kann, auch beliebigen Cloud-Anbietern. Man hat als Entwickler (-Firma) somit auch die Verwantwortung für den Betrieb.
Diese Web-Site kann dann von der SharePoint Installation angesteuert und authorisiert werden die die App installiert hat. Diese können komplett unterschiedliche Kunden sein. Die notwendigen Information bekommt man über OAuth 2 mit entsprechenden Claims.
Daraus folgt dann das man für eine Trennung der Daten für die verschiendenen Installation/Kunden notwendig sein kann. Sei es nun getrennten Datenbanken (je nach Zielgruppe erforderlich) oder durch entsprechende Zugriffsrechte und Programmlogik.
Auch sollte diese Lösung skalieren können wenn viele die eigenen App installiert haben. Und die Kosten für den Betrieb des Site sollten auch noch irgendwie auf die Kunden umgelegt werden können.
Die funktioniert auch mit localhost.
Autohosted
Autohosted ist auch nur ein gehostete Web-Site, jedoch wird diese dann automatisch vom entsprechenden SharePoint Online des Kunden in Windows Azure als Azure-WebSite provisioniert und abgerechnet. Die Nutzung von Datenbanken in Azure ist natürlich auch möglich. Und man ist in den Technologien auch auch darin beschränkt was auf Azure-WebSites löuft, doch da läuft eigentliche alles was das Entwickler-Herz begehrt. Von Ruby, über NodeJS zu ASP.NET und WebSockets.
Vorteil ist das jede App Installation eine eigenen WebSite und eine eigenen Datenbank bekommt. Somit ist damit implizit die Trennung der Daten nach Kunden gegeben und muss es bei der Entwicklung nicht Extra berücksichtigen. Die laufenden Kosten werden direkt vom Kunden übernommen und man muss sich nicht wirklich um den Betrieb kümmern. Skalieren kann man dann auch über Azure.
Auch ist diese nur mit SharePoint Online möglich, nicht bei einer On-Premise Installation von SharePoint
SharePoint-Hosted
Neben den Cloud-Apps kann auf einem SharePoint selbst Apps hosten, jedoch nicht in der Technologie der Wahl. Sondern kann nur HTML, CSS und JavaScript verwenden. Das CSOM fällt also weg.
Der Vorteil ist jedoch das weder Server noch Hosting gebraucht werden, die erstellten HTML-Seiten werden auf dem SharePoint Server deployed und ausgeführt. Damit hat man natürlich keine zusätzlichen Skalierungs-Probleme außerhalb des SharePoint-Server. Doch bei SharePoint Online hoffe ich mal das dies Microsoft im Griff hat und man für eine entsprechende Benutzer-Zahl auch entsprechende Resourcen bekommt.
Eigene Serverseitige Logik abseits von dem was einem SharePoint oder eigenen Server bieten können ist hier nicht möglich. Eher sehe ich hier die optimierte Aus- und Eingabe von Daten die der Lösung dienlich sind.
Für die SharePoint-Hosted Apps bietet Microsoft noch eine Online Entwicklungsumgebung Namens NAPA dieses kann in eine SharePoint-Developer-Site-Collection als App hinzugefügt werde. Aber eine Entwicklung mit Visual Studio ist auch möglich, jedoch scheint dazu mindestens die SharePoint Foundation auf dem Rechner gebraucht zu werden.
Mein Fazit
Ich bin dabei SharePoint Online für ein Kunden-Projekt zu evaluieren ob es dafür sinnvoll eingesetzt werden kann. Es wird ein Dokumenten-Managment gebraucht, flexibler Zugriff von überall, einige Workflow Elemente sowie eine gewisse Menge an eigener Funktionalität und Darstellungen. Und ich muss sagen, es sieht positiv aus.
Das neue App-Modell gefällt mir, ich werde wohl damit und dafür entwickeln. Auch andere Entwickler, auch die die Abseits der Microsoft Schiene entwickeln, sollten da mal einen Blick drauf werfen.
Was jedoch nicht bedeutet dass ich nur noch SharePoint machen werde, dies wohl nicht. Jedoch da wo es Sinnvoll erscheint werde ich es nicht mehr verteufeln ;). Auch wird dieses Blog kein SharePoint Blog werden.
Ich bin gespannt wie man mit den neuen APIs arbeiten kann.