Dynamischer Einsatz der PnP Remote Provisioning Engine

PnP Remote Provisioning Engine

Die PnP Remote Provisioning Engine, entwickelt im Rahmen der Office Dev Patterns and Practices (PnP) Initiative, ist eine Open-Source-Bereitstellungs-Engine für SharePoint. Die Engine kann verwendet werden, um Anpassungen und Assets von, respektive zu, SharePoint-Websites aus der Ferne zu extrahieren oder anzuwenden. Sie lässt sich mit verwaltetem Code oder als PowerShell-Cmdlets verwenden, um Anpassungen an Websites zu automatisieren. Installiert wird sie als Nuget-Paket (verwalteter Code), aus der PowerShell Gallery oder mit einer Installationsdatei (ebenfalls PowerShell). Neue Releases folgen in der Regel monatlich.

Die Engine ist kompatibel zu SharePoint Online und On-Premises (2013 und 2016), wobei der Fokus bei der Entwicklung durch die Community eher auf SharePoint Online liegt. Sämtliche Aktionen erfolgen über das Client Side Object Model (CSOM) und somit über die SharePoint-API. Dies bietet den entscheidenden Vorteil, dass der Code nicht auf dem SharePoint-Server, sondern auf einem normalen Client ausgeführt werden kann.

SharePoint_PnP

Provisioning-Template und -Schema

Ein zentraler Bestandteil, neben weiteren praktischen Funktionen und Cmdlets, ist die Möglichkeit Anpassungen und Assets aus Seiten in ein XML-Template zu exportieren und in (andere) Seiten zu importieren. Die Möglichkeiten dieser XML-Datei sind jeweils im aktuellen Provisioning-Schema von PnP beschrieben.

Folgendes kurze Beispiel zeigt dieses Vorgehen mit Hilfe der beiden PowerShell-Cmdlets Get-PnPProvisioningTemplate und Apply-PnPProvisioningTemplate auf.

Exportieren des XML-Templates aus einer bestehenden Website mittels PowerShell:

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/marketing
Get-PnPProvisioningTemplate -Out template.xml

Daraus resultiert folgendes Template (nur der Ausschnitt einer benutzerdefinierten Liste wird gezeigt):

<?xml version="1.0"?>
<pnp:Provisioning xmlns:pnp="http://schemas.dev.office.com/PnP/2016/05/ProvisioningSchema">
  <pnp:Preferences Generator="OfficeDevPnP.Core, Version=2.15.1705.0, Culture=neutral, PublicKeyToken=3751622786b357c2" />
  <pnp:Templates ID="CONTAINER-TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D">
    <pnp:ProvisioningTemplate ID="TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D" Version="1" BaseSiteTemplate="STS#0">
		<!-- ... -->
		<pnp:Lists>
		<!-- ... -->
			<pnp:ListInstance Title="Meine Liste" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/Meine Liste" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false">
			  <pnp:ContentTypeBindings>
				<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
				<pnp:ContentTypeBinding ContentTypeID="0x0120" />
			  </pnp:ContentTypeBindings>
			  <pnp:Views>
				<View Name="{A4F02C0C-9C2D-4243-B4B9-9EF42BCD7A3A}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="/sites/debug/Lists/Meine Liste/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=40">
				  <Query>
					<OrderBy>
					  <FieldRef Name="ID" />
					</OrderBy>
				  </Query>
				  <ViewFields>
					<FieldRef Name="LinkTitle" />
				  </ViewFields>
				  <RowLimit Paged="TRUE">30</RowLimit>
				  <JSLink>clienttemplates.js</JSLink>
				</View>
			  </pnp:Views>
			</pnp:ListInstance>
			<!-- ... -->
		</pnp:Lists>
		<!-- ... -->
    </pnp:ProvisioningTemplate>
  </pnp:Templates>
</pnp:Provisioning>

Importieren des Template in eine andere bestehende Website mittels PowerShell (die benutzerdefinierte Liste wird dabei erstellt):

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/sales
Apply-PnPProvisioningTemplate -Path template.xml

Hier gilt es anzumerken, dass das Provisioning-Schema derzeit noch nicht den gesamten Funktionsumfang von SharePoint abdeckt. So werden z.B. Inhalte von Seiten und Listen oder Einstellungen von Webparts nicht immer komplett exportiert. Fehlende Inhalte und Einstellungen können entweder im generierten XML-Template manuell ergänzt oder nachträglich per Script direkt in der Site angepasst werden.

Zudem ist es wichtig, dass das XML-Template dem Schema entspricht, also valid ist. Dies wird erschwert, da teilweise z.B. sogar die missachtete Gross-/Kleinschreibung von Attribut-Werten zu einem invaliden Template führen kann.

Tipp an dieser Stelle: Lade dir das aktuelle PnP-Provisioning-Schema herunter, schnapp dir ein XML-Validierungstool deiner Wahl (z.B. Notepad++ mit dem Plugin „XML Tools“) und validiere dein Provisioning-Template. Du sparst dir viel Zeit und Ärger beim Anwenden, falls sich ein Fehler eingeschlichen hat.

Templates dynamisch anwenden

Weiter können wir uns von PnP zu Nutze machen, dass sich Templates mit Hilfe des XMLSharePointTemplateProvider sehr einfach direkt aus einer SharePoint-Dokumentenbibliothek laden lassen. So können z.B. verschiedene Ausprägungen einer Site als XML-Template formuliert und in einer zentralen Dokumentenbibliothek abgelegt werden. Hier können diese auch jederzeit angepasst werden (inkl. Versionsverwaltung). Werden nun spezielle Assets zu einem bestimmten Zeitpunkt auf einer Site benötigt, können diese dynamisch durch Anwenden eines der Templates zur Site hinzugefügt werden.

Folgendes Beispiel zeigt auf, wie mit dieser Methode die obenstehende Beispiel-Liste dynamisch zu einer Site hinzugefügt werden kann. Im Template werden dazu noch Parameter eingefügt:

  • {parameter:ListTitle}: Titel der dynamisch erzeugten Liste
  • {parameter:ListUrl}: URL der Liste (auch in URL der View verwendet)
  • {guid}: Automatisch neuerstellte GUID für den Namen der View

Template für die Liste mit eingefügten Parametern:

<?xml version="1.0"?>
<pnp:Provisioning xmlns:pnp="http://schemas.dev.office.com/PnP/2016/05/ProvisioningSchema">
  <pnp:Preferences Generator="OfficeDevPnP.Core, Version=2.15.1705.0, Culture=neutral, PublicKeyToken=3751622786b357c2" />
  <pnp:Templates ID="CONTAINER-TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D">
    <pnp:ProvisioningTemplate ID="TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D" Version="1" BaseSiteTemplate="STS#0">
		<!-- ... -->
		<pnp:Lists>
		<!-- ... -->
			<pnp:ListInstance Title="{parameter:ListTitle}" Description="" DocumentTemplate="" TemplateType="100" Url="{parameter:ListUrl}" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false">
			  <pnp:ContentTypeBindings>
				<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
				<pnp:ContentTypeBinding ContentTypeID="0x0120" />
			  </pnp:ContentTypeBindings>
			  <pnp:Views>
				<View Name="{guid}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="{parameter:ListUrl}/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=40">
				  <Query>
					<OrderBy>
					  <FieldRef Name="ID" />
					</OrderBy>
				  </Query>
				  <ViewFields>
					<FieldRef Name="LinkTitle" />
				  </ViewFields>
				  <RowLimit Paged="TRUE">30</RowLimit>
				  <JSLink>clienttemplates.js</JSLink>
				</View>
			  </pnp:Views>
			</pnp:ListInstance>
			<!-- ... -->
		</pnp:Lists>
		<!-- ... -->
    </pnp:ProvisioningTemplate>
  </pnp:Templates>
</pnp:Provisioning>

Zum Anwenden des Template wird dann dieser Code z.B. in einem Webservice ausgeführt:

using (var ctx = new ClientContext("https://contoso.sharepoint.com/sites/dev-team"))
{
    // Verbindung zu Template-Folder in der zentralen Bibliothek herstellen
    var absoluteSiteUrl = "https://contoso.sharepoint.com/sites/templates";
    var templateFolderPath = "ListTemplates/CustomLists"; // URL der Bibliothek & Verzeichnispfad
    var provider = new XMLSharePointTemplateProvider(ctx, absoluteSiteUrl, templateFolderPath);

    // Provisioning Template laden
    ProvisioningTemplate template = provider.GetTemplate("template.xml");

    // Parameter zu Template hinzufügen (Titel und URL)
    template.Parameters.Add("ListTitle", "Meine Liste");
    template.Parameters.Add("ListUrl", "Lists/MyList");

    // Template anwenden -> Liste erstellen
    ctx.Web.ApplyProvisioningTemplate(template);
    ctx.ExecuteQuery();
}

Ein ähnliches Vorgehen ist übrigens auch client-seitig aus JavaScript bzw. TypeScript-Code mit Hilfe der PnP-JS-Core-Bibliothek möglich. Dann allerdings unter Angabe eines JSON- statt eines XML-Templates. Dokumentation der Funktion hier.

Einfachere und schnellere SharePoint-Entwicklung dank PnP

Für uns bedeutet der Einsatz von PnP in der SharePoint-Entwicklung:

  • Höhere Produktivität: Einfache Cmdlets bzw. Methoden aufrufen statt etliche Zeilen Code zu schreiben.
  • Einfaches Provisioning: Ganze Portale können einfach und nachvollziehbar per Skript erstellt werden.
  • Flexibilität: Templates anpassen und neu anwenden. Keine umfangreichen Anpassungen und schon gar nicht Solutions neu installieren.
  • Bereit für die Zukunft: Inhaltstypen, Felder und Listen ganz ohne klassische Feature-Framework-Elemente einzusetzen. Einer zukünftigen Migration steht nichts mehr im Weg. Ebenso kann dieser Ansatz ohne weiteres für SharePoint Online eingesetzt werden.

Auch deshalb ist die SharePoint PnP Remote Provisioning Engine ein zentraler Bestandteil der ADVIS eSuite.

Andreas Hebeisen
Software Engineer

Links

SharePoint Patterns and Practices auf GitHub:
https://github.com/SharePoint/PnP

PnP PowerShell:
https://github.com/OfficeDev/PnP-PowerShell

PnP-JS-Core:
https://github.com/SharePoint/PnP-JS-Core

ADVIS eSuite:
https://www.advis.ch/loesungen/esuite

Kundenindividuelle Anpassungen in SharePoint-Portalen

Bei Kundenbesuchen wird mir häufig bewusst, dass ein Standard SharePoint Portal durch kleine aber effektive Anpassungen optimal an die Bedürfnisse des Kunden angenähert werden kann. Bereits ein, auf den Kunden optimiertes, Farblayout oder ein ausschlaggebender Titel im Ribbon steigert die Akzeptanz und erhöht den Wiedererkennungswert des SharePoint Portals. In diesem Blogeintrag zeige ich Ihnen drei solche Anpassungen für die SharePoint On Premise Version. Diese können mit nur wenig Programmierkenntnissen schnell eingeführt werden. Dies auch, wenn das Portal bereits produktiv in Betrieb genommen wurde oder schon vorher sonstige individuelle Anpassungen vorgenommen wurden.

Topbar

In der Standard SharePoint 2016 Topbar wird ein Titel «SharePoint» angezeigt.

SharePoint_Topbar

In den meisten Kundenportalen macht diese Beschreibung «SharePoint» wenig Sinn und wird besser durch den eigenen Portaltitel und Link besser ersetzt. So wird die Portalseite des Kundenintranets visuell hervorgehoben und hilft den Benutzern durch einen Klick auf den Link schnell wieder auf die Startseite ihres gewünschten Portals zu gelangen.

Statt diese Anpassung über JavaScript oder sogar durch eine Bearbeitung an der Masterpage vorzunehmen, kann man über nachfolgenden Powershell Befehl den Titel «SharePoint» innerhalb einer gesamten Webapplikation einfach ändern.

PowerShell_Topbar1

Nachdem diese Powershell-Befehle ausgeführt wurden, wird nun innerhalb der SharePoint Webapplikation «SharePoint» durch den «Portaltitel» ersetzt. Zusätzlich ist der Portaltitel nun auch ein Link, welcher auf die gewünschte Portalstartseite zeigt. Dieser Tipp gilt nur für die SharePoint OnPremise Version.

SharePoint_Topbar_after

Color-Dateien

Erfahrungsgemäss besitzen alle Kunden ihre eigenen Logos und Farbschemas (Corporate Identity und Corporate Design) und legen grossen Wert darauf, diese auch in ihrem SharePoint Portal abzubilden. Mit Color-Dateien können sehr einfach kundenspezifische Farbwelten erstellt und innerhalb von SharePoint appliziert werden. Eine Color-Datei ist im Grunde ein XML, welche die Farben für SharePoint Designelemente festlegt. Ohne dabei das Detail des XML zu kennen, verwenden wir meist das SharePoint Color Palette Tool (weitere Informationen und Download unter https://www.microsoft.com/en-us/download/details.aspx?id=38182).

Das Tool verfügt über eine direkte Live-Vorschau. Die Kundenspezifischen Farbwelten können so sehr einfach und schnell erzeugt werden.

Color_Tool.png

Raphael Antonietti, Frontend Engineer bei ADVIS AG, wird in seinem nächsten Blog-Eintrag noch detaillierter auf die Color-Dateien eingehen.

Eine Color-Datei lässt sich über folgenden Powershell-Befehl anschliessend innerhalb einer SharePoint Site Collection applizieren. Bedingung ist, dass die Color-Datei vorher in der entsprechenden Library („/_catalogs/theme/15/») abgespeichert wurde.

ApplyColorFile_2

Mit dem zweiten Parameter kann zusätzlich noch eine Font-Datei (definiert die Schriften innerhalb eines SharePoint-Portals) angegeben werden.

Werden noch zusätzliche Anpassungen an einer Color-Datei vorgenommen, welche bereits appliziert wurde, so kann diese Color-Datei über folgendes PowerShell-Script nochmals appliziert werden. Leider bringt es nämlich nichts, wenn man die Color-Datei in der entsprechenden Library („/_catalogs/theme/15/») anpasst.

ReApplyColorFile

Webpart-Ansicht: Link in neuem Tab öffnen

Häufig wünschen sich Kunden, dass bei einem Linklisten-Webpart die Links in einem neuen Browser-Tab geöffnet werden. Ich habe dies durch ein JSLink gelöst, welches anschliessend bei den Webpart-Einstellungen konfiguriert wird.

JSLink_NewTab

JSLink_WebPart1

Beim Klick auf die Links im Webpart wird nun eine neues Brower-Fenster geöffnet, statt die Links im gleichen Browserfenster zu öffnen.

NuetzlicheLinks.png

Fazit

Mit nur wenig Anpassungen an einem SharePoint-Standard Portal können die Bedürfnisse des Kunden meist besser abgedeckt werden. Wichtig scheint mir zudem zu erwähnen, dass die Anpassungen keine Auswirkungen auf weiterführende SharePoint Versionen haben werden. Gerne werde ich Euch auch in Zukunft weitere solche nützlichen «SharePoint-Hacks» vorstellen.

Übrigens werden diese Anpassungen bei unseren Produkten eSuite Site Manager und Meeting Manager beim initialen Setup berücksichtigt (weitere Informationen finden Sie unter: https://www.esuite.ch).

Corinne Burkhalter
Software Engineer

Standardansicht in SharePoint Dokumentbibliothek pro Ordner festlegen

Häufig besteht die Anforderung, die Ansicht pro Ordner in einer Dokumentbibliothek zu ändern. Vor allem dann, wenn Ordner als Gruppierungselemente genutzt werden. Dann sollen nämlich auf Ordner-Ansichten andere Metadaten-Spalten angezeigt werden als auf Dokument-Ansichten.

Mit der SharePoint Standard-Funktion der Ansichtseinstellungen pro Speicherort können zwar unterschiedliche Ansichten für unterschiedliche Ordner aktiviert werden. Beim Ordnerwechsel bleibt jedoch die vorherig gewählte Ansicht trotzdem erhalten.

Mit folgenden Schritten kann erreicht werden, dass die Standardansicht pro Ordner-Typ automatisch gewählt wird:

  • Definieren eines Inhaltstyps (abgeleitet von Ordner) pro gewünschte Ansicht
  • Erstellen der Ansicht
    • in der Kategorie „Ordner“ kann der Inhaltstyp gewählt werden, dem diese Ansicht zugeordnet ist
    • Vor dem Speichern die Option „Ansicht als Standardansicht verwenden“ wählen

In den Listeneinstellungen sind die erstellten Ansichten sowie deren Zuordnung zum personalisierten Ordner-Inhaltstyp ersichtlich. Die Liste verfügt über mehrere Standardansichten – eine pro Inhaltstyp.

Mit dieser Einstellung wird die Ansicht automatisch geändert, wenn der Anwender in der Dokumentbibliothek navigiert. Auf jeder Ebene werden die gewünschten Spalten oder Filter angezeigt.

Shadow IT wird Ihr IT Budget massiv belasten

„Wir finden bald keinen Cloud-Dienst mehr um Dokumente mit unseren externen Partnern auszutauschen. Immer wenn wir einen neuen Dienst nutzen ist er kurze Zeit später schon wieder von der IT gesperrt. Aber die IT selbst bietet uns keine Möglichkeit an!“

Aussagen dieser Art treffe ich bei unseren Kunden immer wieder an. Und es ist wohl das prominenteste Beispiel von dem Phänomen, das wir Shadow IT nennen. Während sich die IT Abteilung Gedanken um Produkte, Technologien und Compliance macht, tauschen die Mitarbeitenden Dokumente über ihnen bekannte Cloud Dienste aus. Nicht weil sie die IT umgehen wollen – sondern weil sie diese brauchen, um ihre tägliche Arbeit zu erledigen. Die Risiken, denen sie sich und dem Unternehmen aussetzen, ist ihnen meist gar nicht bewusst.

Gemäss einer Studie nutzen 83% der Mitarbeitenden in Fachbereichen Dienste und Applikation, welche nicht von der eigenen IT Abteilung bereitgestellt wurden. Der Grund dafür ist, dass die IT meist sehr träge und technologieorientiert ist und sich zu wenig für die echten Bedürfnisse der Fachabteilungen interessiert. In Unternehmen, welche sich aktuell noch nicht mit dem Thema Shadow IT befassen, wird dies in den nächsten Jahren nebst dem Sicherheitsrisiko ein wesentlicher Kostentreiber sein.

Mit Office 365 bietet Microsoft eine Plattform, die der IT Abteilung endlich das Potential bietet, sehr schnell auf Bedürfnisse der Fachabteilungen zu reagieren. Dokumente, E-Mail, Chat, Business Intelligence, Mobile Apps, Workflows – alles ist da und will genutzt werden. Während bei manch einem der Begriff Office 365 die Alarmglocken läuten lässt, möchte ich die Gegenseite aufzeigen. Ja, die Daten in den Microsoft Data Centers sind im Ausland. Und ja – Public Cloud ist halt Public Cloud – mit allen Vor- und Nachteilen. Der kleine aber feine Unterschied ist, dass in Office 365 mit unterschiedlichen Mitteln die Nutzung aktiv gesteuert werden kann – während die IT beim Gebrauch irgendwelcher Fremd-Dienste im Blindflug ist.

Drei wichtige Aspekte spielen bei der Thematik eine zentrale Rolle.

Identitäten
Die Identitäten beziehungsweise Benutzerkonten bilden die wichtigste Grundlage. Sie ermöglichen einerseits den einfachen Zugang (Single Sign On, Same Sign On) zu den bereitgestellten Diensten. Dies ist ein bedeutender Mehrwert für die Anwender und eine Motivation jene Dienste zu nutzen, welche einfach zugänglich sind. Gleichzeitig kann das Unternehmen so den Zugriff aktiv steuern. Wenn ein Mitarbeitender das Unternehmen verlässt sind alle Dienste durch das Sperren eines zentralen Benutzerkontos nicht mehr zugänglich.

Mit dem Microsoft Azure Active Directory bietet Microsoft einen Dienst für die Verwaltung der Identitäten, der sich nahtlos in die bestehende Infrastruktur integriert. Zudem bietet der Dienst einen sicheren Zugang mittels 2-Faktor Authentifizierung.

Nutzungsrichtlinien (Policies)
Mit der Nutzung von Diensten, welche nicht durch die IT Abteilung bereitgestellt wurden, setzen sich Mitarbeitende häufig bedeutenden Risiken aus. Die Sensibilisierung dazu aber fehlt, mögliche Konsequenzen sind ihnen meist nicht bewusst.

Mit der Bereitstellung von Gruppen (Office 365 Groups) hat Microsoft die Grundlage geschaffen, dass für Mitarbeitende klare Berechtigungs- und Nutzungsrichtlinien hinterlegt werden können. Diese Umfassen den Zugriff von Daten, aber auch Einschränkung beim Teilen oder beim Herunterladen auf nicht sichere Geräte.

Schnittstellen
Zugriffe auf Daten aus bestehenden Applikationen sind in den meisten Anwendungsfällen unumgänglich. In vielen Fällen sind keine direkten Schnittstellen möglich und Daten werden exportiert, um in externen Diensten (Analysen, Business Intelligence) zu nutzen. Dies ist sowohl in Bezug auf die Aktualität als auch auf die Sicherheit ein Graus.

Die zentrale Identitätsverwaltung und die Nutzungsrichtlinien ermöglichen in Office 365 den IT Administratoren, Daten und Schnittstellen kontrolliert zu verwalten und freizugeben. Sowohl Datenzugriffe als auch Dienste werden somit zentral gesteuert.

spshelsinki

Diese und viele andere Themen haben 130 Begeisterte am letzten SharePoint Saturday 2017 in Helsinki diskutiert. Ein kleiner aber feiner Event, organisiert von Jussi Mori und Jussi Roine, an dem wir uns über die neusten Geschehnisse und Erkenntnisse in der Welt von SharePoint und Office 365 ausgetauscht haben. Hochkarätige Speaker wie Benjamin Niaulin und Vesa Juvonen waren direkt vor Ort und standen den ganzen Tag für anregende Gespräche zur Verfügung. Nebst dem Schweizer Sponsoring Partner Skybow waren 4 passionierte Schweizer SharePoint Experten in Helsinki und wir waren somit wohl die grösste ausländische Delegation. Die nächste Chance in der Region gibt es am 13. Mai 2017 am SharePoint Saturday in Zürich!

Michael Vonlanthen
Chief Solutions Architect

CSS & SharePoint – Freunde fürs Leben

«Das Auge isst mit» – dieser Spruch gilt nicht nur für Köche, sondern auch für Entwickler, und genau deswegen ist das Anpassen einer SharePoint Seite oft nicht nur der letzte Schliff, sondern ein wichtiger Bestandteil eines jeden Projektes.

Das SharePoint Color Palette Tool (https://www.microsoft.com/en-us/download/details.aspx?id=38182) nimmt Ihnen durch das Einfärben aller UI Elemente schon einige Arbeit ab, doch ganz gemacht ist es damit noch lange nicht. Oftmals müssen Sie mit CSS noch weitere Anpassungen vornehmen.

«Igitt, CSS»

CSS ist für viele SharePoint Backend Entwickler ein unbekanntes Terrain, die Grundlagen sind aber eigentlich enorm einfach: Ein «Selector» definiert, welche Elemente angesprochen werden, die «Rules» definieren, was mit den Elementen gemacht wird. Wenn ich in SharePoint 2016 ein Logo, welches höher als 50px ist, erkennbar machen will, müsste ich folgende Eigenschaft anpassen:

example_selector

Der Selektor, der oben das Element anspricht, heisst .o365cs-nav-header16 .o365cs-nav-tenantLogo img. Er bedeutet übersetzt, dass alle Bilder (img) angesprochen werden, welche sich in der Klasse o365cs-nav-tenantLogo befinden, die sich wiederum in der überliegenden Klasse o365cs-nav-header16 befinden muss. Wenn dies auf ein Element zutrifft, dann werden die Eigenschaften, welche sich in den geschweiften Klammern befinden, auf das Objekt übertragen.

Mehr Informationen zur Schreibweise finden Sie unter folgendem Link: https://www.w3schools.com/css/css_syntax.asp

«Das ist ja schon cool und so… aber warum werden meine Änderungen nicht übernommen?»

CSS arbeitet mit einem Wertesystem: Eigenschaften, die aus Selektoren mit höheren Werten kommen, überschreiben Eigenschaften der Selektoren mit tieferer Wertigkeit.
Betrachten wir nochmals das Beispiel aus dem vorherigen Kapitel. Wenn Sie die maximale Höhe von Bildern mithilfe des Attributs max-height von 50px auf 100px ändern möchten, dann reicht es nicht aus, img { max-height: 100px; } zu schreiben.

overwrite

Im Beispiel sieht man, dass unser Attribut max-height des zweiten Selektors img durchgestrichen ist. Das liegt daran, dass der erste Selektor .o365cs-nav-header16 .o365cs-nav-tenantLogo img genauer definiert ist.

«Hä? Wie jetzt? Ich spreche ja alle Bilder an!»

Die Bilder werden zwar angesprochen, aber derjenige Selektor, der verwendet wird, um einem Bild die maximale Höhe von 50px zu geben, hat einen höheren Wert als der andere Selektor – und zwar 21 Punkte, um genau zu sein.

Das Wertesystem ist ziemlich einfach:

Name Anwendung Punkte
Typ-Selektor img { max-height: 50px; } 1
Klassen-Selektor .klassenName { max-height: 50px; } 10
ID-Selektor #idName { max-height: 50px; } 100
Important-Attribut img { max-height: 50px !important; } 999999999999999+1

Durch Kombination der Selektoren lässt sich ein Wert erhöhen und die CSS-Eigenschaften von Elementen überschreiben. Der Selektor img aus dem Beispiel des vorherigen Kapitels ist ein Typ-Selektor und hat einen Wert von nur einem Punkt. Kombinieren Sie diesen mit einem Klassen-Selektor zu img.klassenName, erhöhen Sie seinen Wert auf 11 Punkte.
Wenn Sie mit dem Wertesystem experimentieren wollen, können Sie Ihre Selektoren auf folgender Seite prüfen: https://specificity.keegan.st/

Übrigens: SharePoint 2016 arbeitet generell mit Werten unter 200 (Beim Styling der UI-Elemente).

«Genial! Ich verwende jetzt nur noch !important»

Tun Sie das nicht! Für eine saubere Wartung und einen einfacheren Umgang mit CSS ist es essentiell, dass man Eigenschaften von Elementen schnell und einfach überschreiben kann. Als Entwickler möchten Sie sich nicht bei jeder einzelnen Änderung zuerst damit befassen müssen, warum diese nicht angewendet wird. Daher empfehle ich Ihnen, Ihr CSS so aufzubauen, dass Sie mit möglichst tiefen Werten arbeiten können.

Die Seite https://jonassebastianohlsson.com/specificity-graph/ ermöglicht Ihnen, Ihre CSS Files nach Selektoren-Werten zu testen. Dafür können Sie einfach Ihr CSS in das Eingabefeld der Seite einfügen.

ok

Das Bild oben zeigt Ihnen ein Beispiel einer durchschnittlichen Lösung. ID-Selektoren wurden verwendet wenn es nötig war, ansonsten wurde darauf geachtet, mit möglichst kleinen Werten zu arbeiten. Gegen Ende des CSS-Files wurden höhere Werte verwendet, um vorherige Elemente zu überschreiben.

bad

Hier sehen Sie ein ziemlich schlechtes Beispiel. Es wurde oft mit hohen Werten gearbeitet und die Wartung des UI dieser Lösung wird infolgedessen einiges mehr an Aufwand generieren.

Der generelle Leitspruch dazu lautet: «Don’t throw new rules at bugs»

Mehr Infos zu CSS-Workflow finden Sie hier: https://hacks.mozilla.org/2016/05/css-coding-techniques/

Raphael David Antonietti
Frontend Engineer

Bimodale IT

Viele Unternehmen sind heutzutage immer mehr im Spagat zwischen dem klassisch gehaltenen Kerngeschäft und der immer präsenter werdenden digitalen Welt. Auf der einen Seite klar definierte Prozesse und Governance mit einem trägen, schwerfällig gewordenem Vorgehen. Auf der anderen Seite die agilen Zukunftsideen, welche der aktuell herrschenden Schnelligkeit und Innovation gerecht werden und so die Zukunft des Unternehmens in der digitalisierten Welt sichern werden.

Die alte und die neue Welt. Unterschiedliche Prozesse. Unterschiedliche Technologien. Unterschiedliche Erfolgsfaktoren. Unterschiedliche Kulturen. Das bimodale Unternehmen zeichnet sich dadurch aus, sich proaktiv mit diesen beiden Welten zu beschäftigen und diese gewinnbringend zusammen zu führen. In der IT, aber auch in den anderen Unternehmensbereichen.

Bimodale IT

An der letzten Upfront Thinking Night in Bern gewährten uns die Postfinance und die SBB einen eindrücklichen Einblick in ihren Alltag und wie sie das Thema aktiv im Alltag behandeln.

Ist Ihr Unternehmen bereits im Spagat und Sie suchen einen Partner der Sie dabei begleitet? Oder zögern Sie noch beim wichtigen Schritt in die digitale Zukunft? Lassen Sie sich von uns inspirieren!

Weiterführende Informationen zu Bimodaler IT und Bimodalen Unternehmen

Mit was wir im 2014 beschenkt wurden – und was uns 2015 erwartet

Schon wieder ist ein Jahr vorbei – ein guter Zeitpunkt um zurück und nach vorne zu blicken. Auch das 2014 war wieder ein spannendes und zumindest technisch gesehen ein turbulentes Jahr. Die Anzahl neuer Dienste, Technologien und Tools ist wieder bedeutend grösser geworden. Die Trends der letzten Jahre zu mehr Cloud, mehr client-side Web-Technologien, mehr Mobile, mehr Service-Orientierung und mehr User Centered Design haben sich fortgesetzt.

Folgend habe ich die Technologien, Dienste, Tools und Gadgets aufgeführt, die mir im 2014 besondere Freude bereiteten oder auf diese ich mich im 2015 freue.

Mit Office Delve hat uns Microsoft eine neue App zur Verfügung gestellt, welche die Power von such-basierten Lösungen im Zeitalter der Informationsflut richtig zur Geltung bringt. Delve bringt die richtigen Informationen im richtigen Format und zum richtigen Zeitpunkt zu uns – und dies natürlich unabhängig von Zeit, Ort und Gerät.

 delve
Quelle: office.com

Noch nie war es so einfach wie mit Siena, Apps für Tablets und andere Touch-Endgeräte zu realisieren. Beliebige Datenquellen aus dem Intra- und Internet sowie auch eigene Listen, zum Beispiel aus Excel, können innert wenigen Stunden in einer bemerkenswerten App aufbereitet und so in einer neuen, innovativen und benutzerfreundlichen Art genutzt werden. Beispiele dafür sind Unternehmens-Informations-Apps (für Mitarbeiter, Kunden oder Partner), Willkommens-Bildschirme (mit Informationen, Raumreservationen, etc.), Produkt-Informations-Apps als Einkaufunterstützung im Laden oder interaktive Gebäude-Informationspläne. Mehr dazu um Blog-Post vom September.

Bei den Smartphones ist das Nokia Lumia 925 noch immer mein treuer Begleiter. Es ist eine Freude eines der letzten Geräte mit dem Nokia Brand zu besitzen – das Ende des Nokia-Mobile-Business, ein sehr trauriges Ereignis im 2014. Im Bereich der Tablets oder auch Hybrid-Notebooks haben doch doch so einige Geräte ihre Macken – das musste ich selber miterleben. Aber mit dem Surface Pro 3 hat Microsoft endlich wieder selber das aktuell wohl beste Business Tablet auf den Markt gebracht.

Im Bereich der Microsoft Cloud-Dienste haben mich OneDrive for Business, der Azure Scheduler und Azure RemoteApp am meisten beeindruckt. Aber eigentlich möchte ich hier auch die Office Mobile Apps erwähnen, welche die Nutzung von Office Dokumenten endlich geräteunabhängig ermöglichen.

Im Internet der Dinge ist Flic mein klarer Gewinner. Der kleine Button schafft es, Geräte im Alltag mit der Power von Mobile Apps auf einfachste Art und Weise zu verbinden. Das Spannende Helferlein wird im März 2015 released. Im Bereich des 3D-Drucks ist einiges gegangen, aber vor allem in spezialisierten Bereichen. Der Durchbruch für den Massenmarkt steht noch an. Was mich beeindruckt hat ist, dass bossbern auch ganz in unserer Nähe mit persönlichen 3D-Figuren ein sehr lustiges, spannendes und innovatives Produkt anbietet.

 bossbern
Quelle: bossbern.ch

Bei den Entwicklungstools sind Visual Studio und Team Foundation Server weiterhin die Basis für eine effiziente Applikationsentwicklung. Neue Versionen und Extensions, vor allem auch mittels der NuGet Integration, bieten Tag für Tag neue Funktionen und Instrumente, um die Produktivität bei der Entwicklung laufend zu verbessern. Seit der integrierten Nutzung mit MSDN haben wir endlich die Möglichkeit, alle uns zur Verfügung stehenden Instrumente, Produkte und Dienste uneingeschränkt einzusetzen. Und seit diesem Jahr haben wir aus meiner Sicht von Microsoft endlich eine durchgängige und einfach parametrierbare Application Lifecycle Plattform zur Verfügung, welche es erlaubt, mit einem sinnvollen Aufwand durchgängige Prozesse zu realisieren (Development -> Automated Build -> Continuous Integration -> Automated Testing -> Release Management). Im 2015 erwartet und mit Visual Studio 2015, dem .NET Framework 4.6 und im Bereich der Web-Applikationen mit ASP.NET MVC 6 wieder viel Spannendes.

Bei den Waerables ist nicht viel Nennenswertes geschehen – ausser dass die Anbieter noch keinen sinnvolleren Anwendungsbereich als Health und Fitness gefunden haben. Aber auch da erwartet uns aus dem Hause Microsoft mit dem Microsoft Band ein spannendes Produkt.

Zum Schluss meine Highlights – keine Neuigkeiten sondern mehr langjährige Begleiter, die Instrumente ohne die ich meinen Arbeitsalltag kaum mehr bewältigen könnte. Pluralsight und die Microsoft Virtual Academy sind die Plattformen, die es mir erlauben, technologisch immer auf dem neusten Stand zu bleiben. Ohne OneNote hätte ich mein bereits 2010 gestecktes Ziel des papierlosen Büros längst aufgeben müssen – und bis auf die PostIt’s bin ich seither zu 99% papierlos unterwegs. Die Co-Authoring Funktion von Word lässt uns seit 2010 gemeinsam an Dokumenten arbeiten und vermeidet das mühsame Zusammenfügen und redigieren in letzter Minute – DANKE! Microsoft Excel ist das stille Helferlein wenn es um Auswertungen, Daten-Generierungen oder Automatisierungen geht – kein anderes Tool ist so einfach, schnell und flexibel dafür einsetzbar. Manchmal braucht es ein bisschen Kreativität, aber Excel überrascht mich immer wieder von Neuem. Zusammen mit SharePoint und ExcelServices wird Excel zudem zum mächtigsten self-service BI Tool überhaupt. Und last but not least – was würde ich in Arbeitsalltag als Remote Worker nur ohne Microsoft Lync tun – Chat, Audio, Video und Screen Sharing at my fingertips.

Auf ein Spannendes 2015!

Michael Vonlanthen
Chief Solutions Architect