SharePoint Updates: Patchday Oktober 2018

Neuer Monat, neue SharePoint Updates – diesmal leider ein wenig mit Verspätung.

Wie immer hilft der Blog von Stefan Goßner mit allen Details. Dieses mal gibt es für alle drei Plattformen (2010, 2013 und 2016) Updates:

Zu beachten ist, dass das Update für SharePoint 2016 das Feature-Pack 2 beinhaltet.

Zusätzlich gibt es über WSUS für SharePoint 2010, 2013 und 2016 auch Sicherheits-Updates.

Bei den Sicherheitsupdates über WSUS ist zu beachten, dass nach der Installation (wie immer) auch der PSConfig-Wizard auszuführen ist.

Eine komplette Übersicht über alle verfügbaren Patches sowie den jeweiligen Build-Nummern als auch z.T. sehr ausführlichen Patch-Notizen gibt es unter https://sharepointupdates.com/Patches.

SharePoint, JavaScript und Promises

Für alle, die noch für On-Premises SharePoint Umgebung Lösungen auf Basis von JavaScript erstellen ist die JSOM (JavaScript Object Model) Bibliothek von SharePoint ein sehr guter Weg um mit SharePoint zu kommunizieren. Auch wenn viele Dinge auch per REST Interface zugreifbar sind, so sind die Möglichkeiten über JSOM doch deutlich umfangreicher.

Da die Kommunikation bei JSOM grundsätzlich asynchron abläuft, muss man an dieser Stelle immer sehr viel mit Callbacks arbeiten. Ein typischer Code um z.B. eine neue Liste anzulegen sieht dann etwa so aus:

var ctx = new SP.ClientContext();
var web = ctx.get_web();
var listCI = new SP.ListCreationInformation();
listCI.set_title("Meine Neue Liste");
list = web.get_lists().add(listCI);
ctx.load(list);
ctx.executeQuery(successCreatedList, errorCreatedList);

function successCreatedList(sender, eventArgs) { }
function errorCreatedList(sender, eventArgs) { }

Wenn nun nach dem erstellen der List in dieser List gleich Elemente erstellt werden müssen/sollen, dann muss diese Logik in der Funktion successCreatedList implementiert werden. Das sähe dann wie folgt aus:

function successCreatedList(sender, eventArgs) {
    var listItemCI = new SP.ListItemCreationInformation();
    var listItem = list.addItem(listItemCI);
    listItem.set_item("Title", "Mein neues Listenelement");
    listItem.Update();
    ctx.load(listItem);
    ctx.executeQuery(successCreatedItem, errorCreatedItem);
}

Man sieht also schon, dass hier schon wieder zwei Funktionen als Callback angegeben werden (müssen). Natürlich kann man die Funktionen auch inline definieren – das macht es aber nicht viel übersichtlicher. Dieses Beispiel komplett sieht dann so aus:

var ctx = new SP.ClientContext();
var web = ctx.get_web();
var listCI = new SP.ListCreationInformation();
listCI.set_title("Meine Neue Liste");
list = web.get_lists().add(listCI);
ctx.load(list);
ctx.executeQuery(
    function (sender, eventArgs) {
        var listItemCI = new SP.ListItemCreationInformation();
        var listItem = list.addItem(listItemCI);
        listItem.set_item("Title", "Mein neues Listenelement");
        listItem.Update();
        ctx.load(listItem);
        ctx.executeQuery(
            function (sender, eventArgs) {
                // do something after the item is created
            }
            , function (sender, eventArgs) {
                // error handling
            });
    }
    , function (sender, eventArgs) {
        // error handling
    });

Wie wäre es, wenn nun executeQuery ein Promise zurückliefern würde, anstatt dass man Callbacks angeben muss?

var ctx = new SP.ClientContext();
var web = ctx.get_web();
var listCI = new SP.ListCreationInformation();
listCI.set_title("Meine Neue Liste");
list = web.get_lists().add(listCI);
ctx.load(list);
ctx.executeQueryDeferred()
    .then(function (eventArgs) {
        var listItemCI = new SP.ListItemCreationInformation();
        var listItem = list.addItem(listItemCI);
        listItem.set_item("Title", "Mein neues Listenelement");
        listItem.Update();
        ctx.load(listItem);
        return ctx.executeQueryDeferred();
    })
    .then(function (eventArgs) {
        // do something after the item is created
    })
    .fail(function (eventArgs) {
        // catch any errors along the way
    });

Das sieht schon deutlich übersichtlicher aus, da sich die einzelnen Promises auch hintereinander hängen lassen.

Um dem SharePoint ClientContext Promises beizubringen ist einfach nur eine kleine Erweiterung notwendig:

SP.ClientContext.prototype.executeQueryDeferred = function () {
    var deferred = Q.defer();
    this.executeQueryAsync(
        function (sender, args) { deferred.resolve(args); }
        , function (sender, args) { deferred.reject(args); });
    return deferred.promise;
}; 

In diesem Fall benutze ich die JavaScript Bibliothek Q für die Bereitstellung von Promises, hier wäre aber auch anderen Promises-Implementierungen denkbar.

Damit das ganze auch in TypeScript nutzbar ist, hier einmal die Erweiterung in TypeScript:

export interface ClientContext {
    executeQueryDeferred(): Q.Promise<SP.ClientRequestSucceededEventArgs>
}

SP.SOD.executeOrDelayUntilScriptLoaded(function () {
    SP.ClientContext.prototype.executeQueryDeferred = function (): Q.Promise<SP.ClientRequestSucceededEventArgs> {
        let deferred = Q.defer<SP.ClientRequestEventArgs>();
        this.executeQueryAsync(
            function (sender: any, args: SP.ClientRequestSucceededEventArgs) { deferred.resolve(args); },
            function (sender: any, args: SP.ClientRequestFailedEventArgs) { deferred.reject(args) }
        );
        return deferred.promise;
    }
}, "sp.js");

Zudem ist die Erweiterung noch in einen Script-OnDemand-Block eingebettet, um Sicherzustellen, dass es das Objekt ClientContext auch bereits gibt.

Visual Studio 2017 ist da

Nun ist es (endlich) da: Visual Studio 2017!

Entsprechend dem Motto “Cloud First” gibt es auch nur einen Web-Installer zum Download und nicht wie früher alternativ auch ein ISO-Image.

Wenn man aber mehrere Rechner hat, die man mit Visual Studio beglücken will, dann wäre es ja doch praktisch, das ganze nur einmal herunter zu laden und dann mehrfach z.B. von einem lokalen File-Share aus zu installieren.

Glücklicherweise geht das!

Zunächst also einmal die Web-Installer herunterladen. Entweder von den öffentlichen Seiten oder wenn man ein MSDN-Abo hat, dann kann man das auch über seine MSDN-Benefits laden (aber auch hier bekommt man nur einen Web-Installer).

Danach kann man auf der Kommandozeile mit

vs_enterprise.exe –layout d:\vs2017offline

sich die komplette Installation herunterladen. Das wird einen entsprechenden Client starten, der alle notwendigen Pakete herunterlädt.

image

Ich habe mal direkt nur die Sprachen Deutsch und Englisch heruntergeladen

vs_enterprise.exe --layout C:\vs2017offline --lang en-US de-DE

Aber Achtung: dieser Download sind schon knapp 20GB!

Ansonsten: happy Visual Studio 2017 Coding!

Mehr Infos:

SharePoint Updates: Patchday Januar 2017

Neuer Monat, neue SharePoint Updates.

Wie immer hilft der Blog von Stefan Goßner mit allen Details. Dieses mal gibt es für alle nur für SharePoint 2013 und 2016 Updates:

Zu beachten ist, dass das Update für SharePoint 2016 das Feature-Pack 1 beinhaltet.

Zusätzlich gibt es über WSUS für SharePoint 2010 und 2013 auch Sicherheits-Updates.

Bei den Sicherheitsupdates über WSUS ist zu beachten, dass nach der Installation (wie immer) auch der PSConfig-Wizard auszuführen ist.

Nachlese der Ignite

So – die Ignite ist fast zuende – einmal kurz durchatmen und zunächst mal die großen, offiziellen Announcements verarbeiten.

Was haben wir in den letzten Tagen auf der Ignite gesehen?

OneDrive for Business

Große Änderungen gibt es bei OneDrive for Business. Zum einen gibt ein großes Update für den OneDrive for Business Client, der lange gewünschte Features liefert:

  • der sogenannte Next Generation Sync Client (NGSC) kann nun auch SharePoint Online Dokumentbibliotheken synchronisieren und nicht mehr nur ausschließlich das OneDrive
  • durch die Verwendung des NGSC können nun auch selektive Inhalte aus SharePoint gesynct werden – es muss nicht mehr immer die komplette Bibliothek synchronisiert werden
  • bei dem “alten” SkyDrive Client gab es schon mal die Möglichkeit, dass man im Client zwar alle Dateien gesehen hatte, aber nicht alle wirklich auch lokal vorhanden waren. Dazu konnte zwischen Online und Offline-Dateien unterschieden werden. Diese Möglichkeit wird es nun auch wieder im NGSC geben – und somit auch für OneDrive als auch für SharePoint Online Bibliotheken

Zum anderen gibt es neuen Features in der Online-Darstellung von OneDrive:

  • mehr und verbesserte Previews (z.B. bessere Darstellung von PDF-Dokumenten, Darstellung von Mails in .msg und .eml Dateien)
  • direkte Bearbeitung von Dateien im Browser
  • Herunterladen von mehreren Dateien in einer ZIP-Datei

Dazu kommen noch viele weitere Funktionen für Administratoren und neue Fähigkeiten für die mobilen Apps für OneDrive.

Mehr Infos: Major OneDrive updates at Ignite 2016 include SharePoint Online sync preview

Feature Pack 1 for SharePoint

Nachdem im Frühjahr die freigegebene Version von SharePoint 2016 veröffentlicht wurde, gibt es nun voraussichtlich im November das erste Feature Pack, welche neue Funktionen für SharePoint 2016 liefert:

  • Logging von administrativen Aktionen
  • Erweiterung des MinRole-Konzepts für kleine Umgebungen (ermöglicht eine 2-Server-Farm mit Min-Roles! bisher war die kleinste mögliche Farm mit 4 Servern zu erreichen)
  • OneDrive for Business verbesserungen (für On-Premise SharePoint bzw OneDrive!)
  • Anpassung des App-Launchers

Mehr Infos: Announcing Feature Pack 1 for SharePoint Server 2016—cloud-born and future-proof

SharePoint Mobile Apps

Bereits auf dem Future-Of-SharePoint Event wurden Apps für SharePoint vorgestellt – nun gibt es die Apps als Preview in der Stores. Damit kann man auf mobilen Geräten direkt auf SharePoint-Inhalte zugreifen, Datein betrachten, Listen durchsuchen und aktuelle Aktivitäten einer Seite sehen

Mehr Infos: Enriching the mobile and intelligent intranet with team news, apps for Android and Windows and more

My Analytics

Im Frühjahr wurde Delve um einen Analytics-Menupunkt erweitert, der in nächster Zeit aus Delve heraus in eine eigene App MyAnalytics wandern wird.

Mehr Infos: Create better work habits with MyAnalytics (formerly Delve Analytics)

Yammer

Yammer wächst immer weiter mit Office365 zusammen. Office-Dokumente, die in Yammer abgelegt sind können oline mit Office-Online betrachtet und bearbeitet werden. Darüber hinaus kann aus Yammer direkt auf OneDrive, OneDrive for Business und SharePoint zugegriffen werden. Zudem können Notizen in Yammer nun mit OneNote erstellt und gepflegt werden und Aufgaben lassen sich mit Planner für Yammer-Gruppen genauso verwalten wir das mit Office-Groups bereits funktioniert.

Mehr Infos: Yammer strengthens team collaboration through integration with Office 365 Groups

Weitere Ankündigungen

Keine Sandboxed Solutions in Office365

Nun ist es soweit – Sandboxed Solutions in SharePoint sind ja schon seit langem als “deprecated” markiert. Deprecated bedeutet, dass das Feature noch voll Funktionsfähig ist, aber in einer der nächsten Versionen eingestellt werden könnte und dann nicht mehr zur Verfügung stehen wird. Und das ist jetzt.

Letzte Woche gab es in Office365 einen Incident SP73009, demnach kein Sandboxed Code mehr aktiviert oder ausgeführt werden kann. Kurz darauf hat das Office-Team in einem Blogpost  bekannt gegeben, dass das Ausführen von Sandbox-Code in Office365 (mit sofortiger Wirkung) eingestellt werden wird. Allerdings bleibt weiterhin die Option, dass No-Code Lösungen (also deklarative Lösungen) über Sandboxed Solutions zu deployen.

Incident SP73009 - Service Degradation

Interessant ist, dass das Office365 aber dennoch erst einmal eine Woche recherchiert hat, bis der Incident SP73009 als “false-positiv” geschlossen wurde.

Incident SP73009 - Resolution

Jetzt heißt es also: Lösungen auf die Verwendung von Sandboxed Solutions prüfen und alternativen entwickeln: Provider-Hosted Apps oder auf Client-Side Technologien umstellen!

Die Zukunft von SharePoint

Letzte Woche war es also so weit – #FutureOfSharePoint. Dabei wurden viele neu Dinge bekannt gegeben, die uns demnächst in Office 365 zur Verfügung stehen werden.

SharePoint Mobile App & OneDrive App

Es wird für Windows, iOS und Android eine neue App geben, mit der man durch SharePoint navigieren kann, ohne dass man extra über den Browser auf die Site zugreifen muss. Zudem wird die OneDrive App in Zukunft nicht mehr nur auf OneDrive beschränkt sein und auch Dateien aus SharePoint und Groups synchronisieren können.

 

SharePoint Home, Modern-UI, Team-Sites und Groups

Die Sites Kachel aus dem App-Launcher wird in SharePoint umbenannt und bekommt auch ein komplett neues Aussehen. Dieser neuer Look ähnelt dem von Delve. In SharePoint Home sind alle meine häufig besuchten Websites zu finden, aber auch Vorschläge für neue Sites.

Nachdem die “mordern document library” Funktion ja bereits für First-Release Kunden zur Verfügung steht, wird es ein solches Modern-UI auch für Listen geben. Zudem wird das UI auch weiter entwickelt, so dass man direkt Eigenschaften über die Infoleiste am rechten Rand bearbeiten kann. Außerdem werden weitere Befehle ergänzt, die vielleicht heute noch in der Modern-UI fehlen.

Auch die Team-Sites werden einen modernen Look bekommen. Dazu gehört zum einen, dass Inhalte in der Site in Zukunft nicht mehr im Stil einer Wiki Seite erstellt werden, sondern dass der “Editor” eher aussieht und anfühlt wie man den Editor aus Sway und den neuen Blogs von Delve kennt.

Somit ist also auch für alle “Zweifler” dieses neuen Looks klar, dass uns dieses neue UI erhalten bleiben wird und dass es kontinuierlich weiterentwickelt wird. Microsoft wird also iterativ die bisher vorhandenen Funktionen in das neue UI überführen.

Von Anfang an war die Frage im Raum: wozu würde man die Office Groups am besten verwenden? Die Verwendung als neue Teamsite, insbesondere z.B. für Projekte, war für mich naheliegend. Allerdings war der Komfort der Groups doch eher bescheiden, da so gut wie keine Anpassungen vorgenommen werden konnten. Ich freue mich, dass die Funktionen der Groups in die neuen Teamsites mit aufgehen. Somit wachen sie Fähigkeiten der Kollaboration der Groups und die Anpassbarkeit einer “normalen” Teamsite zusammen und ergänzen sich.

Microsoft Flow

Microsoft Flow App Launcher

Diesen Punkt finde ich besonders spannend. Noch vor knapp zwei Wochen habe ich darüber gesprochen, dass ich mir vorstellen könnte, dass die Azure Logic Apps einmal der Nachfolger des Workflow Managers (aka Windows Azure Workflows aka SharePoint 2013 Workflows) werden könnte. Ich hatte in dem Zusammenhang argumentiert, dass mit der Einführung des Workflow Managers Microsoft die Workflows ja schon von der SharePoint Plattform gelöst hat, und zumindest logisch unabhängig von SharePoint gestaltet hat. Somit sollte es relativ einfach möglich sein, dass Backend für die Workflows auszutauschen, da SharePoint die Workflow-Engine ja ohnehin nicht (mehr) kennt.

Und nun haben wir gesehen, dass Microsoft Flow in SharePoint Einzug halten wird. Ob nun für die Kommunikation wirklich die bereits in SharePoint 2013 eingeführte Service-Bus Infrastruktur verwendet wird, oder die ebenfalls neu genannten Webhooks bleibt abzuwarten.

Nun ist also aus den ehemaligen Azure Logic Apps, mit kurzem Umweg über PowerFlow (eigentlich als Teil der PowerApps) Microsoft Flow geworden.

Ein wenig abzuwarten bleibt noch, in wie weit die in den Office Groups kürzlich eingeführten Connectors in dieses Bild passen. Ich würde mal sagen, dass diese Connectoren, die in den Groups ihr Debut gefeiert haben, in Zukunft auch in Microsoft Flow verwendet werden können.

Search - Microsoft Flow

Connect Twitter to Yammer - Microsoft Flow

SharePoint Framework

Die starke Konzentration auf Client-Technologien wird auch in SharePoint immer stärker sichtbar. Das Add-In Modell bot hier ja noch unterschiedliche Wege an mit den Provider-Hosted Apps eine Möglichkeit um z.B. in C# zu entwickeln und mit den SharePoint-Hosted Apps einen Weg um ausschließlich mit Client-Technologie (also JavaScript) zu arbeiten.

Nun wird die JavaScript getriebene Entwicklung noch weiter gestärkt, indem das neue SharePoint Framework auf Visual Studio Code, Typescript und Gulp setzt.

Dies ist ja auch aktuell mein bevorzugter Technologie-Stack um Anpassungen in SharePoint oder Office 365 vorzunehmen – ich freue mich schon auf eine noch bessere Unterstützung insbesondere mit Gulp (und Yeoman). Aber die neuen Client-Side WebParts sehen gut aus – bieten sie doch eine neue Möglichkeit um Anpassungen in Form von WebParts in bestehenden Seiten einzubetten.

Mehr Infos, Links und Videos über die Zukunft von SharePoint gibt es in dem entsprechenden Blog-Post aus dem Office-Team.

Mit Gulp nach SharePoint deployen

Nachdem man nun also seine Entwicklungsumgebung mit VSCode, Node, Bower und Gulp schon sehr gut im Griff hat, stellt sich noch die Frage: wie bekomme ich meine Dateien nun in den SharePoint?

Mit Hilfe von Gulp habe ich ja schon alles nett in einem Verzeichnis (z.B. dist) zusammen. Also muss ich das ja nur alles in den SharePoint laden. Dank Drag&Drop ist das ja recht einfach und der Browser bietet mir ja auch direkt an vorhandene Dateien zu ersetzen. Aber auf die Dauer ist es ja doch irgendwie nervig.

Eigentlich ist die Lösung recht einfach: WebDAV!

Ich kann ja jede SharePoint Bibliothek über WebDAV erreichen. Wenn ich nun auch weiß, dass ich diese WebDAV-Freigaben über eine UNC-Schreibweise ansprechen kann … so kann ich die Bibliothek http://sharepoint.acme.local/sites/henning/scripts auch über \\sharepoint.acme.local\DavWWWRoot\sites\henning\scripts ansprechen.

Entsprechend kann ich in meinem gulpfile.js einfach folgende Task mit aufnehmen

gulp.task('deploy', [], function () {
    return gulp.src(['dist/**/*'])
        .pipe(gulp.dest(\\sharepoint.acme.local\DavWWWRoot\sites\henning\scripts));
};

Wenn ich nun z.B. nach SharePoint-Online deployen will, dann geht das dort ebenfalls, nur dass ich \\henning.sharepoint.com@SSL\[…] schreiben muss, damit der Zugriff per SSL läuft (ich kann SSL natürlich auch bei On-Premise Installationen verwenden, nur bei Office365 geht halt ausschließlich SSL).

Workflow-Verwaltung in Nintex

Nintex Workflow für SharePoint 2010 und SharePoint 2013 hat im Januar eine sehr interessante neue Funktion erhalten: Workflow Inventory.

Diese Funktion ist für SharePoint 2013 ab der Version 3.1.7.0 und für SharePoint ab der Version 2.4.7.0 verfügbar.

image

Damit ist es nun möglich aus der Zentraladministration heraus sich einen Überblick über alle vorhandenen Workflows zu verschaffen. Die Übersicht ermöglicht es einem die Site-Collection, die Site die Liste und den Workflow direkt aus der Übersicht heraus aufzurufen.

Zudem ist erkennbar wann ein Workflow zum letzten mal bearbeitet wurde und ob es bereits eine neuer, noch nicht veröffentlichte Version des Workflows gibt. Darüber hinaus kann man auch sehen, wann der Workflow zuletzt ausgeführt wurde. Somit lassen sich z.B. alte und verwaiste Workflows recht leicht identifizieren.

image

Bei sehr vielen Workflows ist diese Ansicht womöglich nicht sehr übersichtlich – dazu kann die Liste auch als CSV-Datei exportiert werden um dann z.B. in Excel weiter ausgewertet zu werden.

Entwicklung mit Visual Studio Code

Ich habe in vorherigen Beiträgen ja schon gezeigt, wie einfach Frontend-Entwicklung sein kann mit den richtigen Werkzeugen. Dazu bedarf es nicht immer einer riesigen IDE wie Visual Studio. Oftmals reicht einfach nur ein guter Editor wie zum Beispiel Notepad++.

Wenn die Entwicklung aber dann doch mal über ein paar Zeilen Code hinausgeht, dann wünscht man sich doch einen Editor, der einen ein wenig mehr unterstützt.

Also doch Visual Studio? Nicht unbedingt. Wenn ich mal eben ein kleines HTML-Frontend bauen will, dann brauch ich zwar schon ein wenig HTML und JavaScript – und genau hier kommt Visual Studio Code ins spiel.

Syntaxhighlighting in Visual Studio Code

Seit letztem Jahr ist VSCode als kleiner, schlanker Editor verfügbar, mit einer Vielzahl an Erweiterungen. Was mir am besten gefällt: VSCode ist keine 100MB schwer. Den kann man mal eben installieren – selbst auf meinem Surface (mit Atom-Prozessor).

Im Gegensatz zum klassischen Visual Studio kennt VSCode keine Solution-Dateien. Das Verzeichnis ist die Solution. Alles was im Verzeichnis ist gehört zum Projekt.

Über Tastenkombinationen kann man zwischen allen Dateien des Projekts navigieren – mit [STRG]+[P] kann man direkt zu einer Datei springen. Eine der Wichtigsten Tastenkombinationen ist [STRG]+[SHIFT]+[P]. Damit kommt man in einen “Kommandomodus” wo man eigentlich alle Funktionen von Visual Studio Code erreichen kann. Ersetzt man das > im Kommandomodus durch ein ? bekommt man eine einfach Hilfe angezeigt.

Kommandomodus von Visual Studio Code

Einige meiner persönlichen Highlights sind:

  • Syntax-Highlighting & Intellisense für verschiedene Sprachen (HTML, JavaScript, PowerShell …)
  • Git Integration
  • Vielfältige Extensions

Wer mehr Erfahren möchte, kann das über